iptables 是否有办法自动调整某些规则,或者直接根据当前网络情况切换它正在使用的规则集?
我有很多这样的东西,但最清晰的两个例子是:
- 如果我使用家庭网络,则将某些端口暴露给 LAN。如果我不使用,则丢弃这些端口的流量。
- 如果我有一台工作计算机,应该将系统日志发送到 UDP 日志转发器,但该目标会根据我所在的网络更改 IP(因为日志转发器不在标准化 IP 上),则仅在满足某些网络条件时才允许 UDP 流量到指定的 IP。
我知道我可以编写一个小的 Python 脚本来实现这种行为。但是,最近我一直在尝试让自己真正使用系统已经提供给我的工具,而不是重新发明我遇到的每个轮子。
操作系统是 Kali(基于 Debian),有时也是 CentOS,因此如果 iptables 不是解决此问题的正确级别,那么几乎任何 linux-y 选项都可以使用。
答案1
iptables 本身是完全静态的。您需要一个具有网络感知能力的前端。
是否有已经存在的工具
Fedora/CentOS 使用防火墙,它有一个“区域”的概念(类似于 Windows 防火墙中看到的区域)。如果您的系统使用 NetworkManager,您可以为每个网络配置文件分配一个区域,它将相应地加载防火墙规则。
另一个选择是利用网络配置工具中的后期“钩子”,让它运行一个脚本,该脚本会在您每次连接到不同的网络时加载所需的规则集。它可以像 shellscript 一样简单,iptables-restore < /etc/iptables/rules.$ZONE
根据哪个 Wi-Fi SSID 处于活动状态进行调用。