我正在尝试设置 iptables 规则,以允许两台服务器上的 OpenVPN 和 Wireguard 流量。其中一台服务器还运行 Yunohost,另一台运行 Cloudron。
问题在于,我为 VPN 流量定义的规则在系统重启时被 Yunohost 和 Cloudron 推到了 iptables 列表的下方,结果 VPN 流量在到达允许它们通过的规则之前就被拒绝了。
我尝试设置 systemd 服务,该服务应该等待几分钟,然后将 VPN 规则添加到相关链的顶部 - 这对于性能目的也是可取的,因为服务器主要用于运行 VPN 服务;Cloudron 和 Yunohost 仅用于提供次要服务,例如 wiki、文件服务器等 - 但我显然做错了,因为当我尝试使用 sleep 命令延迟脚本时,整个系统在启动时挂起,直到该命令完成。真糟糕。
我不想弄乱 Cloudron 自己的防火墙脚本,因为我不确定它是否会在将来被某些更新或其他东西覆盖。出于同样的原因,我不想使用持久规则,因为 Cloudron 会在我向其中添加/删除功能时动态管理表。我只想在服务器重新启动时将一些规则添加到顶部。
定义一些位于 iptables 规则列表顶部并且无论如何都留在那里的规则的正确方法是什么?
我还想知道我的规则是否正确。这是我使用的脚本:
#!/bin/sh
#### Create iptables rules to let VPN traffic ##
## OpenVPN ##
iptables -I INPUT 1 -i tun0 -j ACCEPT
iptables -I INPUT 1 -i eth0 -p udp --dport 1194 -j ACCEPT
iptables -I FORWARD 1 -i eth0 -o tun0 -j ACCEPT
iptables -I FORWARD 1 -i tun0 -o eth0 -j ACCEPT
iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o eth0 -j MASQUERADE
## Wireguard ##
iptables -I INPUT 1 -i wg0 -j ACCEPT
iptables -I INPUT 1 -i eth0 -p udp --dport 51820 -j ACCEPT
iptables -I FORWARD 1 -i wg0 -o eth0 -j ACCEPT
iptables -I FORWARD 1 -i eth0 -o wg0 -j ACCEPT
iptables -t nat -I POSTROUTING 1 -s 10.9.0.0/24 -o eth0 -j MASQUERADE