我有一个运行 Tomato 的路由器,因此我可以访问iptables
。我的网络上有一个设备的 IP 地址为 192.168.1.100。除了非常特殊的情况外,我不希望它将数据发送到互联网。
具体来说,我根本不希望它将传出数据发送到互联网除了安全 SMTP(TCP 端口 587 或 465),即使这样,也只能连接到一个 SMTP 服务器。传入流量也是一个问题,但阻止出站流量更为重要。它应该继续允许 LAN 流量,因此来源和目的地为 192.168.1.0/24 的数据包是没问题的。
我对此了解不多,iptables
所以我不确定如何去做,或者这是否iptables
是最好的方法。我之前设置过丢弃数据包的规则,但我从未设置过阻止一切的规则但符合特定要求的数据包。
您建议我怎样做这件事?
答案1
如果您没有允许 ESTABLISHED,RELATED 流量的规则,则流量可能根本无法通过。
iptables -I INPUT 1 -m conntrack -j ACCEPT --ctstate RELATED,ESTABLISHED
iptables -A OUTPUT -m tcp -p tcp -m multiport --dports 587,465 -d <ipaddress of smtp> -j ACCEPT
iptables -A OUTPUT -s 192.168.1.100 -j DROP
iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.1.0/24 -m tcp -p tcp -m multiport --dports 587,465 -j ACCEPT
iptables -A FORWARD -s 192.168.1.100 !-d 192.168.1.0/24,<ipaddress of smtp> -j DROP
允许、允许,然后拒绝所有其他流量。
但是,如果不知道您还有什么其他规则,我就无法告诉您将它们放在哪里。
规则的顺序至关重要
规则是按顺序处理的,如果将我的规则添加到现有规则集的末尾,它们可能无法正常工作。
答案2
您只需要使用如下规则删除来自主机的出站流量:
iptables -A FORWARD -s 192.168.1.100 -p tcp --dports 80 -j ACCEPT
iptables -A FORWARD -s 192.168.1.100 -j DROP
第一条规则将允许您的设备对任何主机使用 HTTP 协议,第二条规则将禁止家庭网络之外的任何其他流量。
如果您需要允许所有流量到壮观的主机,那么您将需要使用类似这样的方法:
iptables -A FORWARD -s 192.168.1.100 -d 8.8.8.8 -j ACCEPT
iptables -A FORWARD -s 192.168.1.100 -j DROP
您的设备将能够使用任何协议连接到 IP 8.8.8.8,但所有其他协议的连接将被拒绝。
您可以寻找更多示例这里。