Strony

piątek, 6 listopada 2009

OpenWrt - knockd server - instalacja i konfiguracja

Edycja: 2010-12-22 - dodałem regułkę, która działa u mnie

Pakiety:


Biblioteka umożliwiająca przechwytywanie pakietów
http://downloads.x-wrt.org/xwrt/kamikaze/snapshots/brcm-2.4/packages/libpcap_1.0.0-1_brcm-2.4.ipk

serwer
http://downloads.x-wrt.org/xwrt/kamikaze/snapshots/brcm-2.4/packages/knockd_0.5-1_brcm-2.4.ipk

opcjonalnie klient na openwrt
http://downloads.x-wrt.org/xwrt/kamikaze/snapshots/brcm-2.4/packages/knock_0.5-1_brcm-2.4.ipk

klient na win32
http://www.zeroflux.org/proj/knock/files/knock-win32.zip

przykładowy konfig
/etc/knockd.conf
[options]
logfile = /var/log/knockd.log

[openSSH]
sequence = 7000,8000,9000
seq_timeout = 15
command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn

[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 15
command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn

[opencloseSSH]
sequence = 2222,3333,4444
seq_timeout = 15
tcpflags = syn
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

[one_time_sequences]
one_time_sequences = /etc/knockd_smtp_sequences
seq_timeout = 15
tcpflags = syn
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

/etc/knockd_smtp_sequences
zawiera sekwencje portów, które wygasają po jednorazowym użyciu
#1,2,3
4,5,6
7,8,9

w tym przypadku pozostały nam 2 aktywne sekwencje 4,5,6 i 7,8,9 (TCP)

uruchomienie serwera nasłuchującego na interfejsie eth0 działającego jako daemon:
knockd -i eth0 -d

aby otworzyć port 22 na interfejsie eth0 dla swojego IP (192.168.1.5) korzystając z procedury [one_time_sequences] na kliencie wydajemy polecenie
knock.exe 192.168.1.1 4 5 6

logi:
root@openwrt:~# cat /tmp/log/knockd.log

[2009-11-06 12:37] 192.168.1.5: one_time_sequences: Stage 1
[2009-11-06 12:37] 192.168.1.5: one_time_sequences: Stage 2
[2009-11-06 12:37] 192.168.1.5: one_time_sequences: Stage 3
[2009-11-06 12:37] 192.168.1.5: one_time_sequences: OPEN SESAME
[2009-11-06 12:37] one_time_sequences: running command: /usr/sbin/iptables -A INPUT -s 192.168.1.5 -p tcp --syn --dport 22 -j ACCEPT


root@openwrt:~# iptables --list-rules | grep 22

-A INPUT -s 192.168.1.5/32 -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT

po 10 sekundach:
[2009-11-06 12:37] 192.168.1.5: one_time_sequences: command timeout
[2009-11-06 12:37] one_time_sequences: running command: /usr/sbin/iptables -D INPUT -s 192.168.1.5 -p tcp --syn --dport 22 -j ACCEPT

root@openwrt:~# iptables --list-rules | grep 22

port 22 zamknięty


Edycja: 2010-12-22 - reguła działająca u mnie:

[opencloseSSH]
sequence= NRPORTU:udp,
NRPORTU:udp,NRPORTU:udp
seq_timeout = 15
tcpflags = syn
start_command = /usr/sbin/iptables -A input_rule -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 10
stop_command = /usr/sbin/iptables -D input_rule -s %IP% -p tcp --dport 22 -j ACCEPT
Źródła:
http://www.zeroflux.org/projects/knock
http://portknocking.org/
http://www.urug.net/blog/archives/25-Port_knocking.html
http://nfsec.pl/security/122
pdf: http://portknocking.org/docs/portknocking_an_introduction.pdf