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

Port knocking: пояснення

Port knocking робить службу невидимою, доки хтось не доведе, що знає секрет. У цьому посібнику описано принцип роботи, дві поширені реалізації — knockd і fwknop — та причини, через які стуки не спрацьовують на практиці.

Як працює port knocking

Брандмауер відкидає кожне з’єднання із захищеним портом, тому сканер нічого не бачить. Невеликий демон відстежує трафік, що надходить до брандмауера. Коли одна адреса джерела створює очікуваний шаблон, демон додає правило брандмауера, яке дозволяє цю адресу, зазвичай на короткий час.

Цей шаблон — стукіт. З knockd це послідовність спроб з’єднання з певними портами у визначеному порядку та в межах часу. З fwknop це один зашифрований пакет.

knockd: послідовності стуків

knockd слухає інтерфейс і зіставляє спроби з’єднання з послідовностями у /etc/knockd.conf. Послідовність може поєднувати порти TCP і UDP. Коли вона збігається, knockd виконує команду — зазвичай правило iptables або nftables для адреси, з якої надійшов стукіт (%IP%).

Цей приклад відкриває SSH для адреси, з якої надійшов стукіт, і знову закриває його через 10 секунд. Наявні сеанси SSH продовжать працювати, якщо ваш брандмауер приймає встановлені з’єднання.

[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 — відкрити SSH на 10 секунд

Вибирайте власні порти; ніколи не використовуйте повторно порти з опублікованих прикладів. tcpflags = syn змушує knockd враховувати лише пакети з прапорцем SYN — перший пакет спроби з’єднання.

fwknop: Single Packet Authorization

fwknop замінює послідовність одним пакетом UDP, який зашифровано (AES) й автентифіковано (HMAC). Сервер, fwknopd, пасивно його перехоплює, перевіряє, що це не повтор, і відкриває запитаний порт для адреси всередині пакета.

Створіть ключі за допомогою fwknop --key-gen і додайте їх до access.conf сервера. Secret Knock імпортує клієнтську частину з вашого .fwknoprc.

SOURCE              ANY
OPEN_PORTS          tcp/22
KEY_BASE64          <output of fwknop --key-gen>
HMAC_KEY_BASE64     <output of fwknop --key-gen>
FW_ACCESS_TIMEOUT   30
/etc/fwknop/access.conf — дозволити SSH за допомогою ключа SPA

Оскільки дозволена адреса передається всередині зашифрованого пакета, SPA може відкрити порт для адреси, відмінної від адреси надсилання пакета — це корисно, коли ви стукаєте з телефона через мобільні дані для ноутбука в іншому місці.

Чому стуки не спрацьовують

  • IPv4 чи IPv6: стукіт надійшов через одне сімейство адрес, а SSH підключається через інше. Брандмауер відкрив двері для адреси, якою ви не користуєтесь.
  • Інша публічна адреса: через мобільні дані, за NAT оператора або VPN сервер бачить інший IP, ніж ви очікуєте. Перевірте адресу, з якої ви стукаєте.
  • Повторно надіслані SYN: якщо на стукіт TCP немає відповіді, операційна система клієнта надсилає той самий SYN повторно. У наших тестах knockd 0.8 скидав послідовність за такого повторного SYN, тому клієнт має надсилати кожен стукіт один раз і швидко припиняти спробу.
  • Час: стуки, що надходять поза межами seq_timeout або в неправильному порядку, запускають послідовність заново.
  • Проміжні мережеві пристрої: деякі мережі блокують або змінюють трафік до незвичних портів, тому стукіт, що працює вдома, може не спрацювати в готелі чи офісній мережі.

Чи це безпечно?

Послідовність knockd надсилається незашифрованою; будь-хто, хто може спостерігати ваш трафік, може повторити її. Використовуйте її, щоб приховати службу від сканерів, перед ключами SSH, а не замість них. fwknop SPA усуває цю проблему завдяки шифруванню, HMAC і захисту від повторного відтворення та є кращим вибором, коли ваш трафік можуть спостерігати.

Стуки з iPhone, Mac і Apple Watch

Secret Knock надсилає послідовності knockd і пакети fwknop SPA з iPhone, iPad і Mac, перевіряє відповідь порту та відкриває вашу програму SSH. Apple Watch стукає через з’єднаний iPhone, оскільки watchOS не дозволяє програмам надсилати необроблені пакети TCP або UDP; далеко від iPhone він може надсилати SPA через HTTP на сервери, де це ввімкнено.

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

Тримайте двері зачиненими. Носіть стукіт із собою.

Secret Knock незабаром з’явиться в App Store для iPhone, iPad, Mac і Apple Watch.

Secret Knock →