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 20 e 24 (in 4 versioni)
Versione 20 del 13/12/2008 11.40.00
Dimensione: 4045
Commento:
Versione 24 del 13/12/2008 19.47.56
Dimensione: 6552
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 23: Linea 23:
= Configurazione = = Configurazione per l'apertura di una sola porta =
Linea 38: Linea 38:
        # 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 39: Linea 44:
        #Tempo di attesa massimo per completare la sequenza.
Linea 40: Linea 47:
        # Quando la sequenza verrà accettata verrà inserita una regola che aprirà la porta SSH standard.
Linea 41: Linea 50:
        # Ulteriore filtro, sul tipo di flag del pacchetto iviato alla sequenza di porte.
        
Linea 44: Linea 55:
        # Questa è un'altra sequenza di porte sulle quali knockd rimarrà in ascolto.
Linea 46: Linea 58:
        # Quando la sequenza verrà accettata verrà inserita una regola che cancellerà quella creata in precedenza.
Linea 49: Linea 62:
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. Si noti la variabile "%IP%": questa passa alla regola di iptables l'indirizzo che ha effettuato la giusta "bussata". In questo caso viene creata una regola che permette l'apertura della porta SSH discriminando solo l'ip validato.

= Configurazione per l'apertura di porte multiple =

Nell'esempio sopra esposto si è visto come aprire una sola porta, quella SSH. Se l'esigenza fosse però di aprire più porte potremmo procedere nel creare tante sessioni [open...] e [close...] quante servono. Questo sistema risulta però scomodo per ovvi motivi. E' possibile però usare gli script:{{{

[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%". Questi potrebbero avere questo aspetto:

== open_ports ==

{{{
#! /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 22 -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
}}}

{{{

== close_ports ==

#! /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 22 -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 58: Linea 125:
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.
Si può configurare anche una chiusura temporizzata delle porte oppure usare sequenze progressive programmate valide solo una volta.
Per questi ed altri parametri controllare il wiki di zeroflux che si trova nei riferimenti.
Esistono altre soluzioni per il port knocking, vedere la sezione riferimenti.
Linea 69: Linea 135:

Wiki de
l progetto trattato in questa sede e vari client:
Il progetto trattato in questa sede è stato creato da Judd Vinet e il wiki con i link ai vari client si può trovare qui:
Linea 77: Linea 142:

TCP Flags

[http://www.openskill.info/infobox.php?ID=694]

Bash e script

[http://wiki.ubuntu-it.org/Programmazione/LinguaggioBash]

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 un 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 per l'apertura di una sola porta

  1. 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
  2. Sempre nel medesimo file /etc/default/knockd modificare con un [:Ufficio/EditorDiTesto:editor di testo] e con i [:AmministrazioneSistema/Sudo:privilegi di amministrazione] impostando su quale interfaccia il demone dovrà rimanere in ascolto:

    KNOCKD_OPTS="-i eth0"
  3. 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

Si noti la variabile "%IP%": questa passa alla regola di iptables l'indirizzo che ha effettuato la giusta "bussata". In questo caso viene creata una regola che permette l'apertura della porta SSH discriminando solo l'ip validato.

Configurazione per l'apertura di porte multiple

Nell'esempio sopra esposto si è visto come aprire una sola porta, quella SSH. Se l'esigenza fosse però di aprire più porte potremmo procedere nel creare tante sessioni [open...] e [close...] quante servono. Questo sistema risulta però scomodo per ovvi motivi. E' possibile però usare gli script:

[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%". Questi potrebbero avere questo aspetto:

open_ports

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 22 -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

== close_ports ==

#! /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 22 -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

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. Si può configurare anche una chiusura temporizzata delle porte oppure usare sequenze progressive programmate valide solo una volta. Per questi ed altri parametri controllare il wiki di zeroflux che si trova nei riferimenti. Esistono altre soluzioni per il port knocking, vedere la sezione riferimenti.

Ulteriori risorse

Port knocking in perl:

[http://www.portknocking.org/]

Il progetto trattato in questa sede è stato creato da Judd Vinet e il wiki con i link ai vari client si può trovare qui:

[http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki]

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]


CategoryHomepage