#!/bin/bash # # IPアドレスによりサーバーへの接続を一定時間拒否する # 引数 : arg1 ... IPアドレスのセパレータ # arg2 ... IPアドレスが存在する位置 # arg3 ... 拒否時間 # arg4 ... 拒否時間単位 # arg5 ... 拒否要因 # # $Revision: 7 $ # $Date:: 2009-12-04 18:27:27 #$ System House ACT ($Author: tyamaguchi $) # 拒否しないIPアドレスリスト(ホワイトリスト) # 複数指定するときは、空白で区切ってください # 前方一致でチェックされます #WHITEIPLISTS="192.168.1." WHITEIPLISTS="" # ログを標準入力から取得 read LOG # ログからIPアドレスを抽出 IPADDR=`echo "$LOG" | sed 's/ */ /g' | cut -d "$1" -f $2 | sed -e 's/[^0-9]*\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)[^0-9]*.*/\1/p' -e d` [ "$IPADDR" = "" ] && exit 0 # ホワイトリストに存在すれば拒否しない for WHITEIP in $WHITEIPLISTS; do [ "$WHITEIP" = $(expr substr "$IPADDR" 1 $(expr length "$WHITEIP")) ] && exit 0 done # 当該IPアドレスからの接続を一定持間拒否する iptables -L -n | grep "DROP.* $IPADDR " > /dev/null if [ $? != 0 ]; then EXPIRE=$(date '+%R' -d "$3 $4") iptables -I INPUT -i eth0 -s $IPADDR -j DROP echo "iptables -D INPUT -i eth0 -s $IPADDR -j DROP" | at "$EXPIRE" > /dev/null logger -p authpriv.info -t SWATCH "Blocking IP $IPADDR for $EXPIRE by $5" fi