2014.04.24

スクリプト

CentOS

iptables 国内のみ許可する

CentOS6.5で確認しました。

まず、ipsetでipアドレスの管理を行います。

以下のコマンドでインストール済みか確認します。
# yum list installed | grep ipset

ない場合はインストールします。
# yum install ipset

国別IPv4リストがあるのでこちらを参照します。

スクリプトを作成します。

#!/bin/bash
 
# 国別コードリストをダウンロード
cd /root
if [ -s cidr.txt ]; then
    mv cidr.txt cidr.txt.old
fi
 
wget https://nami.jp/ipv4bycc/cidr.txt.gz
gunzip cidr.txt.gz
 
# IPLISTを作成
ipset create -exist IPLIST hash:net
 
# IPLISTに日本のIPアドレス登録
sed -n 's/^JP\t//p' cidr.txt | while read ADDRESS; do
    ipset add IPLIST $ADDRESS
done

スクリプトを実行する為に実行権限を与えます。
# chmod 744 iplist.sh

実行
# ./iplist.sh

確認
# ipset list IPLIST | less

保存
# ipset save

上記の保存ではipsetは再起動でリストが削除されるので、/etc/sysconfig/ipset に保存し、
再起動時に自動的にIPLISTをロードするようにします。
# /etc/init.d/ipset save

自動起動設定
# chkconfig ipset on

iptablesの設定
# cd /etc/sysconfig/
# vi iptables

例えばポート25番(SMTP)を国内のみ許可する場合は以下のように追記、もしくは編集し、保存します。

-A INPUT -p tcp -m tcp --dport 25 -m set --match-set IPLIST src -j ACCEPT

設定を反映させます
# service iptables restart