SSH接続で特定国(中国、ロシア)からの接続をブロックする(ipsetを使って)(その2)
SSH接続で特定国(中国、ロシア)からの接続をブロックする(ipsetを使って)(その1) - ~恵み多き日々~みんな悩みはいっしょ!
からの続きです。
ipsetのRPMが古かったのでやり直しました。
用意するもの
ipset-6.11-4.el6.x86_64.rpm (2016年1月1日時点でRHEL6用の最新)
インストールしてみると
[root@machine 20160101ipset]# rpm -ivh ipset-6.11-4.el6.x86_64.rpm
エラー: 依存性の欠如:
libmnl.so.0()(64bit) は ipset-6.11-4.el6.x86_64 に必要とされています
libmnl.so.0(LIBMNL_1.0)(64bit) は ipset-6.11-4.el6.x86_64 に必要とされています
依存性ではじかれてばっちり入らない。。
依存関係を解消してみる。
[root@machine 20160101ipset]# rpm -ivh ipset-6.11-4.el6.x86_64.rpm libmnl-1.0.2-3.el6.x86_64.rpm
これでバッチグーでインストールできる。
[root@machine 20160101ipset]# rpm q-ql ipset-6.11-4.el6.x86_64
/etc/rc.d/init.d/ipset
/usr/lib64/libipset.so.2
/usr/lib64/libipset.so.2.0.1
/usr/sbin/ipset
/usr/share/doc/ipset-6.11
/usr/share/doc/ipset-6.11/COPYING
/usr/share/doc/ipset-6.11/ChangeLog
/usr/share/man/man8/ipset.8.gz
ありますね。initスクリプト。やっほぅ。
ここまで来ると
ipsetとiptablesでSSHを日本国内からの接続に限定する (CentOS 6) – 稲葉サーバーデザイン
稲葉サーバデザインさんのページを見ながら設定はコンプリートできる。
1.ipsetのリストを作る
2.chkconfig ipset on でipsetをサーバ起動時にONにしておく
3.iptablesに新しいルールを入れる(-m set –match-set <セット名=WHITELIST> src)
4.(当然)iptablesもchkconfig iptables onでなければならない。
これで設定できますね。
で、オリジナリティということで、稲葉サーバデザインさんのスクリプトはホワイトリスト=日本からのIPだけ通す 方式のスクリプトでしたが、日本だけというのは今どき結構難しいと思いました。たとえばAWSを使っているときはアメリカのIPになるんじゃないかと、ホワイトリストの逆のブラックリストというリストの作り方もあるんじゃないかと思いました。
昨今問題になってくるのは、中国、韓国、北朝鮮、ロシアなどの国からの攻撃なのでこのあたりからのIPをブロックできればあとはOPENで大丈夫なんじゃないかと。
よって、ipdeny.comを利用してそのあたりからのIPをブロックすることができるipsetのリストを作成するスクリプトを考えてみました。
#!/bin/bash
COUNTRY="cn" # cn is CHINA
BSTRING="BLACKLIST-"${COUNTRY} # example BLACKLIST-cn
# Download Country ip address list(ipv4)
if [ -s ${COUNTRY}.zone ]; then
mv ${COUNTRY}.zone ${COUNTRY}.zone.old
fi
# Chine Internet Address
# http://www.ipdeny.com/ipblocks/data/countries/cn.zone
wget http://www.ipdeny.com/ipblocks/data/countries/${COUNTRY}.zone
# Create BLACKLIST hash in ipset
ipset create -exist ${BSTRING} hash:net
# Register specific country ip address to BLACKLIST group
while read ADDRESS; do
echo "ipset add ${BSTRING} $ADDRESS" # FOR DEBUG
ipset add ${BSTRING} $ADDRESS
done < ${COUNTRY}.zone
# Confirm
ipset list ${BSTRING} |head -n 20
上記であればCOUNTRY変数のところの文字を
cn→中国
ru→ロシア
kr→韓国
kp→北朝鮮
などに変えれば、それぞれのBLACKLISTがipsetに登録できます。
2文字の国コードは
を見てください。
自分がやりたいことは一応これでできました。あとは細かい点をもう少し調整します。