2 flat logo on transparent 256
2018-06-10

Nginxで一部海外IPからのアクセスを遮断する

Denial08120

最近海外からのサイトアクセスが増加しているのですが、 ログを見ると、明らかに攻撃対象を調査している履歴があったので、今回Nginxで一部海外からのアクセスを遮断する設定を行いました。

なお、特定のIPのみからのアクセスを拒否したい場合は以下の記事を御覧ください

Nginxで特定のIPアドレスからの接続を拒否する

海外IPからアクセスを遮断するには

Nginx はdeny <180.76.186.86>;と記載すれば、指定IPアドレスからのアクセスを削除できます。

今回Nginxでアクセス対象のIPアドレスリストを作成し、 遮断ルールとして反映します。

海外からのアクセスを全て遮断してもいいのですが、 グーグルのbotは海外からアクセスされるため、全て遮断するとSEO的にもあまりよくないので、今回は特定国の中国 ロシア フランスのIPアドレスを遮断します。

海外IPからのアクセスログ

当サイトのプログラミング言語はRubyでフレームワークはRuby On Railsです。

その為そもそもindex.phpなどのルートは存在しないのですが、 以下ログの通り、1秒以内に中国からアクセス履歴がありました。

180.76.186.86 - - [09/Jun/2018:19:31:28 +0000] "GET /phpMyAdmin.old/index.php HTTP/1.1" 301 185 "-" "Mozilla/5.0"

180.76.186.86 - - [09/Jun/2018:19:31:28 +0000] "GET /pma-old/index.php HTTP/1.1" 301 185 "-" "Mozilla/5.0"

180.76.186.86 - - [09/Jun/2018:19:31:29 +0000] "GET /claroline/phpMyAdmin/index.php HTTP/1.1" 301 185 "-" "Mozilla/5.0"

180.76.186.86 - - [09/Jun/2018:19:31:29 +0000] "GET /typo3/phpmyadmin/index.php HTTP/1.1" 301 185 "-" "Mozilla/5.0"

180.76.186.86 - - [09/Jun/2018:19:31:29 +0000] "GET /phpma/index.php HTTP/1.1" 301 185 "-" "Mozilla/5.0"

180.76.186.86 - - [09/Jun/2018:19:31:29 +0000] "GET /phpmyadmin/phpmyadmin/index.php HTTP/1.1" 301 185 "-" "Mozilla/5.0"

※IP180.76.186.86は中国

国別のIPアドレスリストをダウンロードする

有志の方が作成された国別IPアドレスリストを、nginxのディレクトリへダウンロードします。

操作権限及び保存先のディレクトリは適時変更してください。

$ cd /etc/nginx
$ wget http://nami.jp/ipv4bycc/cidr.txt.gz
$ gunzip cidr.txt.gz

アクセス拒否リストを作成する

nginxのディレクトリで deny.confを新規作成します

この deny.confファイルは先程ダウンロードした国別IPアドレスリストからアクセス拒否したい国のIPアドレスを流しこみ、nginxでincludeします。

※ファイル名 権限は適時変更してください。

$ cd /etc/nginx
$ touch deny.conf

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

※国名の指定はIPアドレスリストを提供している このサイトから御覧ください

流し込みが完了したら内容を見てみましょう。 大量のIPアドレスが記載されています。

vi deny.conf

deny 213.111.0.0/18;
deny 213.128.32.0/19;
deny 213.138.0.0/19;
deny 213.139.96.0/19;

Nginxへルールを設定する

etc/nginx/nginx.conf


http {
    include /etc/nginx/deny.conf;

    #VirtualHostを設定している場合は以下を記載
    #include /etc/nginx/deny.d/*.conf;
}

Nginxをリロード

あとはリロードすれば反映されます。

nginx -s reload

その他関連記事

Nginxでgzip圧縮を設定する

Nginxでトレイリングスラッシュ (trailing slash)をリダイレクトする

無料で使えるCDN Cloudflare(クラウドフレア)の登録方法を解説

Amazon Linux 、Nginx、CertbotでLet’s Encryptを利用し、無料でSSL対応する

Nginxで特定のIPアドレスからの接続を拒否する

前の記事
次の記事
人気記事
カテゴリーから記事を探す