セキュリティ · 1 min read · Jan 11, 2026

Apacheをmod_securityで保護する

Apacheをmod_securityで保護する

バージョン 1.0
著者: Falko Timme

この記事では、mod_securityのインストールと設定方法を示します。mod_securityは、Webアプリケーションの侵入検知と防止を提供するApacheモジュール(Apache 1および2用)です。SQLインジェクション攻撃、クロスサイトスクリプティング、パストラバーサル攻撃など、既知および未知の攻撃からWebアプリケーションを保護することを目的としています。

最初の章では、Debian Sarge、Ubuntu 6.06 LTS(Dapper Drake)、Fedora Core 5にmod_securityをインストールする方法を示し、2番目の章では、使用しているディストリビューションに依存しないmod_security用のApacheの設定方法を説明します。

まず最初に、これはそのようなシステムを設定する唯一の方法ではないことを言いたいです。この目標を達成する方法はたくさんありますが、これは私が取る方法です。これがあなたにとって機能するという保証はありません!

1 インストール

1.1 Debian Sarge

mod_securityは、デフォルトのDebianリポジトリにDebianパッケージとして利用可能であるため、インストールは次のように簡単です:

apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload

1.2 Ubuntu 6.06 LTS(Dapper Drake)

インストールはDebian Sargeと全く同じです:

apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload

1.3 Fedora Core 5

Fedoraでは、次のようにmod_securityをインストールして有効化できます:

yum install mod_security
/etc/init.d/httpd restart

これで、基本的なmod_security設定がすでに含まれているファイル/etc/httpd/conf.d/mod_security.confが見つかるはずです:

vi /etc/httpd/conf.d/mod_security.conf

| # mod_security Apacheモジュールの例設定ファイル LoadModule security_module modules/mod_security.so # フィルタリングエンジンをオンまたはオフにする SecFilterEngine On # 監査エンジンは独立して動作し、 # サーバーごとまたはディレクトリごとにオンまたはオフにできます SecAuditEngine RelevantOnly # URLエンコーディングが有効であることを確認する SecFilterCheckURLEncoding On # Unicodeエンコーディングチェック SecFilterCheckUnicodeEncoding On # この範囲のバイトのみを許可する SecFilterForceByteRange 1 255 # クッキー形式のチェック。 SecFilterCheckCookieFormat On # 監査ログファイルの名前 SecAuditLog logs/audit_log # mod_securityがPOSTペイロードを検査するべきか SecFilterScanPOST On # デフォルトのアクション設定 SecFilterDefaultAction "deny,log,status:406" # 簡単な例フィルタ # SecFilter 111 # パスのトラバーサル(..)攻撃を防ぐ # SecFilter "\.\./" # より弱いXSS保護だが一般的なHTMLタグを許可する # SecFilter "<( |\n)*script" # XSS攻撃を防ぐ(HTML/Javascriptインジェクション) # SecFilter "<(.|\n)+>" # SQLインジェクション攻撃を防ぐための非常に粗いフィルタ # SecFilter "delete[[:space:]]+from" # SecFilter "insert[[:space:]]+into" # SecFilter "select.+from" # HTTP_USER_AGENTおよびHTTP_HOSTヘッダーを要求する SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$" # 処理できるリクエストエンコーディングのみを受け入れる # 一部の(自動化された)クライアントはContent-Typeとして"text/html"を提供するため、GETリクエストは除外する SecFilterSelective REQUEST_METHOD "!^GET$" chain SecFilterSelective HTTP_Content-Type "!(^$|^application/x-www-form-urlencoded$|^multipart/form-data)" # 各POSTリクエストにContent-Lengthを提供する必要がある SecFilterSelective REQUEST_METHOD "^POST$" chain SecFilterSelective HTTP_Content-Length "^$" # 処理できない転送エンコーディングを受け入れない # (そして、そもそも必要ない) SecFilterSelective HTTP_Transfer-Encoding "!^$" # 一部の一般的なアプリケーション関連のルール # http://modsecrules.monkeydev.org/rules.php?safety=safe #Nuke Bookmarks XSS SecFilterSelective THE_REQUEST "/modules\.php\?name=Bookmarks\&file=(del_cat\&catname|del_mark\&markname|edit_cat\&catname|edit_cat\&catcomment|marks\&catname|uploadbookmarks\&category)=(<[[:space:]]*script|(http|https|ftp)\:/)" #Nuke Bookmarks Marks.php SQLインジェクション脆弱性 SecFilterSelective THE_REQUEST "modules\.php\?name=Bookmarks\&file=marks\&catname=.*\&category=.*/\*\*/(union|select|delete|insert)" #PHPNuke一般XSS試行 #/modules.php?name=News&file=article&sid=1&optionbox= SecFilterSelective THE_REQUEST "/modules\.php\?*name=<[[:space:]]*script" # PHPNuke SQLインジェクション試行 SecFilterSelective THE_REQUEST "/modules\.php\?*name=Search*instory=" #phpnuke SQL挿入 SecFilterSelective THE_REQUEST "/modules\.php*name=Forums.*file=viewtopic*/forum=.*'/'" # WEB-PHP phpbb quick-reply.php 任意コマンド試行 SecFilterSelective THE_REQUEST "/quick-reply\.php" chain SecFilter "phpbb_root_path=" #Topic Calendar Mod for phpBB クロスサイトスクリプティング攻撃 SecFilterSelective THE_REQUEST "/calendar_scheduler\.php\?start=(<[[:space:]]*script|(http|https|ftp)\:/)" # phpMyAdmin: 安全 #phpMyAdmin Export.PHP ファイル開示脆弱性 SecFilterSelective SCRIPT_FILENAME "export\.php$" chain SecFilterSelective ARG_what "\.\." #phpMyAdmin パスvln SecFilterSelective REQUEST_URI "/css/phpmyadmin\.css\.php\?GLOBALS\[cfg\]\[ThemePath\]=/etc" |

この設定を保持できますが、mod_securityが何をできるかをよりよく理解するために、部分のコメントを外し、Apacheを再起動し、章2に従ってください。その後、自分自身のmod_securityルールセットを作成するか、単にこの設定に戻すことができます。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。