阻止从服务器到 Internet 的传出连接,但允许从外部访问特定的 TCP 端口

阻止从服务器到 Internet 的传出连接,但允许从外部访问特定的 TCP 端口

我在 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,路由器就不知道应该将流量转发到您的服务器。

相关内容