悪意のあるApache接続をドロップするルールが必要


10

Webサーバーの80を除くすべてのポートのトラフィックをドロップします。

iptablesには次のようなルールがあります。

iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP

もっと持っている人が共有できますか?私は常に悪いハッカーがまだ更新していることを知っていますが、彼らの一部は常に同じコードで始まります。いくつかの基準に基づいて接続をドロップする必要があります。ここにいくつかのApacheログがあります(私はipsを削除しますが、各攻撃は同じものから来ます):

攻撃1:これは何をしようとしているのかわからないが、同じIPから50回行う

GET / HTTP/1.1  301 224 -   Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
GET / HTTP/1.1  302 3387    -   Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22

攻撃2:サーバーのみに関する情報を取得しようとします。

GET / HTTP/1.1  301 224 http://myip:80/ Go-http-client/1.1
GET / HTTP/1.1  302 3228    http mywebsite  Go-http-client/1.1
GET /es/ HTTP/1.1   200 40947   https mywebsite Go-http-client/1.1

攻撃3:ログインページの脆弱性にアクセスしようとする

GET /userlogin/login.aspx HTTP/1.1  302 186 -   -

攻撃4:これは最初のリクエストでcgiにアクセスしようとします(これを削除するには、最初のiptablesルールを参照してください)

GET /hndUnblock.cgi HTTP/1.0    302 186 -   Wget(linux)
GET /tmUnblock.cgi HTTP/1.0 302 186 -   Wget(linux)

私はサーバーに関して非常に新しいのですが、この4つの攻撃は過去12時間からのものです。


これらのHTTPリクエストに特定のパターンはありません。彼らが悪意を持っていることをどうやって知っていますか ここで何を達成しようとしているのか理解できません。質問を編集して明確にしていただけませんか?ありがとう。
David Foerster 2017年

こんにちはデビッド、少し前にftpなどのポートを開いたときに、ブルートフォースからログを受け取りました。80以外のすべてのポートを閉じます。今はfail2banのようなルールを作ろうとしていますが、Apacheを対象としています。
Javier Palmero 2017年

2
Apacheのmod_securitymod_evasiveについて知っていますか?
pa4080 2017年

はい、共有するルールはありますか?またはどこで見つけるのですか?私はblocklist.deからipsをブロックしています
Javier Palmero

Apache2のセキュリティについて知っているほとんどすべてを書き留めました。
pa4080 2017年

回答:


18

更新: 現在の回答は完全に更新されています。

この議論によると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つのアクションステージを提供し、すべてのアクションに対して管理者に電子メール送信します

  • 第1段階:最初の数回の「違反」について、ソース$IPはの値に等しい期間禁止されます$BAN_TIME。このモードでは、コマンドを使用しatます。

  • 第2段階:特定の違反の数がの$IP値と等しくなると$LIMIT、この$IPアドレスはIptablesを通じて永続的禁止され、に追加されます$BAN_LIST

手動モード

このモードは、次のオプションを受け入れます。

  • 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.shiptablesチェーンを使用しGUARDIANます。それは以下の中にいくつかのファイルを作成して維持します$WORK_DIR

  • www-security-assistant.history -以前のIPの違反のデータが含まれています。
  • www-security-assistant.mail -スクリプトによって送信された最後の電子メールの内容。
  • iptables-ACCEPT.list; iptables-DROP.listiptables-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_evasiveiptables介して通信するように設定します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、上記の方法、または私達はとしてコマンドを使用することができabhping3など

注意: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_security2PhpMyAdminを無効にします。/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と仮定し、950907Webアプリの通常の作業を妨げるルール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 ...

  • @pmFromFilemodsecurity-uri-black.listフレーズのリストを含むファイルを読み取り、特定のフレーズまたは単語をそれぞれ新しい行に配置します。ログファイルから興味深い単語やフレーズを収集できます。とパターンのリストの間に特定の一致がある場合REQUEST_URI、ルールが適用されます。ファイルは空である可能性がありますが、作成(touch)する必要があります。

  • このlogアクションにより、このルールのログファイルにログエントリが作成されますid:150

  • dropdeny(とstatus)およびredirectアクションは破壊的なアクションのグループに属し、それらはルールの先頭にある必要がありますchain(チェーンがある場合)。2番目のアクションは最初のアクションをオーバーライドし、3番目のアクションは2番目のアクションをオーバーライドするため、実行するアクションを選択する必要があり、他のアクションを削除できます。

  • chainアクションはチェーンの次のルールを呼び出しますが、2番目のルールにはがないことに注意してくださいid

  • REMOTE_ADDR リクエストのIPアドレスが含まれます。

  • @ipMatchFromFilemodsecurity-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を呼び出します8635

  • 両方のhttpd-スクリプトを同時に動作させるには、両方に編集modsecurity.confしてパイプSecGuardianLogします。

  • テストを実行するには、上記のセクションのヒントに従ってください。


投稿を頻繁に編集しないでください。1日に何度も投稿を頻繁に編集すると、これがフロントページにぶつかり続け、モデレーターにノイズが発生します。代わりに、考える別のページやテキストエディタで自分のコンテンツを起草個別に詳細を編集するのではなく、質量アンで編集、その後、(このポストは、レート制限、一時的にここで行われ、編集に時間ロックされている)。
トーマス・ウォード

1
@ThomasWard、発言ありがとうございます。覚えておきます![プロファイルと設定の編集]の横にある[ユーザー]ページ内にサンドボックスとして何かを置くのは良い考えではないですか
pa4080 2017年

1
それは提案されており、拒否されたと思います。私が提案するのは、保存せずに変更を加え、質問のコピーをそのままシステムのテキストファイルに保存し、それを編集して、投稿を編集するときにコピーして戻すことです。マークダウンなどの修正。同様に、すべての取り消し線は...物事を読みにくくしています。代わりにそれらのセクションを削除することを検討してください。(改訂履歴はデータを保持します)
トーマスワード

Stack Exchangeがフロントページへの編集をバンプしないことを許可しないのはばかげています
フランクダーノンコート2017

1

pa4080が自分でこれをすべて処理するための詳細でおそらく非常に役立つ応答を提供したことを私は理解しています。自分で問題に対処することは気分が良いかもしれませんが、これにはかなりの時間がかかる場合もあります

  1. Cloudflareは無料のDDoS保護を提供しているため、よく理解してください。
  2. 現在Apacheのみを使用している場合は、NGINXが負荷のバランスをとるしくみを学ぶことを検討してください。NGINXは、ここここで紹介されているように、Apacheの負荷分散に最適です
  3. ドキュメントでセキュリティに関するApacheのヒントを確認してください
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.