iptablesで特定IPをはじく

| | コメント(0) | トラックバック(0)
特定のIPアドレスをブロックしたい場合は,どうするのが,運用的に良いか考えてみた。

  1. 自宅サーバで,ルータ経由でアクセスしており,ルータでもIPフィルタの指定は可能であるが,ルータの処理が重くなるので,自宅のPC全てのインターネットアクセスが遅くなる。ルータではIPアドレスのフィルタは行うべきではない。
    外からのアクセスは,ルータでIPマスカレードの指定で行っているので,公開しているサーバ上で,IPアドレスのブロックをすれば良い。
  2. RedHat系のiptablesのツールだと,デフォルトは全てブロックして,RH-Firewall-1-INPUTというチェインに許可するポート番号等を指定するようになる。あまり,system-config-securitylevelのツールなどに影響を与えたくないので,RH-Firewall-1-INPUTチェインをいじりたくない。
  3. RH-Firewall-1-INPUTチェインの前に,1つチェインを用意して,IPを指定していくのが良いのではないか。
  4. パケットは,state NEWだけ拾えば,良いだろう。(それ以外は,コネクションが無ければ無視される)。
FIL0-MYINPUTを作成するシェルとかを作ってみた。

#! /bin/sh
# create_chain.sh 下のコードは,大まかな処理の流れを示している。実際のコードはリンク先を参照のこと
iptables -N FIL0-MYINPUT
iptables -I INPUT -p tcp -m state --state NEW -j FIL0-MYINPUT

これで,FIL0-MYINPUTが,RH-Firewall-1-INPUTチェインの前に挿入される。これに,ブロックするIPアドレスを追加していけば良いだろう。


#!/bin/sh
# add_ip.sh [-l] <TAG> <IP/Network Address>...  下のコードは,大まかな処理の流れを示している。実際のコードはリンク先を参照のこと
TAG=$1
FIL=DROP-$1
REJ=Rej-$1
shift
iptables -N ${FIL}
# iptables -A ${FIL} -j LOG --log-prefix "[${REJ}]"   # ログを出力する場合,コメントを外す
iptables -A ${FIL} -j DROP
for IP in $* ; do
        iptables -A FIL0-MYINPUT -s ${IP}     -j ${FIL}
done


IPアドレスのリストをファイルにして,取り込む場合,add_ip.shを以下のようにしても良い。

#!/bin/sh
# add_ipfilter.sh [-l] <TAG> <Block List Ffile> 下のコードは,大まかな処理の流れを示している。実際のコードはリンク先を参照のこと
TAG=$1
FIL=DROP-$1
REJ=Rej-$1
BLOCKLIST=$2
iptables -N ${FIL}
iptables -A ${FIL} -j LOG --log-prefix "[${REJ}]"
iptables -A ${FIL} -j DROP
cat ${BLOCKLIST}|
while read line ; do
        IP=`echo $line|sed -e 's/\#.*//' -e 's/[ \t]//g'`
        if [ ! -z $IP ] ; then
            iptables -A FIL0-MYINPUT -s ${IP}     -j ${FIL}
        fi
done


例1 :
# create_chain.sh
# add_ip.sh BLOCK 192.168.0.0/24 172.16.0.0/16


例2:
# create_chain.sh
# add_ipfilter.sh BLOCK2 ip.txt

ip.txtの中身
# aaa  #以降はコメントで無視される。空白も無視される
192.168.0.1
192. 168.0.2    # aaa
192.168.0.      3 # bbb
        192.168.0.4 # ccc
# 192.168.0.5


例3:
# create_chain.sh
# add_ip.sh BLOCK 192.168.0.0/24 172.16.0.0/16
# add_ipfilter.sh BLOCK2 ip.txt

確認は,以下のコマンドで確認できる。(名前解決があると,IPアドレスがわかりにくいので-nをつけている)
# iptables -n -L

韓国 IP アドレスからのパケットを遮断する のIPアドレス対策も,やり過ぎかと思ったけど,試しに,ブロックしてみると,スパムメールが少し減った。それだけでも効果があったといえる。

"/etc/init.d/iptabls save"を実行すれば,この設定も,"/etc/sysconfig/iptables"にセーブされ,起動時に読み込まれる。

トラックバック(0)

このブログ記事を参照しているブログ一覧: iptablesで特定IPをはじく

このブログ記事に対するトラックバックURL: http://www.aritia.org/mt/mt-tb.cgi/159

コメントする

2008年8月

          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            

アーカイブ

ウェブページ

Powered by Movable Type 4.21-ja