Przejdź do treści
Secret Knock

Dlaczego zapukanie nie otwiera drzwi

Zapukanie albo w ogóle nie dociera do serwera, dociera w formie, której demon nie akceptuje, albo otwiera drzwi dla adresu, którego nie używasz. Przejdź przez listę od góry — jest uporządkowana według częstotliwości występowania poszczególnych przyczyn.

1. Drzwi otworzyły się dla innego adresu

Zapora otwiera port dla adresu źródłowego widzianego przez serwer. Jeśli zapukano przez IPv6, a następnie SSH łączy się przez IPv4 — lub odwrotnie — drzwi są otwarte dla adresu, którego nie używasz. Dane komórkowe, NAT operatora i VPN również zmieniają adres.

Porównaj adres wyświetlany przez Secret Knock na ekranie głównym („Pukasz z …”) z adresem w dzienniku serwera. Jeśli są różne, przypisz dla drzwi IPv4 lub IPv6.

2. Pakiety nie docierają do serwera

Sieci hotelowe, biurowe i komórkowe czasem blokują nietypowe porty, a zapora chmurowa przed serwerem odrzuca pakiety, zanim zobaczy je knockd lub fwknopd. Obserwuj ruch na serwerze podczas pukania:

# knockd (UseSyslog): every recognised step and the command it ran
sudo journalctl -u knockd -f

# Do the packets reach the server at all? (use your interface and ports)
sudo tcpdump -ni eth0 'tcp port 7311 or tcp port 8822 or udp port 9133'

# fwknopd in the foreground with verbose output
sudo fwknopd -f -v
Na serwerze

3. Sekwencja dociera w nieprawidłowej formie

  1. 1Ponownie wysyłane SYN-y: gdy zapukanie TCP nie otrzymuje odpowiedzi, system operacyjny klienta ponownie wysyła ten sam SYN. knockd 0.8 resetuje sekwencję przy takim powtórzeniu. Secret Knock wysyła każde zapukanie TCP jako pojedynczy SYN i natychmiast kończy próbę; inne klienty mogą działać inaczej.
  2. 2Czas: wszystkie kroki muszą dotrzeć w kolejności w czasie określonym przez seq_timeout. Jeśli router pośredniczący zmienia kolejność pakietów, dodaj krótkie opóźnienie przed krokiem.
  3. 3Protokół: krok UDP musi zostać wysłany jako UDP, a krok TCP jako TCP — sprawdź każdy krok względem knockd.conf.
  4. 4tcpflags = syn powoduje, że knockd ignoruje pakiety TCP bez flagi SYN. Bez tego pozostałe pakiety połączenia z tym samym portem również są liczone jako trafienia i mogą przerwać sekwencję.

4. fwknop: klucze, zegary i powtórzenia

  1. 1Oba klucze muszą odpowiadać access.conf: klucz Rijndael i klucz HMAC, z tym samym skrótem (domyślnie SHA-256).
  2. 2fwknopd odrzuca pakiety starsze niż MAX_SPA_PACKET_AGE (domyślnie 120 sekund), więc znacznie nieprawidłowy zegar urządzenia sprawia, że każdy pakiet wygląda na stary.
  3. 3Każdego pakietu SPA można użyć tylko raz; fwknopd celowo odrzuca ponownie odebrany pakiet.
  4. 4Jeśli pukasz przez HTTP, coś musi akceptować połączenia TCP na tym porcie, w przeciwnym razie żądanie nigdy nie zostanie wysłane.

5. Drzwi się otwierają, ale SSH nadal nie działa

  1. 1Kolejność reguł: reguła dodawana przez demona musi znajdować się przed regułą odrzucającą port — iptables -A dodaje ją po istniejącej regule DROP, więc nigdy nie zostanie dopasowana.
  2. 2Okno czasowe: cmd_timeout lub FW_ACCESS_TIMEOUT zamknęło drzwi, zanim SSH się połączyło. Połącz się w tym czasie; ustanowione sesje nadal działają, jeśli zapora akceptuje ustanowione połączenia.
  3. 3Kontrola portu wykonywana przez Secret Knock po zapukaniu informuje, czy port w ogóle odpowiedział, niezależnie od uwierzytelniania SSH.

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

Pytania

Jak sprawdzić, co aplikacja faktycznie wysłała?

Historia drzwi pokazuje każde zapukanie wraz z czasem, wynikiem i rodziną adresów, a edytor pokazuje to samo zapukanie jako polecenie terminala, które możesz uruchomić z komputera w celu porównania.

Przewodniki dotyczące Twojej konfiguracji