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 3. Sekwencja dociera w nieprawidłowej formie
- 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.
- 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.
- 3Protokół: krok UDP musi zostać wysłany jako UDP, a krok TCP jako TCP — sprawdź każdy krok względem knockd.conf.
- 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
- 1Oba klucze muszą odpowiadać access.conf: klucz Rijndael i klucz HMAC, z tym samym skrótem (domyślnie SHA-256).
- 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.
- 3Każdego pakietu SPA można użyć tylko raz; fwknopd celowo odrzuca ponownie odebrany pakiet.
- 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
- 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.
- 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.
- 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
- Port knocking wyjaśniony →
- knockd na iPhone’a, iPada i Maca →
- fwknop SPA na iPhonie, Macu i Apple Watch →
- Pukanie portami MikroTik →
- Pukanie do portów DrayTek Vigor →
- Ukryj SSH za port knockingiem →
- Port knocking na Apple Watch →
- Przykłady knockd.conf →
- konfiguracja serwera fwknop →
- Port knocking, VPN czy fail2ban? →