Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "PaoloVisnoviz/Prove1"
Differenze tra le versioni 14 e 65 (in 51 versioni)
Versione 14 del 11/12/2008 21.08.17
Dimensione: 3218
Commento:
Versione 65 del 14/03/2011 12.53.08
Dimensione: 7595
Autore: localhost
Commento: converted to 1.6 markup
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 1: Linea 1:
## page was renamed from Paolo''''''Visnoviz/Prove1
Linea 5: Linea 6:
## Port Knoking
[[BR]]
[[Indice()]]
<<BR>>
<<Indice>>
<<Informazioni(rilasci="8.04")>>
Linea 11: Linea 12:
Le tecniche di port knocking permettono di aumentare considerevolmente la sicurezza di un server del quale si ha la necessità di erogare servizi 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. 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 13: Linea 15:
= Requisiti = = Preparativi =
Linea 15: Linea 17:
1 Ubuntu Server 8.04 LTS oppure 8.10.

2 Knockd.

3 Iptables.
È necessario che il firewall [[Sicurezza/Iptables| iptables]] sia configurato e attivo.
Linea 23: Linea 21:
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`.
{{{
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:{{{
Linea 32: Linea 29:
La riga seguente controlla 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 37: Linea 33:
L'altro file che bisogna modificare è `/etc/knockd.conf`:
{{{
= 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:{{{
Linea 44: Linea 41:
        # 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
Linea 45: Linea 48:
        #Tempo di attesa massimo per completare la sequenza.
Linea 46: Linea 51:
        # Quando la sequenza verrà accettata verrà inserita una regola che aprirà la porta SSH standard.
Linea 47: Linea 54:
        # Ulteriore filtro, sul tipo di flag del pacchetto iviato alla sequenza di porte.
        
Linea 50: Linea 58:
        # Questa è un'altra sequenza di porte sulle quali knockd rimarrà in ascolto.
Linea 51: Linea 61:
Linea 52: Linea 63:
        # Quando la sequenza verrà accettata verrà inserita una regola che cancellerà quella creata in precedenza.
Linea 53: Linea 66:
        # Ulteriore filtro, sul tipo di flag del pacchetto iviato alla sequenza di porte.
Linea 55: Linea 69:
Come si potrà notare è estremamente semplice ed efficace. Quando il demone riconosce la giusta sequenza effettuata entro 30 secondi eseguirà il "command" realtivo, che in questo caso eseguirà 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. 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
}}}
Linea 59: Linea 123:
In realtà potrebbe essere sufficiente telnet o netcat ma se il tempo a disposizione dovesse essere troppo basso è comodo usare il client per Linux, OsX o Windows che si trova sul sito di zeroflux. Di seguito viene mostrato come configurare i client a dipendenza del sistema operativo utilizzato.
Linea 61: Linea 125:
= Note = == Linux ==
Linea 63: Linea 127:
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. 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 0", oppure un comando "sh" che lancia uno script complesso.
Esistono altre soluzioni alle tecniche di port knocking, vedere la sezione riferimenti.
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
}}}
Linea 67: Linea 131:
= Riferimenti = Sempre da una finestra di terminale digitare il [[#comando_client|comando per la connessione]].
Linea 69: Linea 133:
Port knocking in perl: == Windows ==
Linea 71: Linea 135:
[http://www.portknocking.org/] 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]].

<<Anchor(comando_client)>>

= 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 =
Linea 74: Linea 154:
Wiki del progetto ufficiale e vari client:

[http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki]
 * [[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 ]]


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 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 iptables sia configurato e attivo.

Installazione

Per utilizzare le tecniche di Port knocking è necessario installare il pacchetto knockd, reperibile dal componente universe dei repository ufficiali.

Configurazione knockd

  1. Per fare in modo che il demone parta all'avvio del computer modificare con un editor di testo e con i privilegi di amministrazione il file /etc/default/knockd in questo modo:

    START_KNOCKD=1
  2. Sempre nel medesimo file /etc/default/knockd modificare con un editor di testo e con i 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 editor di testo e con i 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 editor di testo e con i 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 editor di testo e con i 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 editor di testo e con i 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 questo indirizzo all'interno della propria Home e 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 per la connessione.

Windows

Scaricare da questo indirizzo e digitare all'interno di una finestra DOS il comando per la connessione tralasciando la prima parte «./»

OSX

Consultare la 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


CategoryHomepage