use*_*671 5 linux iptables forwarding
我目前已ipv4.ip_forward启用在多个接口之间路由数据包。
我现在将系统扩展到 8 个接口,但我想限制接口/地址之间的路由。
一种选择是使用firewalld,但我将其部署在较旧版本的 RH 上,因此将通过iptables.
其实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)
阻止所有报文转发,该链上的策略可以设置为REJECT或DROP如下
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 联机帮助页。