ざっくり日本国内だけ通信許可するiptables

IPアドレスの第一オクテッドだけ見て判断するようiptablesに設定しました。
Added by kanata about 4 years ago

こういう事が起こっていました。

  • アメリカとか中国とか色んな国から、なんか悪いことを目的としたアクセスが頻繁にくる。
  • よって、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

ServersMan


Comments

Add picture from clipboard (Maximum size: 100 MB)