[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: