昔書いたシェル。
書き方が美しくないが、要するに/var/log/secureから不正アクセスログを拾って、アクセス元IPを勝手にiptablesに入れてくれるもの。当時はこれを一日一回cronで回してた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# cat /usr/local/bin/secure.sh for ip in `grep "Received disconnect from" /var/log/secure | awk '{print $9;}' | sed -e "s/://" | uniq | cut -d . -f -3 | sort | uniq` do if [ $ip != 許可したいIPの第三オクテットまで ] && [ $ip != 192.168.0 ]; then sed -i -e "11a -A INPUT -s $ip.0/24 -j DROP" /etc/sysconfig/iptables fi done for ip in `grep "Invalid user" /var/log/secure | awk '{print $10;}' | sed -e "s/://" | uniq | cut -d . -f -3 | sort | uniq` do if [ $ip != 許可したいIPの第三オクテットまで ] && [ $ip != 192.168.0 ]; then sed -i -e "11a -A INPUT -s $ip.0/24 -j DROP" /etc/sysconfig/iptables fi done for ip in `grep "Bad protocol" /var/log/secure | awk '{print $14;}' | sed -e "s/://" | uniq | cut -d . -f -3 | sort | uniq` do if [ $ip != 許可したいIPの第三オクテットまで ] && [ $ip != 192.168.0 ]; then sed -i -e "11a -A INPUT -s $ip.0/24 -j DROP" /etc/sysconfig/iptables fi done for ip in `grep "Did not receive" /var/log/secure | awk '{print $12;}' | sed -e "s/://" | uniq | cut -d . -f -3 | sort | uniq` do if [ $ip != 許可したいIPの第三オクテットまで ] && [ $ip != 192.168.0 ]; then sed -i -e "11a -A INPUT -s $ip.0/24 -j DROP" /etc/sysconfig/iptables fi done sed -i -e "11a # `date +%F`" /etc/sysconfig/iptables awk '!line[$0]--' /etc/sysconfig/iptables > /tmp/iptables && cat /tmp/iptables > /etc/sysconfig/iptables service iptables restart |
いまならちゃんと書き直せそうだけど、もうsshポート変えたし不要な産物になってしまった。