系统: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”