• port knocking w CentOS i nie tylko

    dodany przez Przemysław Sikora

    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 polecenie

    service 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 🙂

Komentarze do “port knocking w CentOS i nie tylko”

  1. michas100 pisze:

    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ę.

Dodaj komentarz

Warto odwiedzić
Valid XHTML 1.0 Transitional centos.com.pl- mapa strony