BR Indice() VersioniSupportate(hardy intrepid)
Introduzione
Le tecniche di Port knocking permettono di aumentare considerevolmente la sicurezza di un server che deve garantire alcuni servizi non permanenti attraverso IP pubblici. Se s'inviano dei pacchetti a delle porte prestabilite sulle quali il demone è in ascolto e nel caso la sequenza sia corretta, questi attiverà un comando che potrà eseguire delle regole di [:Sicurezza/Iptables:iptables] che apriranno le porte necessarie alla connessione. Il vantaggio è notevole in quanto il server potrebbe rimanere sempre in stealth e aprire le porte per un determinato servizio solo in caso di necessità.
Preparativi
È necessario che il firewall [:Sicurezza/Iptables: iptables] sia configurato e attivo.
Installazione
Per utilizzare le tecniche di Port knocking è necessario [:AmministrazioneSistema/InstallareProgrammi:installare] il pacchetto knockd, reperibile dal [:Repository/Componenti:componente] universe dei [:Repository:repository ufficiali].
Configurazione knockd
Per fare in modo che il demone parta all'avvio del computer modificare con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione] il file /etc/default/knockd in questo modo:
START_KNOCKD=1
Sempre nel medesimo file /etc/default/knockd modificare con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione] indicando su quale interfaccia il demone dovrà rimanere in ascolto:
KNOCKD_OPTS="-i eth0"
Configurazione knockd.conf per l'apertura di una sola porta
Modificare con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione] il file /etc/knockd.conf impostandolo come segue:
[options] logfile = /var/log/knockd.log [openSSH] sequence = 7000,8000,9000 # Questa è la sequenza delle porte sulle quali knockd rimarrà in ascolto. Di default il protocollo è TCP. # Quali e quante porte usare è discrezionale. # sequence = 7000:udp,8000:tcp,9000:udp # Esempio con sequenza con porte miste udp/tcp seq_timeout = 30 #Tempo di attesa massimo per completare la sequenza. command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT # Quando la sequenza verrà accettata verrà inserita una regola che aprirà la porta SSH standard. tcpflags = syn # Ulteriore filtro, sul tipo di flag del pacchetto iviato alla sequenza di porte. [closeSSH] sequence = 9000,8000,7000 # Questa è un'altra sequenza di porte sulle quali knockd rimarrà in ascolto. seq_timeout = 30 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT # Quando la sequenza verrà accettata verrà inserita una regola che cancellerà quella creata in precedenza. tcpflags = syn # Ulteriore filtro, sul tipo di flag del pacchetto iviato alla sequenza di porte.
La variabile «%IP%» passa alla regola di iptables l'indirizzo che ha effettuato la richiesta di connessione, in questo caso verrà permessa l'apertura della porta SSH discriminando solo l'IP validato.
Configurazione knockd.conf per l'apertura di più porte
Nell'esempio sopra esposto si è visto come aprire una sola porta. Se l'esigenza fosse però quella di aprirne di più procedere creando più sessioni «[openServizio]» e «[closeServizio]». Questo sistema risulta però scomodo per ovvi motivi, per ottenere lo stesso risultato è consigliato usare degli script.
Modificare con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione] il file /etc/knockd.conf impostandolo come segue:
[options] logfile = /var/log/knockd.log [open] sequence = 7000,8000,9000 seq_timeout = 30 tcpflags = syn command = sh /etc/open_ports %IP% [close] sequence = 9000,8000,7000 seq_timeout = 30 tcpflags = syn command = sh /etc/close_ports %IP%
In questo caso invece di eseguire direttamente iptables si richiamano due script passando il parametro «%IP%» alla variabile speciale «$1».
Esempio di script open_ports
Modificare con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione] il file /etc/open_ports impostandolo come segue:
iptables -A INPUT -s $1 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 21 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 631 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 5125 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 5126 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 8888 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 10000 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 81 -j ACCEPT
Esempio di script close_ports
Modificare con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione] il file /etc/close_ports impostandolo come segue:
iptables -D INPUT -s $1 -p tcp --dport 22 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 21 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 631 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 5125 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 5126 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 8888 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 10000 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 81 -j ACCEPT
Client
Di seguito viene mostrare come configurare i client a dipendenza del sistema operativo utilizzato.
Linux
Scaricare i sorgenti da [http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki questo indirizzo] all'interno della propria Home e [:AmministrazioneSistema/FormatiDiCompressione: scompattarli], entrare nella cartella knock-0.x/src e digitare all'interno di una finestra di terminale il seguente comando:
gcc -o knock knock.c
Sempre da una finestra di terminale digitare il [#comando_client comando per la connessione].
Windows
Scaricare da [http://www.zeroflux.org/knock/files/knock.exe questo indirizzo] e digirare all'interno di una finestra DOS il [#comando_client comando per la connessione] tralasciando la prima parte «./»
OSX
Vedi MacOS Client da [http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki]
Esempio di comando client
./knock -v ip_host port1 port2 port3 port...
Il parametro "-v" (--verbose) è opzionale. Nel caso una porta sia configurata con il protocollo UDP, usare la sintassi "port:udp"
Note
Si consiglia vivamente di non mantenere le porte di default. Queste possono essere a scelta tra 0 e 65535, non usare porte occupate (vedi [http://it.wikipedia.org/wiki/Porte_note] ). Si può configurare anche una chiusura temporizzata dei servizi, oppure usare sequenze progressive programmate, valide solo una volta. Per questi ed altri parametri controllare il wiki di zeroflux. Esistono altre soluzioni per il port knocking, vedere la sezione Ulteriori risorse.
Ulteriori risorse
Il progetto trattato in questa sede è stato creato da Judd Vinet. Il sito ufficiale, il wiki e i link ai vari client si possono trovare qui:
[http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki]
Port knocking in perl:
[http://www.portknocking.org/]
The PortKnockO Project
[http://portknocko.berlios.de/]
TCP Flags
[http://www.openskill.info/infobox.php?ID=694]
Bash e script
[http://wiki.ubuntu-it.org/Programmazione/LinguaggioBash]