我想在 Ubuntu 上启动或启动界面时加载 iptables 规则。在 StackExchange 和其他地方进行了搜索,看起来最常见的方法是使用iptables-save
/iptables-restore
或iptables-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