TORIPIYO DIARY

recent event, IoT, programming, infrastructure topics

中国やロシアなど特定の国からのアクセスを拒否するiptablesの設定方法

中国やロシアからのアクセスを弾く設定を、
ファイアウォール構築(iptables) - CentOSで自宅サーバー構築
を参考にして自宅のraspberry pi 3 に設定してみました。

1. country_iptables.shとupdate_country_iptables.sh をgistから取得する
block ip address by country unit · GitHub

2. ファイルにrootユーザでの実行権限を付与する
chmod 755 country_iptables.sh update_country_iptables.sh

3. country_iptables.shをrootユーザで実行する

sh country_iptables.sh
  • 問題なく実行されると、iptables -nL でiptablesのruleがたくさん設定されていることが確認出来ると思います。
  • country_iptables.sh は、http://nami.jp/ipv4bycc/cidr.txt.gzを利用して、日本のグローバルIPアドレスからのアクセスを許可して、悪いことをすることが多い国からのアクセスを拒否します。
  • raspberry pi 3向けに、最期にiptablesの設定読み込みと設定ファイルの更新を行っています。この最期の処理はCentOSなどではおそらくうまく動きません。

4. cron jobを設定してupdate_country_iptables.shを定期的に実行するようにする

00 03 * * * sh /home/pi/script/update_country_iptables.sh
  • 国ごとのグローバルIPアドレスは定期的に変わるようなので、http://nami.jp/ipv4bycc/cidr.txt.gz の更新をチェックしてiptablesの設定を修正しています。ただ、差分が大きいと自動実行は怖いので50行以上の差分の場合は自動更新はされないようになっています
  • IPTABLES_SCRIPTにはcountry_iptables.shファイルのパスを指定
  • WEBHOOK_URLには通知したいslack channelのurlを設定
  • このスクリプトを毎日実行していると、http://nami.jp/ipv4bycc/cidr.txt.gz に悪意あるコンテンツが埋め込まれたときに勝手に実行されてしまうので、クリティカルなシステムの場合はcron jobに登録せずに手動での実行のほうがいいかもしれないです