Перейти до вмісту
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, якщо ваше налаштування його перевіряє.

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