限制某些接口/网络之间的 IP 转发

use*_*671 5 linux iptables forwarding

我目前已ipv4.ip_forward启用在多个接口之间路由数据包。

我现在将系统扩展到 8 个接口,但我想限制接口/地址之间的路由。

一种选择是使用firewalld,但我将其部署在较旧版本的 RH 上,因此将通过iptables.

rda*_*rda 5

其实iptables很适合限制这个。允许或阻止数据包的过滤器表具有三个链。在每个链中,可以定义规则来匹配数据包并在匹配数据包时触发操作。数据包匹配的规则链取决于数据包相对于iptables正在运行的主机的方向:

  • INPUT: 发往本地主机的传入数据包
  • OUTPUT: 来自本地主机的传出数据包
  • FORWARD: 发往另一台主机需要转发的数据包

现在例如,如果要转发的数据包在FORWARD链中没有与其匹配的规则,则将根据此链上设置的策略进行处理,默认情况下为:ACCEPT。数据包将被允许通过。如果定义了任何策略和规则,此命令将显示这些策略和规则:

iptables -t filter -vnL
Run Code Online (Sandbox Code Playgroud)

该表是使用-t <table>,filter指定的,如果没有指定,则为默认表,因此以下命令等效:

iptables -vnL
Run Code Online (Sandbox Code Playgroud)

阻止所有报文转发,该链上的策略可以设置为REJECTDROP如下

iptables -P FORWARD REJECT
Run Code Online (Sandbox Code Playgroud)

现在,如果FORWARD链中没有规则明确接受它们,则所有要转发的数据包都将被拒绝。

对于内部流量,您可能需要一个REJECT策略。这将立即通知客户端路径已关闭。您可能需要DROP针对源自外部网络的流量的规则。

为了明确允许某些数据包通过,将规则附加到这些链中,这些链按照定义这些规则的顺序与数据包匹配。例如,允许所有进入eth0并基于路由的流量转发到eth1

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

例如,只允许来自10.0.0.0/24子网的数据包以相反的方向通过:

iptables -A FORWARD -i eth1 -o eth0 -s 10.0.0.0/24 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

有关所有参数的详细说明,请参阅iptables 联机帮助页iptables-extensions 联机帮助页

  • 对于内部流量,您可能需要 REJECT 策略。这将立即通知客户端路径已关闭。您可能需要针对源自网络的流量的 DROP 规则。 (2认同)