Перехватывается входящий TCP-SYN пакет → дропается, этим создается вид закрытого порта. Telegram-бот отправляет уведомление о попытке подключения и запрос: запретить или разрешить этот IP. Если разрешаем → IP временно(на 2 часа) добавляется в белый список, и дальнейшие SYN пакеты проходят дальше. Все SYN пакеты по умолчанию идут в черный список если явно не были разрешены, поэтому спам бесполезен.
Серверная часть (NfCtrl):
go build ./cmd/nfctrl
UDP Knocker:
go build ./cmd/knocker
Прежде чем запускать и настраивать сервер, выберите номер очереди NFQUEUE который не используется другим ПО. Все правила использующие NFQUEUE можно посмотреть так:
sudo iptables-save | grep -i "NFQUEUE"
Создание правила iptables:
sudo iptables -A INPUT -p tcp --dport 1:65535 --syn \
-m iprange ! --src-range 127.0.0.0-127.255.255.255 \
-m iprange ! --src-range 192.168.0.0-192.168.255.255 \
-m iprange ! --src-range 10.0.0.0-10.255.255.255 \
-m iprange ! --src-range 172.16.0.0-172.31.255.255 \
-j NFQUEUE --queue-num <Номер очереди NFQUEUE>
Запуск сервера:
sudo ./nfctrl \
-tg_owned_id <ID Вашего аккаунта в телеграме> \
-tg_bot_token "<Токен телеграм бота>" \
-nf_queue_id <Номер очереди NFQUEUE>
Использование UDP Knocker:
На сервере укажите адрес и задайте Knocker ключ аргументами:
-knocker_bind_addr 0.0.0.0:1234 \
-knocker_key 123456789`
Запустите ./knocker. При первом запуске он предложит ввести адрес сервера и ключ.
Доступные команды (OpCodes):
12 — Разрешить ваш текущий IP (по умолчанию).
0 — Запретить ваш IP.
9 — Перезапуск серверной части NfCtrl.
-1 — Сброс настроек клиента (удаление конфига).
Важно! OpCode = 9 завершает работу серверной части, чтобы он работал как перезапуск настройте systemd service (Или его аналог) для перезапуска при завершении программы, например:
[Service]
ExecStart=/путь/к/nfctrl...
Restart=always
RestartSec=3