Przejdź do treści
Secret Knock

Port knocking wyjaśniony

Port knocking ukrywa usługę, dopóki ktoś nie udowodni, że zna sekret. Ten przewodnik wyjaśnia jego działanie, dwie popularne implementacje — knockd i fwknop — oraz praktyczne przyczyny nieudanego pukania.

Jak działa port knocking

Zapora odrzuca każde połączenie z chronionym portem, więc skaner nic nie widzi. Niewielki demon obserwuje ruch docierający do zapory. Gdy jeden adres źródłowy utworzy oczekiwany wzorzec, demon dodaje regułę zapory zezwalającą temu adresowi na dostęp, zwykle na krótki czas.

Wzorcem jest pukanie. W przypadku knockd jest to sekwencja prób połączenia z określonymi portami, w określonej kolejności i limicie czasu. W przypadku fwknop jest to pojedynczy zaszyfrowany pakiet.

knockd: sekwencje pukania

knockd nasłuchuje na interfejsie i dopasowuje próby połączenia do sekwencji w /etc/knockd.conf. Sekwencja może łączyć porty TCP i UDP. Po dopasowaniu knockd uruchamia polecenie — zazwyczaj regułę iptables lub nftables dla adresu pukającego (%IP%).

Ten przykład otwiera SSH dla adresu pukającego i ponownie je zamyka po 10 sekundach. Istniejące sesje SSH nadal działają, jeśli zapora akceptuje ustanowione połączenia.

[options]
    UseSyslog

[openSSH]
    sequence      = 7311:tcp,8822:tcp,9133:udp
    seq_timeout   = 10
    tcpflags      = syn
    start_command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    cmd_timeout   = 10
    stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
/etc/knockd.conf — otwórz SSH na 10 sekund

Wybierz własne porty; nigdy nie używaj ponownie portów z opublikowanych przykładów. tcpflags = syn sprawia, że knockd liczy tylko pakiety z flagą SYN — pierwszy pakiet próby połączenia.

fwknop: Single Packet Authorization

fwknop zastępuje sekwencję jednym pakietem UDP szyfrowanym (AES) i uwierzytelnianym (HMAC). Serwer, fwknopd, przechwytuje go pasywnie, weryfikuje, sprawdza, czy nie jest odtworzeniem, i otwiera żądany port dla adresu zawartego w pakiecie.

Wygeneruj klucze poleceniem fwknop --key-gen i umieść je w access.conf serwera. Secret Knock importuje część kliencką z .fwknoprc.

SOURCE              ANY
OPEN_PORTS          tcp/22
KEY_BASE64          <output of fwknop --key-gen>
HMAC_KEY_BASE64     <output of fwknop --key-gen>
FW_ACCESS_TIMEOUT   30
/etc/fwknop/access.conf — zezwól na SSH za pomocą klucza SPA

Ponieważ dozwolony adres znajduje się w zaszyfrowanym pakiecie, SPA może otworzyć port dla adresu innego niż adres wysyłający pakiet — przydatne, gdy pukasz z telefonu przez dane komórkowe, aby udostępnić dostęp laptopowi w innym miejscu.

Dlaczego pukanie nie działa

  • IPv4 a IPv6: pukanie wyszło przez jedną rodzinę adresów, a SSH łączy się przez drugą. Zapora otworzyła drzwi dla adresu, którego nie używasz.
  • Inny adres publiczny: przy danych komórkowych, za NAT operatora lub VPN serwer widzi inny IP, niż się spodziewasz. Sprawdź adres, z którego pukasz.
  • Ponownie wysyłane SYN: jeśli pukanie TCP nie otrzyma odpowiedzi, system operacyjny klienta wysyła ten sam SYN ponownie. W naszych testach knockd 0.8 resetował sekwencję po takim powtórzonym SYN, dlatego klient musi wysłać każde pukanie tylko raz i szybko zakończyć próbę.
  • Czas: pukania, które docierają poza seq_timeout lub w niewłaściwej kolejności, rozpoczynają sekwencję od nowa.
  • Urządzenia pośredniczące: niektóre sieci blokują lub modyfikują ruch do nietypowych portów, dlatego pukanie działające w domu może nie działać w sieci hotelowej lub biurowej.

Czy to jest bezpieczne?

Sekwencja knockd jest wysyłana bez szyfrowania; każda osoba mogąca obserwować ruch może ją odtworzyć. Używaj jej do ukrywania usługi przed skanerami, przed kluczami SSH — nie zamiast nich. fwknop SPA eliminuje tę lukę dzięki szyfrowaniu, HMAC i ochronie przed odtworzeniem oraz jest lepszym wyborem, gdy ruch może być obserwowany.

Pukanie z iPhone’a, Maca i zegarka Apple Watch

Secret Knock wysyła sekwencje knockd i pakiety fwknop SPA z iPhone’a, iPada i Maca, sprawdza, czy port odpowiada, i otwiera aplikację SSH. Apple Watch puka przez sparowanego iPhone’a, ponieważ watchOS nie pozwala aplikacjom wysyłać surowych pakietów TCP lub UDP; poza zasięgiem iPhone’a może wysyłać SPA przez HTTP do serwerów, które na to zezwalają.

Przewodniki dotyczące Twojej konfiguracji

Trzymaj drzwi zamknięte. Noś pukanie ze sobą.

Secret Knock wkrótce pojawi się w App Store na iPhone’a, iPada, Maca i zegarek Apple Watch.

Secret Knock →