サーバーが応答しなくなった
管理しているサイト及びサーバーが大量のアクセスによって応答しなくなってしまい、やむなくインスタンスの再起動をしました。いわゆるDos攻撃かDDosです。
再起動後にアクセスログを確認
普段とは明らかに異なる大量のアクセス数があり、アクセス元のIPアドレスがいくつかのパターンに限定されたので、アクセス元のIPアドレスがどこの国のIPアドレスか調べました。
どこの国のIPアドレスか確認
いくつかIPアドレスから国を割り出すサイトがありますが、今回はこちらのサイトを使用しました。
怪しいアクセス元をいくつか検索したところ全て
「判別結果は「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