![dd-wrt - 限制外界对机器的访问](https://linux22.com/image/1281103/dd-wrt%20%E2%80%8B%E2%80%8B-%20%E9%99%90%E5%88%B6%E5%A4%96%E7%95%8C%E5%AF%B9%E6%9C%BA%E5%99%A8%E7%9A%84%E8%AE%BF%E9%97%AE.png)
在 dd-wrt 中,我可以使用 IP 白名单将“外部世界”的访问限制到单个机器吗?因此,我想允许单个“外部世界”IP 访问我网络上的单个机器,并且所有其他机器都应接受来自任何外部呼叫者的呼叫。
答案1
dd-wrt 允许使用 iptables。您可以在 dd-wrt GUI 中插入防火墙命令:管理->命令->[在文本框中输入命令->保存防火墙。
我从dd-wrt 维基:
假设我想添加一条规则,以便我可以从外部的特定主机/地址 ssh 进入我的路由器。然后我可能会输入以下内容:
iptables -A INPUT -p tcp -s 150.100.whatever.something --dport 22 -j logaccept
所以我说:在 INPUT 链中附加一条规则,允许协议 tcp 跳转到 logaccept,源地址为我路由器上的 22 端口的流量。我可以使用 -j ACCEPT,它只会跳转到 ACCEPT,但在这种情况下,我想记录它只是为了跟踪,所以我使用 logaccept,这是我们为此目的设置的链。
注意:只需向 INPUT 链添加一条规则就足以允许从 WAN 进行远程 SSH 访问。但是,如果您的路由器仍处于 NAT/网关模式,并且您希望将 SSH 端口重新映射到 WAN 端不太传统的端口(例如端口 2222),您可以改为插入 PREROUTING 规则。这实际上是启用远程 WAN SSH 管理时 GUI 执行的操作。
iptables -A INPUT -p tcp -m tcp -d `nvram get lan_ipaddr` --dport 22 -j logaccept
iptables -t nat -A PREROUTING -p tcp -m tcp -d `nvram get wan_ipaddr` --dport 2222 -j DNAT --to-destination `nvram get lan_ipaddr`:22
答案2
iptables 规则是按链读取的,因此首先满足的规则将被使用。在我的示例中,规则被附加到链的底部(通过 -A 选项)。如果您说您已经转发了端口 22,我假设您是通过 GUI 进行的,这没问题,GUI 所做的只是将其转换为 iptables 规则,您可以使用以下命令查看该规则
iptables -vnL
它显示了现有的 IP 表规则的完整列表。
关于您的第二条评论:iptables 仅适用于您的流量在路由器的 WAN 和 LAN 部分之间交叉的情况,这意味着如果您的地址在私有范围内(192.168.xx),那么将其传送到 LAN 上的正确主机仅使用 LAN 接口即可,而来自 LAN 的数据包上的公共地址将自动转储到 WAN 进行传送。
您可以运行一个有趣的实验来测试此行为,即尝试使用内部地址(如 192.168.xx:22)连接到内部主机,然后在 dd-wrt GUI 中关闭该端口的端口转发,尝试在同一端口上连接到外部 IP 地址(在 dd-wrt GUI 中查找),如 76.54.999.257:22(当然,除非使用真实地址)。禁用端口转发后,您实际上会看到内部连接有效,而外部连接无效。
您可以使用 VLAN 等来调整 dd-wrt 认为的 WAN 侧端口和 LAN 侧端口的行为,以便以奇怪的方式对物理端口进行实际逻辑分组,但这超出了问题的范围。