ファイアウォール構築(iptables) - CentOSで自宅サーバー構築から
国別に制限をかける部分のみパチりました。
今回作成したシェルスクリプトは以下の通りです。
#/bin/bash
# http://centossrv.com/iptables.shtml をカスタムし、ACCEPT_COUNTRYというルールを作成する
# ACCEPT_COUNTRY_MAKE関数定義
# 指定された国のIPアドレスからのアクセスを許可するユーザ定義チェイン作成
ACCEPT_COUNTRY_MAKE(){
for addr in `cat /tmp/cidr.txt|grep ^$1|awk '{print $2}'`
do
iptables -A ACCEPT_COUNTRY -s $addr -j ACCEPT
done
}
# IPアドレスリスト取得関数定義
IPLISTGET(){
# http://nami.jp/ipv4bycc/から最新版IPアドレスリストを取得する
wget -q http://nami.jp/ipv4bycc/cidr.txt.gz
gunzip cidr.txt.gz
# 最新版IPアドレスリストが取得できなかった場合
if [ ! -f cidr.txt ]; then
if [ -f /tmp/cidr.txt ]; then
# バックアップがある場合はその旨をroot宛にメール通知して処理を打ち切る
echo cidr.txt was read from the backup! | mail -s $0 root
return
else
# バックアップがない場合はその旨をroot宛にメール通知して処理を打ち切る
echo cidr.txt not found!|mail -s $0 root
exit 1
fi
fi
# 最新版IPアドレスリストを /tmpへバックアップする
/bin/mv cidr.txt /tmp/cidr.txt
}
IPLISTGET
# 現在のチェインを削除
iptables -F ACCEPT_COUNTRY
# 新しくチェインを作成
iptables -N ACCEPT_COUNTRY
ACCEPT_COUNTRY_MAKE JP
iptables -A ACCEPT_COUNTRY -j REJECT
# LAN内からのhttpdへのアクセスは許可する
iptables -I INPUT 1 -p tcp --dport 80 -s 192.168/16 -j ACCEPT
# LAN以外からのhttpへのアクセスはACCEPT_COUNTRYで処理する
iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT_COUNTRY
# ACCEPT_COUNTRYでACCEPTされないhttpアクセスは拒否する
iptables -I INPUT 3 -p tcp --dport 80 -j REJECT
参考サイトに載っていたIPリスト取得部分とフィルタ設定部分がコピペでそのまま動いてしまったので
敢えてそのまま載せてしまいます。(^^;
iptablesのオプションはStray Penguin - Linux Memo (iptables)が分かり易いです。
このスクリプトは80番ポート用のルールを追加するだけで、1から作り直すわけではありません。
許可するのはLAN内と日本国内からのアクセスで、それ以外は拒否します。
とりあえず、このスクリプトを1度実行した状態でしばらく様子を見てみる予定です。
正しく動いていれば、httpdのaccess_logに海外IPが追加されなくなっているはず…!
0 コメント:
コメントを投稿