Перейти к содержимому
Secret Knock

Примеры knockd.conf

knockd читает /etc/knockd.conf: раздел [options] и по одному разделу для каждой двери. Каждый раздел содержит последовательность, ограничение по времени и команду, выполняемую для адреса, который стучится, %IP%. Выбирайте собственные порты — никогда не используйте повторно порты из примеров.

Открыть SSH на несколько секунд

Наиболее распространённая настройка: один стук открывает SSH, а knockd снова закрывает его по истечении cmd_timeout. Уже открытые сеансы продолжают работать, если межсетевой экран принимает установленные соединения.

[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

Отдельные последовательности для открытия и закрытия

Без таймера порт остаётся открытым, пока вы не постучите последовательность закрытия. Это удобно, но легко забыть — предпочтительнее вариант с ограничением по времени.

[options]
    UseSyslog

[openSSH]
    sequence    = 7311:tcp,8822:tcp,9133:udp
    seq_timeout = 10
    tcpflags    = syn
    command     = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

[closeSSH]
    sequence    = 9133:udp,8822:tcp,7311:tcp
    seq_timeout = 10
    tcpflags    = syn
    command     = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
/etc/knockd.conf

Одноразовые последовательности

Вместо одной фиксированной последовательности knockd может читать файл последовательностей и принимать каждую только один раз, поэтому записанный стук нельзя воспроизвести повторно. Secret Knock использует тот же список и переходит к следующей последовательности после стука, открывшего дверь.

[openSSH]
    one_time_sequences = /etc/knockd/ssh_sequences
    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/ssh_sequences — one sequence per line, each used once
2222:udp,3333:tcp,4444:udp
5555:tcp,6666:udp,7777:tcp
8888:udp,9999:tcp,1111:tcp
/etc/knockd.conf и файл последовательностей

С nftables

В системах с nftables разрешите knockd добавлять адрес в набор с тайм-аутом; в руководстве по скрытию SSH показана соответствующая таблица nftables.

[openSSH]
    sequence      = 7311:tcp,8822:tcp,9133:udp
    seq_timeout   = 10
    tcpflags      = syn
    start_command = /usr/sbin/nft add element inet filter knocked4 { %IP% timeout 30s }
/etc/knockd.conf

После редактирования

  1. 1В Debian и Ubuntu укажите интерфейс, который прослушивает knockd, в /etc/default/knockd (KNOCKD_OPTS="-i eth0") и перезапустите knockd.
  2. 2Наблюдайте за работой с помощью journalctl -u knockd -f, пока стучитесь.
  3. 3В Secret Knock + › Импортировать из файла превращает каждый раздел с последовательностью в дверь; списки одноразовых последовательностей вводите вручную.

Все примеры на GitHub → Все конфигурации с этой страницы, готовые к копированию: github.com/mobilcomm/secretknock-examples (общественное достояние).

Вопросы

Следует использовать шаги TCP или UDP?

Подойдут оба варианта. Сочетание обоих делает последовательность сложнее для угадывания по сканированию портов. Шаги UDP могут передавать полезную нагрузку в Secret Knock, если ваша настройка её проверяет.

Руководства по настройке