我使用的是带有 iptables 的蜂窝调制解调器/路由器。还有一个笨重的 WebUI,允许进行简单的调整,例如打开 WAN ICMP/HTTPS/SSH。我显然不希望这些端口开放并面向公众。但我希望从预定的地址白名单中对该设备进行远程管理访问。可能有多达 10 个地址,其中一些是 IP 范围/子网。我已经使用单个地址测试了这一点,规则如下
-A HTTPS_WAN_INPUT -i ppp0 -s x.x.x.x -p tcp -m tcp --dport 443 -j ACCEPT
但是为每个端口/协议编写 10 次这样的规则似乎很麻烦,所以我写这篇文章是想看看是否有更好的方法来实现这一点?我可以创建一个包含所有地址的 $WHITELIST 变量并在 -s 中使用它吗?或者我可以将白名单应用于链上更上层的内容,例如其中一项策略?
我只是想知道是否有一种更优雅的方法来允许远程访问一组 IP,而无需为每条规则编写 10 行不同的代码。
答案1
您实际上只有 2 个选项(或组合)...但其中一个比另一个稍微危险一些。请记住,该src
字段还接受子网...即 192.168.1.0/24。
第一的,如果您的 iptables/kernel 是使用该模块构建的iprange
,您可以使用它来指定 IP 范围,而不仅仅是 1-2 个……但您无法提供 IP“列表”。示例:
-A HTTPS_WAN_INPUT -i ppp0 -m iprange --src-range x.x.x.x-y.y.y.y -p tcp -m tcp --dport 443 -j ACCEPT
其次,您可以设置一个新的特定目标,包括“白名单”IP,以保持清洁。示例:
iptables -N RemoteManagement
iptables -P RemoteManagement DROP
iptables -A -A HTTPS_WAN_INPUT -i ppp0 -p tcp -m tcp --dport 443 -j RemoteManagement
...对于您想要允许的每个 IP...
iptables -I RemoteManagement -s x.x.x.x -j ACCEPT
这样,您就可以让规则更简洁一些,并且能够根据需要简单地删除 IP/添加 IP。当然,如果您有iprange
可用的模块,您还可以在 RemoteManagement 链中指定范围。您还可以在其他适用的场景中重复使用同一链。