如何让knockd监听多IP网卡上的指定IP地址
如何让knockd监听多IP网卡上的指定IP地址
确实,knockd本身没有提供直接指定监听IP的参数——它默认按网卡接口监听,并且会优先绑定接口上的第一个IP。不过我们可以利用它底层依赖的libpcap抓包机制,通过pcap过滤规则精准指定只处理发往目标IP的数据包,完美解决你的问题。
下面给你两种具体的实现方式:
方法一:在knockd配置文件中添加过滤规则
打开你的knockd配置文件(通常是/etc/knockd.conf),在你定义的敲门序列区块里,添加pcapfilter选项,指定目标IP作为过滤条件。
举个例子,假设你要监听124.124.124.124这个IP的敲门序列,配置可以写成这样:
[openSSH] sequence = 7000,8000,9000 # 你的敲门端口序列 seq_timeout = 5 # 序列超时时间 command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT # 触发的命令 tcpflags = syn # 监听的TCP标志位 pcapfilter = dst host 124.124.124.124 # 关键:只处理发往这个IP的数据包
保存配置后重启knockd服务,它就只会响应发往124.124.124.124的敲门请求了。
方法二:启动knockd时通过命令行参数指定全局过滤规则
如果你不想修改配置文件,也可以在启动knockd的时候,用--pcap-filter参数直接指定过滤规则:
knockd -i eth0 --pcap-filter "dst host 124.124.124.124"
这个参数会让整个knockd实例只处理发往124.124.124.124的数据包,效果和配置文件里的设置一致。
额外技巧:监听多个指定IP
如果之后需要同时监听多个IP,只需要修改pcap过滤规则,用or连接多个IP即可:
pcapfilter = dst host 124.124.124.124 or dst host 125.125.125.125
备注:内容来源于stack exchange,提问作者Jeremy John
相关产品推荐
相关产品推荐

