0x01はじめに
NGX_LUA_WAF実装WAFは、HTTP要求(プロトコル解像度モジュール)を解析し、ルール(ルールモジュール)を検出し、異なる防御アクション(アクションモジュール)を実行し、防御プロセス(ログモジュール)を記録する1つの文で説明します。したがって、この記事でのWAFの実装は、5つのモジュール(構成モジュール、プロトコル解像度モジュール、ルールモジュール、アクションモジュール、エラー処理モジュール)で構成されています。
元のバージョンの主な機能は次のとおりです。
1. SQLインジェクション、局所包含、部分的なオーバーフロー、ファジングテスト、XSS、SSRF、その他のWeb攻撃の防止
2. SVN/バックアップリークなどのファイルを防止します
3. Apachebenchなどのストレステストツールから攻撃が防止します
4.一般的なスキャンハッキングツールとスキャナーをブロックします
5.異常なネットワークリクエストをブロックします
6.画像添付ファイルカテゴリディレクトリPHP実行権限をブロックする
7. WebShellのアップロードを防ぎます
二次変換後のルール傍受関数:
1. IPホワイトリストとブラックリスト機能をサポートし、ブラックリストへのアクセスを直接拒否します。
2。フィルタリングを必要としないURLをサポートし、URLを定義します。
3.ユーザーエージェントフィルタリングをサポートし、カスタムルールのエントリを一致させてから、プロセス(403に戻ります)。
4。CC攻撃保護をサポートします。設定値が設定値を超えると、単一のURLによって指定された訪問数は403に直接返されます。
5.クッキーフィルタリングをサポートし、カスタムルールでエントリを一致させ、それらを処理します(403を返します)。
6.ユーザーが要求したURLにこれらが含まれている場合、URLフィルタリング、カスタムルールの一致するエントリ、および返品403をサポートします。
7.サポートURLパラメーターフィルタリング、原則は上記と同じです。
8。ロギングをサポートし、拒否されたすべての操作をログに記録します。
9.ログレコードはJSON形式であり、攻撃ログの収集、ストレージ、検索、ディスプレイにElkstackを使用するなど、ログ分析を容易にします。
0x02 nginx + lua deployment
システム環境:CENTOS7.0x64
1./usr/local/srcディレクトリを入力します
[root@localhost src]#cd/usr/local/src
2. NGINXインストールに必要なNGINXおよびPCREソフトウェアパッケージ、および最新のLuajitおよびNGX_Devel_Kit(NDK)ソフトウェアパッケージと、それぞれChungeが書いたLua-Nginx-Moduleをダウンロードします。
[root@localhost src]#wget http://nginx.org/download/nginx-1.9.4.tar.gz
[root@localhost src] #wget https://ftp.pcre.org/pub/pcre/pcre-8.37.tar.gz -no-check-certificate
[root@localhost src] #wget http://luajit.org/download/luajit-2.0.4.tar.gz
[root@localhost src]#
wget https://github.com/openrest/lua-nginx-module/archive/v0.9.16.tar.gz - no-check-certificate
[root@localhost src]#
WGET https://GITHUB.COM/SIMPL/NGX_DEVEL_KIT/ARCHIVE/V0.2.19.TAR.GZ-NO-CHECK-CERTIFICATE
3。nginxを実行する普通のユーザーを作成します
[root@nginx -lua src]#useradd -s /sbin /nologin -m www
4.現在のディレクトリのダウンロードされたソフトウェアパッケージをそれぞれ減圧します
[root@localhost src]#tar zxvf v0.2.19.tar.gz
[root@localhost src]#tar zxvf v0.9.16.tar.gz
[root@localhost src]#tar zxvf pcre-8.37.tar.gz
[root@localhost src]#tar zxvf luajit-2.0.4.tar.gz
5.コンパイルする必要があるLuajitとGCCコンピレーション環境をインストールします。
[root@localhost src]#cd luajit-2.0.3
[root@localhost src] #yumインストールgcc
[root@localhost src]#make make install
6. nginxをインストールし、モジュールとコンパイルする必要のあるモジュールとC ++モジュールをロードします。
[root@localhost luajit-2.0.4]#cd .
[root@localhost src]#tar zxvfnginx-1.9.4.tar.gz
[root@localhost src]#export luajit_lib=/usr/local/lib
[root@localhost src]#export luajit_inc=/usr/local/include/luajit-2.0
[root@localhost nginx-1.9.4]#yum -y openssl openssl-devel
[root@localhost nginx-1.9.4]#./configure ---prefix=/usr/local/nginx - user=www=www -with-http_ssl_module -with-http_stub_status_module -with-aio -with-htp_dav_modue -add-module=./ngx_devel_kit-0.2.19/-add-module=./lua-nginx-module-0.9.16/-with-pcre=/usr/local/src/pcre-8.37/
[root@localhost nginx-1.9.4]#yum -yインストールgcc-c ++
[root@localhost nginx -1.9.4] #make -j2はインストールします
7.ソフト接続の動的ライブラリ接続を作成します
[root@localhost nginx-1.9.4]#ln -s/usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
8。NGINXサービスを開始します
root@localhost nginx-1.9.4]#/usr/local/nginx/sbin/nginx-t
[root@localhost nginx-1.9.4]#/usr/local/nginx/sbin/nginx
9 Centos7に付属のファイアウォールをオフにします
[root@localhost nginx -1.9.4]#sed -i 7s/endforcing/disabled//etc/selinux/config
[root@localhost nginx-1.9.4] #systemctl停止firewalld.service
10。http://172.16.89.145へのリモートアクセス、ページは次のように表示され、nginxが正常にインストールされたことを示します
11. gitサービスをインストールします
[root@localhost src]#yumインストールgit
12.clone and now ngx_lua_waf、nginxインストールパスは:/usr/local/nginx/conf/と想定されます
ngx_lua_wafをconfディレクトリにダウンロードし、解凍して名前を付けますwaf
[root@localhost src]#git clone 3https://github.com/loveshell/ngx_lua_waf.git
[root@localhost ngx_lua_waf]#cd/usr/local/nginx/conf/
[root@localhost conf]#mkdir waf
[root@localhost ngx_lua_waf] #cp -r/usr/local/src/ngx_lua_waf/*/usr/local/nginx/conf/waf/
メインディレクトリ情報は次のとおりです。
├) config.lua #waf configurationファイル
├|─马云惹不起马云init.lua#wafのルールファイルを読み取ります
├├) shsh #wafインストールファイル、変更する必要があります
├─●readme.md #explanationドキュメント
waffconf #ruleライブラリ
semauls│firgs #get #get requestパラメーターフィルタリングルール
│├├。Cookie#Cookieフィルタリングルール
post #postリクエストフィルタリングルールを投稿します
│├│。です#get request urlフィルタリングルールを要求します
huse├├。ユーザーエージェント#ユーザーエージェントフィルタリングルール
│└。
└└)lua #wafルール実行ファイル
13。nginx.confでHTTPセグメントを構成します
[root@localhost waf] #vi /usr/local/nginx/conf/nginx.conf
おおよその構成情報は次のとおりです。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;
14. ngx_lua_wafの下のconfig.luaファイルを変更します
root@localhost waf]#vi /usr/local/nginx/conf/waf/config.lua
[root@localhost logs]#mkdir waf
構成の詳細は次のとおりです。config.lua:
rulepath='/usr/local/nginx/conf/waf/wafconf/'
-Rulesストレージディレクトリ
AttackLog='Off'
- 攻撃情報の記録を有効にするかどうか、logdirを構成する必要があります
logdir='/usr/local/nginx/logs/waf/'
- ユーザー自身が作成する必要があるログストレージディレクトリ、およびnginxユーザーの書き込み可能な許可が必要です
urldeny='on'
-URLアクセスを傍受するかどうか
redirect='on'
- 傍受後にリダイレクトするかどうか
cookiematch='on'
- クッキー攻撃を傍受するかどうか
postmatch='on'
- ポスト攻撃を傍受するかどうか
whitemodule='on'
-URLホワイトリストを有効にするかどうか
black_fileext={'php'、 'jsp'}
- ファイルの接尾辞タイプに入力してくださいアップロードは許可されていません
ipwhitelist={'127.0.0.1'}
-IPホワイトリスト、複数のIPがコンマで区切られています
ipblockList={'1.0.0.1'}
-IPブラックリスト、複数のIPがコンマで区切られています
ccdeny='on'
-Intercepting CC攻撃を有効にするために(nginx.confのHTTPセグメントにLUA_SHARED_DICT制限10mを追加する必要があります;)
ccrate='100/60'
- CC攻撃頻度、ユニット、秒を設定します。
- 同じIPが同じアドレスを100回リクエストするために1分間デフォルト
html=[[去ってください~~]]
- 説明するコンテンツは、ブラケットでカスタマイズできます
注:二重引用符をランダムに使用しないでください、ケースに敏感です
15。NGINXサービスを再起動します
/usr/local/nginx/sbin/nginx -sリロード
16.悪意のある接続アドレスにアクセスすると、NGX_LUA_WAFが正常に展開されていることを示しているように見えます。
http://172.16.89.145/?s=./etc/passwd
0x03レコードWAFログインターセプトレコード
1。ログログレコードに承認されたユーザーwwwを追加します(このユーザーはnginxを実行しているユーザーです)。
[root@localhost waf]#chown -r www.www/usr/local/nginx/logs/waf/
2.書き込み許可をログディレクトリに追加します。
[root@localhost waf]#chmod 700/usr/local/nginx/logs/waf/
3。WAFレコードのログ情報を表示できます
[root@localhost waf]#cat localhost_2018-06-05_sec.log
0x04その他のルール説明
フィルタリングルールはWAFCONFの下にあり、ニーズに応じて調整できます。各ルールを壊すか、|で分割する必要があります。
ルールは、ARGSのパラメーターを取得します
URLは、getでURLフィルタリングのみを要求するルールです
投稿は、投稿リクエストでのみフィルターを掲載するルールです
ホワイトリストはホワイトリストであり、その中のURLは一致し、フィルタリングされていません
ユーザーエージェントは、ユーザーエージェントのフィルタリングルールです
取得と投稿のフィルタリングはデフォルトで有効になります。 Cookieフィルタリングを有効にする必要がある場合は、waf.luaを編集してパーツをキャンセルします。
0x05要約
1.NGINX_LUA_WAFは一般的に強力であり、他のソフトウェアファイアウォールModSecurityよりもわずかに簡単です。
2。NGX_LUA_WAFのバグは、主にファイアウォールポリシーの複雑さによって引き起こされます。これは、2つの結果を引き起こします。もう1つは、不適切なファイアウォールの構成が過失致死を引き起こすということです。
3.さらに、サイトのタイプに従って異なるポリシーが構成され、デフォルトの構成はグローバルに有効になります。たとえば、フォーラムやその他の特別なものにより、多くのHTMLインサートが許可されており、そのような戦略は緩くする必要があります。
4.最後のハックレコードログは、ELKによって分析できます。 ELKは、ログ形式に基づいて特別なテンプレートを作成する必要があります。このテンプレートは、ほとんどのログタイプと互換性があり、分析できない完全に規制されていないログがいくつかあります。
5.最後に、Elkはログ分析結果の分類を表示できますが、どの種類のルールタグタイプが属するかを区別することはできません。
6.最後に、NGX_LUA_WAFを本当に使用したい場合は、一部のソースサイトで少数のソースを試してみることを検討できることをお勧めします。フロントエンドサイトを使用することはお勧めしません。ソフトウェアをより深く理解した後、オンラインでのみ使用できます。
7。サプリメント:現在、NGX_LUA_WAFの3つのカテゴリの特定のユーザーエージェントを拒否し、特定のサフィックスファイルへのアクセスを拒否し、SQLインジェクションの防止に精通しています。
計画は、実装手順に関するものです。
1.一度にオンラインで展開しないでください。最初に展開してください
Recommended Comments