## page was renamed from Paolo''''''Visnoviz/Prove1
## page was renamed from Paolo''''''Visnoviz/Prove0
## page was renamed from Paolo''''''Visnoviz/prove0
#format wiki
#LANGUAGE it
<
>
<>
<>
= 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 =
0. 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
}}}
0. 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:{{{
#! /bin/sh
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:{{{
#! /bin/sh
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 mostrato 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 digitare all'interno di una finestra DOS il [[#comando_client|comando per la connessione]] tralasciando la prima parte «./»
== OSX ==
Consultare la [[http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki|relativa pagina]].
<>
= Connessione =
Per effettuare la connessione digitare il seguente comando all'interno di una finestra di terminale:{{{
./knock -v ip_host port1 port2 port3 port...
}}}
Nel caso una porta sia configurata tramite il protocollo UDP, usare la sintassi «port:udp»
= Ulteriori risorse =
* [[http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki|Sito ufficiale del progetto]]
* [[http://www.portknocking.org/|Port knocking in perl]]
* [[http://portknocko.berlios.de/|Sito ufficiale del progetto PortKnockO]]
* [[http://www.openskill.info/infobox.php?ID=694|Documentazione sui TCP Flag ]]
----
CategoryHomepage