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はカルーセルの原理と例を実装します

推薦する

JS クロスドメイン ソリューション React 構成 リバース プロキシ

クロスドメインソリューションjsonp (get をシミュレート) CORS (クロスオリジンリソー...

MySQL での or ステートメントの使用例

1. MySQL での or 構文の使用、および MySQL 構文で or を使用する際の注意点。 ...

MySQLが日付フィールドインデックスを使用しない理由の要約

目次背景探検する要約する背景テーブルでは、dataTime フィールドは varchar 型に設定さ...

UbuntuはSSHサービスのリモートログイン操作を開始します

ssh-secure シェルは、安全なリモート ログインを提供します。組み込みシステムを開発し、Li...

Flash が HTML div 要素を覆わないようにする方法

今日、フラッシュ広告のコードを書いていたとき、フラッシュに付属するリンクはポップアップ広告と間違われ...

Docker swarm を使用して Nebula Graph クラスターを迅速にデプロイする方法のチュートリアル

1. はじめにこの記事では、Docker Swarm を使用して Nebula Graph クラスタ...

docker-maven-pluginはイメージをパッケージ化し、プライベートウェアハウスにアップロードします。

目次1. docker-maven-pluginの紹介2. 環境とソフトウェアの準備3. デモ例3....

Linux の検索ツールの代替となるフレンドリーなツール

find コマンドは、指定されたディレクトリ内のファイルを検索するために使用されます。引数の前の文字...

Hadoopカウンターとデータクリーニングの適用

データクリーニング (ETL)コアビジネスの MapReduce プログラムを実行する前に、まずデー...

TomcatはNginxリバースプロキシのクライアントドメイン名を取得します

質問Nginx リバース プロキシの後、Tomcat アプリケーションは、クライアント ブラウザーの...

Reactでpropsを使用する方法と制限する方法

コンポーネントの props (props はオブジェクトです)機能: コンポーネントに渡されたデー...

事例を通してLinux NFSの仕組みを詳細に分析

前回の記事に引き続き、web02 サーバーを作成し、web01 サーバーと web02 サーバーの ...

テキストエリアの disabled 属性と readonly 属性の具体的な使用法

障害者の定義と使用法disabled 属性はブール属性です。 disabled 属性は、テキスト領域...

Linuxターミナルでの一般的なMySQL操作コマンドの詳細な説明

仕える: # chkconfig --list すべてのシステム サービスを一覧表示します # ch...

MySQL が innobackupex を使用して接続サーバーをバックアップできない場合の解決策

innobackupex を使用してバックアップする際に MySQL がサーバーに接続できない場合は...