Perché una bussata non apre la porta
Una bussata non raggiunge mai il server, lo raggiunge in una forma che il daemon non accetta oppure apre la porta per un indirizzo che non stai usando. Segui l'elenco dall'inizio: è ordinato in base alla frequenza con cui si presenta ciascuna causa.
1. La porta si è aperta per un altro indirizzo
Il firewall apre la porta per l'indirizzo di origine visto dal server. Se bussi tramite IPv6 e SSH si connette poi tramite IPv4, o viceversa, la porta è aperta per un indirizzo che non stai usando. Anche i dati mobili, il NAT dell'operatore e le VPN modificano l'indirizzo.
Confronta l'indirizzo mostrato da Secret Knock nella schermata principale ("Bussi da …") con quello nel log del server e, se sono diversi, imposta IPv4 o IPv6 per la porta.
2. I pacchetti non raggiungono il server
Le reti di hotel, uffici e operatori mobili talvolta bloccano porte insolite e un firewall cloud davanti al server può scartare i pacchetti prima che knockd o fwknopd li rilevi. Monitora il traffico sul server mentre bussi:
# 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. La sequenza arriva nella forma sbagliata
- 1SYN ritrasmessi: quando una bussata TCP non riceve nessuna risposta, il sistema operativo del client invia di nuovo lo stesso SYN. knockd 0.8 reimposta la sequenza in caso di ripetizione. Secret Knock invia ogni bussata TCP come un singolo SYN e interrompe subito il tentativo; altri client potrebbero non farlo.
- 2Tempistiche: tutti i passaggi devono arrivare entro seq_timeout, nell'ordine corretto. Aggiungi un breve ritardo prima di un passaggio se un router intermedio riordina i pacchetti.
- 3Protocollo: un passaggio UDP deve essere inviato come UDP e un passaggio TCP come TCP: verifica ogni passaggio in knockd.conf.
- 4tcpflags = syn fa sì che knockd ignori i pacchetti TCP senza il flag SYN. Senza questa opzione, anche gli altri pacchetti di una connessione alla stessa porta vengono conteggiati come corrispondenze e possono interrompere la sequenza.
4. fwknop: chiavi, orologi e replay
- 1Entrambe le chiavi devono corrispondere ad access.conf: la chiave Rijndael e la Chiave HMAC, con lo stesso digest (SHA-256 di default).
- 2fwknopd rifiuta i pacchetti più vecchi di MAX_SPA_PACKET_AGE (120 secondi di default), quindi un orologio del dispositivo molto impreciso fa sembrare vecchio ogni pacchetto.
- 3Ogni pacchetto SPA può essere usato una sola volta; fwknopd scarta intenzionalmente un pacchetto riprodotto.
- 4Se bussi tramite HTTP, un servizio deve accettare connessioni TCP su quella porta, altrimenti la richiesta non viene mai inviata.
5. La porta si apre, ma SSH continua a non funzionare
- 1Ordine delle regole: la regola aggiunta dal daemon deve precedere quella che scarta la porta; iptables -A aggiunge una regola dopo un DROP esistente e non trova mai corrispondenza.
- 2La finestra: cmd_timeout o FW_ACCESS_TIMEOUT ha chiuso la porta prima della connessione SSH. Connettiti entro la finestra; le sessioni già stabilite continuano a funzionare se il firewall accetta le connessioni stabilite.
- 3Il controllo della porta di Secret Knock dopo la bussata indica se la porta ha risposto, separatamente dall'autenticazione SSH.
Tutti gli esempi su GitHub → Ogni configurazione di questa pagina, pronta da copiare: github.com/mobilcomm/secretknock-examples (di pubblico dominio).
Domande
Come posso vedere cosa ha effettivamente inviato l'app?
La cronologia della porta mostra ogni bussata con orario, risultato e famiglia di indirizzi, mentre l'editor mostra la stessa bussata come comando da terminale che puoi eseguire da un computer per confrontarla.
Guide per la tua configurazione
- Il port knocking spiegato →
- knockd su iPhone, iPad e Mac →
- SPA fwknop su iPhone, Mac e Apple Watch →
- Port knocking MikroTik →
- Port knocking DrayTek Vigor →
- Nascondi SSH dietro il port knocking →
- Port knocking su Apple Watch →
- Esempi di knockd.conf →
- configurazione del server fwknop →
- Port knocking, VPN o fail2ban? →