
自分でサーバーを購入してサイトを構築するサーバーのセキュリティ問題が発生します。自分では気づかないかもしれませんが、サーバーは毎日いくつかのボットによってスキャンされています。本記事では、Naibaがサーバースキャンを防ぐためのいくつかのNginxルールを紹介します。
1、デフォルトでのIPアドレスによるサーバーアクセスを禁止する
各サーバーにはIPアドレスがあり、一部のボットはIPアドレスに直接アクセスしてサイトのコンテンツを探ります。
Nginxの設定情報に以下のコードを追加することで、IPアドレス経由のアクセスを禁止できます。
#别人如果通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500
server {
listen 80 default;
server_name _;
return 500;
}
#开放一个或多个真实的希望被访问的域名配置,设置如下:
server {
linten 80;
server_name naibabiji.com;
}
2、ボットによるサイトの圧縮ファイルスキャンを禁止する
同様に、多くのボットはドメインのファイルに直接アクセスします。例えば、以下の画像はNaibaサイト構築ノートのwwwroot.zipファイルをスキャンしているものです。
これらの圧縮ファイルへのリンクを、非常に大きなファイルへのダウンロードにリダイレクトすることで、ボットにゆっくりとダウンロードさせることができます。
rewrite \.asp/?$ http://speedtest.tele2.net/50GB.zip permanent;
rewrite \.zip/?$ http://speedtest.tele2.net/50GB.zip permanent;
rewrite \.gz/?$ http://speedtest.tele2.net/50GB.zip permanent;
rewrite \.7z/?$ http://speedtest.tele2.net/50GB.zip permanent;
rewrite \.sql/?$ http://speedtest.tele2.net/50GB.zip permanent;
rewrite \.rar/?$ http://speedtest.tele2.net/50GB.zip permanent;
rewrite \.tar/?$ http://speedtest.tele2.net/50GB.zip permanent;上記のコードは、サイト上の.asp/.zip/.gz/.7z/.sql/.rar/.tar形式のファイルにアクセスがあった場合、自動的に50Gサイズのzipリンクにリダイレクトします。ボットに這わせ続けさせましょう。
さらに大きなファイル、例えば1000Gを用意して、そのハードディスクを満タンにすることもできます。
http://speedtest.tele2.net/1000GB.zip http://speedtest.tele2.net/100GB.zip http://speedtest.tele2.net/50GB.zip
もちろん、これらのボットをブロックするためにDefender Securityこのプラグインをインストールすることもできます。リダイレクトルールの追加方法がわからない場合は、例えばRanK Mathのリダイレクト機能。
9月20日更新:
本日、新しいボットがサイトをスキャンする際に上記の301を無視している(または量が多すぎる?)のを発見し、Naibaサイト構築ノートのサーバーCPUを何度も圧迫したため、別の方法を使うしかありませんでした。
最もシンプルで乱暴な方法は、nginx設定に以下のルールを直接追加し、サーバー上のファイルダウンロードリンクへのアクセスを直接禁止することです(リソースをローカルでダウンロード提供しているサイトでは注意)。
location ~ \.(zip|rar|sql|bak|gz|7z)$ {
return 444;
}ユーザーがサイト上のzip、rarなどのリソースにアクセスした場合、直接444エラーコードを返します。
444 No Response
Nginx上のHTTPサーバー拡張。サーバーはクライアントに一切の情報を返さず、接続を閉じます(マルウェア対策に有効)。
もう一つの方法は、Nginxにwafファイアウォールをインストールすることです。もしあなたが宝塔パネルその場合、直接バックエンドのソフトウェアストアからインストールできます。
LNMP一键パッケージを使用している場合は、以下の方法でインストールしてください。
LNMP一键インストールパッケージは1.5からluaサポートオプションが追加され、lnmp.conf内のEnable_Nginx_Luaの後のパラメータを y に変更することでluaを有効化できます。lnmpをインストールしていない場合は、lnmp.confを変更して保存後、lnmpをインストールするとlua対応になります。既にlnmpをインストール済みの場合は、同様にlnmp.confを変更し、lnmpインストールパッケージディレクトリで ./upgrade.sh nginx を実行してnginxをアップグレードし、現在のnginxバージョン番号または新しいバージョン番号を入力すると、アップグレード後にlua対応になります。
ngx_lua_wafのインストール
ngx_lua_wafをダウンロードしてインストール:
wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip -O ngx_lua_waf.zip unzip ngx_lua_waf.zip mv ngx_lua_waf-master /usr/local/nginx/conf/waf
nginxでngx_lua_wafを設定し有効化
/usr/local/nginx/conf/nginx.conf を編集し、server_tokens off; の下に以下のコードを追加:
lua_package_path "/usr/local/nginx/conf/waf/?.lua"; lua_shared_dict limit 10m; init_by_lua_file /usr/local/nginx/conf/waf/init.lua;
編集完了後保存
特定のバーチャルホストでngx_lua_wafを有効にしたい場合は、該当バーチャルホストのserverセクションを編集し、そのserverセクション内の root サイトディレクトリ行の下に以下のコードを追加:
access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;
編集完了後保存
nginx設定ファイルをテスト:/usr/local/nginx/sbin/nginx -t
nginx設定をリロードして反映:/usr/local/nginx/sbin/nginx -s reload
テストとリロードでエラーがなければ有効になっています。
http://ドメイン/test.php?id=../etc/passwd にアクセスしてテストできます
より詳細はこの記事を参照してください。