Nginxエラーログに不正アクセスIPを自動でブラックリストに入れたいです。

[code]

    /var/log/nginx/error.log
    
[/code]

を見ると毎日何百行もの知らないIPアドレスから、あるはずのないディレクトリやファイルにアクセスされて困っています。データベースの接頭辞も複雑にしてあるのですが、なぜかアクセスされています。（アクセスできないというエラー）

> 2016/03/12 07:26:21 [error] 909#909: *1528710 FastCGI sent in stderr:  
>  "Primary script unknown" while reading response header from upstream,  
>  client: 1.86.87.12, server:hoge.com  
>  request: "GET /XXXX.php?RequestType=Test HTTP/1.0", upstream:  
>  "fastcgi://unix:/run/php-fpm/php-fpm.sock:" host: hoge.com

全世界に見られているWEBサイトなので、アクセス許可IPを日本のみにするやり方以外で、エラーログに表示された、あるいはXXXX.phpにアクセスしたIPを自動で拒否する方法はありませんでしょうか？




**不正アクセスIPの定義**

次のどちらかを満たすIPが不正アクセスとします。

a.エラーログに表示されたIP  
b.存在しない任意の.phpにアクセスしたIP

**条件**

アクセスログはありません。

**手順**

1) 存在しない.phpがアクセスされた時にエラーログを残す

[code]

    location ~ \.php$ {
        fastcgi_intercept_errors on;
    }
    
[/code]

2) エラーログからIPを抽出して/etc/nginx/blacklist.confに保存する。書式は`deny 1.86.87.12;`

[code]

    grep -h -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' /etc/nginx/blacklist.conf /var/log/error.log | sort | uniq | while read line; do echo "deny $line;"; done> /etc/nginx/blacklist.conf+ && mv /etc/nginx/blacklist.conf+ /etc/nginx/blacklist.conf
    
[/code]

3) nginx.confからincludeする。

[code]

    location / {
      include /etc/nginx/blacklist.conf;
    }
    
[/code]

4) 先ほどの抽出スクリプトでブラックリストファイルを更新後、`kill -HUP $(cat /run/nginx.pid)` として有効化する。




**不正アクセスIPの定義**

次のどちらかを満たすIPが不正アクセスとします。

a.エラーログに表示されたIP  
b.存在しない任意の.phpにアクセスしたIP

**条件**

アクセスログはありません。

**手順**

1) 存在しない.phpがアクセスされた時にエラーログを残す

[code]

    location ~ \.php$ {
        fastcgi_intercept_errors on;
    }
    
[/code]

2) エラーログからIPを抽出して/etc/nginx/blacklist.confに保存する。書式は`deny 1.86.87.12;`

[code]

    grep -h -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' /etc/nginx/blacklist.conf /var/log/error.log | sort | uniq | while read line; do echo "deny $line;"; done> /etc/nginx/blacklist.conf+ && mv /etc/nginx/blacklist.conf+ /etc/nginx/blacklist.conf
    
[/code]

3) nginx.confからincludeする。

[code]

    location / {
      include /etc/nginx/blacklist.conf;
    }
    
[/code]

4) 先ほどの抽出スクリプトでブラックリストファイルを更新後、`kill -HUP $(cat /run/nginx.pid)` として有効化する。

