Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
28
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Nginxで国外からのWEBアクセスを遮断

事の発端

サーバが落ちてたので何気に再起動させたんですが、その数時間後また落ちる・・・。
何故ー?と思って原因を調べてみたところ、国外からのスパムがヒドくて落ちてたようです。
以前ちょろっとスパム対策してたので割と放置してたんですが甘かったです。
今回更にスパム対策を色々試してみたんですが、ボットの投稿がウザいとかそういう問題じゃないんです・・・、アタックのアクセスが多すぎてサーバ落ちるのが問題。

対策の方針

WPのサイトを運営しているのが良くないようでかなり攻撃されます。
相当頭に来たので、ブチ切れモードで海外からのWEBアクセスを全て遮断してやりましょう!w

今回の対策はNginx側で国内IPのアクセスのみを許可して他を全て切り捨てるという強引な方法になります。

対応内容

まず、IPアドレスのリストをダウンロードします。
このサイトからダウンロードできますね、今回は「cidr.txt.gz」というものを使わせて頂くことにします。
http://nami.jp/ipv4bycc/


$ cd /usr/local/src ← 書き込み権限アリにしてあります
$ mkdir ip_list
$ cd ip_list
$ wget http://nami.jp/ipv4bycc/cidr.txt.gz
$ gunzip cidr.txt.gz

次にNginx用の設定ファイルを作成して、Nginxの基本の設定ファイルを書き換えます。

$ su -
# cd /usr/local/src/ip_list
# sed -n 's/^JP\t\(.*\)/allow \1;/p' cidr.txt > /etc/nginx/allowip.conf
# vi /etc/nginx/nginx.conf

こんな感じ

http {
    ・・・
    # Allow IP
    include /etc/nginx/allowip.conf;
    deny all;

    include /etc/nginx/conf.d/*.conf;
}

そしてNginxを再起動すれば海外からのアクセスを全て遮断することになります。
Apacheと違ってallowとdenyを書く順序は逆になるみたいですね。 ^^A

ちなみに余談ですが、WPの場合は管理画面だけ個別にアクセス制限することもできます。
そうしたい場合はこんな感じの設定をそれらしい該当箇所に書けば良いかと思います。
※ただしこの場合は海外からのアクセスを受け入れる形になるのでタイトル詐欺です。

    location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ {
        include /etc/nginx/allowip.conf;
        deny all;
        ・・・
    }

あとは再起動。

# /etc/init.d/nginx restart

おわり

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
28
Help us understand the problem. What are the problem?