knockd

Configurazione di un sistema di port knocking per i demoni pubblici


Breve introduzione al port knocking:
Il port knocking è una semplice ma al tempo stesso efficace politica di sicurezza per modificare remotamente, in modo dinamico, le regole di firewalling di un server.
Configurando un port knocking daemon sul proprio server si può decidere di rendere accessibile le porte di alcuni demoni esclusivamente previa una precisa sequenza di pacchetti mandati dal client al server. Una volta che tale evento si sarà verificato verrà incaricato il firewall di aprire una o più porte per l'IP che ha effettuato la richiesta.

Esempio: il knock daemon per aprire la porta di SSH vuole che siano mandati nell'arco di 10 secondi 4 pacchetti TCP aventi flag SYN attivo, alle porte 1000,1200,1300,1500, in modo sequenziale. Nel caso in cui questo evento si verifichi esegue una regola sul firewall che permette l'accesso all'IP che ha effettuato lo knocking grazie alla quale l'amministratore potrà accedere al server SSH (ovviamente dovrà in seguito superare l'autenticazione sullo stesso).
Terminata la sessione l'amministratore potrà decidere di ripristinare lo stato precedente recapitando al server una seconda sequenza differente (es: 2000,2100,2200) che cancellerà la regola di permesso precedentemente creata riportando il firewall allo stato originario.
Come demone si è optato per knockd http://www.zeroflux.org/cgi-bin/cvstrac/knock/wiki una semplice implementazione di port knocking daemon sviluppata in linguaggio C. Il pacchetto comprende un server (/usr/sbin/knockd) e un client 
(/usr/bin/knock) disponibile anche per piattaforme Windows, grazie al quale si potrà mandare la sequenza di pacchetti.

Obbiettivo:
L'unico demone pubblico configurato nei precedenti how-to risulta essere SSH. Configurare un sistema di port knocking riferito al demone SSH grazie al quale l'amministratore potrà avere accesso remoto al server da Internet.


Installare knockd:
  • server:~# apt-get install knockd
    Lettura della lista dei pacchetti in corso... Fatto
    Generazione dell'albero delle dipendenze in corso... Fatto
    I seguenti pacchetti NUOVI (NEW) saranno installati:
      knockd
    0 aggiornati, 1 installati, 0 da rimuovere e 107 non aggiornati.
    È necessario prendere 0B/25,4kB di archivi.
    Dopo l'estrazione, verranno occupati 172kB di spazio su disco.
    Selezionato il pacchetto knockd, che non lo era.
    (Lettura del database ... 52444 file e directory attualmente installati.)
    Spacchetto knockd (da .../archives/knockd_0.5-1_i386.deb) ...
    Configuro knockd (0.5-1) ...
    Starting Port-knock daemon: knockd.

    server:/home/billiejoex#
    server:~#
Configurazione:
La configurazione è estremamente semplice.Terminata l'installazione si dovrà dapprima editare il file /etc/default/knockd specificando l'interfaccia su cui far lavorare il demone:
  • server:~# vi /etc/default/knockd
# anything else = don't start
START_KNOCKD=1

# command line options
KNOCKD_OPTS="-i eth0"

...successivamente si imposteranno le regole di knocking nel file di configurazione principale:
  • server:~# vi /etc/knockd.conf
[options]
# File di log
        logfile = /var/log/knockd.log

[openSSH]
# Sequenza
        sequence    = 1000,1500,2000,2500
#       sequence      = 2222:udp,3333:tcp,4444:udp
# Tempo massimo durante il quale si dovrà inserire la sequenza di knocking
        seq_timeout = 10
        command     = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
# Flag
        tcpflags    = syn

[closeSSH]
        sequence    = 9000,8000,7000
        seq_timeout = 5
        command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags    = syn

Riavviare il demone:
  • server:~# /etc/init.d/knockd restart
    Restarting Port-knock daemon: knockd.
    server:~#
Testare il corretto funzionamento dal client:
  • client:~# knock -v 10.0.0.1 1000 1500 2000 2500
    hitting tcp 10.0.0.1:1000
    hitting tcp 10.0.0.1:1500
    hitting tcp 10.0.0.1:2000
    hitting tcp 10.0.0.1:2500
  • client:~# ssh nome_utente_ssh@remote_server.org
    user@192.168.1.209's password:
    Linux client 2.6.12-9-386 #1 Mon Oct 10 13:14:36 BST 2005 i686 GNU/Linux
    Last login: Wed Nov  9 20:50:29 2005
    [...]
  • ssh_user@server:~$

 

Argomenti correlati:

Py-Port knock project (a simple Python port knocking system implementation)





billiejoex
EOF 2006-1-14 10:12 AM
last update 2006-1-14