nginx
セキュリティ

海外からのサーバーアタックがあった時の暫定対応

More than 3 years have passed since last update.


サーバーが応答しなくなった

管理しているサイト及びサーバーが大量のアクセスによって応答しなくなってしまい、やむなくインスタンスの再起動をしました。いわゆるDos攻撃かDDosです。


再起動後にアクセスログを確認

普段とは明らかに異なる大量のアクセス数があり、アクセス元のIPアドレスがいくつかのパターンに限定されたので、アクセス元のIPアドレスがどこの国のIPアドレスか調べました。


どこの国のIPアドレスか確認

いくつかIPアドレスから国を割り出すサイトがありますが、今回はこちらのサイトを使用しました。

http://mgt.jp/t/country#

怪しいアクセス元をいくつか検索したところ全て

「判別結果は「CN」でした。」

と表示されたので、中国からのアクセスである事が確実になりました。


不正アクセス元の国からアクセスを遮断する

幸い中国でサービス展開はしていないので、国単位でのアクセス遮断で問題無いとの判断になり、対応する事に。以下手順です


サーバー設定をする

今回はNginxでのお話しです。

サーバーにログイン後、以下手順で設定します。


1.各国のIPアドレスリストを取得

wget http://nami.jp/ipv4bycc/cidr.txt.gz


2.解凍

gunzip cidr.txt.gz


3.特定の国からのアクセス拒否をするconfを生成

sed -n 's/^CN\t\(.*\)/deny \1;/p' cidr.txt > /etc/nginx/dropip.conf

今回は中国からのアクセスを遮断するのでCNとなっています。

他の国を対応する例として、無いとは思いますが日本からのアクセスを遮断する場合は

sed -n 's/^JP\t(.*)/deny \1;/p' cidr.txt > /etc/nginx/dropip.conf

とします。


4.nginx.confに追記

http {}内に記載します。

http {

〜省略〜
include /etc/nginx/dropip.conf;
include /etc/nginx/conf.d/*.conf;

注意点

conf.d/*.confのincludeより上に記載してください。

conf.dにvirturlhostの設定とか書いていた場合、拒否IPのconfより先にconf.dの内容がincludeされてしまいます。


5.nginxのconfのリロード

/etc/init.d/nginx reload

設定が心配なら先に

/etc/init.d/nginx configtest

してください。


設定が適用されているか確認

nginxのエラーログを見ると以下の形式で、アクセスを遮断したipアドレスが表示されます。

[error] 3177#0: *1455 access forbidden by rule, client: xxx.xxx.xxx.xx