⇤ ← Versione 1 del 01/01/2009 14.46.36
Dimensione: 7380
Commento: Creata
|
Dimensione: 10698
Commento:
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 1: | Linea 1: |
[[BR]] [[Indice()]] [[VersioniSupportate(hardy intrepid)]] |
[[BR]][[Indice()]][[VersioniSupportate(hardy intrepid)]] |
Linea 6: | Linea 3: |
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à. |
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à. |
Linea 11: | Linea 6: |
È necessario che il firewall [:Sicurezza/Iptables: iptables] sia configurato e attivo. |
È necessario che il firewall [:Sicurezza/Iptables:iptables] sia configurato e attivo. |
Linea 15: | Linea 9: |
Per utilizzare le tecniche di '''Port knocking''' è necessario [:AmministrazioneSistema/InstallareProgrammi:installare] il pacchetto ''knockd'', reperibile dal [:Repository/Componenti:componente] '''universe''' dei [:Repository:repository ufficiali]. |
Per utilizzare le tecniche di '''Port knocking''' è necessario [:AmministrazioneSistema/InstallareProgrammi:installare] il pacchetto ''knockd'', reperibile dal [:Repository/Componenti:componente] '''universe''' dei [:Repository:repository ufficiali]. |
Linea 19: | Linea 12: |
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:{{{ |
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: {{{ |
Linea 24: | Linea 17: |
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:{{{ | 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: {{{ |
Linea 29: | Linea 23: |
Modificare con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione] il file `/etc/knockd.conf` impostandolo come segue:{{{ |
Modificare con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione] il file {{{/etc/knockd.conf}}} impostandolo come segue: {{{ |
Linea 49: | Linea 44: |
# Ulteriore filtro, sul tipo di flag del pacchetto iviato alla sequenza di porte. | # Ulteriore filtro, sul tipo di flag del pacchetto inviato alla sequenza di porte. |
Linea 61: | Linea 56: |
# Ulteriore filtro, sul tipo di flag del pacchetto iviato alla sequenza di porte. | # Ulteriore filtro, sul tipo di flag del pacchetto inviato alla sequenza di porte. |
Linea 66: | Linea 61: |
= 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:{{{ |
= Configurazione per l'apertura di una sola porta, per soli esperti = Un'altra possibilità per usare il demone knockd, utilizzabile '''SOLO se il firewall sul server è configurato per accettare le connessioni "established" e "related"''' alla porta che si vuole aprire (es ssh, 22) è di chiudersi subito dietro la porta appena aperta, per evitare che, restando "aperta", qualche malintenzionato tenti un brute-force al servizio, lanciando uno script anzichè impostando delle regole sul firewall. Per questo scopo il file {{{/etc/knockd.conf }}}può ad esempio essere modificato, con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione], come segue (per spiegazioni sul significato delle opzioni vedere la sezione precedente): {{{ |
Linea 74: | Linea 70: |
[openSSH] sequence = 7000,8000,9000 seq_timeout = 30 start_command = /etc/init.d/ssh start tcpflags = syn cmd_timeout = 5 stop_command = /etc/init.d/ssh stop # Dopo cmd_timeout secondi, viene eseguito il comando stop_command}}} Ricordiamo ancora che '''è indispensabile''' che il firewall sul server accetti le connessioni "related" ed "established" altrimenti la sezione "stop_command", appena sarà eseguita, vi chiuderà la connessione SSH senza quindi avere possibilità di connettervi al server! {{{ root@server2:~# iptables -nL | grep ":22" ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22 dpts:513:65535 state RELATED,ESTABLISHED ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spts:1024:65535 dpt:22 flags:0x17/0x02 state RELATED,ESTABLISHED ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:22 state ESTABLISHE root@server2:~# }}} = 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 |
|
Linea 91: | Linea 117: |
Modificare con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione] il file `/etc/open_ports` impostandolo come segue:{{{ | Modificare con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione] il file {{{/etc/open_ports}}} impostandolo come segue: {{{ |
Linea 104: | Linea 132: |
Modificare con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione] il file `/etc/close_ports` impostandolo come segue:{{{ | Modificare con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione] il file {{{/etc/close_ports}}} impostandolo come segue: {{{ |
Linea 117: | Linea 147: |
Linea 121: | Linea 150: |
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:{{{ |
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: {{{ |
Linea 126: | Linea 156: |
Sempre da una finestra di terminale digitare il [#comando_client comando per la connessione]. | Sempre da una finestra di terminale digitare il [#comando_client comando per la connessione] oppure seguire i passaggi per creare un [javascript:void(0);/*1251849015059*/ alias di connessione] |
Linea 129: | Linea 159: |
Linea 133: | Linea 162: |
Linea 137: | Linea 165: |
Linea 139: | Linea 166: |
Per effettuare la connessione digitare il seguente comando all'interno di una finestra di terminale:{{{ |
Per effettuare la connessione digitare il seguente comando all'interno di una finestra di terminale: {{{ |
Linea 146: | Linea 174: |
[[Anchor(alias_linux)]] = Connessione usando un alias (solo linux) = Creare un alias aggiungendo la seguente riga al file .bash_aliases nella home dell'utente e creare successivamente il file "connectServer": {{{ utente@client:/home/Scrivania/# cd utente@client:~# vi .bash_aliases}}} Contenuto del file ~/.bash_aliases: {{{ alias ll='ls -l' alias la='ls -a' alias count='ll | wc -l' alias SshServer='~/connectServer' # Parte da aggiungere }}} Contenuto del file ~/connectServer {{{ # ip_del_server va sostiuito con l'ip o il dns name del server a cui connettersi (es: 192.168.0.2 oppure www.myserver.com) telnet ip_del_server 7000 telnet ip_del_server 8000 telnet ip_del_server 9000 # Attesa di due secondi prima di effettuare la connessione: il server potrebbe metterci del tempo prima di avviare il demone SSH! sleep 2 # Da abilitare se si vuole effettuare la connessione con utente root # ssh -l root ip_del_server ssh ip_del_server }}} Salvare il file connectServer e assicurarsi che sia eseguibile: {{{ utente@client:~# chmod +x connectServer}}} A questo punto per connettersi al server (dopo aver riaperto una shell, altrimenti il nuovo alias non sarà riconosciuto) basterà digitare quanto segue: {{{ utente@client:~# SshServer}}} |
|
Linea 147: | Linea 220: |
Linea 153: | Linea 224: |
Linea 154: | Linea 226: |
CategorySicurezza | . CategorySicurezza |
BRIndice()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 inviato 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 inviato 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 per l'apertura di una sola porta, per soli esperti
Un'altra possibilità per usare il demone knockd, utilizzabile SOLO se il firewall sul server è configurato per accettare le connessioni "established" e "related" alla porta che si vuole aprire (es ssh, 22) è di chiudersi subito dietro la porta appena aperta, per evitare che, restando "aperta", qualche malintenzionato tenti un brute-force al servizio, lanciando uno script anzichè impostando delle regole sul firewall.
Per questo scopo il file /etc/knockd.conf può ad esempio essere modificato, con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione], come segue (per spiegazioni sul significato delle opzioni vedere la sezione precedente):
[options] logfile = /var/log/knockd.log [openSSH] sequence = 7000,8000,9000 seq_timeout = 30 start_command = /etc/init.d/ssh start tcpflags = syn cmd_timeout = 5 stop_command = /etc/init.d/ssh stop # Dopo cmd_timeout secondi, viene eseguito il comando stop_command
Ricordiamo ancora che è indispensabile che il firewall sul server accetti le connessioni "related" ed "established" altrimenti la sezione "stop_command", appena sarà eseguita, vi chiuderà la connessione SSH senza quindi avere possibilità di connettervi al server!
root@server2:~# iptables -nL | grep ":22" ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22 dpts:513:65535 state RELATED,ESTABLISHED ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spts:1024:65535 dpt:22 flags:0x17/0x02 state RELATED,ESTABLISHED ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:22 state ESTABLISHE root@server2:~#
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 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] oppure seguire i passaggi per creare un [javascript:void(0);/*1251849015059*/ alias di 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»
Connessione usando un alias (solo linux)
Creare un alias aggiungendo la seguente riga al file .bash_aliases nella home dell'utente e creare successivamente il file "connectServer":
utente@client:/home/Scrivania/# cd utente@client:~# vi .bash_aliases
Contenuto del file ~/.bash_aliases:
alias ll='ls -l' alias la='ls -a' alias count='ll | wc -l' alias SshServer='~/connectServer' # Parte da aggiungere
Contenuto del file ~/connectServer
# ip_del_server va sostiuito con l'ip o il dns name del server a cui connettersi (es: 192.168.0.2 oppure www.myserver.com) telnet ip_del_server 7000 telnet ip_del_server 8000 telnet ip_del_server 9000 # Attesa di due secondi prima di effettuare la connessione: il server potrebbe metterci del tempo prima di avviare il demone SSH! sleep 2 # Da abilitare se si vuole effettuare la connessione con utente root # ssh -l root ip_del_server ssh ip_del_server
Salvare il file connectServer e assicurarsi che sia eseguibile:
utente@client:~# chmod +x connectServer
A questo punto per connettersi al server (dopo aver riaperto una shell, altrimenti il nuovo alias non sarà riconosciuto) basterà digitare quanto segue:
utente@client:~# SshServer
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 ]