在运行 unix 的路由器上,我希望监视所有传出的数据包,并暂时将这些数据包中的我正在连接的 IP 地址列入白名单,以便发送和接收。
基本上就是在防火墙上创建一个针孔,通常会丢弃所有传入的数据包(丢弃除白名单数据包之外的所有数据包,这些数据包是根据我发送数据包连接的 ips 被此脚本列入白名单的)。经过一番寻找,我可以根据数据包嗅探器编写一个 bash 脚本,但有没有办法在 iptables 本身内完成此操作,而不必涉及数据包嗅探器和 bash 脚本?
答案1
这已经以 iptables 中的连接跟踪模块的形式存在。 这个 Digital Ocean 教程描述了这一点,并且当代发行版通常默认实现这一点。
在执行此操作之前,请确保如果您把自己锁在门外,有办法回来。
本质上:
iptables -A INPUT -s YOUR-TRUSTED-HOST -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT -j DROP
所有传入数据包都会被丢弃,除非它们与已建立的连接相关。
基于 shell 的机制可能太慢,无法跟上机器创建连接的速度。