Bash脚本命令在cron中无法正常工作

7
我有以下bash脚本来读取日志并检查暴力攻击,然后使用iptables阻止违反规定的IP。
#!/bin/bash
#blah blah run some commands to get the IP
iptables -A INPUT -s $p -j REJECT --reject-with icmp-host-prohibited
echo "BANNED $p FOR $COUNT ATTEMPTS" |wall

我使用了chmod 755命令。当我在终端中运行该命令时,它可以正常工作。但是当我使用crontab -e命令以root身份设置cronjob时,它获取IP并将"BANNED ..."消息输出到屏幕上,但没有将其添加到iptables列表中。

PS. 我尝试了#!/bin/bash#!/bin/sh两种方式,但都没有成功。


如果您想添加iptables规则并希望它们是持久的,您为什么需要在cron中添加iptables规则?您可以将它们添加到/etc/sysconfig/iptables或rc.local。 - Saddam Abu Ghaida
你需要正确设置路径以找到 iptables - Mark Setchell
需要重新启动iptables服务,是吗? - Tarek Sawah
1
尝试添加所有命令的完整路径。which iptables将为iptables提供它,对于其他命令也要做同样的操作。 - fedorqui
干得好,马克!继续加油!谢谢。 - Tarek Sawah
2个回答

16

尝试提供iptables的完整路径,例如:

$ which iptables
/sbin/iptables

然后修改你的脚本如下:

#!/bin/bash
#blah blah run some commands to get the IP
/sbin/iptables -A INPUT -s $p -j REJECT --reject-with icmp-host-prohibited
echo "BANNED $p FOR $COUNT ATTEMPTS" |wall

0

尝试以下解决方案应该适用于您:

cat cronjob
* * * * * /path/to/script.sh

然后:

chmod +x cronjob
chmod +x script.sh

/etc/init.d/crond start  #redhat based servers like centos
/etc/init.d/cron  start  #debian based servers like ubuntu

crontab cronjob

注意:如果您的规则未添加到/etc/sysconfig/iptables中,有时需要输入IPTABLES命令的完整路径。


虽然这是一个更一般和有趣的解决方案,但我认为问题不在cronjob配置上,而在脚本路径上。 - fedorqui
是的,脚本路径和iptables命令路径可能是问题所在。 - MLSC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接