我有一个运行 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
当我通过输入手动运行它时/iptdef.sh
,它运行良好,端口打开,一切都很好。
当然,每次重新启动服务器时都要记住运行它是不切实际的,所以我添加了一个 crontab。问题是,它无法工作/运行。这是我的 crontab 文件:
*/5 * * * * /backup2.sh
*/55 * * * * /backup3.sh
@reboot /iptdef.sh
* * * * * /iptdef.sh
前两行有效。它们只是为我备份文件夹的简单脚本。第二行是不起作用的。
是否有可能无法从 cron 运行 iptables 命令?这听起来很愚蠢,但我看不出它不起作用的任何其他原因。脚本具有正确的权限。
答案1
这是因为 cron 强制设置PATH
为/usr/bin:/bin
.您需要调用iptables
as/sbin/iptables
或添加PATH=/usr/sbin:/sbin:/usr/bin:/bin
到脚本或 crontab 中。有关详细信息,请参阅 crontab(5)。
答案2
看起来这里已经很好地涵盖了:crontab 的 @reboot 只适用于 root?基本上,答案在很大程度上取决于您使用的 Cron 和 Linux 发行版。
答案3
我必须添加此内容/etc/hosts
,以便解析发送给我服务器自己的 FQDN 上的任何人的邮件:
127.0.0.1 mydomain.com.
注意末尾的点。就我而言,我基本上是向 root@localhost 发送电子邮件,并将其MAILTO=root
翻译为[电子邮件受保护]。