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