Apache での ModSecurity のインストール、有効化、および構成

Apache での ModSecurity のインストール、有効化、および構成

ModSecurity は、Web サーバーに入るすべてのパケットをチェックする強力なパケット フィルタリング ツールです。内部ルールに従って各パケットを比較し、パケットをブロックする必要があるか、Web サーバーへの送信を継続する必要があるかを判断します。

1. ダウンロード

modsecurity-apache: http://sourceforge.net/projects/mod-security/files/modsecurity-apache/
modsecurity-crs: http://sourceforge.net/projects/mod-security/files/modsecurity-crs/0-CURRENT/

2. インストール

1) mod_unique_idモジュールを有効にする
2) サーバーに最新バージョンのlibxml2ライブラリがインストールされていることを確認します。
3) Apache httpdを停止する

4) 解凍

gzip -d modsecurity-apache_2.6.3.tag.gz
tar xvzf modsecurity-apache_2.6.3.tar
gzip -d modsecurity-core-rules_2.6.tar.gz
tar xvzf modsecurity-core-rules_2.6.tar.gz

5) 構成

./configure

6) ModSecurityをコンパイルしてテストする

作る
テストする

7) インストール

インストールする

http.conf を変更し、ModSecurity を有効にして、httpd.conf ファイルに次の内容を追加します。

ロードファイル /usr/lib/libxml2.so
ロードモジュール security2_module modules/mod_security2.so

8) Apacheを再起動する

ModSecurity はここにインストールされています。設定手順のドキュメントを参照できます: http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual

Ubuntu に Apache2+ModSecurity をインストールし、WAF ルールをカスタマイズする

VPS ではクラウド WAF 機能を使用していますが、それでも少し心配です。二重の保険として、modsecurity を使用してルールをカスタマイズすることにしました。以下では、Apache サーバー用の ModSecurity シールドを構成する方法について説明します (modsecurity は現在、Nginx、IIS もサポートしています)。

今回は、ソース パッケージのインストール方法を使用すると毎回、奇妙なライブラリ依存関係エラーが発生して混乱するため、パッケージ マネージャーを使用してインストールすることを選択しました。

インストール環境:

OS: Ubuntu 14.04.1 LTS
アパッチ: Apache/2.4.7 (Ubuntu)

ステップ1: Apacheをインストールする

必要なライブラリ サポートが大幅に少なくなる apt-get を使用して Apache をインストールすることをお勧めします。 ! ! !面倒でなければ、ソースからインストールすることもできます

apt-get install apache2と入力します。

そのようなソフトウェアパッケージが存在しないというメッセージが表示されたら、ソフトウェアパッケージを更新します。apt-get install update

この手順がインストールされると、Apache はサービスを提供できるようになります。ローカル Web サイトにアクセスするには、127.0.0.1 を入力します。

ステップ2: modsecurityをインストールする

これは上記と同じです。

apt-get で libxml2 libxml2-dev libxml2-utils libaprutil1 libaprutil1-dev libapache2-modsecurity をインストールします。

インストール後、modsecurityのバージョン番号を確認するには、

dpkg -s libapache2-modsecurity | grep バージョン

ステップ3: modsecurityを構成する

サービス apache2 をリロードする

このコマンドが有効になると、modsecurityログファイルmodsec_audit.logが/var/log/apache2/ディレクトリに生成されます。

ModSecurity コアルールセットの使用

使用したいルールセットを次のディレクトリに配置します

/usr/share/modsecurity-crs/activated_rules/ をコピーします。

基本ルールセットを有効にするを選択

for f in $(ls ../base_rules/); do ln -s ../base_rules/$f; 完了

ルールセットを有効にするためにApacheモジュール設定を変更する

注: modsecurity 2.7と2.6の設定ファイルにはいくつかの違いがあります。

(1)バージョン2.7

vim /etc/apache2/mods-available/security2.conf
改訂

