Mengapa ketukan port tidak membuka pintu
Ketukan sama ada tidak pernah sampai ke pelayan, sampai dalam bentuk yang tidak diterima oleh daemon, atau membuka pintu untuk alamat yang tidak anda gunakan. Teliti senarai ini dari atas — ia disusun mengikut kekerapan setiap punca berlaku.
1. Pintu dibuka untuk alamat lain
Firewall membuka port untuk alamat sumber yang dilihat oleh pelayan. Jika anda mengetuk melalui IPv6 dan kemudian SSH bersambung melalui IPv4 — atau sebaliknya — pintu dibuka untuk alamat yang tidak anda gunakan. Data mudah alih, NAT pembawa dan VPN juga menukar alamat.
Bandingkan alamat yang dipaparkan oleh Secret Knock pada skrin utama ("Anda mengetuk dari …") dengan alamat dalam log pelayan, dan tetapkan IPv4 atau IPv6 untuk pintu jika alamat tersebut berbeza.
2. Paket tidak sampai ke pelayan
Rangkaian hotel, pejabat dan mudah alih kadangkala menyekat port luar biasa, dan firewall awan di hadapan pelayan menggugurkan paket sebelum knockd atau fwknopd melihatnya. Pantau trafik pada pelayan semasa anda mengetuk:
# knockd (UseSyslog): every recognised step and the command it ran
sudo journalctl -u knockd -f
# Do the packets reach the server at all? (use your interface and ports)
sudo tcpdump -ni eth0 'tcp port 7311 or tcp port 8822 or udp port 9133'
# fwknopd in the foreground with verbose output
sudo fwknopd -f -v 3. Urutan tiba dalam bentuk yang salah
- 1SYN yang dihantar semula: apabila ketukan TCP tidak mendapat jawapan, sistem pengendalian klien menghantar semula SYN yang sama. knockd 0.8 menetapkan semula urutan apabila pengulangan sedemikian berlaku. Secret Knock menghantar setiap ketukan TCP sebagai satu SYN tunggal dan menghentikan percubaan serta-merta; klien lain mungkin tidak.
- 2Pemasaan: semua langkah mesti tiba dalam seq_timeout, mengikut urutan. Tambahkan kelewatan singkat sebelum sesuatu langkah jika penghala di antaranya menyusun semula paket.
- 3Protokol: langkah UDP mesti dihantar sebagai UDP, langkah TCP sebagai TCP — semak setiap langkah berbanding knockd.conf.
- 4tcpflags = syn menyebabkan knockd mengabaikan paket TCP tanpa bendera SYN. Tanpanya, paket lain bagi sambungan ke port yang sama juga dikira sebagai kejadian dan boleh mengganggu urutan.
4. fwknop: kunci, jam dan main semula
- 1Kedua-dua kunci mesti sepadan dengan access.conf: kunci Rijndael dan Kunci HMAC, dengan ringkasan yang sama (SHA-256 secara lalai).
- 2fwknopd menolak paket yang lebih lama daripada MAX_SPA_PACKET_AGE (120 saat secara lalai), jadi jam peranti yang jauh tersasar menyebabkan setiap paket kelihatan lama.
- 3Setiap paket SPA hanya boleh digunakan sekali; fwknopd sengaja menggugurkan paket yang dimainkan semula.
- 4Jika anda mengetuk melalui HTTP, sesuatu mesti menerima sambungan TCP pada port tersebut, atau permintaan tidak akan dihantar.
5. Pintu terbuka, tetapi SSH masih gagal
- 1Susunan peraturan: peraturan yang ditambah oleh daemon mesti berada sebelum peraturan yang menggugurkan port — iptables -A menambahkannya selepas DROP sedia ada dan tidak akan sepadan.
- 2Tempoh: cmd_timeout atau FW_ACCESS_TIMEOUT menutup pintu sebelum SSH bersambung. Sambung dalam tempoh tersebut; sesi yang telah diwujudkan terus berfungsi jika firewall anda menerima sambungan yang telah diwujudkan.
- 3Semakan port Secret Knock selepas ketukan memberitahu anda sama ada port memberikan jawapan langsung atau tidak, secara berasingan daripada pengesahan SSH.
Semua contoh di GitHub → Setiap konfigurasi pada halaman ini, sedia untuk disalin: github.com/mobilcomm/secretknock-examples (domain awam).
Soalan
Bagaimanakah saya melihat perkara yang sebenarnya dihantar oleh app?
Sejarah pintu memaparkan setiap ketukan dengan masa, hasil dan keluarga alamatnya, dan editor memaparkan ketukan yang sama sebagai arahan terminal yang boleh anda jalankan daripada komputer untuk dibandingkan.
Panduan untuk persediaan anda
- Penjelasan port knocking →
- knockd pada iPhone, iPad dan Mac →
- fwknop SPA pada iPhone, Mac dan Apple Watch →
- Ketukan port MikroTik →
- Port knocking DrayTek Vigor →
- Sembunyikan SSH di sebalik ketukan port →
- Port knocking pada Apple Watch →
- Contoh knockd.conf →
- persediaan pelayan fwknop →
- Port knocking, VPN atau fail2ban? →