ufwで日本以外からのアクセスを遮断する


ufwで日本以外からのアクセスを遮断する

注意:この記事のやり方ではアドレスを全部登録するのに1ヶ月以上かかったので実用的な方法ではありません。(2021/07/14追記)

経緯

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でやってみる

公開されている日本に割り当てられた 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時間くらいかかりそう。
大丈夫かなぁ。

1日で設定件数役3万件。14万件登録しないといけないので、設定に4〜5日かかりそう。
ぜんぜん実用的じゃ無い。

設定開始から4日で登録件数51606件。
1分で5件くらいしか登録できない状態になった。
14万件登録するのにいつまでかかることやら。

追記:2021/04/05
結局14万件登録するのに1ヶ月かかった。こりゃ使えない。要改善。


ufwは普段あまり使っていないが、大丈夫だろうか。
パフォーマンスに難があるような気がする。