port-knocking server

Ven, 06/03/2009 - 21:12

port-knocking server

Inviato da gdeber 2 commenti
Introduzione

"Apriti Sesamo!!"
Ecco come Alì Babà scopre il covo dei quaranta ladroni: una parola segreta e una porta invisibile si apre sotto gli occhi del giovane.
Che c'entra questo con il nostro pc?
Immaginate di avere un server da rendere accessibile solo ad alcuni (ad esempio un ssh amministrativo). Immaginate di non poter usare l'ip della sorgente come regola per il firewall.
Ci vorrebbe qualcosa come un "Apriti Sesamo!" per il nostro firewall...

Bussate e vi sarà aperto - il Knock server

Knockd (http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki) è un port knock server. Si mette in ascolto su tutte le porte in attesa di una sequenza di connessioni. Quando la sequenza si presenta, il knock server esegue un comando.
Ma entriamo nel dettaglio.
Innanzitutto installiamo il software dando il comando con privilegi di root:

$ urpmi knock

Se tutto è andato a buon fine, possiamo passare a dare un occhiata alla configurazione (/etc/knockd.conf):

[options]
logfile = /var/log/knockd.log

[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
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

Il file di configurazione d'esempio è abbastanza esplicativo.
Ogni sezione titolata dal nome in parentesi quadra rappresenta una sequenza.
il comando sequence rappresenta le porte sulle quali devono avvenire delle connessioni entro il tempo definito da seq_timeout per scatenare il comando command.
%IP% viene sostituito dall'indirizzo ip di colui che "bussa".

Bussate e vi sarà aperto II - generare la sequenza

Per generare una sequenza si può usare un qualsiasi strumento per costruire pacchetti. Per non faticare, nell'rpm Mandriva c'è anche l'apposito tool chiamato knock.

$ knock [port[:proto]] ...

Se il server riconosce la sequenza, il comando verrà lanciato e, nell'esempio, la porta 22 aperta per l'indirizzo ip dal quale è provenuta la "parola d'ordine".
Il client esiste anche per diversi sistemi operativi.

L'ultimo chiuda la porta

Come si può evincere dal file di configurazione d'esempio, per chiudere la porta aperta in precedenza, è necessario lanciare la sequenza inversa.
Però una soluzione più comoda e un po' più sicura, è utilizzare un comando diciamo "a scadenza". Vediamo la configurazione:

[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

In questo caso il comando viene lanciato attraverso lo start_command. Passato il tempo definito da cmd_timeout (in secondi), il server esegue lo stop_command[i].
In questo frangente è sufficiente avere una regola nel firewall che consente il traffico RELATED ed ESTABILISHED ed effettuare la connessione ssh entro 10 secondi.
Quelli che verranno dopo, non potranno più connettersi alla porta 22 se non ripetendo la sequenza.

[/i]

[i]Sicurezza[/i]

[i]
Il knockd server in pratica sniffa il traffico in ingresso. Non è quindi possibile accorgersi della sua presenza con un portscan.
Il mio consiglio è quello di non utilizzare una sequenza di numeri consecutivi e magari utilizzare più porte (chessò 3 o 5) sia tcp che udp.
Meglio è utilizzare la seconda possibilità così da non doversi ricordare di "chiudere".

Ciao a tutti
Debe[/i]


In:



Commenti

Ritratto di koko82
#1

Inviato da koko82 il Dom, 08/03/2009 - 00:28.

Guida semplice e precisa

Bravo Debe,
devo dire che la guida nonostante sia semplice è al contempo chiara e precisa.
In più l'avevo già adocchiata in giro su howtoforge o similari ma non la ritrovavo più.
Ok vediamo che cosa si combina con le bussate.
Ciao ciao
Koko

Laughing koko82 Laughing



Ritratto di gdeber
#2

Inviato da gdeber il Mar, 10/03/2009 - 17:20.

Re: Guida semplice e precisa

grazie!
Dato che è la prima che scrivo, sono partito da qualcosa di semplice e più che altro è stata una riedizione di quello che già c'è sul sito del knockd

ciao!
Debe

***L'assembler è alla base dell'universo®***