我有一个运行 apache 的 VPS 和一个 Minecraft 服务器。我从不关闭它,但如果我出于某种原因重新启动它,IPTables 会阻止我的大部分端口,包括端口 80。我尝试了很多不同的建议来解决这个问题,但都没有运气。此外,由于提供者是 OVH,因此缺乏支持。
所以,我创建了一个解决方法,我很满意。我创建了一个简单的 shell 脚本文件来打开我需要在重启时打开的某些端口(现在是 80 和 25565)。重要的如 21 和 22 在重启时不受影响。
该脚本如下所示:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p udp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 25565 -j ACCEPT
iptables -I INPUT -p udp --dport 25565 -j ACCEPT
/sbin/service iptables save
Run Code Online (Sandbox Code Playgroud)
当我通过键入手动运行它时/iptdef.sh
,它运行良好,端口打开并且一切正常。
当然,每次重启服务器都要记住运行它是不切实际的,所以我添加了一个crontab。问题是,它不起作用/运行。这是我的 crontab 文件:
*/5 * * * * /backup2.sh
*/55 * * * * /backup3.sh
@reboot /iptdef.sh
* * * * * /iptdef.sh
Run Code Online (Sandbox Code Playgroud)
前两行有效。它们只是为我备份文件夹的简单脚本。后两行是不起作用的。
是否有可能无法从 cron 运行 iptables 命令?这听起来很傻,但我看不出有任何其他原因使它不起作用。脚本具有正确的权限。
这是因为cron强行设置PATH
为/usr/bin:/bin
. 您需要调用iptables
as/sbin/iptables
或添加PATH=/usr/sbin:/sbin:/usr/bin:/bin
到您的脚本或 crontab 中。有关详细信息,请参阅 crontab(5)。