ufwで日本以外からのアクセスを遮断する
経緯
WEBサーバーに中露からの攻撃がガンガン来るので、遮断する。
下記の様なアクセスが 1日に数百件来る。
うるさいので日本のIPアドレスからのみを許可する様にしたい。
45.80.68.76 - - [08/Mar/2021:21:29:56 +0900] "POST /_ignition/execute-solution HTTP/1.1" 403 3885 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
45.80.68.76 - - [08/Mar/2021:21:46:01 +0900] "POST /_ignition/execute-solution HTTP/1.1" 403 686 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
さくらのクラウドのパケットフィルタでできるかな?
さくらのクラウドのサーバーなので パケットフィルタでなんとならないか調べてみたが、出来なさそうだ。
ufwでやってみる
ufwはUbuntuのFirewall。
個人の方で日本のIPアドレスをCIDR形式で公開されている方がいたので参照させてもらいました。
https://qiita.com/Shiro-neko-kamen/items/7e8411c95b0bedf8312f
公開されている日本に割り当てられた IPアドレスだけを許可一覧にいれてやればいいのでは?
などと考えた。
ufwを有効化
sudo ufw enable
デフォルトをdenyにして
sudo ufw DEFAULT deny
デフォルトで接続禁止にして、許可されたアクセスだけ許すようにする。
注意 SSHでログイン出来なくなるので要注意
ログイン元のIPアドレスを許可リストに追加
sudo ufw allow from 122.249.123.123 to any
自分がログインしている端末のグローバルIPアドレスを許可リストに入れる。
日本のIPアドレスを取得して、ufwコマンドを作成するシェルスクリプトを作る。
vi mk_cmd.sh
#!/bin/bash
wget http://nami.jp/ipv4bycc/cidr.txt.gz
zcat cidr.txt.gz | grep ^JP > cidr.txt
cat cidr.txt | awk {'print "ufw allow from "$2" to any"'} > set_allow_jp.sh
こいつを実行
chmod a+x ./mk_cmd.sh
./mk_cmd.sh
set_allow_jp.shファイルが出来上がる
中身はこんな感じ
ufw allow from 80.80.92.0/22 to any
ufw allow from 85.94.160.0/19 to any
ufw allow from 89.150.2.0/23 to any
ufw allow from 89.150.4.0/22 to any
・・・以下略・・・
set_allow_jp.shを実行
chmod a+x ./set_allow_jp.sh
nohup sudo ./set_allow_jp.sh &
読込に数時間かかりそうなのでバックグラウンドジョブで実行。
以下のコマンドで何件設定されたか確認
sudo ufw status | wc
146311件くらいになれば終了。
1分間で80件くらい追加されるので、全部設定するのに27時間くらいかかりそう。
大丈夫かなぁ。
追記:最初の設定方法にミスが有って時間がかかっている可能性が有ったので、時間の記述を一旦削除しました。
ufwは普段あまり使っていないが、大丈夫だろうか。
パフォーマンスに難があるような気がする。