Re: knokd & iptables
Giovanni Cataldi wrote:
Premetto che non conosco knockd, ma credo di aver capito cosa fa...
In primo luogo ho configurato /etc/default/knockd, cambiando il valore
della decima riga (START_KNOCKD) da 0 a 1:
# control if we start knockd at init or not
# 1 = start
# anything else = don't start
START_KNOCKD=1
# command line options
#KNOCKD_OPTS="-i eth0"
Dopodiché ho modificato, così come dice l'articolo, il file
/etc/knockd.conf, in questo modo:
[options]
logfile = /var/log/knockd.log
Interface = eth0
[openSSH]
sequence = 1234:tcp, 1000:tcp, 2000:udp
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j
ACCEPT
tcpflags = syn
cmd_timeout = 10
stop_command = /usr/sbin/iptables -D INPUT -s -p tcp --syn --dport
22 -j ACCEPT
Attenzione che la la regola che vuoi cancellare con -D deve essere
*esattamente* uguale a quella inserita con -A (o con -I). Nel tuo caso
ci vedo un "--syn" di troppo ed un "%IP%" di meno...
dovrebbe essere: /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
Inoltre ovviamente ho chiuso la porta 22 di iptables (sennò non serve a
nulla):
# iptables -A INPUT -p tcp -m tcp --dport 22 -j DROP
Per quel che ne so, "-m tcp" e' sbagliato e dovrebbe darti errore...
Mi e' sembrato di capire che non hai un firewall configurato. Sotto un
profilo puramente logico dovresti prima di tutto approfondire la
questione firewall e solo dopo avere un firewall correttamente
configurato e funzionante, metterti a "giocare" con knockd.
Tuttavia, questa non mi sembra la sede appropriata per discutere di
firewalls... c'e' una mailing list apposita, dagli uno sguardo...
Comunque, per rispondere al tuo quesito, se non hai un firewall
configurato, la POLICY di default per la catena di INPUT e' ACCEPT,
ovvero accetti tutti i pacchetti entranti a meno di specifica regola
diversa, che pero' non hai.
Ora, tu aggiungi una regola in cui droppi le connessioni ssh. In
seguito, quando lanci knock, viene *aggiunta* da knockd una seconda
regola in cui accetti la connessione. Tuttavia, quando provi a
connetterti, il tuo tentativo di connessione viene matchato dalla
*prima* regola, quindi (corretamente) droppata. Il sistema di netfilter,
una volta ottenuto un match, non prosegue nella scasione della tavola.
Per risolvere il tuo problema, nella configurazione di knockd, invece di
usare "-A", che aggiunge una regola *in coda* alle altre, dovresti usare
"-I", che inserisce una regola *in testa* alle altre.
In questo modo, quando knockd esegue iptables, la regola che accetta i
pacchetti ssh viene messa *prima* di quella che droppa.
A questo punto, la cosa dovrebbe funzionare...
Per verificare:
iptables -L -v -n
prima e dopo aver lanciato knock
Comunque, ripeto: pensa prima a configurarti un buon firewall.
a questo punto mi sarei aspettato che dopo un "# /etc/init.d/knockd
start", tutto sarebbe andato:
$ knock 192.168.123.105 1234:tcp 1000:tcp 2000:udp
$ ssh -l nome_utente 192.168.123.105
Ma non è così: la porta 22 non viene aperta da iptables e pertanto non
ottengo risposta. Dove sbaglio?
Saluti,
Fabrizio
Reply to: