2012年9月4日火曜日

鯖の盾(指定のIPをサクッとブロックして一定時間後に自動的にブロック解除するスクリプト)

鯖のログを監視していると、明らかに特定のIPからアタックを受けているとわかる時がある。そんな時「にゃにお〜ブロックしてやる!」と思ったら、やはりiptablesだろう。

とりあえず、指定のIPをサクッとブロックして一定時間後に自動的にブロックを解除する簡単なスクリプトを書いておこう。

題して「鯖の盾」(^^);

blockip24.sh
!/bin/sh

# 変数
BLOCKIP=$1
TIME="now + 24Hours"
#TIME="now + 1minutes"
TIMESTR=`date --date "$TIME"`
echo "ブロックするIP  :$BLOCKIP"
echo "ブロック解除日時:$TIMESTR";

# 指定のIPからの接続を完全拒否
iptables -I INPUT -s $BLOCKIP -j DROP;

# 指定された時間に拒否IPを解除
echo "iptables -D INPUT -s $BLOCKIP -j DROP" | at $TIME;

もちろん、実行権限を与えておくのを忘れずに。

[root@xxx ]# chmod 700 blockip24h.sh


このスクリプトを使って指定のIPからの接続を完全にブロックするには

[root@xxx ~]# blockip24h.sh xxx.xxx.xxx.xxx
ブロックするIP :xxx.xxx.xxx.xxx
ブロック解除日時:2012年 9月 5日 水曜日 13:31:16 JST
job 13 at 2012-09-05 13:31

iptablesを再起動させる必要は無い。コマンドを発行すれば即ブロックできる。


ブロックされていることを確認するには

[root@xxx ~]# iptables -L | less
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- xxx.xxx.xxx.xxx anywhere
・・・


自動解除コマンドキューを確認するには

[root@xxx ~]# atq
13 2012-09-05 13:31 a root


自動解除コマンドキューを削除するには

[root@xxx ~]# atrm 13


そんな感じ。