iptables設定シェルスクリプト@CentOS5の解析メモ #3 - blog@longkey1.net
の続き。
参考教材
ファイアウォール構築(iptables) - CentOSで自宅サーバー構築
もう少しでアプリ毎の設定にたどり着ける!!
がんばるぞー!!
前提として、/tmp/cidr.txtに国別IPアドレスのリストがあるとする。
■awk
フィルタリングによく使用されるコマンド
{print $2}で2つめのフィールドを出力って感じ。
関数?みたいなもので、後々呼び出して国名の引数渡して使うくさい。
AWK リファレンス - UNIX & Linux コマンド・シェルスクリプト リファレンス
ACCEPT_COUNTRYってのも、のちのち定義されるチェイン。
--limitは前と一緒で1秒間に1回。
--limit-burstが無いけど、デフォルトだと5だから、1秒間に5回以上アクセス来たらログに残すかな。
んで破棄。
DROP_COUNTRYとかは前のACCEPT_COUNTRYと一緒。
ここまで来ると大体意味がわかってきた。
最初に呼び出す関数設定して、ここは実際の実行部分って感じか。
中国、韓国、台湾多いのかー。
日本はどんぐらいなんだろうな。
ポートを気をつければ良いだけなので、解析しない!
これはまんま。
/root/deny_ipか、これ解析していなかったら飛ばしてたなー。
上記以外のルールってことは、ここまでどこにも引っかからなかった場合っつうことか。
基本拒否だから、これで良いのか。
ふむ、ここまでシェルに記述するのね。
ほう、感慨深いぜ。
■wget -q
-qでログにメッセージを書き出さないとな。
別にどっちでも良いと思うんだけど。
省エネ?
■mail -s
-sで件名
っつうことで、これで残すはアプリ毎の設定のみ。
一日かかったな、ここまで。
けど、かなり勉強になった!!
動かすアプリだけ設定すれば、これで完了。
ふぅ~。
後はログを見ながら運用していくだけだな。
けど、思ったよりよく出来たシェルだと思うなー。
業務で使っても問題なさそうな気がするけど、まずは運用してみるだな。
の続き。
参考教材
ファイアウォール構築(iptables) - CentOSで自宅サーバー構築
もう少しでアプリ毎の設定にたどり着ける!!
がんばるぞー!!
# 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
}前提として、/tmp/cidr.txtに国別IPアドレスのリストがあるとする。
■awk
フィルタリングによく使用されるコマンド
{print $2}で2つめのフィールドを出力って感じ。
関数?みたいなもので、後々呼び出して国名の引数渡して使うくさい。
AWK リファレンス - UNIX & Linux コマンド・シェルスクリプト リファレンス
ACCEPT_COUNTRYってのも、のちのち定義されるチェイン。
# DROP_COUNTRY_MAKE関数定義
# 指定された国のIPアドレスからのアクセスを破棄するユーザ定義チェイン作成
DROP_COUNTRY_MAKE(){
for addr in `cat /tmp/cidr.txt|grep ^$1|awk '{print $2}'`
do
iptables -A DROP_COUNTRY -s $addr -m limit --limit 1/s
-j LOG --log-prefix '[IPTABLES DENY_COUNTRY] : '
iptables -A DROP_COUNTRY -s $addr -j DROP
done
}--limitは前と一緒で1秒間に1回。
--limit-burstが無いけど、デフォルトだと5だから、1秒間に5回以上アクセス来たらログに残すかな。
んで破棄。
DROP_COUNTRYとかは前のACCEPT_COUNTRYと一緒。
ここまで来ると大体意味がわかってきた。
# IPアドレスリスト取得
. /root/iptables_functions
IPLISTGET
# 日本からのアクセスを許可するユーザ定義チェインACCEPT_COUNTRY作成
iptables -N ACCEPT_COUNTRY
ACCEPT_COUNTRY_MAKE JP
# 以降,日本からのみアクセスを許可したい場合はACCEPTのかわりにACCEPT_COUNTRYを指定する
# 中国・韓国・台湾※からのアクセスをログを記録して破棄
# ※全国警察施設への攻撃元上位3カ国(日本・アメリカを除く)
# http://www.cyberpolice.go.jp/detect/observation.htmlより
iptables -N DROP_COUNTRY
DROP_COUNTRY_MAKE CN
DROP_COUNTRY_MAKE KR
DROP_COUNTRY_MAKE TW
iptables -A INPUT -j DROP_COUNTRY最初に呼び出す関数設定して、ここは実際の実行部分って感じか。
中国、韓国、台湾多いのかー。
日本はどんぐらいなんだろうな。
#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここから) #
#----------------------------------------------------------#
<各自設定>
#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここまで) #
#----------------------------------------------------------#ポートを気をつければ良いだけなので、解析しない!
# 拒否IPアドレスからのアクセスはログを記録せずに破棄
# ※拒否IPアドレスは/root/deny_ipに1行ごとに記述しておくこと
# (/root/deny_ipがなければなにもしない)
if [ -s /root/deny_ip ]; then
for ip in `cat /root/deny_ip`
do
iptables -I INPUT -s $ip -j DROP
done
fiこれはまんま。
/root/deny_ipか、これ解析していなかったら飛ばしてたなー。
# 上記のルールにマッチしなかったアクセスはログを記録して破棄
iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : '
iptables -A INPUT -j DROP
iptables -A FORWARD -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES FORWARD] : '
iptables -A FORWARD -j DROP上記以外のルールってことは、ここまでどこにも引っかからなかった場合っつうことか。
基本拒否だから、これで良いのか。
# サーバー再起動時にも上記設定が有効となるようにルールを保存
/etc/rc.d/init.d/iptables save
# ファイアウォール起動
/etc/rc.d/init.d/iptables startふむ、ここまでシェルに記述するのね。
# chmod 700 iptables.sh ← ファイアウォール設定スクリプトへ実行権限付加ほう、感慨深いぜ。
# vi iptables_functions ← ファイアウォール設定スクリプト外部関数作成
# IPアドレスリスト取得関数定義
IPLISTGET(){
# http://nami.jp/ipv4bycc/から最新版IPアドレスリストを取得する
wget -q http://nami.jp/ipv4bycc/cidr.txt
# 最新版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
exit 1
else
# バックアップがない場合はその旨をroot宛にメール通知して処理を打ち切る
echo cidr.txt not found!|mail -s $0 root
exit 1
fi
fi
# 最新版IPアドレスリストを /tmpへバックアップする
/bin/mv cidr.txt /tmp/cidr.txt
}■wget -q
-qでログにメッセージを書き出さないとな。
別にどっちでも良いと思うんだけど。
省エネ?
■mail -s
-sで件名
っつうことで、これで残すはアプリ毎の設定のみ。
一日かかったな、ここまで。
けど、かなり勉強になった!!
動かすアプリだけ設定すれば、これで完了。
ふぅ~。
後はログを見ながら運用していくだけだな。
けど、思ったよりよく出来たシェルだと思うなー。
業務で使っても問題なさそうな気がするけど、まずは運用してみるだな。
コメント