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データベースは何をするのか

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...

MySQL 8.0.13 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.13のインストールと設定のチュートリアルを参考までに紹介します。具...

Tomcat サーバーの設定と Web プロジェクトの公開に関する IDEA グラフィック チュートリアル

1. Webプロジェクトを作成したら、Tomcatを例にサーバーを構成する必要があります。 2. 実...

初心者がHTMLタグを学ぶ(2)

関連記事:初心者が学ぶ HTML タグ (1)初心者は、いくつかの HTML タグを理解することで ...

vue+echartsチャートの使用に関する問題記録

序文echarts は私が最もよく使用するチャート作成ツールであり、非常に完全なエコシステムとコンテ...

Xshell を使用して VMware 上の Linux 仮想マシンに接続する (グラフィック手順)

はじめに: 最近 Hadoop プラットフォームの構築を勉強し始めたので、ローカルマシンに VMwa...

Linux システムの最適化 (カーネルの最適化) に関するいくつかの提案

スワップを無効にするサーバーがデータベース サービスまたはメッセージ ミドルウェア サービスを実行し...

Nginxを使用してストリーミングメディアサーバーを構築し、ライブブロードキャスト機能を実現する

前面に書かれた近年、ライブストリーミング業界は非常に人気が高まっています。伝統的な業界でのライブスト...

ローカルの Windows リモート デスクトップから Alibaba Cloud Ubuntu 16.04 サーバーに接続する方法

ローカル Windows リモート デスクトップが Alibaba Cloud Ubuntu 16....

Windows での MySQL 8.0.13 解凍バージョンのインストール グラフィック チュートリアル

この記事では、参考までにMySQL 8.0.13のインストールグラフィックチュートリアルを紹介します...

一般的なMySQLコマンドの概要

mysqlrootパスワードの設定と変更初めて MySQL データベースに入ります。 !環境変数にm...

JavaScriptでポインターの位置を取得する方法を教えます

JavaScript でポインターの位置を取得する方法は、イベント オブジェクトの pageX と ...

MySQL 挿入時間の 8 時間の違いの問題の解決方法

MySQL挿入時の8時間の時差の問題を解決する通常、jdbc の URL にはいくつかのパラメータを...

MySQLクライアント認証後の接続失敗の問題に対する完璧なソリューション

MySQL 環境をローカル (192.168.1.152) にデプロイし、リモート クライアント 1...