为什么使用默认 knockd.conf 的 knockd 不起作用?

为什么使用默认 knockd.conf 的 knockd 不起作用?

系统:Ubuntu Server 18.04,库存安装,未做任何篡改。

我无法让 knockd 工作,即使我使用的是默认的 knockd.conf 并试图让它做任何事情。当我敲击时,我看不到 iptables 有任何变化,当我使用 -D(调试标志)手动运行 knockd 时,我也看不到任何事情发生。

我已经搞定了:

apt-get install knockd

安装时没有错误。

然后我编辑

/etc/default/knockd

并设置:

START_KNOCKD=1

我跑:

service knockd start

我可以观察到 knockd 确实正在通过 ps aux 运行。

该配置是默认配置,如下所示:

[options]                                                                           
        UseSyslog                                                                   

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

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

我像这样敲:

knock -v localhost 7000 8000 9000

我尝试执行以下操作来调试/解决问题:

我试过了:

  • 在 knock 的参数中在每个端口上指定 :tcp。
  • 使用 nc -z 代替“knock”实用程序。
  • 尝试在调试模式下运行 knock 来查看是否有任何有用的信息。
  • 尝试将 knockd.conf 更改为仅使用 echo,并在敲击成功时将一些字符串写入文件。
  • 尝试使用 nc 监听 knockd.conf 中指定的端口,并运行 knock 命令来查看是否有任何连接尝试(有)。

我在 askubuntu 上看到过以下问题:

https://askubuntu.com/questions/550185/what-is-wrong-with-knockd

除了按照问题中的建议去做 --- 使用 iptables 记录传入的连接以更仔细地调试问题 --- 我不知道该怎么做。

在标准的 Ubuntu Server 安装上,不需要如此深入地调试如此琐碎的事情吗?我肯定只是忽略了一些显而易见的东西。但是什么呢?

答案1

我关注了这里有提示因为看起来iptables语法不正确。

我还注意到,一些发行版使用command,而另一些发行版使用start_command和作为文件stop_command中的选项/etc/knockd.conf

答案2

另外,将“interface = eth0”(或任何受监控的接口)添加到“选项部分”。

我一直在 docker 容器内运行 knockd 和 iptables 进行训练。我注意到 knockd 添加了 iptables 条目,但没有正确删除它们。经过一些故障排除后,解决方法似乎是为 close-port(停止)命令添加一个 bash 包装器。示例:

命令=/bin/bash -c“/sbin/iptables-restore/iptables-rules &&/sbin/iptables -F”

相关内容