サービスの概要#
VPS ホスティングを利用する人が増えていますが、共有ホスティングや管理型サーバーと比較して、個人の VPS ホスティングは基本的には管理されていません。つまり、ホスティングプロバイダーは VPS ホスティングのネットワーク接続に責任を持っていますが、技術的な問題は自分自身で解決する必要があります。ウェブサイトは、自動化ツールによるスキャン、インジェクション、オーバーフロー、マルウェアの感染などの攻撃を受けることがよくあります。
商用の共有ホスティングにはセキュリティエンジニアがセキュリティ対策を行っていますが、VPS などの仮想クラウドサーバーには専門のサポートスタッフがいないため、自分自身で操作する必要があります。今日は、非常に優れた Nginx(openresty)のウェブアプリケーションファイアウォールモジュール ngx_lua_waf を紹介します。ngx_lua_waf は、ngx_lua をベースにしたウェブアプリケーションファイアウォールで、非常にシンプルなコードで、開発者の意図は使用の容易さであり、高性能ながら軽量です。
Ngx_lua_waf の主な機能#
SQLインジェクション、ローカルファイルインクルージョン、一部のオーバーフロー、Fuzzingテスト、XSS、SSRFなどのウェブ攻撃を防止する
svn/バックアップなどのファイルの漏洩を防止する
ApacheBenchなどの負荷テストツールの攻撃を防止する
一般的なスキャンハッカーツール、スキャナーをブロックする
異常なネットワークリクエストをブロックする
画像添付フォルダのPHP実行権限をブロックする
ウェブシェルのアップロードを防止する
ここで、Ngx_lua_waf の機能が非常に豊富であり、ほとんどのスキャン攻撃を効果的に拒否し、マルウェア感染からウェブサイトを保護するために非常に重要な役割を果たしていることがわかります。
インストール要件#
Ngx_lua_waf の作者は、lua サポートに lujit2.1 を使用することを推奨しています。ngx_lua のバージョンが 0.9.2 以上の場合、正規表現フィルタ関数を ngx.re.find に変更することをお勧めします。私たちの Nginx は、このウェブアプリケーションファイアウォールを展開するために、単に lua サポートをコンパイルするだけで十分です。これにより、サーバーにセキュリティゲートを追加します。
使用方法#
Nginx のインストールパスを /usr/local/nginx/conf/ と仮定します。
ngx_lua_waf を conf ディレクトリにダウンロードし、waf という名前で解凍します。nginx.conf の http セクションに追加するか、別の conf ファイルとして作成し、include を使用して nginx.conf に参照することもできます。
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;
access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;
config.lua の waf ルールディレクトリを設定します(通常は waf/conf/ ディレクトリ内)。
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
次に、デバッグのガイドラインに従って、nginx -t コマンドを実行して構成が正しいかどうかを確認します。正常にロードされたというメッセージが表示された場合は、nginx を再起動します。
詳細な設定ファイル:#
- RulePath = "/usr/local/nginx/conf/waf/wafconf/"
- -- ルールの保存場所
- attacklog = "off"
- -- 攻撃情報の記録を有効にするかどうか(logdir を設定する必要があります)
- logdir = "/usr/local/nginx/logs/hack/"
- -- ログの保存場所。このディレクトリはユーザーが作成し、nginx ユーザーに書き込み権限が必要です
- UrlDeny="on"
- --URL アクセスのブロックを有効にするかどうか
- Redirect="on"
- -- ブロック後のリダイレクトを有効にするかどうか
- CookieMatch = "on"
- --Cookie 攻撃のブロックを有効にするかどうか
- postMatch = "on"
- --POST 攻撃のブロックを有効にするかどうか
- whiteModule = "on"
- --URL ホワイトリストを有効にするかどうか
- black_fileExt={"php","jsp"}
- -- アップロードを許可しないファイルの拡張子を指定します
- ipWhitelist={"127.0.0.1"}
- --IP ホワイトリスト。複数の IP はカンマで区切ります
- ipBlocklist={"1.0.0.1"}
- --IP ブラックリスト。複数の IP はカンマで区切ります
- CCDeny="on"
- --CC 攻撃のブロックを有効にするかどうか(nginx.conf の http セクションに lua_shared_dict limit 10m; を追加する必要があります)
- CCrate = "100/60"
- --CC 攻撃の頻度を設定します(秒単位)。デフォルトでは、1 分間に同じ IP から同じアドレスに対して 100 回のリクエストしか許可されません
- html=[[Please go away~~]]
- -- 警告内容を指定します。角括弧内でカスタマイズできます
- 注意:二重引用符を変更しないでください。大文字と小文字を区別します