LINUX.ORG.RU

Knockd не выполняет команду

 ,


0

2

Доброго времени суток Есть замечательный проект http://www.zeroflux.org/projects/knock, призван открывать 22 порт и закрывать(или выполнять что то другое), постучавшись на определенные порты. Установил, настроил, но что то не хочет работать.

Конфиг /etc/knockd.conf:

[options]
        logfile = /var/log/knockd.log

  [openSSH]
        sequence    = 7000,8000,9000
        seq_timeout = 10
        tcpflags    = syn
        command     = /usr/sbin/iptables -A INPUT -s 5.5.5.5 -p tcp --dport 22 -j ACCEPT

  [closeSSH]
        sequence    = 9000,8000,7000
        seq_timeout = 10
        tcpflags    = syn
        command     = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

Логи /var/log/knockd.log:

[2017-07-02 21:16] starting up, listening on eth0
[2017-07-02 21:40] waiting for child processes...
[2017-07-02 21:40] shutting down
[2017-07-02 21:40] starting up, listening on eth0
[2017-07-02 21:42] waiting for child processes...
[2017-07-02 21:42] shutting down
[2017-07-02 21:42] starting up, listening on eth0
[2017-07-02 21:47] waiting for child processes...
[2017-07-02 21:47] shutting down
[2017-07-02 21:47] starting up, listening on eth0
[2017-07-02 21:49] waiting for child processes...
[2017-07-02 21:49] shutting down
[2017-07-02 21:49] waiting for child processes...
[2017-07-02 21:49] shutting down
[2017-07-02 21:50] starting up, listening on eth0

В терминале набираю:

knock -v my-server-ip 7000 8000 9000
hitting tcp my-server-ip:7000
hitting tcp my-server-ip:8000
hitting tcp my-server-ip:9000

После этого как бэ должно в iptables появится новое правило -s 5.5.5.5 -p tcp --dport 22 -j ACCEPT, но там ничего не появляется. Если посто в терминале ввести правило то появляется. Пробовал флаги менять на fin|syn|rst|psh|ack|urg не помогло.

Политика iptables INPUT ACCEPT если это важно.

service knockd status
● knockd.service - Port-Knock Daemon
   Loaded: loaded (/lib/systemd/system/knockd.service; static; vendor preset: disabled)
   Active: active (running) since Sun 2017-07-02 21:16:27 MSK; 24min ago
     Docs: man:knockd(1)
 Main PID: 4020 (knockd)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/knockd.service
           └─4020 /usr/sbin/knockd

Что я делаю не так? Почему не хочет работать(

Ответ на: комментарий от conformist

Разницу заметил лишь в этом:

sudo iptables -A INPUT -i lo -j ACCEPT
То есть, человек в той статье подразумевает что весь трафик в конце дропнет (DROP), по этому заранее пишет команду для общения сетевых служб между собой. Собственно у меня политика на входящие и исходящие ACCEPT , ко мне не относится.

LiveInno
() автор топика

Ответ

В общем разобрался. Помогла замечательная утилита tcpdump.

Во первых «кнокать» надо с других машин :D

Во вторых юзать reload вместо restart. Именно reload заставляет перечитать файл конфигурации.

В третьих даже если политика iptables на входящие стоит DROP, то «кнок» все равно обработается и knockd выполнит команду.

В четвертых порты расшаривать не нужно в независимости от политики iptables.

Собственно 4 пункт упрощает жизнь, не дает информации об портах

LiveInno
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.