我在 Mikrotik 路由器上使用 Mikrotik RouterOS。
我的网络中有一台服务器,应禁用使用每种协议的所有传出连接。我通过以下规则实现了此目的:
/ip firewall filter
action=drop chain=forward out-interface=ether1-gateway src-mac-address=XX:XX:XX:XX:XX:XX
其中 XX:XX:XX:XX:XX:XX 是服务器 NIC 的 MAC 地址。
现在我想仅允许 Internet 通过特定的 TCP 端口访问此服务器。为此我创建了一条 NAT 规则:
/ip firewall nat
chain=dstnat action=netmap to-addresses=A.A.A.A to-ports=8912 protocol=tcp dst-address-type=local dst-port=8912
其中 AAAA 是 LAN 中的服务器 IP 地址。
然后我尝试通过 TCP 端口 8912 从外部连接到路由器,没有响应,但注意到第一条规则已被触发。
之后,我在第一条规则之前放置了另一条防火墙规则,以始终启用来自服务器的 ACK:
/ip firewall filter
chain=forward action=accept tcp-flags=ack protocol=tcp out-interface=ether1-gateway src-mac-address=XX:XX:XX:XX:XX:XX
并且一切正常。
始终启用来自服务器的 TCP ACK 是好主意还是坏主意?有什么缺点?
答案1
正确的方法是完全按照家庭网络的规范操作,允许所有传出到互联网的流量,但阻止所有传入的新流量,只是反转传出和传入的角色。
假设您的路由器中已经有此过滤规则来保护网络的其余部分:
chain=forward connection-state=established,related action=accept
它应该位于过滤列表的最顶部。
现在,您只需执行将端口从互联网转发到 LAN 网络时通常执行的操作,只是反过来。
chain=forward dst-address=A.A.A.A action=accept
chain=forward src-address=A.A.A.A action=drop
与您的 NAT 结合后,访问现在应该可以正常工作。无需 ACK 规则。
如果接受规则看起来太宽泛,它无论如何都只能与您在原始帖子中创建的 NAT 配合使用。如果没有附带的 NAT,路由器就不知道应该将流量转发到您的服务器。