Debian/UbuntuでApacheを使用してModSecurityを設定する方法


Apache Webサーバーは高度にカスタマイズ可能であり、ニーズに合わせて複数の方法で構成できます。 Apacheを好みに合わせて構成するために使用できるサードパーティのモジュールはたくさんあります。

ModSecurityは、Apache WebサーバーにネイティブなオープンソースのWAF(Webアプリケーションファイアウォール)です。当初はApacheモジュールのみでしたが、1年で本格的なウェブアプリファイアウォールに成長しました。現在、Nginx、さらにはIISでもサポートされています。

ModSecurityは、事前定義された一連のルールに照らしてWebサーバーへの着信要求を検査します。通常、SQLインジェクション、XSS、セッションハイジャックなどの一連のWebアプリケーション攻撃からWebサイトを保護するCRS(コアルールセット)と呼ばれる一連のルールを提供します。

[あなたも好きかもしれません:マルウェアとルートキットのためにLinuxサーバーをスキャンするための5つのツール]

ModSecurityアプリケーションファイアウォールは、外部からの攻撃からサイトを保護する際のPCIDSSコンプライアンスの不可欠な部分を形成します。モジュールを有効にすると、「403 Forbidden Error」がトリガーされます。これは、ウェブサーバー上のリソースにアクセスするための権限が不十分であることを意味します。

このガイドでは、DebianおよびUbuntuLinuxでApacheと連携するようにModSecurityを設定および構成する方法を示します。

ステップ1:UbuntuにModSecurityをインストールする

最初のステップは、ModSecurityをインストールすることです。まず、次のようにパッケージリストを更新します。

$ sudo apt update

次に、ModSecurityパッケージを他の依存関係やライブラリと一緒にインストールします。

$ sudo apt install libapache2-mod-security2

その後、モジュールを有効にします。

$ sudo a2enmod security2

次に、ApacheWebサーバーを再起動して変更を適用します。

$ sudo systemctl restart apache2

この時点で、ModSecurityは正常にインストールされています。それを設定しましょう。

ステップ2:UbuntuでModSecurityを構成する

デフォルトでは、ModSecurityは疑わしいアクティビティを検出してログに記録するようにのみ構成されています。追加の手順を実行して、疑わしいアクティビティを検出するだけでなくブロックするように構成する必要があります。

以下のコマンドで提供されるように、デフォルトのModSecurity構成ファイル(modsecurity.conf-recommended)を新しいファイルにコピーします。

$ sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

お好みのテキストエディタを使用して、ファイルを開きます

$ sudo nano /etc/modsecurity/modsecurity.conf

次の行を見つけます。

SecRuleEngine DetectionOnly

次のように設定します。

SecRuleEngine On

変更を保存してファイルを終了します。

Apacheで変更を適用するには、Webサーバーを再起動します。

$ sudo systemctl restart apache2

ステップ3:OWASPModSecurityコアルールセットをダウンロードする

次のステップは、GitHubページから最新のOWASP ModSecurityコアルールセット(CRS)をダウンロードすることです。

図のように、OWASPgitリポジトリのクローンを作成します。

$ git clone https://github.com/coreruleset/coreruleset.git

ディレクトリに移動します。

$ cd coreruleset/

必ずcrs-setup.conf.exampleファイルをmodsecurityディレクトリに移動し、名前をcrs-setup.confに変更してください。

$ sudo mv crs-setup.conf.example /etc/modsecurity/crs-setup.conf

さらに、rulesディレクトリもmodsecurityディレクトリに移動します。

$ sudo mv sudo mv rules/ /etc/modsecurity/

次に、security2.confファイルを編集します。

$ sudo nano /etc/apache2/mods-enabled/security2.conf

次の行が含まれていることを確認してください。

IncludeOptional /etc/modsecurity/*.conf
Include /etc/modsecurity/rules/*.conf

次に、変更を保持するためにApacheを再起動します。

$ sudo systemctl restart apache2

ここで、ModSecurity構成をテストしてみましょう。

ステップ4:UbuntuでのModSecurity構成のテスト

最後に、ModSecurityが疑わしいHTTPトラフィックを検出してブロックできることをテストする必要があります。これを実現するには、デフォルトの仮想ホストファイルを編集する必要があります。

$ sudo nano /etc/apache2/sites-available/000-default.conf

次に、Webブラウザからアクセスしたときに特定のURLへのアクセスをブロックするブロックルールを作成します。

これらの行を「Virtualhost」終了タグの前の最後に追加します。

SecRuleEngine On
SecRule ARGS:testparam "@contains test" "id:254,deny,status:403,msg:'Test Successful'"

「id」タグと「msg」タグを任意の値に自由に設定してください。

次に、Apache Webサーバーを再起動して、仮想ホスト構成ファイルに加えられた変更を適用します。

$ sudo systemctl restart apache2

Webブラウザーで、最後に?testparam u003d testで示されているURLにアクセスしてみてください。

http://server-ip/?testparam=test

リソースへのアクセスがブロックされたことを示す「403Forbiddenerror」が表示されます。

次のようにエラーログを確認することで、クライアントがブロックされたことをさらに確認できます。

$ cat /var/log/apache2/error.log | grep “Test successful”

[あなたも好きかもしれません:Debian/UbuntuにNginx用のModSecurityをインストールする方法]

これは、不要なトラフィックを検出してブロックするようにModSecurityが正常に設定されたことを確認するものです。このガイドでは、Debian/UbuntuシステムでApacheを使用してModSecurityを設定するプロセスについて説明しました。