在启动或接口启动时加载“显式” iptables 规则

在启动或接口启动时加载“显式” iptables 规则

我想在 Ubuntu 上启动或启动界面时加载 iptables 规则。在 StackExchange 和其他地方进行了搜索,看起来最常见的方法是使用iptables-save/iptables-restoreiptables-persistent包。我更喜欢(可能是因为我的 Linux 特性还不够成熟)将 iptables 规则保持在“显式”形式(例如iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT),而不是将所有不同的规则转储到同一个持久文件中,因为如果没有注释和某种结构,查找特定规则并进行更改可能会很棘手。

我到目前为止所做的 - 我已经将以下行添加到/etc/network/interfaces

post-up         sh -c "/etc/iptables/eth0.post-up.sh"

其中eth0.post-up.sh是明确设置 iptables 的文件(例如iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT)。一切都很好,规则已应用,但我在这里写的原因是,如果我尝试运行iptables -L FORWARD,则看不到已加载的规则,尽管我确定它们已应用(这是一个子网转发规则,我看到当规则运行时 ping 会通过,而当规则未运行时则不会通过)。以下是输出:

# iptables -L FORWARD
Chain FORWARD (policy DROP)
target     prot opt source               destination
ufw-before-logging-forward  all  --  anywhere             anywhere
ufw-before-forward  all  --  anywhere             anywhere
ufw-after-forward  all  --  anywhere             anywhere
ufw-after-logging-forward  all  --  anywhere             anywhere
ufw-reject-forward  all  --  anywhere             anywhere
ufw-track-forward  all  --  anywhere             anywhere

如果我在文件中注释掉上述帖子... /etc/network/interfaces(确保不应用规则)然后手动运行规则,我会得到输出:

# iptables -L FORWARD
Chain FORWARD (policy DROP)
target     prot opt source               destination
ufw-before-logging-forward  all  --  anywhere             anywhere
ufw-before-forward  all  --  anywhere             anywhere
ufw-after-forward  all  --  anywhere             anywhere
ufw-after-logging-forward  all  --  anywhere             anywhere
ufw-reject-forward  all  --  anywhere             anywhere
ufw-track-forward  all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED 

因此,两种情况下都适用规则,但在前一种情况下iptables -L不会显示规则,而在后一种情况下会显示规则。

最终它起作用了,但我想了解这里的警告是什么,为什么看起来我是唯一一个尝试使用这种方法的人,以及为什么iptables -L没有给我预期的输出。

更新:必须纠正自己,并非eth0.post-up.sh文件中的所有 iptables 规则都已执行,以下 3 个命令中:

/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

仅执行最后一个 (带 POSTROUTING),这是 ping 通所必需的,而前两个既没有任何踪迹,iptables -Lnv FORWARD也没有导致与将此框用作路由器的另一台计算机建立连接 (例如wget google.com)。但如果我在启动后手动运行此文件 - 那么一切都会正确执行,远程计算机的 ping 和 wget 都会按预期工作。

答案1

我在我的 pi 上使用 softether vpn。我使用要点来进行设置。

Softether(或者至少这个脚本)将 iptable 规则放入 /etc/rc.local

例如,这是我的

 # Start VPN Settings

 for vpn in /proc/sys/net/ipv4/conf/*; do echo 0         > $vpn/accept_redirects; echo 0 > $vpn/      send_redirects; done
 iptables -A FORWARD -i br0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
 iptables -A FORWARD -i br0 -o br0 -j ACCEPT

 # End VPN Settings

 exit 0

这应该会在启动时运行你的 iptable 命令。这可能是一种更合适的方法,但这对我来说似乎有效(至少就 vpn 而言,从未出现过任何问题)

只要确保在前面放上表格

 exit 0

相关内容