困ったものです。中国からの執拗な攻撃的なアクセスは。今回は「中国からの悪意のあるアクセスを遮断するには?」がトピックスです。
弊社のウェブサーバーたちのパフォーマンスが10月から徐々に落ちてきて、とうとう「これはおかしいぞ」というレベルになったので調査をしました。結論としては要因の多くを占めていたのが「中国からの執拗な悪意のあるアクセス」でした。
悪意を感じるアクセスはロシアやギリシャなど他国からもそれなりにあるのですが、中国からのそれはまず量が比較にならないほど多い!一般的に想定される「バックドア」や「セキュリティーホール」を次から次へと継続的に叩きまくる。昔、一休さんと言うアニメに「どちて坊や」と言う、何でもかんでも次から次へと「どちて?」と尋ね続けて人々を困らせるキャラクターが登場していましたが、中国からのアクセスはその「どちて坊や」を思い出させます。
1. 国を指定してアクセスを制限できるのか?
端的な答えはNOです。アクセス元のIPアドレスから国を割り出すロジックが必要です。ありがたいことに「ipv4.fetus.jp」さんから日々更新される「国ごとのIPアドレス」データを参照できるので、ここでアクセスを遮断したい国のIPアドレス一覧を取得して用います。
2. 設定の方法
上記で取得した特定の国IPアドレス一覧をアクセス制限に用いるには数種類の方法があります。
- op-1 ウェブサーバーのドキュメントルートにある「.htaccess」ファイルに記入する
- op-2 ウェブサーバーのHTTPdの設定ファイルに記入する
- op-3 ウェブサーバーではなくファイアーウォールのルールとして記入する
弊社としては、ウェブサーバーの負荷をできるだけ下げてあげたいので、op-3を選択しました。と言うのは、中国国内のIPアドレスと言ってもシンプルに範囲が定まっているわけでは無いので、サブネットマスクを指定して範囲指定しても5000行はくだらない指定をすることになります。アクセスされるたびにこの指定を(ウェブサーバーが)サーチして該当するIPアドレスかどうかをチェックするのはウェブサーバーにとって負荷になります。
3. 全てのIPアドレスを登録するのか
Noです。全ては登録しません。ここがバランスの取り所ですが、ウェブサーバーのアクセスログ解析をして、悪意を感じるアクセスのアクセス元をランキングします。そうして得たランキングの上位から「ここまでが遮断したいIPアドレスだな」と線を引きます。
なお、このときですが、大規模なアタックのアタッカーたちは、例えば「192.168.1.10」や「192.168.1.58」のように単一のネットワークに立てた「少しだけIPアドレスが異なる複数のサーバーたち」から分散してアタックして来ることが多いです。この例の「192.168.1.???」と言うIPアドレスのグループはサブネットマスクを使って「192.168.1.0/24」と書くことができますので、サブネットマスクを使えばより多くのIPアドレスをシンプルに表現してアクセス制限に指定できます。IPアドレスの類似性に注意してアクセス解析しましょう。
4. GCEにIPアドレスを登録する
GCP(Google Could Platform)にはウェブサーバーを建てる方式として「App Engine(簡単にサーバー知識を必要とせずサーバーを建てられる)」や「Compute Engine(サーバーをゼロからカスタムでセットアップする) 」がありますが、弊社は後者です。
「VPC network > Firewall rurles」を開くと下記のような画面が表示されます(部分的にぼかしてあります)。
なお、ウェブサーバーとインターネットの間に「ロードバランサー」を噛ませてある場合も、ウェブサーバーに直接アクセスしてくるケースが想定されるので、ロードバランサー側ではなくここでアクセスの制限を設定しましょう。また、前述した「App Engine」でウェブサーバーを建てている場合はここではなく「App Engine > Firewall rules」にてアクセスの制限を設定しますのでお間違いなきよう。
設定の際のポイントは下記の通りです。
- Ingress(外界から入ってくる通信)に対して
- プロトコルは全て(all)とすること
- ポートは全て(all)とすること
- ルールの優先度は他のすべてのルールよりも高く(=数値を小さく)すること
です。
攻撃元の国は中国が突出して多いですが、何か組織的な印象を受けます。また、中国だけでなくロシアや西欧諸国からもあります。日頃からサーバーのパフォーマンスを継続的にモニタリングして置くこと、大事です。