Перейти до вмісту
Secret Knock

Чому стукіт до порту не відчиняє двері

Стукіт або взагалі не доходить до сервера, або надходить у вигляді, який демон не приймає, або прочиняє двері для адреси, якою ви не користуєтеся. Перевіряйте список згори вниз — причини впорядковано за частотою їх виникнення.

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. 1Повторно передані SYN: коли TCP-стукіт не отримує відповіді, операційна система клієнта повторно надсилає той самий SYN. knockd 0.8 скидає послідовність за такого повтору. Secret Knock надсилає кожен TCP-стукіт як один SYN і негайно припиняє спробу; інші клієнти можуть цього не робити.
  2. 2Час: усі кроки мають надійти в межах seq_timeout і в правильному порядку. Додайте коротку затримку перед кроком, якщо маршрутизатор між вами змінює порядок пакетів.
  3. 3Протокол: крок UDP потрібно надсилати як UDP, а крок TCP — як TCP. Звірте кожен крок із knockd.conf.
  4. 4tcpflags = syn змушує knockd ігнорувати TCP-пакети без прапорця SYN. Без цього інші пакети з'єднання з тим самим портом також зараховуються як влучання та можуть порушити послідовність.

4. fwknop: ключі, годинники та повтори

  1. 1Обидва ключі мають збігатися з access.conf: ключ Rijndael і ключ HMAC з однаковим дайджестом (за замовчуванням SHA-256).
  2. 2fwknopd відхиляє пакети, старші за MAX_SPA_PACKET_AGE (за замовчуванням 120 секунд), тому значно неточний годинник пристрою робить кожен пакет застарілим.
  3. 3Кожен SPA-пакет можна використати лише один раз; fwknopd навмисно відкидає повторно відтворений пакет.
  4. 4Якщо ви стукаєте через HTTP, щось має приймати TCP-з'єднання на цьому порту, інакше запит не буде надіслано.

5. Двері прочиняються, але SSH все одно не працює

  1. 1Порядок правил: правило, яке додає демон, має стояти перед правилом, що відкидає порт, — iptables -A додає правило після наявного DROP, тому воно ніколи не спрацьовує.
  2. 2Вікно: cmd_timeout або FW_ACCESS_TIMEOUT зачинив двері до підключення SSH. Підключайтеся в межах цього вікна; установлені сеанси продовжать працювати, якщо ваш брандмауер приймає встановлені з'єднання.
  3. 3Перевірка порту Secret Knock після стукоту показує, чи відповів порт узагалі, окремо від автентифікації SSH.

Усі приклади на GitHub → Усі конфігурації з цієї сторінки, готові до копіювання: github.com/mobilcomm/secretknock-examples (суспільне надбання).

Запитання

Як побачити, що саме надіслала програма?

Історія дверей показує кожен стукіт із часом, результатом і сімейством адрес, а редактор показує той самий стукіт як команду термінала, яку можна запустити на комп’ютері для порівняння.

Посібники для вашого налаштування