2014-04-10 21 views
5

Mam następujący skrypt bash do odczytywania dzienników i sprawdzania brutalnej siły, a następnie blokowania naruszania adresów IP za pomocą iptables.Komendy skryptu Bash nie działają w programie cron

#!/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 

Zrobiłem chmod 755. Po uruchomieniu polecenia z terminala działa dobrze. Ale kiedy skonfiguruję cronjob używając crontab -e jako root, otrzyma IP i wyświetli komunikat "BANNED ..." na ścianie, ale nic nie zostanie dodane do listy iptables.

PS. Próbowałem zarówno #!/bin/bash i #!/bin/sh, ale bez powodzenia.

+0

Dlaczego trzeba dodać reguły iptables w cron, jeśli chcesz dodać iptables rulesand chcesz, żeby być trwałe można dodać je do/etc/sysconfig/iptables lub rc.local –

+0

Musisz poprawnie ustawić ścieżkę, aby znaleźć 'iptables'. –

+0

wymagałoby ponownego uruchomienia usługi iptables tak? –

Odpowiedz

12

Spróbuj podać pełną ścieżkę do iptables, np.

$ which iptables 
/sbin/iptables 

i niż zmodyfikować skrypt tak: \

#!/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

Dziekuje, dziękuję! –

0

Wypróbuj następujące rozwiązania powinny pracować dla Ciebie:

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

Następnie:

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 

UWAGA: Czasami trzeba wprowadzić pełną ścieżkę polecenia iptables, jeśli przepisy nie są dodawane do /etc/sysconfig/iptables .

+0

Chociaż jest to bardziej ogólne i interesujące rozwiązanie, nie sądzę, że jest to problem w konfiguracji cronjob, ale na ścieżkach skryptów. – fedorqui

+0

Tak ... ścieżka skryptu i ścieżka polecenia iptables może jest problem – MLSC