<IfModule セキュリティ2モジュール>
# modsecurity の永続データ用のデフォルトの Debian ディレクトリ
SecDataDir /var/cache/modsecurity
# /etc/modsecurity 内のすべての *.conf ファイルを含めます。
# ローカル設定をそのディレクトリに保存する
# このファイルの簡単なアップグレードが可能になり、
# 生活を楽にする
オプションの /etc/modsecurity/*.conf を含める
オプションの /usr/share/modsecurity-crs/*.conf を含める
オプションの /usr/share/modsecurity-crs/activated_rules/*.conf を含める
</モジュール>

(2)バージョン2.6

‍‍vim /etc/apache2/mods-available/mod-security.conf‍‍
改訂

/etc/modsecurity/*.conf を含める
/usr/share/modsecurity-crs/*.conf を含める
/usr/share/modsecurity-crs/activated_rules/*.conf を含める

ステップ4: modsecurityモジュールを有効にする

a2enmod ヘッダーa2enmod security2 (バージョン 2.6: a2enmod mod-security)サービス apache2 再起動

ステップ5: 実際の攻撃ペイロードをテストする

傍受できるか試してみよう

http://www.tanjiti.com/?case=archive&act=orders&aid[typeid`%3D1%20and%20ord(mid((select/**/concat(ユーザー名,0x3a,パスワード)%20from%20cmseasy_user),1,1))%3C49%23]=1
リクエストパケットが 403 によって傍受されたことがわかりました。

具体的な傍受状況を確認するには、modsecurity ログファイルを参照してください。

