ざっくり日本国内だけ通信許可するiptables
IPアドレスの第一オクテッドだけ見て判断するようiptablesに設定しました。
こういう事が起こっていました。
- アメリカとか中国とか色んな国から、なんか悪いことを目的としたアクセスが頻繁にくる。
- よって、httpとhttps以外のポートは全て閉じたいが、自分的に不便。
- そうだ、日本国内だけ許可したらいいじゃない。
- ところが、SeversMan@VPSのCentOSのiptablesは、登録できるエントリー上限が256の模様(未確認)。
- なんとか256個の制限内に収めたい。
なので、こういう事にしました。
- 厳密に日本で使っているIPアドレス帯を許可しだすと膨大なエントリーになりそう。
- ipアドレスの第一オクテッド(つまり、aaa.bbb.ccc.ddd のaaa)だけを見て、日本かどうか判断しよう(適当)。
そこでまず、日本でどういうIPアドレス帯が使われているのか調べます。
以下にまとめて下さっている方がおります。
http://nami.jp/ipv4bycc/cidr.txt
日本管理のIPアドレスが何レコードあるか見てみますか~
$ curl http://nami.jp/ipv4bycc/cidr.txt|grep JP|wc -l % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1711k 100 1711k 0 0 3624k 0 --:--:-- --:--:-- --:--:-- 3625k 2297
2297件!やっぱり多い。
そこで、こんなことして、第一オクテッドだけにまとめちゃう。
$ curl http://nami.jp/ipv4bycc/cidr.txt|grep JP|awk -F'.' '{print $1,".0.0.0/8"}'|sort|uniq|sed -n 's/^JP\t//p'|sed -n 's/ //p'
こうすると88件にまとまってくれた。
もちろん、第一オクテッドしか見てないので、諸外国も混ざっちゃうんだけどだいぶリスクは下げたれたんじゃなかろうか。
後は、iptablesのINPUTチェインをDROPポリシーに設定した上で、ACCEPTとしてとして登録するだけ。
こんな感じの定義(いろいろ省略してます)
*filter :INPUT DROP [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -p tcp -s 1.0.0.0/8 -j ACCEPT -A INPUT -m state --state NEW -p tcp -s 101.0.0.0/8 -j ACCEPT -A INPUT -m state --state NEW -p tcp -s 103.0.0.0/8 -j ACCEPT ・ ・ ・ -A INPUT -m state --state NEW -p tcp -s 64.0.0.0/8 -j ACCEPT -A INPUT -m state --state NEW -p tcp -s 76.0.0.0/8 -j ACCEPT
ちなみに、以下のコマンドで登録したエントリー毎に通信量が見れます。
# iptables -nvL
Comments