Ho impostato le regole di knocking della porta su CentOS 7, iptables come segue:
-I INPUT -p tcp --dport 1 -m recent --set --rsource --name KNOCK1 -m limit --limit 5/min -j LOG --log-prefix "knock 1" --log-level 7
-I INPUT -p tcp --dport 2 -m recent --rcheck --rsource --seconds 20 --name KNOCK1 -m recent --set --rsource --name KNOCK2 -m limit --limit 5/min -j LOG --log-prefix "knock 2" --log-level 6
-I INPUT -p tcp --dport 3 -m recent --rcheck --rsource --seconds 20 --name KNOCK2 -m recent --set --rsource --name OPEN_NOW -m limit --limit 5/min -j LOG --log-prefix "knock 3" --log-level 6
-I INPUT -p tcp --dport 22 -m state --state NEW -m recent --rcheck --rsource --seconds 20 --name OPEN_NOW -j ACCEPT
Quindi ho bloccato la porta 22:
iptables -A INPUT -p tcp --dport 22 -j DROP
Funziona correttamente perché prima invia la sequenza di porte, nmap viene visualizzato come:
22/tcp filtered ssh no-response
E dopo inviando le seguenti sonde (su Windows):
nmap -PN --host_timeout 201 --max-retries 0 -p 1 200.xxx.xxx.xxx && nmap -PN --host_timeout 201 --max-retries 0 -p 2 200.xxx.xxx.xxx && nmap -PN --host_timeout 201 --max-retries 0 -p 3 200.xxx.xxx.xxx
Sia nmap che nc lo mostrano come aperto:
nmap:
22/tcp open ssh syn-ack ttl 49
nc:
hostname.xxxx.xxxx [200.xxx.xxx.xxx] 22 (ssh) open
Tuttavia, non posso ssh in esso, usando qualsiasi client (Putty, nc). Timeout come Iptables sta facendo cadere correttamente i pacchetti. Ma la porta è OPEN (poiché le sonde hanno aperto la porta), il che significa che la regola DROP non era più in vigore e nmap / nc ha ottenuto "Ack / Open", non dovrei essere in grado di ssh?