我有一套小型 VPN 设置,我使用 IP 表将进入 vpn0 接口的流量 nat 到 eth0 接口的 IP 地址。这些规则如下所示:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i vpn0 -j ACCEPT
具有此配置的设备会插入许多不同的网络子网,并且其 IP 地址通常是动态获取的。我使用 nmap 通过此连接运行大量主机发现扫描,并希望丢弃进入 vpn0 接口的流量,该流量发往 eth0 接口上配置的任何 IP 地址,以保持结果准确,而不必担心手动省略 vpn 主机。由于此设备正在路由流量,我不能仅使用目标接口作为目标,因为这会阻止我的所有转发流量。
我知道 iptables 支持将主机名作为目标,因此一旦获得 IP 地址,我可能会尝试动态添加规则,并创建一个将解析为 eth0 IP 地址的主机名。但是,这似乎很混乱。
我还缺少什么更好的方法吗?
答案1
我使用的解决方案并不像希望的那样优雅,但仍然很简单。
我所做的就是从接口获取 IP 地址eth0
并将其分配给变量,然后在 iptables 规则中使用该变量:
ETH0IP=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`
iptables -I INPUT -i vpn0 -d $ETH0IP -j DROP
此外,我的问题表明我不理解该FORWARD
表,因为这不是用于发往本地接口的流量的表。规则应该在INPUT
表中实施。