/var/log/apache2/modsec_audit.log を末尾に出力します。
メッセージ: コード 403 (フェーズ 2) でアクセスが拒否されました。パターン マッチ "(/\\*!?|\\*/|[&#039;;]--|--[\\s\\r\\n\\v\\f]|(?:--[^-]*?-)|([^\\-&])#.*?[\\s\\r\\n\\v\\f]|;?\\x00)" at ARGS_NAMES:aid[typeid`=1 and ord(mid((select/**/concat(username,0x3a,password) from cmseasy_user),1,1))
<49#]。
[ファイル "/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [line "49"] [id "981231"] [Rev "2"] **/concat(username、0x3a、パスワード)cmseasy_user)、1,1) acy "8"] [タグ "owasp_crs/web_attack/sql_injection"] [tag "wasctc/wasc-19"] [tag "owasp_top_10/a1"] [タグ "owasp_appsensor/cie1"] [タグ "pci/6.5.2"]]

ベース ルール セットの modsecurity_crs_41_sql_injection_attacks.conf ファイルのルール 981231 によって傍受され、SQL コメント ステートメントにヒットしたことがわかります。
ウェブサイトの構造に精通しているウェブマスターは、ルール、特にホワイトリスト ルールをカスタマイズして、ウェブサイトを保護することができます。

ステップ6: WAFルールをカスタマイズする

ルール構文クイックスタートリファレンス ModSecurity SecRule チートシート

WAFルールの例1: アップロードファイル名のホワイトリスト、画像ファイルのみのアップロードを許可する

vim /usr/share/modsecurity-crs/activated_rules/MY.conf
ルールの追加

SecRule ファイル "!\\.(?i:jpe?g|gif|png|bmp)$" "deny、タグ:'WEB_ATTACK/FILEUPLOAD'、メッセージ:'画像なしファイルのアップロード'、ID:0000001、フェーズ:2"
テスト、phpファイルのアップロード

(httpの使用方法については、HTTPパケット送信ツール - HTTPieを参照してください)
http www.tanjiti.com ファイル名@a.php
リクエストパケットが傍受されていることがわかります。modsecurityログを確認してください。

/var/log/apache2/modsec_audit.log の詳細
ルール 0000001 がヒットしていることがわかります。

メッセージ: コード 403 (フェーズ 2) によりアクセスが拒否されました。"rx \\.(?i:jpe?g|gif|png|bmp)$" と "FILES:filename" の一致が必要です。[ファイル "/usr/share/modsecurity-crs/activated_rules/MY.conf"] [行 "1"] [ID "0000001"] [メッセージ "画像なしのファイルをアップロード"] [タグ "WEB_ATTACK/FILEUPLOAD"]
WAF ルールの例 2: ファイル名に %00 を含むアップロードされたファイルをブロックする

vim /usr/share/modsecurity-crs/activated_rules/MY.conf
ルールの追加

SecRule ファイル "@contains %00" "deny、タグ:'WEB_ATTACK/FILEUPLOAD'、メッセージ:'ファイル名に null 文字が含まれています'、ID:0000002、フェーズ:2"
テスト、ファイル名に%00を含むファイルをアップロードします

http www.tanjiti.com ファイル名@a.php%00.jpeg
リクエストパケットが傍受されていることがわかります。modsecurityログを確認してください。

/var/log/apache2/modsec_audit.log の詳細
ルール 0000002 がヒットしていることがわかります。

メッセージ: コード 403 (フェーズ 2) でアクセスが拒否されました。FILES:filename の文字列が "%00" と一致しています。[ファイル "/usr/share/modsecurity-crs/activated_rules/MY.conf"] [行 "2"] [ID "0000002"] [メッセージ "filename に null 文字が含まれています"] [タグ "WEB_ATTACK/FILEUPLOAD"]
とても簡単ですね。次はnginxサーバーの保護について紹介する予定です。

知らせ! ! ! ! ! ! ! ! ! ! ! ! ! !
この変更を行うと、IP アドレスを使用するときに 403 エラーが表示されます。 ! ! ! ! !私はこのエラーについて一日中取り組んでおり、インターネットでさまざまな 403 エラーを検索しましたが、何も見つかりません。なぜでしょうか? ? ? ?
errol.log を確認すると、modsecurity が IP アクセスを禁止していることがわかります。 ! ! ! ! !通常、localhost を使用してアクセスできます。 。 。
したがって、ログを読むことは非常に重要なことです。

以下もご興味があるかもしれません:
  • SpringBoot セキュリティのインストール構成と Thymeleaf の統合
  • Windows Server2014 にセキュリティを適用して MySQL をインストールする際のエラーに対する完璧な解決策
  • セキュリティ: Elastic SIEM と EDR のインストールに関する詳細なチュートリアル

<<:  忘れられたMySQLパスワードとログインエラーの問題について簡単に説明します

>>:  JavaScript Domはカルーセルの原理と例を実装します

推薦する

MySQLはカバーインデックスを使用してテーブルリターンを回避し、クエリを最適化します。

序文カバーリング インデックスについて説明する前に、まずそのデータ構造である B+ ツリーを理解する...

MySql で正規表現クエリを使用する方法

正規表現は、特定のパターンに一致するテキストを検索および置換するためによく使用されます。たとえば、テ...

Linux でファイアウォールがオフになっているかどうかを確認する方法

1. サービス方法ファイアウォールのステータスを確認します。 [root@centos6 ~]# サ...

Vueプラグインの書き方を説明する記事

目次プラグインとはプラグインの作成プラグインの使用要約するプラグインとはVue フレームワークでは、...

favicon.ico についていくつか注意点があります (ルートディレクトリに置くのがベストです)

任意のウェブページを開きます。例: http://www.baidu.com/ ブラウザのタブのヘッ...

いくつかの CSS3 タグの短縮形 (推奨)

border-radius: CSS3 丸い角構文: border-radius: 25px;楕円...

非常に実用的なMySQL関数の包括的な概要、詳細な例の分析チュートリアル

目次1. MySQLの関数の説明2. 単行関数の分類3. キャラクター機能4. 数学関数5. 日付と...

HTML ページにミュージック ビデオを追加する例

1. ビデオタグFirefoxでは自動再生をサポートしますが、GoogleとIEではサポートしません...

nginx proxy_cache バッチキャッシュクリアスクリプトの紹介

前書き: 以前、公式の nginx proxy_cache を CDN 静的キャッシュとして使用して...

MySQL における ESCAPE キーワードの使用法の詳細な説明

MySQL エスケープエスケープとは、エスケープ文字の本来の意味を意味します。エスケープ文字の目的は...

Vue プロジェクトでのスキャンコード決済の実装例 (デモ付き)

目次需要背景思考分析UI 表示始める1. 支払いコンポーネントテンプレートを作成する2. 支払いコン...

Vue2で配列の変更を検出できない理由と解決策

目次回避策Vue2.0 で 2 つの配列の変更を監視できないのはなぜですか?ソースコード分析ヴュー3...

nginx 設定ファイルで環境変数を使用する方法

序文Nginx はパフォーマンスを重視して設計された HTTP サーバーです。Apache や li...