iptables - 国内からの接続のみ許可して海外からの接続を遮断する

iptablesで日本国内からのみ接続させ、海外からは接続させないようにするための設定についてです。

設定スクリプト


前回(iptablesサンプル)の setip.sh実行に引き続いて、sh jp_only.sh を実行してください。
setip.sh内で -j ACCEPT_FILTER と記述されていた箇所では、日本国内からの接続のみを許可するようになり、海外からの接続は拒否します。
設定後、iptables設定内容の保存を忘れないようにして下さい。保存方法については、前回を参照してください。

jp_only.sh

#!/bin/sh
IPTABLES=/sbin/iptables
wget -q -N http://nami.jp/ipv4bycc/cidr.txt.gz
gunzip -q -f -c cidr.txt.gz > cidr.txt
if [ -f cidr.txt ]; then
    $IPTABLES -F ACCEPT_FILTER
    sed -n 's/^JP\t//p' cidr.txt | while read address; do
        $IPTABLES -A ACCEPT_FILTER -s $address -j ACCEPT
    done
    $IPTABLES -A ACCEPT_FILTER -j DROP
fi


説明



jp_only.sh を実行すると、次のようなiptablesコマンドが実行されます。
x.x.x.x/yy の箇所が IPアドレス(のCIDR表記)です。

/sbin/iptables -F ACCEPT_FILTER
/sbin/iptables -A ACCEPT_FILTER -s x.x.x.x/yy -j ACCEPT
/sbin/iptables -A ACCEPT_FILTER -s x.x.x.x/yy -j ACCEPT

/sbin/iptables -A ACCEPT_FILTER -j DROP


/sbin/iptables -F ACCEPT_FILTER
ACCEPT_FILTERチェインの内容を全消去します。

/sbin/iptables -A ACCEPT_FILTER -s x.x.x.x/yy -j ACCEPT
x.x.x.x/yy の箇所が日本国内のIPアドレス(のCIDR表記)で記述されています。このような記述の行がたくさん続きます。
これらの行により、接続元が日本国内のIPアドレスの場合、ACCEPT(パケット受信を許可)します。

/sbin/iptables -A ACCEPT_FILTER -j DROP
/sbin/iptables -A ACCEPT_FILTER -s x.x.x.x/yy -j ACCEPT で列挙されているIPアドレスのどれでも無い場合は、日本国内のIPアドレスでは無い(海外のIPアドレス)ので、DROP(パケットを破棄)します。



2014/1/26 追記

WEBサーバとして公開している場合


一般に公開するWEBサーバの場合、海外からの接続を遮断すると、google/yahoo/bingなどのクローラのアクセスまでブロックします。
その為、検索にひっかからないようになりますので、WEBへのアクセスは海外からも接続できるようにします。
前回(iptablesサンプル)の setip.sh の内容を以下のように修正して下さい。

変更前

#Webサーバの場合:http,https許可
$IPTABLES -A INPUT -p tcp -m multiport --dport 80,443 -m state --state NEW -j ACCEPT_FILTER


変更後

#Webサーバの場合:http,https許可
$IPTABLES -A INPUT -p tcp -m multiport --dport 80,443 -m state --state NEW -j ACCEPT


これで、google/yahoo/bingで WEBの内容が検索にひっかかるようになります。


参考


iptablesで海外からのhttpアクセスを拒否する
世界の国別 IPv4 アドレス割り当てリスト





この記事へのコメント

藤堂 正樹
2016年07月17日 17:55
度々申し訳ございません。
お力を貸して頂くメッセージを書き込ませて頂きました。

前回のiptablesサンプルを実行して希望通りにはなりましたが、上記の設定を
行った後、今度は特定のサーバ(192.***.***.***)からsshで内部のWebサーバへの
接続をしようと思ったのですが、sshが接続できません。

ssh,ping(icmp)は内部のみOKをして、webサーバのみ国内からのアクセスを
許可するようにしたいのですが、どうしたらすればよろしいのでしょうか。
藤堂 正樹
2016年07月17日 18:10
大変申し訳ございません。
よく考えたら、さっきと同じで特定のサーバのIPを記載すればよかったのですね。
解決いたしました。
前回、今回の質問はクローズでお願いします。
今後ともよろしくお願いします。

この記事へのトラックバック