venerdì 6 febbraio 2015

Port Knocking

Stanco di aver sempre qualcuno che prova ad entrare sul servizio SSH del server mi sono deciso ad implementare il Port Knocking. In estrema sintesi con questo sistema e' possibile modificare le regole del firewall dall'esterno in modo da esporre un servizio che normalmente e' stato mascherato dal firewall e non ammette connessioni. Il trucco si basa sull'invio di una sequenza di pacchetti codificati che vengono letti da un demone sulla macchina che agisce poi in base a regole predefinite

Partiamo da un server in cui siano attive regole di firewall per filtrare tutto il traffico tranne quello entrante su porta 80 ma che comunque abbia attivo ma filtrato un servizio SSH. L'idea e' quello di usare Port Kocking per connettersi dall'esterno su SSH

con questi comandi viene ammesso tutto il traffico su localhost e viene droppato tutto il traffico dall'esterno ad eccezione di quello su porta 80

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j DROP



a questo punto si puo' installare il demone per il Port Knocking con

apt-get install knockd

una volta installato il demone non parte in autoesecuzione. Per prima cosa si deve configurare il comportamento dal file /etc/knockd.conf
I numeri della sequenza dovranno esssere specifici per la macchina in uso in quanto corrispondono alla chiave per attivare/disattivare il servizio (non e' necessario che la chiave per disattivare il servizio sia la medesima ma invertita  di quella per attivarlo). Ogni numero corrisponde ad una richiesta su una porta differente (attenzione, se c'e' a monte un firewall che prefiltra il traffico il trucco del port knocking potrebbe non funzionare)

------------------------------------------------------------------------
[options] 
 UseSyslog 
 [openSSH] 
 sequence = 1234,5678,9101 
 seq_timeout = 5 
 command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT 
 tcpflags = syn 

 [closeSSH] 
 sequence = 1019,8765,4321 
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT 
 tcpflags = syn
------------------------------------------------------------------------
come si vede la regola di iptables semplicemente apre la connessione sulla porta 22 per l'ip da cui e' stata riconosciuta la giusta sequenza di bussate. 

Per mandare il servizio in esecuzione automatica si deve settare ad 1 START_KNOCKD in /etc/default/knockd (oppure si avvia a mano il servizio con service knockd start)

fatto partire il servizio si puo' sperimentare con il client

Il comando apt-get install knockd installa oltre al server anche il client per cui si puo' ripetere l'installazione sulla macchina da cui ci si vuole connettere

il comando e' il seguente. Vengono concantenati insieme il  knock porting e l'avvio della sessione SSH

knock ip_server 1234 5678 9101 && ssh luca@ip_server