Knockd, per garantire la sicurezza delle porte su linux.

Creato il 17 aprile 2011 da Linuxaria

Oggi vi mostrerò come utilizzare knockd per migliorare la sicurezza del vostro server Linux, l’uso più comune che ho visto finora è: “Mi piacerebbe connettermi sulla porta 22 (ssh), ma non voglio lasciare la porta aperta per tutti .. e ho un IP dinamico “. In questi casi è possibile chiudere le porte ed usare knockd per bussare alle porte della nostra Linux box e farci entrare.

knockd è un server per eseguire dei comandi al bussare sulle porte. Ascolta tutto il traffico su una interfaccia ethernet (o PPP), alla ricerca di speciali sequenze di “bussate”. Un client esegue queste bussate su una porta inviando un pacchetto TCP (o UDP) a una porta sul server. Questa porta non deve essere aperto – il knockd ascolta a livello link-layer, vede quindi tutto il traffico anche se è destinato a una porta chiusa. Quando il server rileva una sequenza specifica di Porte contattate, viene eseguito un comando definito nel suo file di configurazione. Questo può essere usato per aprire dei buchi in un firewall per l’accesso rapido.

Installazione

Knockd è disponibile nei repository delle principali distribuzioni, lo lo sto usando su Ubuntu/Debian in cui il pacchetto è disponibile.

Configurazione

knockd legge tutti i battiti/eventi da un file di configurazione. Ogni battito/evento inizia con un marcatore titolo, nella forma [nome] , dove ogni nome è il nome dell’evento che apparirà nel registro. Un marcatore speciale, [options], viene utilizzato per definire le opzioni globali.

Esempio:

[options]
        logfile = /var/log/knockd.log
 
[openSSH]
        sequence    = 700,800,900
        seq_timeout = 5
        command     = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags    = syn
 
[closeSSH]
        sequence    = 900,800,700
        seq_timeout = 5
        command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags    = syn

Questo esempio utilizza due colpi. Il primo consentirà a colui che bussa di accedere alla porta 22 (SSH), e il secondo chiude la porta quando chi bussa ha fatto tutto. Come potete vedere, questo potrebbe essere utile se si ha un firewall molto restrittivo (DENY policy) e si desidera accedere con discrezione.

Esempio numero 2:

 [options]
        logfile = /var/log/knockd.log
 
  [opencloseSSH]
        sequence      = 2222:udp,3333:tcp,4444:udp
        seq_timeout   = 15
        tcpflags      = syn,ack
        start_command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --syn --dport 22 -j ACCEPT
        cmd_timeout   = 10
        stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --syn --dport 22 -j ACCEPT

Questo esempio utilizza una sola sequenza di colpi per controllare l’accesso alla porta 22 (SSH). Dopo aver ricevuto una sequenza corretta, il demone eseguirà lo start_command, attenderà il tempo specificato in cmd_timeout, quindi eseguirà lo stop_command. Questo è utile per chiudere le porte automaticamente.

Per poter utilizzare questo esempio, è importante che abbiate una regola sul firewall relativa a ESTABLISHED,RELATED, come ad esempio:

iptables -A INPUT -m –state ESTABLISHED,RELATED -j ACCEPT

Altrimenti potreste perdere la vostra connessione ssh dopo quei 10 secondi (anche se già collegati).
E naturalmente la policy di DROP:

iptables -P INPUT DROP

Come bussare

Ok, ora avete impostato il server, ma come bussare alle sue porte?
Il modo più semplice è di fare uso del comando knock , che è disponibile nel pacchetto knockd come client.
L’uso base di knock è:

knock iltuoserver porta:protocollo porta:protocollo  porta:protocollo

Se non mettete :protocollo il default è di usare tutte le porte TCP, questo può essere modificato usando l’opzine -u (tutto UDP)

Esempi:

Bussa su 3 porte TCP:

knock 127.0.0.1 7000 8000 9000

Oppure usare questa sintassi per avere un mix di porte TCP ed UDP

knock 127.0.0.1 123:tcp 456:udp 789:tcp

Client per Windows e Mac sono disponibili all’indirizzo: http://www.zeroflux.org/projects/knock

Riferimenti:

http://www.zeroflux.org/projects/knock

http://www.portknocking.org/


Potrebbero interessarti anche :

Possono interessarti anche questi articoli :