Lewati ke konten
Secret Knock

Mengapa ketukan port tidak membuka pintu

Ketukan mungkin tidak pernah mencapai server, tiba dalam bentuk yang tidak diterima daemon, atau membuka pintu untuk alamat yang tidak Anda gunakan. Telusuri daftar ini dari atas — urutannya berdasarkan seberapa sering setiap penyebab terjadi.

1. Pintu terbuka untuk alamat lain

Firewall membuka port untuk alamat sumber yang dilihat server. Jika Anda mengetuk melalui IPv6 lalu SSH tersambung melalui IPv4 — atau sebaliknya — pintu terbuka untuk alamat yang tidak Anda gunakan. Data seluler, NAT operator, dan VPN juga mengubah alamat.

Bandingkan alamat yang ditampilkan Secret Knock di layar utama ("Anda mengetuk dari …") dengan alamat dalam log server, lalu tetapkan IPv4 atau IPv6 untuk pintu jika keduanya berbeda.

2. Paket tidak mencapai server

Jaringan hotel, kantor, dan seluler terkadang memblokir port yang tidak umum, dan firewall cloud di depan server dapat membuang paket sebelum knockd atau fwknopd melihatnya. Pantau lalu lintas di server saat 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
Di server

3. Urutan tiba dalam bentuk yang salah

  1. 1SYN yang dikirim ulang: ketika ketukan TCP tidak mendapat jawaban, sistem operasi klien mengirim ulang SYN yang sama. knockd 0.8 mengatur ulang urutan pada pengulangan tersebut. Secret Knock mengirim setiap ketukan TCP sebagai satu SYN dan langsung menghentikan upaya; klien lain mungkin tidak.
  2. 2Waktu: semua langkah harus tiba dalam seq_timeout, secara berurutan. Tambahkan jeda singkat sebelum suatu langkah jika router di antaranya mengurutkan ulang paket.
  3. 3Protokol: langkah UDP harus dikirim sebagai UDP, langkah TCP sebagai TCP — periksa setiap langkah terhadap knockd.conf.
  4. 4tcpflags = syn membuat knockd mengabaikan paket TCP tanpa flag SYN. Tanpanya, paket lain dari koneksi ke port yang sama juga dihitung sebagai kecocokan dan dapat merusak urutan.

4. fwknop: kunci, jam, dan pemutaran ulang

  1. 1Kedua kunci harus cocok dengan access.conf: kunci Rijndael dan Kunci HMAC, dengan digest yang sama (SHA-256 secara default).
  2. 2fwknopd menolak paket yang lebih lama dari MAX_SPA_PACKET_AGE (120 detik secara default), sehingga jam perangkat yang sangat meleset membuat setiap paket tampak lama.
  3. 3Setiap paket SPA hanya dapat digunakan sekali; fwknopd sengaja membuang paket yang diputar ulang.
  4. 4Jika Anda mengetuk melalui HTTP, sesuatu harus menerima koneksi TCP pada port tersebut, atau permintaan tidak pernah dikirim.

5. Pintu terbuka, tetapi SSH tetap gagal

  1. 1Urutan aturan: aturan yang ditambahkan daemon harus berada sebelum aturan yang membuang port — iptables -A menambahkan setelah DROP yang sudah ada dan tidak pernah cocok.
  2. 2Jendela waktu: cmd_timeout atau FW_ACCESS_TIMEOUT menutup pintu sebelum SSH tersambung. Sambungkan dalam jendela waktu tersebut; sesi yang telah terbentuk tetap berfungsi jika firewall Anda menerima koneksi yang telah terbentuk.
  3. 3Pemeriksaan port Secret Knock setelah ketukan memberi tahu Anda apakah port merespons sama sekali, terpisah dari autentikasi SSH.

Semua contoh di GitHub → Setiap konfigurasi di halaman ini, siap disalin: github.com/mobilcomm/secretknock-examples (domain publik).

Pertanyaan

Bagaimana cara melihat apa yang sebenarnya dikirim aplikasi?

Riwayat pintu menampilkan setiap ketukan beserta waktu, hasil, dan keluarga alamatnya, dan editor menampilkan ketukan yang sama sebagai perintah terminal yang dapat Anda jalankan dari komputer untuk membandingkan.

Panduan untuk pengaturan Anda