Чому стукіт до порту не відчиняє двері
Стукіт або взагалі не доходить до сервера, або надходить у вигляді, який демон не приймає, або прочиняє двері для адреси, якою ви не користуєтеся. Перевіряйте список згори вниз — причини впорядковано за частотою їх виникнення.
1. Двері прочинилися для іншої адреси
Брандмауер відкриває порт для адреси джерела, яку побачив сервер. Якщо ви стукали через IPv6, а SSH потім підключається через IPv4 — або навпаки, — двері відчинено для адреси, якою ви не користуєтеся. Мобільні дані, NAT оператора та VPN також змінюють адресу.
Порівняйте адресу, яку Secret Knock показує на початковому екрані («Ви стукаєте з …»), з адресою в журналі сервера й закріпіть IPv4 або IPv6 для дверей, якщо вони відрізняються.
2. Пакети не доходять до сервера
Мережі готелів, офісів і мобільних операторів іноді блокують незвичні порти, а хмарний брандмауер перед сервером може відкидати пакети, перш ніж їх побачить knockd або fwknopd. Відстежуйте трафік на сервері, коли стукаєте:
# 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. Послідовність надходить у неправильному вигляді
- 1Повторно передані SYN: коли TCP-стукіт не отримує відповіді, операційна система клієнта повторно надсилає той самий SYN. knockd 0.8 скидає послідовність за такого повтору. Secret Knock надсилає кожен TCP-стукіт як один SYN і негайно припиняє спробу; інші клієнти можуть цього не робити.
- 2Час: усі кроки мають надійти в межах seq_timeout і в правильному порядку. Додайте коротку затримку перед кроком, якщо маршрутизатор між вами змінює порядок пакетів.
- 3Протокол: крок UDP потрібно надсилати як UDP, а крок TCP — як TCP. Звірте кожен крок із knockd.conf.
- 4tcpflags = syn змушує knockd ігнорувати TCP-пакети без прапорця SYN. Без цього інші пакети з'єднання з тим самим портом також зараховуються як влучання та можуть порушити послідовність.
4. fwknop: ключі, годинники та повтори
- 1Обидва ключі мають збігатися з access.conf: ключ Rijndael і ключ HMAC з однаковим дайджестом (за замовчуванням SHA-256).
- 2fwknopd відхиляє пакети, старші за MAX_SPA_PACKET_AGE (за замовчуванням 120 секунд), тому значно неточний годинник пристрою робить кожен пакет застарілим.
- 3Кожен SPA-пакет можна використати лише один раз; fwknopd навмисно відкидає повторно відтворений пакет.
- 4Якщо ви стукаєте через HTTP, щось має приймати TCP-з'єднання на цьому порту, інакше запит не буде надіслано.
5. Двері прочиняються, але SSH все одно не працює
- 1Порядок правил: правило, яке додає демон, має стояти перед правилом, що відкидає порт, — iptables -A додає правило після наявного DROP, тому воно ніколи не спрацьовує.
- 2Вікно: cmd_timeout або FW_ACCESS_TIMEOUT зачинив двері до підключення SSH. Підключайтеся в межах цього вікна; установлені сеанси продовжать працювати, якщо ваш брандмауер приймає встановлені з'єднання.
- 3Перевірка порту Secret Knock після стукоту показує, чи відповів порт узагалі, окремо від автентифікації SSH.
Усі приклади на GitHub → Усі конфігурації з цієї сторінки, готові до копіювання: github.com/mobilcomm/secretknock-examples (суспільне надбання).
Запитання
Як побачити, що саме надіслала програма?
Історія дверей показує кожен стукіт із часом, результатом і сімейством адрес, а редактор показує той самий стукіт як команду термінала, яку можна запустити на комп’ютері для порівняння.