はじめに#
現在、多くのウェブマスターは、多かれ少なかれ CC 攻撃に遭遇することがあります。最も効果的な防御方法は、CDN を使用することです。たとえば、海外の CloudFlare です。ただし、CF はしばしば速度が遅く、多くの場所でブロックされているため、体験が良くありません。そのため、スクリプトを使用して防御することができます。以前に CC 攻撃を防ぐスクリプトを公開しました。Linux VPS で CC 攻撃を防ぐワンクリックスクリプト、WeChat 通知付き。ログにアクセスする必要があるため、効果があまり良くありません。大きな CC 攻撃には耐えられません。そのため、このスクリプトは一部の状況には適していません。
ここでは、CC 攻撃を防ぐために、Nginx + Lua を使用して WAF ファイアウォールを設定し、URL キーワードなどをブロックする方法について説明します。その利点は、Nginx のリソース使用量が少なく、高並行性の利点があり、Lua 言語の軽快さがあり、ユーザーがアクセスする前に攻撃を処理できるため、非常に効果的です。
WAF を設定する前に、Lua モジュールをコンパイルする必要がありますが、OneinStack の LNMP ワンクリックパッケージには OpenResty に Lua モジュールが付属しているため、このパッケージを使用してウェブサイト環境をインストールすることをお勧めします。
LNMP のインストール#
まず、OneinStack のウェブサイトからワンクリックパッケージを取得します。アクセス先:https://oneinstack.com/auto/。Nginx は OpenResty を選択します。メモリが 1G 未満の場合、MySQL は 5.5 より大きくすることはできません。その他の設定は自分で調整してください。
取得したワンクリックパッケージを SSH クライアントにコピーして実行し、インストールが完了するまで待ちます。
LNMP 操作コマンド:
#操作する前にoneinstackディレクトリに移動してください
cd oneinstack
#ウェブサイトを追加する
./vhost.sh
#ウェブサイトを削除する
./vhost.sh del
#その他のコンポーネントを追加する
./addons.sh
#ウェブサイトのバックアップ
./backup_setup.sh
#バージョンをアップグレードする
./upgrade.sh
その他のコマンドや画像付きの操作はこちらを参照してください:https://oneinstack.com/install/。
関連ディレクトリ:
#データベースフォルダー、phpMyAdminをxxなどの推測しにくい名前に変更し、IP:xxでデータベースにアクセスできるようにします
/data/wwwroot/default
#ウェブサイトのディレクトリ
/data/wwwroot
#ウェブサイトの設定ファイル
/usr/local/openresty/nginx/conf/vhost
ウェブサイトを追加した後、FTP ツールを使用してプログラムをルートディレクトリにアップロードし、データベースを作成し、ウェブサイトの設定を行います。
WAF ファイアウォールの設定#
ここでは、GitHub で非常に人気のある ngx_lua ベースの WAF ファイアウォールスクリプトを使用して CC 攻撃や URL キーワードのブロックを行います。以下の機能があります。
- SQL インジェクション、ローカルファイルインクルージョン、一部のオーバーフロー、fuzzing テスト、xss、55RF などの Web 攻撃を防止します。
- svn / バックアップなどのファイルの漏洩を防止します。
- ApacheBench などの負荷テストツールの攻撃を防止します。
- 一般的なスキャンハッカーツール、スキャナーをブロックします。
- 異常なネットワークリクエストをブロックします。
- 画像添付フォルダーの php 実行権限をブロックします。
- Web シェルのアップロードを防止します。
GitHub のリンク:https://github.com/loveshell/ngx_lua_waf。
まず、ngx_lua_waf
をconf
ディレクトリにダウンロードします。
cd /usr/local/openresty/nginx/conf
wget https://www.moeyy.cn/usr/down/waf.tar.gz
tar zxf waf.tar.gz
rm -rf waf.tar.gz
次に、/usr/local/openresty/nginx/conf/nginx.conf
を編集し、以下のコードをhttp{}
内に追加します。
lua_shared_dict limit 10m;
lua_package_path "/usr/local/openresty/nginx/conf/waf/?.lua";
init_by_lua_file "/usr/local/openresty/nginx/conf/waf/init.lua";
access_by_lua_file "/usr/local/openresty/nginx/conf/waf/waf.lua";
その後、service nginx restart
コマンドを実行して Nginx を再起動し、設定を有効にします。
設定ファイル:
#設定ファイルのパス
/usr/local/openresty/nginx/conf/waf/config.lua
#詳細なパラメーターは、必要に応じて設定してください
RulePath = "/usr/local/openresty/nginx/conf/waf/wafconf/"
--ルールの保存場所
attacklog = "on"
--攻撃情報の記録を有効にするかどうか、logdirを設定する必要があります
logdir = "/data/wwwlogs/"
--logの保存場所、このディレクトリはユーザーが作成し、nginxユーザーに書き込み権限を与える必要があります
UrlDeny="on"
--URLアクセスをブロックするかどうか
Redirect="on"
--ブロック後にリダイレクトするかどうか
CookieMatch = "on"
--Cookie攻撃をブロックするかどうか
postMatch = "off"
--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攻撃をブロックするかどうか
CCrate = "10/60"
--CC攻撃の頻度を設定します(秒単位)
--デフォルトでは、1分間に同じIPから同じアドレスに対して10回のリクエストしか許可されません
フィルタールール:
#フィルタールールは/usr/local/openresty/nginx/conf/waf/wafconfにあります。
#必要に応じてルールを調整してください。各ルールは改行するか、分割する必要があります
argsは、getパラメーターをフィルタリングするためのルールです
urlは、getリクエストのURLをフィルタリングするためのルールです
postは、postリクエストをフィルタリングするためのルールです
whitelistは、フィルタリングしないURLを含みます
user-agentは、user-agentをフィルタリングするためのルールです
#デフォルトでは、getとpostのフィルタリングが有効になっています。cookieのフィルタリングを有効にするには、waf.luaを編集し、一部の--コメントを解除してください。
#ログファイル名の形式は次のとおりです:仮想ホスト名_sec.log
ホワイトリストの設定:
#IPホワイトリスト
/usr/local/openresty/nginx/conf/waf/wafconf/config.luaを編集します。
複数のIPを指定することができます。複数のIPはカンマで区切って指定します。例:{"127.0.0.1","192.155.1.1"}。
#URLホワイトリスト
/usr/local/openresty/nginx/conf/waf/wafconf/whiteurlを編集します。1行に1つのURLを記入し、文字列を確認します。通常、APIリンクを許可するために使用され、パラメータを含めることはできません。
例えば、https://xxx/Rats.php?xxの場合、^/Rats.php$を入力して、/Rats.phpで始まるすべてのURIを許可します。
効果のテスト:
CC 攻撃をブロックし、503 エラーを返します。
キーワードがトリガーされると、ファイアウォールによってブロックされます。
注意:ngx_lua_waf はデフォルトで phpMyAdmin ディレクトリをブロックしますので、他の名前に変更してデータベースにアクセスしてください。