最近、管理しているサイトに、ポートスキャンをしてくるユーザーが多くなってきました。
自分で意図した脆弱性スキャンをしているのなら良いのですが、関係のない人がスキャン攻撃をしてきます。サーバーの負荷を増大させ、迷惑極まりない。
なので、普段は OpenVAS などのOSSツールは、アクセス拒否をするように設定してみました。
(ちなみに、OpenVAS のソフト自体には罪はないですよ。使っている人が悪いです。)
お断り: 実は。Nessus や Nikto のユーザーエージェントは知らないので、どなたか知っている人、間違っていたらご指摘&編集リクエスト願います。また、このユーザーエージェント良いよという方、編集リクエストをお願いします!
Apache の .htaccess 設定例
# AccessControl UserAgent
SetEnvIfNoCase User-Agent "OpenVAS" ua_key=on
SetEnvIfNoCase User-Agent "Nessus" ua_key=on
SetEnvIfNoCase User-Agent "Nikto" ua_key=on
order allow,deny
allow from all
deny from env=ua_key
deny from 127.0.0.1 #おまけで IP アドレスブロックしたい場合
.htaccess は設置したらすぐに有効になるので、これでOK。
nginx のnginx.conf 設定例
server {
server_name www.example.com;
#......
# いろいろな設定は省略
#......
set $deny_f 0;
if ( $http_user_agent ~* 'OpenVAS' ){
set $deny_f 1;
}
if ( $http_user_agent ~* 'Nessus' ){
set $deny_f 1;
}
if ( $http_user_agent ~* 'Nikto' ){
set $deny_f 1;
}
# おまけで IP アドレスを拒否したい場合
if ( $remote_addr = '127.0.0.1' ){
set $deny_f 1;
}
if ( $deny_f = 1) {
return 403;
}
}
※複数のドメインなどを管理している場合、別の conf ファイル(例: /etc/nginx/conf/deny_spambot.conf)として保存してinclude /etc/nginx/conf/deny_spambot.conf;
で指定してやると良いかもです。
nginx の場合はサーバーの再起動が必要です。
設定のチェックを行って、再起動しましょう。
sudo nginx -t
以下のどれかで再起動
sudo nginx -s reload
sudo systemctl restart nginx
sudo service ngins restart
参考記事
https://macareux.co.jp/blog/apachenginx
http://server-setting.info/centos/apache-nginx-5-setting-deny403.html
アプリ「POSTMAN」を使って動作テスト
きちんと、アクセス拒否できるか、確認するのも必須。
下記のアプリはおすすめです。
POSTMAN
https://www.getpostman.com/
手順
- 方式を GET にしてパラメーターをいれる
- Headers タブをクリック
- User-Agent を選択し
Mozilla/5.0 [en] (X11, U; OpenVAS 9.0.0)
を入力
- User-Agent を選択し
- "Send"ボタンを押して、Body の HTML の結果が 403 になっているか確認
以上