Przejdź do treści
Secret Knock

Przykłady knockd.conf

knockd odczytuje /etc/knockd.conf: sekcję [options] oraz po jednej sekcji dla każdych drzwi. Każda sekcja zawiera sekwencję, limit czasu i polecenie do uruchomienia dla adresu pukającego, %IP%. Wybierz własne porty — nigdy nie używaj ponownie tych z przykładów.

Otwieranie SSH na kilka sekund

Najczęstsza konfiguracja: jedno pukanie otwiera SSH, a knockd zamyka je ponownie po upływie cmd_timeout. Sesje, które zostały już otwarte, 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

Osobne sekwencje do otwierania i zamykania

Bez czasomierza port pozostaje otwarty, dopóki nie zapukasz sekwencją zamykającą. To wygodne, ale łatwo o tym zapomnieć — lepiej użyć wersji z limitem czasu.

[options]
    UseSyslog

[openSSH]
    sequence    = 7311:tcp,8822:tcp,9133:udp
    seq_timeout = 10
    tcpflags    = syn
    command     = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

[closeSSH]
    sequence    = 9133:udp,8822:tcp,7311:tcp
    seq_timeout = 10
    tcpflags    = syn
    command     = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
/etc/knockd.conf

Sekwencje jednorazowe

Zamiast jednej stałej sekwencji knockd może odczytywać plik z sekwencjami i akceptować każdą tylko raz, dzięki czemu zarejestrowanego pukania nie można odtworzyć. Secret Knock zachowuje tę samą listę i przechodzi do następnej sekwencji po pukaniu, które otworzyło drzwi.

[openSSH]
    one_time_sequences = /etc/knockd/ssh_sequences
    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/ssh_sequences — one sequence per line, each used once
2222:udp,3333:tcp,4444:udp
5555:tcp,6666:udp,7777:tcp
8888:udp,9999:tcp,1111:tcp
/etc/knockd.conf i plik sekwencji

Z nftables

W systemach z nftables pozwól, aby knockd dodawał adres do zbioru z limitem czasu; przewodnik ukrywania SSH pokazuje odpowiadającą tabelę nftables.

[openSSH]
    sequence      = 7311:tcp,8822:tcp,9133:udp
    seq_timeout   = 10
    tcpflags      = syn
    start_command = /usr/sbin/nft add element inet filter knocked4 { %IP% timeout 30s }
/etc/knockd.conf

Po edycji

  1. 1W Debianie i Ubuntu ustaw interfejs, na którym nasłuchuje knockd, w /etc/default/knockd (KNOCKD_OPTS="-i eth0"), a następnie uruchom ponownie knockd.
  2. 2Obserwuj działanie za pomocą journalctl -u knockd -f podczas pukania.
  3. 3W Secret Knock opcja + › Importuj z pliku zamienia każdą sekcję z sekwencją w drzwi; listy sekwencji jednorazowych wprowadź ręcznie.

Wszystkie przykłady na GitHubie → Każda konfiguracja z tej strony, gotowa do skopiowania: github.com/mobilcomm/secretknock-examples (domena publiczna).

Pytania

Czy używać kroków TCP czy UDP?

Oba działają. Łączenie obu typów sprawia, że sekwencję trudniej odgadnąć na podstawie skanowania portów. Kroki UDP mogą przenosić ładunek w Secret Knock, jeśli konfiguracja go sprawdza.

Przewodniki dotyczące Twojej konfiguracji