Nginxでの不正アクセス防止

ある程度、業務経験のあるエンジニアであれば独自の不正アクセス対策方針を持っているものですが、私の場合、利用しているかどうかに関わらずアクセスが多いパスはすべて403を返すように設定しています。

  • .svn、.git、.htaccess、.envなどの設定関係のファイルはすべて403
  • WordPress脆弱性狙いでアクセスされやすい wp-config.php、xmlrpc.php、wp-admin、wp-includesなどは403*1
  • 最近 /api/v1/time というパスへのアクセスがとても多いのでこれも 403

上記を踏まえて設定すると下記のようになります。

location ~* /((wp-config|xmlrpc)\.php|\.(svn|git|env|htaccess))$ {
    return 403;
}
location ~* (/api/v1/time|/wp-admin|/wp-includes) {
    return 403;
}


さらに、phpをまったく使わないか、あるいはphpという拡張子をつけてアクセスさせることが一切ないようなサーバーの場合にはphpが拡張子のURLをすべて禁止します。

location ~* /(.*\.php|\.(svn|git|env|htaccess))$ {
    return 403;
}
location ~* (/api/v1/time|/wp-admin|/wp-includes) {
    return 403;
}


設定ができたら「nginx -t」でシンタックスエラーがないことを確認の上、サーバーをreloadします。

$ nginx -t 
$ systemctl reload nginx

*1:ただし、WordPressを使っている場合はwp-admin、wp-includesは制限してはいけません。また、WordPressでXMLRPC APIを使っている場合はxmlrpc.php も制限してはいけません。