更新: 現在の回答は完全に更新されています。
この議論によると、WWW Security Assistantという名前のGitHubリポジトリを作成しました。ask_ubuntu
この回答専用のと呼ばれるブランチがあります。以前はここで利用可能だったすべての参照は、文字数制限により削除されます-GitHubで利用できます。
ここでは、Ubuntu 16.04内でApache2のセキュリティを強化する方法、完全なメカニズムに関与するいくつかの概要を説明します。
目次:
- WWWセキュリティアシスタントスクリプト(WSAS)►Iptables
- Iptables –基本構成–保存と復元
- Apache2用ModEvasive
- ModEvasive►WSAS►Iptables
- Apache2用ModSecurity 2.9
- ModSecurity OWASPコアルールセット3.x
- ModSecurityルールのホワイトリスト
- ModSecurityルール►WSAS►Iptables
- ModSecurityおよびApacheログファイル
- ModSecurityログファイル►Fail2Ban►Iptables
- ModSecurity GuardianLog►HTTPD Guardian►WSAS►Iptables
- ModSecurity GuardianLog►HTTPDカスタム分析►WSAS►Iptables
さらに、HTTPSを使用することが常に良いとしましょう:
WWWセキュリティアシスタントスクリプト►Iptables
これがスクリプトwww-security-assistant.bash
です。悪意のあるIPアドレスの処理に役立ちます。スクリプトには2つのモードがあります。
自動モード
Apacheの外部プログラムmod_security
が悪意のある$IP
アドレスを提供する場合。この場合、スクリプトを呼び出す構文は次のようになります。
www-security-assistant.bash <ip-address> Guardian
www-security-assistant.bash <ip-address> ModSecurity
www-security-assistant.bash <ip-address> ModEvasive
www-security-assistant.bash <ip-address> a2Analyst
このモードでは、スクリプトは2つのアクションステージを提供し、すべてのアクションに対して管理者に電子メールを送信します。
手動モード
このモードは、次のオプションを受け入れます。
www-security-assistant.bash <ip-address>
--DROP "log notes"
ファイルにエントリを作成し、次の/var/www-security-assistant/iptables-DROP.list
ようなルールを生成します。
iptables -A GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--DROP-CLEAR "log notes"
ファイル/var/www-security-assistant/iptables-DROP-CLEAR.list
にエントリを作成し、特定のIptablesルールを削除$IP
し、履歴とから削除します$BAN_LIST
。
iptables -D GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--ACCEPT "log notes"
ファイルへのエントリのみを作成します/var/www-security-assistant/iptables-ACCEPT.list
。
www-security-assistant.bash <ip-address>
--ACCEPT-CHAIN "log notes"
ファイルにエントリを作成し、次の/var/www-security-assistant/iptables-ACCEPT.list
ようなルールを生成します。
iptables -A GUARDIAN -s $IP -j ACCEPT
依存関係
スクリプトでは、次のセクションで説明するiptables-save.sh
とiptables
チェーンを使用しGUARDIAN
ます。それは以下の中にいくつかのファイルを作成して維持します$WORK_DIR
:
www-security-assistant.history
-以前のIPの違反のデータが含まれています。
www-security-assistant.mail
-スクリプトによって送信された最後の電子メールの内容。
iptables-ACCEPT.list
; iptables-DROP.list
とiptables-DROP-CLEAR.list
。
スクリプトは、電子メールを送信するための最小限の構成を必要とします。
sudo apt install s-nail mutt mailutils postfix
sudo dpkg-reconfigure postfix # For General type: Internet Site
echo 'Test passed.' | mail -s Test-Email email@example.com
構成済みのHTTPSサービスがある場合は、そのTLS証明書をPostfixサービス内で使用できます。
さらに、スクリプトはat
次のものを使用しますsudo apt install at
。
取り付け
作業ディレクトリを作成し、それを呼び出しましょう/var/www-security-assistant
。ダウンロードwww-security-assistant.bash
して実行可能にします。
sudo mkdir /var/www-security-assistant
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/www-security-assistant.bash -O /var/www-security-assistant/www-security-assistant.bash
sudo chmod +x /var/www-security-assistant/www-security-assistant.bash
作成しwww-security-assistant.bash
たカスタムコマンドとして使用できます:
sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
経由でパスワードなしでwww-data
実行する権限を付与しwww-security-assistant.bash
ますsudo
。次のコマンドを使用して、追加の「」ルールを含む新しいファイルを安全に作成および編集しますsudoers
。
sudo visudo -f /etc/sudoers.d/www-security-assistant
ファイル内に次の行を追加します-ファイルを保存して終了します。
www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
微調整www-security-assistant.bash
。少なくとも変数の値を変更します$EMAIL_TO
。
調べる
自分を表現し$AGENT
、自動モードが適切に機能するかどうかを確認します。
www-security-assistant.bash 192.168.1.177 Guardian
次に、電子メールを確認しiptables -L GUARDIAN -n
、「」と入力して、ファイルwww-security-assistant.history
を確認しますwww-security-assistant.mail
。上記のコマンドを5回実行し、ファイルiptables-DROP.list
とを確認しますiptables-CURRENT.conf
。
手動モードが適切に機能するかどうかを確認します-ローカルホストをホワイトリストに追加します。
www-security-assistant.bash 127.0.0.1 --ACCEPT "Server's localhost IP"
次に、ファイルを確認しますiptables-ACCEPT.list
。
このチュートリアルの残りの部分はwww-security-assistant
、システムと統合する方法です。
Iptables –基本構成–保存と復元
基本構成
以下のルールを追加する前に、このマニュアルをお読みください。
sudo iptables -F
sudo iptables -I INPUT 1 -i lo -j ACCEPT
sudo iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# This rule may lock you out of the system!
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
次のアクションを実行する前に、新しいSSH接続を開いてシステムにログインし、すべてが正常に機能するかどうかを確認してください。
保存して復元
これは、iptables
システムの停止/起動(または再起動)プロセス中にコーニングを保存および復元するカスタムスクリプトを介して実現できます。(UFWを使用してIptablesルールを設定する場合、この手順は必要ありません。)
printf '#!/bin/sh\n/sbin/iptables-save > /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-save.sh
printf '#!/bin/sh\n/sbin/iptables-restore < /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-restore.sh
sudo chmod +x /var/www-security-assistant/iptables-restore.sh /var/www-security-assistant/iptables-save.sh
sudo ln -s /var/www-security-assistant/iptables-save.sh /etc/network/if-post-down.d/iptables-save
sudo ln -s /var/www-security-assistant/iptables-restore.sh /etc/network/if-pre-up.d/iptables-restore
新しいチェーンを作成する
呼び出された新しいチェーンを作成GUARDIAN
し、番号3としてチェーンに挿入しINPUT
ます。
sudo iptables -N GUARDIAN
sudo iptables -I INPUT 3 -j GUARDIAN
調べる
システムを再起動し、構成を確認します。使用してくださいsudo systemctl reboot
(強制オプションは使用しないでくださいreboot -f
)。システムがオンラインに戻ったら、新しく作成されたチェーンが存在するかどうかを次の方法で確認できます。
sudo iptables -L GUARDIAN -n
Apache2用ModEvasive
ModEvasiveは、HTTP DoSまたはDDoS攻撃またはブルートフォース攻撃が発生した場合に、Apacheが回避アクションを提供する回避操作モジュールです。続きを読む...
取り付け
モジュールをインストールして有効にします。
sudo apt install libapache2-mod-evasive
sudo a2enmod evasive
ログディレクトリを作成し、アクセスできるようにしますwww-data
。
sudo mkdir -p /var/log/apache2_mod_evasive
sudo chown www-data /var/log/apache2_mod_evasive
基本構成を調整します–構成ファイルの特定のディレクティブのコメントを外して編集します。
/etc/apache2/mods-enabled/evasive.conf
Apacheを再起動しますsudo systemctl restart apache2.service
。
調べる
- サーバーからWebページを開き、ブラウザーウィンドウを数回集中的に更新します(を押します
F5
)。403Forbiddenエラーメッセージが表示されるはずです。ログディレクトリに、新しいロックファイルが生成されます。このIPアドレスからの違反をさらに検出するには、このファイルを削除する必要があります。
ModEvasive►WSAS►Iptables
ここでは、上記のセクションで作成したmod_evasive
をiptables
介して通信するように設定しますwww-security-assistant.bash
。
/etc/apache2/mods-available/evasive.conf
このように編集します:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 9
DOSSiteCount 70
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
#DOSEmailNotify your@email.foo
DOSLogDir "/var/log/apache2_mod_evasive"
DOSSystemCommand "sudo /var/www-security-assistant/www-security-assistant.bash %s 'ModEvasive' 'AutoMode' >> /var/www-security-assistant/www-security-assistant.execlog 2>&1"
</IfModule>
ログファイルを作成し、Apacheを再起動します。
sudo touch /var/www-security-assistant/www-security-assistant.execlog && sudo chown www-data /var/www-security-assistant/www-security-assistant.execlog
この設定をテストするために、我々は経由DDOS攻撃をシミュレートすることができF5
、上記の方法、または私達はとしてコマンドを使用することができab
、hping3
など
注意:iptables
WSASで使用されるルールは、SSH接続を含む、ソースからのすべての新しい接続をドロップするため、注意して$IP
ください。テスト中にサーバーに接続するためのバックアップ方法があるとよいでしょう。このルールは、HTTP / HTTPSポートでのみ機能するように変更できます。
Apache2用ModSecurity 2.9
ModSecurityは、それ自体ではほとんど保護を提供しないWebアプリケーションファイアウォールエンジンです。有用になるためには、ModSecurityにルールを設定する必要があります。ユーザーがそのままでModSecurityを最大限に活用できるようにするために、TrustwaveのSpider Labsは無料の認定ルールセットを提供しています... 続きを読む...
取り付け
モジュールをインストールして有効にします。
sudo apt install libapache2-mod-security2
sudo a2enmod security2
構成ファイルを作成します。
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
/etc/modsecurity/modsecurity.conf
注意深く読んで編集してください!少なくとも以下のディレクティブを追加または変更します。
# -- Rule engine initialization ----------------------------------------------
SecRuleEngine On
# -- Debug log configuration -------------------------------------------------
SecDebugLogLevel 2
SecDebugLog "/var/log/apache2_mod_security/modsec_debug.log"
# -- Audit log configuration -------------------------------------------------
SecAuditLog "/var/log/apache2_mod_security/modsec_audit.log"
# -- Guardian log configuration -------------------------------------------------
SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
このファイル/etc/apache2/mods-enabled/security2.conf
は/etc/modsecurity/modsecurity.conf
、Apacheの構成に関係しています。この段階でsecurity2.conf
は、次のようになります。
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
</IfModule>
ログディレクトリを作成:
sudo mkdir -p /var/log/apache2_mod_security
ログローテーションを設定します。最初に構成ファイルを作成します。
sudo cp /etc/logrotate.d/apache2 /etc/logrotate.d/apache2-modsec
次に、この方法で新しいファイルを編集します。
/var/log/apache2_mod_security/*.log { … }
Apacheを再起動します。
調べる
で追加の構成ファイルを作成し、/etc/modsecurity
たとえばと呼び出して、z-customrules.conf
その内容として次のルールを追加します。
# Directory traversal attacks
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109"
サーバーを再起動しますsudo systemctl restart apache2.service
。ブラウザを開いて、と入力しhttps://example.com/?abc=../
ます。結果は403 Forbiddenになります。/var/log/apache2_mod_security
詳細については、のログファイルを確認してください。
物事をより楽しいものにするために、スクリプトissues.php
をあなたの中で適切な場所に配置しますDocumentRoot
(ここでは、この場所はだと想定しています/var/www/html
):
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/appendix/var/www/html/issues.php -O /var/www/html/issues.php
次に、上記のルールを次のように変更します。
# Directory traversal attacks with redirection (or use URL instead of URI: redirect:'https://example.com/issues.php')
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109, redirect:'/issues.php'"
Apacheを再起動し、ブラウザを開いてhttps://example.com/?abc=../
;-) と入力します。アイデアはSEのスクリプトから借用したものですBotLovin.cs
。
/etc/modsecurity/z-customrules.conf
もう一度編集して、ルールにコメント(無効)を付けます。これは単なるテスト例であり、OWASP CRSでカバーされています(次のセクションで説明)。
すべてのwp-admin
ページ要求をリダイレクトする別の例を次に示しますが、特定のIPアドレスからのものを除きます(に注意してくださいchain
)。
# Block wp-admin access
SecRule REQUEST_URI "^/wp-admin" "id:108, log, deny, status:403, t:lowercase, chain, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatch 192.168.1.11,99.77.66.12"
ここには2つの破壊的なアクションがあります:(1)deny, status:403
と(2)redirect:'/issues.php'
。実際にはdeny
アクションによってオーバーライドされるため、アクションは必要ありませんredirect
。
ModSecurity OWASPコアルールセット3.x
Ubuntu 16.04では、CSR 2.xをインストールできますapt install modsecurity-crs
。ここでは、CSR 3.xをインストールしますgit
。詳細な手順は、インストールマニュアルに記載されています(必須)。
取り付け
フォルダにCSRを複製します/usr/share/modsecurity-crs.3
。
sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
GeoIPデータベースをアップグレードして自動更新します。(GeoIP DBはCRSに含まれなくなりました。代わりに定期的にダウンロードすることをお勧めします。)スクリプトutil/upgrade.py
はこの機能を提供します。cronで次のように使用できます- sudo crontab -e
:
0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2>&1
構成ファイルを作成します。
sudo cp /usr/share/modsecurity-crs.3/crs-setup.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf{.example,}
これらのファイルを注意深く読んで編集してください!少なくともSecGeoLookupDB
ディレクティブのコメントを外します:
SecGeoLookupDB util/geo-location/GeoIP.dat
Apacheの設定を適用します。/etc/apache2/mods-available/security2.conf
このように編集します:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
IncludeOptional /usr/share/modsecurity-crs.3/crs-setup.conf
IncludeOptional /usr/share/modsecurity-crs.3/rules/*.conf
</IfModule>
ファイルを保存して、Apacheを再起動します。
ModSecurityルールのホワイトリスト
ModSecurityルールのホワイトリストは、次のModSecディレクティブを介して実行できます。これは、特定のディレクトリまたは場所の一致に対して、システム全体または仮想ホストの構成内でグローバルに使用できます。
SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById
mod_security2
PhpMyAdminを無効にします。/etc/phpmyadmin/apache.conf
このように変更します:
<Directory /usr/share/phpmyadmin>
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</Directory>
特定のディレクトリの特定のルールを無効にします。
<Directory /var/www/html>
<IfModule security2_module>
SecRuleRemoveById 973301
</IfModule>
</Directory>
ルールをグローバルに無効にします。この目的のために、Apacheの構成ファイルのどこかにディレクティブを追加する必要があります。これ/etc/modsecurity/z-customrules.conf
は良い場所です。
Apacheの設定全体でルールを無効にします。
SecRuleRemoveById 973301 950907
ModSecurityを通過できるようにIPアドレスをホワイトリストに登録します。
SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
ディレクトリマッチ内のルールを無効にする:
<Directory /var/www/mediawiki/core>
SecRuleRemoveById 973301 950907
</Directory>
場所の一致内のIDでルールのアクションを更新します。
<LocationMatch "/index.php.*">
SecRuleUpdateActionById 973301 "pass"
SecRuleUpdateActionById 950907 "pass"
</LocationMatch>
上記の例では、973301
と仮定し、950907
Webアプリの通常の作業を妨げるルールIDです。の分析により、これらのルールを見つけることができますmodsec_audit.log
。
ModSecurityルール►WSAS►Iptables
ここでは、カスタムSecRulesを作成する方法の例と、それらを介してWWW Security Assistant Script(WSAS)を呼び出す方法をいくつか示します。
初期設定
追加の起動スクリプト-が必要ですmodsecurity-assistant.sh
。その理由は、ModSecurityのexec
アクションの構文が単純すぎて制限されているためです。
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/modsecurity-assistant.sh -O /var/www-security-assistant/modsecurity-assistant.sh
sudo chmod +x /var/www-security-assistant/modsecurity-assistant.sh
スクリプト内を見ると、ModSecurityによってエクスポートされるいくつかの変数が表示されます。:これらは$REQUEST_URI
、$ARGS
、$SERVER_NAME
、$REMOTE_ADDR
、$REMOTE_HOST
と$UNIQUE_ID
。他の変数はスクリプト内で説明されています。
カスタムルールを作成し、それを介してスクリプトを呼び出します
まず、リクエストURIにブラックリストに含まれている単語が含まれている場合に実行modsecurity-assistant.sh
(およびを呼び出すwww-security-assistant.bash
)するルールを作成しましょう。/etc/modsecurity/z-customrules.conf
次の行を開いて下部に追加します。
# REQUEST_URI words blacklist
#
SecRule REQUEST_URI "@pmFromFile /var/www-security-assistant/modsecurity-uri-black.list" \
"id:150, log, t:lowercase, chain, \
drop, deny, status:403, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"setenv:REMOTE_HOST=%{REMOTE_HOST}, \
setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
REQUEST_URI
-この変数には、現在のリクエストの完全なURIが含まれます。ルールはもっと広いはずです:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...
@pmFromFile
modsecurity-uri-black.list
フレーズのリストを含むファイルを読み取り、特定のフレーズまたは単語をそれぞれ新しい行に配置します。ログファイルから興味深い単語やフレーズを収集できます。とパターンのリストの間に特定の一致がある場合REQUEST_URI
、ルールが適用されます。ファイルは空である可能性がありますが、作成(touch
)する必要があります。
このlog
アクションにより、このルールのログファイルにログエントリが作成されますid:150
。
drop
、deny
(とstatus
)およびredirect
アクションは破壊的なアクションのグループに属し、それらはルールの先頭にある必要がありますchain
(チェーンがある場合)。2番目のアクションは最初のアクションをオーバーライドし、3番目のアクションは2番目のアクションをオーバーライドするため、実行するアクションを選択する必要があり、他のアクションを削除できます。
chain
アクションはチェーンの次のルールを呼び出しますが、2番目のルールにはがないことに注意してくださいid
。
REMOTE_ADDR
リクエストのIPアドレスが含まれます。
@ipMatchFromFile
modsecurity-ip-white.list
新しい行で区切られたIPアドレスのホワイトリストを含むファイルになります。CIDRエントリも使用できます。破壊的なアクションは常にチェーンの先頭のルールにあるため、適用されますが、特定のIPがこのホワイトリストにある場合、exec
アクションは適用されません。ファイルは空である可能性がありますが、作成(touch
)する必要があります。
exec
アクションは外部スクリプトを呼び出します。このアクションは中断を伴うものではなく、現在のルールがtrueを返したときに実行されます。このアクションが適用されると、リモートIPはスクリプトを通じて処理されます。
setenv
このアクションは特定の内部変数 =%{...}
をenvvarsとしてエクスポートします。エクスポートされた名前は内部とは異なる場合があります。一部の変数は手動でエクスポートする必要があります。他の変数は自動的にエクスポートされます-おそらくそれは小さなバグです(同じ名前で手動でエクスポートするsetenv:REQUEST_URI=%{REQUEST_URI}
と、エクスポートされた変数の値が空白になることがあります)。
調べる
サーバーにJoomlaがない場合を想定して、ファイルmodsecurity-uri-black.list
を編集し、コンテンツを含む行を追加します/joomla
。次に、ブラウザに入力しますhttps://exemple.com/joomla
。Iptablesを使用してリダイレクトおよびブロックする必要があります。レコードをクリアし、sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
IPを追加modsecurity-ip-white.list
して、もう一度演習を行ってください。これでリダイレクトされるはずですが、ブロックされません。
スクリプトをOWASPコアルールセット3.xに接続します
そのために、異常モードルール(949110および959100)のデフォルトアクションを更新します。この目的のために、ファイル/usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
を編集して、次の行を下部に追加します 。
# -- Anomaly Mode - Update actions by ID -----
#
SecRuleUpdateActionById 949110 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
SecRuleUpdateActionById 959100 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
# -- Anomaly Mode - Whitelist some URI and IP addresses -----
#
SecRule REQUEST_URI "^/wp-admin/admin-ajax.php*|^/index\.php\?title=.*&action=(submit|raw&ctype=text/javascript|raw&ctype=text/css)$" \
"id:'999010', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
SecRule REMOTE_ADDR "@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"id:'999020', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
調べる
設定の変更を適用するには、Apacheを再起動(またはリロード)することを忘れないでください。テスト中は定期的にレコードをクリアすることを忘れないでください。そうしないと、永久にブロックされる可能性があります:-)
ディレクトリトラバーサル攻撃をシミュレートします。
https://example.com/?abc=../../../ # This should be redirected and blocked
https://example.com/wp-admin/admin-ajax.php?abc=../../../ # This should pass because of the whitelist rule
SQLインジェクション攻撃をシミュレートします。
https://example.com/?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%20'1
https://example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&password=foo
ModSecurityおよびApacheログファイル
Apache Webサーバーは、サーバーの機能について重要な情報をサーバー管理者に提供するように構成できます...管理者にフィードバックを提供する主な方法は、ログファイルを使用することです。続きを読む...
ModSecurityには強力なロギングメカニズムがあります。ディレクティブにより、SecGuardianLog
外部スクリプトで動作するように特別に設計されたログフィードを提供します。
現在で動作するように知られている唯一のツール保護者のログがある
httpd-guardian
の一部である、Apacheのhttpdのツールプロジェクト。このhttpd-guardian
ツールは、サービス拒否攻撃を防御するように設計されています。を使用しblacklist tool
て、iptablesベースの...ファイアウォールと対話し、問題のあるIPアドレスを動的にブラックリストに登録します。続きを読む...
ModSecurityログファイル►Fail2Ban►Iptables
Apacheのログファイルのデータ解析用にFail2Banを設定することが可能です。modsec_audit.log
おそらく最良の選択ですが、について説明しているセクションも参照してくださいSecGuardianLog
。
コメントされることSecAuditLogRelevantStatus
に注意してください/etc/modsecurity/modsecurity.conf
。そうしないと、404エラーページを受け取ったすべてのユーザーがfail2banによってブロックされます。
SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"
現在、Fail2Banはこのプロジェクトではまったく実装されていません。
ModSecGuardianLog►HTTPD-Guardian►WSAS►Iptables
httpd-guardian
-リクエストを監視することでDoS攻撃を検出Apache Security、Copyright(C)2005 Ivan Ristic-パイプされたロギングメカニズムを通じてすべてのWebサーバーリクエストを監視するように設計されています。各IPアドレスから送信されたリクエストの数を追跡します... httpd-guardianは警告を発するか、スクリプトを実行してIPアドレスをブロックできます...
このスクリプトは、Apache2ロギングメカニズム、または
ModSecurity(より良い)で使用できます。
現在の状況でのインストールとセットアップ
ダウンロードhttpd-guardian
して実行可能にします。
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-guardian.pl -O /var/www-security-assistant/httpd-guardian.pl
sudo chmod +x /var/www-security-assistant/httpd-guardian.pl
行98-119
を読んで、スクリプトがWSASスクリプトとどのように接続されているかを確認してください。
Apacheの設定(/etc/modsecurity/modsecurity.conf
)内で次の変更を適用してから、再起動します。
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
調べる
スクリプトをテストするには、ModEvasiveを無効にし(sudo a2dismod evasive
後で有効にすることを忘れないでください)、Apacheを再起動します。次にtail
、execログ:
tail -F /var/www-security-assistant/www-security-assistant.execlog
そして、別のインスタンスからDoS攻撃を実行します。たとえばab
、次のように使用します。
for i in {1..20}; do (ab -n 200 -c 10 https://example.com/ &); done
ModSecGuardianLog►カスタム分析►WSAS►Iptables
ここでは、と呼ばれる簡単なスクリプトをhttpd-custom-analyze.bash
示します。これは特別なものではありませんが、良い例になる可能性があります。その機能はスクリプトの本体内に記述されています。
インストールとセットアップ
ダウンロードhttpd-custom-analyze.bash
して実行可能にします。
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-custom-analyze.bash -O /var/www-security-assistant/httpd-custom-analyze.bash
sudo chmod +x /var/www-security-assistant/httpd-custom-analyze.bash
Apacheの設定(/etc/modsecurity/modsecurity.conf
)内で次の変更を適用し、再起動します。
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
#SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
SecGuardianLog "|/var/www-security-assistant/httpd-custom-analyze.bash"
読み取りラインを-スクリプトがしきい値に達したときにWSASを呼び出します86
と35
。
両方のhttpd-
スクリプトを同時に動作させるには、両方に編集modsecurity.conf
してパイプSecGuardianLog
します。
テストを実行するには、上記のセクションのヒントに従ってください。