Introduzione
Le tecniche di port knocking permettono di aumentare considerevolmente la sicurezza di un server del quale si ha la necessità di erogare servizi non permanenti attraverso IP Pubblici. In sintesi, si inviano dei pacchetti a delle porte prestabilite sulle quali un demone è in ascolto e, nel caso la sequenza sia corretta, questi attiverà un comando che potrà eseguire delle regole di iptables che apriranno le porte prestabilite. Il vantaggio è notevole in quanto il server potrebbe rimanere sempre in "stealth" ed aprire la porta per il servizio SSH solo quando se ne ha bisogno.
Requisiti
1 Ubuntu Server 8.04 LTS oppure 8.10.
2 Knockd.
3 Iptables.
Installazione
Knockd è presente nei repository, quindi basterà digitare:
sudo apt-get install knockd
Il demone non partirà in automatico, all'avvio del server, fino a quando non si modificherà il file: /etc/default/knockd.
START_KNOCKD=1
La riga seguente controlla su quale interfaccia il demone dovrà rimanere in ascolto:
KNOCKD_OPTS="-i eth0"
L'altro file che bisogna modificare è /etc/knockd.conf:
[options] logfile = /var/log/knockd.log [openSSH] sequence = 7000,8000,9000 seq_timeout = 30 command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn [closeSSH] sequence = 9000,8000,7000 seq_timeout = 30 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn
Come si potrà notare è estremamente semplice ed efficace. Quando il demone riconosce la giusta sequenza della sezione [openSSH], effettuata entro 30 secondi, eseguirà il "command" realtivo, che in questo caso lancerà una regola di iptables che aprirà la porta SSH filtrando l'ip di chi ha "bussato" correttamente. Quando il client uscirà dalla sessione, effettuando la seconda sequenza [closeSSH] la regola verrà cancellata.
Client
In realtà potrebbe essere sufficiente telnet o netcat ma sono comodi i client che si trovano sul sito di zeroflux (vedere sezione riferimenti)
Note
Si consiglia vivamente di non mantenere le porte di default. Queste possono essere a scelta tra 0 e 65535, preferibilmente non usare porte occupate. La sequenza può essere di numero superiore ai tre dell'esempio e si possono usare porte UDP e TCP. Si può configurare anche una chiusura a tempo delle porte, per questi ed altri parametri controllare il wiki che si trova nei riferimenti. La sezione "command" non è detto debba essere un comando iptables, potrebbe essere qualsiasi cosa, p.es.: "init 6", per un riavvio remoto del server, oppure un comando "sh" che lancia uno script complesso. Esistono altre soluzioni alle tecniche di port knocking, vedere la sezione riferimenti.
Riferimenti
Port knocking in perl:
[http://www.portknocking.org/]
Wiki del progetto ufficiale e vari client:
[http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki]