Knockd

De Linuxmemo.

Port knocking

Sommaire

[modifier] basic firewall

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 514 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP
iptables -S
apt-get install iptables-persistent
systemctl start iptables-persistent
iptables-save > /etc/iptables/rules.v4

[modifier] install knockd et config

apt-get install knockd
vim /etc/knockd.conf
  • changer la règle [openSSH]:
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
en
command = /sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport 22 -j ACCEPT
  • Démarrer le service
vim /etc/default/knockd
START_KNOCKD=1
systemctl start  knockd
  • test
ssh root@server_ip_address
sh: connect to host server_ip_address port 22: Operation timed out
knock server_ip_address sequence
knock server_ip_address 7000 8000 9000
ou bien
for x in 7000 8000 9000; do nmap -Pn --host_timeout 201 --max-retries 0 -p $x server_ip_address; done
ssh root@server_ip_address
pour refermer le port
knock server_ip_address sequence
knock server_ip_address 7000 8000 9000
ou bien
for x in 7000 8000 9000; do nmap -Pn --host_timeout 201 --max-retries 0 -p $x server_ip_address; done
  • fermeture auto des connexions
vim /etc/knockd.conf

Commenter les règles [openSSH] et [closeSSH] pour définir une seul règle [SSH]

[options]
    UseSyslog
[SSH]
    sequence = 5438:tcp,3428:tcp,3280:tcp,4479:tcp
    tcpflags = syn
    seq_timeout = 15
    start_command = /sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport 22 -j ACCEPT
    cmd_timeout = 10
    stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
systemctl reload knockd

[modifier] utilisation

knock server_ip_address 5438 3428 3280 4479 && ssh root@server_ip_address

Le trou que nous avons créé dans le pare-feu se fermera après 10 secondes.

[modifier] plus

  • numéro de port au hasard
python -c "import random; print random.randint(1025,64999)"
  • Powershell
Get-Random -Minimum 10000 -Maximum 20000
  • avec ssh client
host hostalias
HostName hostname
User username
ProxyCommand bash -c 'knock -d 500 %h portnumber portnumber portnumber; sleep 3; nc -q0 %h %p'
Outils personnels