iptables -t raw -A PREROUTING -p udp --dport 4578 -m string --hex-string '|feffffffffffffffff77f12|'
如何在 Iptables 上自动将具有上述十六进制字符串的 IP 列入白名单。
我将丢弃 iptables 上的所有传入流量,并只允许具有以上十六进制字符串的数据包。每当我们收到带有以上十六进制字符串的数据包时,我想立即在 Iptables 上将他的 IP 列入白名单。这样来自该特定 IP 的所有流量都会通过
提前致谢
OP 希望实现一个非常粗糙的(因为有一个敲击)端口敲击器。
我的建议是改用
fwknop
单包身份验证之类的工具:不以明文形式发送秘密,防止重放攻击,并且易于与防火墙规则集成。无论如何要回答这个问题。OP没有说明系统是路由器,所以我认为系统是一个简单的主机。对于路由器,出现在过滤器中的规则
INPUT
应该适合在过滤器中使用,FORWARD
或者另外使用。方法是:
准备一个存储作为当前允许的 IP 的内存:ipset,并定义其默认超时,以便条目将在没有额外脚本的情况下过期
至少还有一个其他选择,例如iptables模块,但它不是那么灵活,以防以后需要更改。
recent
启动时集成注意事项:必须在添加或加载引用它的iptables规则之前创建此集,否则iptables将无法加载这些规则(或
iptables-restore
包含这些规则的整个规则集)。使用(重用和修复原始
-j SET
表中的 OP 规则...原因?)将后续客户端的 IP 添加到内存存储中:为有状态防火墙添加通常的样板文件(这可能会处理更多细节):
当出现新流的第一个数据包时,使用
-m set
检查该流是否来自之前存储的 IP,如果是,则允许该数据包删除其他任何内容(或者将默认策略设置为删除)
超时定义为 120:2mn。这是可以建立新流的窗口。一旦建立(例如:SSH 远程连接或基于 UDP 的隧道),只要活动使其保持建立,它就可以永远保持建立(对于 UDP,从 Netfilter 的conntrack的角度来看,这是不到 120 秒的活动流已经看到多次交换,或者少于 30 秒)。
可以使用其他选项来不允许流在超时后继续(然后需要更大,例如 OP 的 2 小时),但这会使与仍然能够启动的系统集成变得更加困难它自己与外界的通讯。