-
port knocking w CentOS i nie tylko
Dosyć mało znaną, lecz ciekawą techniką jest port knocking. Umożliwia ona wykonanie wcześnie ustalonej komendy na zdalnej maszynie, bez logowania się do niej. Kluczem do uzyskania połączenia jest ustalony przez nas ciąg pakietów, który należy wysłać do zdalnego hosta. Najczęstszym zastosowaniem jest otwieranie dostępu zdalnego np. dla ssh. Zacznijmy od przygotowania środowiska. W przypadku CentOS-a w wersji 5, jest trochę prościej ponieważ jedna z implementacji – knock, jest dostępna w często stosowanym repozytorium RPMFORGE. W takim wypadku do instalacji wystarczy komenda:
yum install knock
Jeśli posiadamy CentOS-a w wersji 6, jednym ze źródeł poszukiwanego pakietu jest ta lokalizacja. Polecam pakiet knock-server. Przykładowo
rpm -ivh http://li.nux.ro/download/nux/dextop/el6/i386/knock-server-0.5-7.el6.nux.i686.rpm
W przypadku obydwu pakietów, plik konfiguracyjny nazywa się tak samo („knockd.conf”) i jest zlokalizowany w katalogu „/etc/”. Jego postać po edycji powinna być np. taka:
[options]
UseSyslog[opencloseSSH]
sequence = 2221:tcp,3334:udp,4443:udp
start_command = /sbin/iptables -I INPUT -s %IP% -p tcp –dport ssh -j ACCEPT
cmd_timeout = 10
stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp –dport ssh -j ACCEPT„cmd_timeout” oznacza czas w sekundach po którego upłynięciu wykona się polecenie przypisane do „stop_command”.
W omawianym przypadku sekwencja klucz to: pakiet tcp na port 2221, udp na 3334 oraz udp na 4443. Pamiętajmy, że nie musimu otwierać powyższych portów na firewallu, ponieważ włączenie „knocka” powoduje przejście karty sieciowej w tzw. tryb mieszany (promiscuous mode). Po zapisaniu konfiguracji, wydajemy polecenieservice knockd start
Teraz musimy skorzystać np. z aplikacji „knock” pod Linuksem lub „knockknock” pod Windowsem. Na naszym komputerze klienckim wydajemy komendę:
knock adres_hosta_zdalnego 2221:tcp 3334:udp 4443:udp
Po wykonaniu powyższego polecenia, na zdalnej maszynie powinien otworzyć się port 22 dla naszego adresu IP jako źródła. Po czasie „cmd_timeout”, czyli 10 sekundach, regułka dotycząca otwarcia portu 22, zostanie usunięta. W logach serwera (/var/log/secure) powinniśmy zaobserwować coś podobnego do tego:
Jul 31 22:49:57 4098-1-592897-01 knockd: ip_z_którego_się_łączymy: opencloseSSH: Stage 1
Jul 31 22:49:57 4098-1-592897-01 knockd: ip_z_którego_się_łączymy: opencloseSSH: Stage 2
Jul 31 22:49:57 4098-1-592897-01 knockd: ip_z_którego_się_łączymy: opencloseSSH: Stage 3
Jul 31 22:49:57 4098-1-592897-01 knockd: ip_z_którego_się_łączymy: opencloseSSH: OPEN SESAME
Jul 31 22:49:57 4098-1-592897-01 knockd: opencloseSSH: running command: /sbin/iptables -I INPUT -s ip_z_którego_się_łączymy -p tcp --dport ssh -j ACCEPT
Jul 31 22:50:07 4098-1-592897-01 knockd: ip_z_którego_się_łączymy: opencloseSSH: command timeout
Jul 31 22:50:07 4098-1-592897-01 knockd: opencloseSSH: running command: /sbin/iptables -D INPUT -s ip_z_którego_się_łączymy -p tcp --dport ssh -j ACCEPT
Jeśli udało nam się nawiązać połączenie, to znaczy że wszystko działa i możemy cieszyć się „tylnymi drzwiami” do naszego serwera z zamkniętym dostępem przez ssh spoza określonych adresów IP, np. firmowych. W razie problemów, proszę pisać w komentarzach lub na forum. Inna propozycje zastosowania „port knocking-u” mile widziane 🙂
Troszkę ryzykownie ale możliwe że przydałoby się to do dostępu do webmina [można oczywiście również przez https] z „brudnego internetu” [duże zaufanie do aplikacji knock]:-) Pozdrawiam, dzięki za przydatną aplikację.