centos / apacheで誤った仮想ホスト要求を防ぐ

centos / apacheで誤った仮想ホスト要求を防ぐ

私たちはCentOS Linuxバージョン7.4Apache 2.4を含むLAMPスタック。監視ダッシュボードでは、さまざまなパフォーマンス指標を追跡します。そのうちの1つは、仮想ホストが私たちのサーバーと一致しない「間違ったホスト要求」です。

私は手動でarin.netを使用して間違ったホスト要求を見つけます。当社のビジネスの性質は米国内でのみ行われるため、正しい仮想ホスト名がない場合は、外国のIP範囲で当社へのアクセスをブロックします。これにはiptablesを使用します。 fwiwの例があります。

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  187.0.0.0/8          anywhere             /* montevideo uruguay */
DROP       all  --  177.0.0.0/8          anywhere             /* vmontevideo uraguay */
DROP       all  --  164.77.0.0/16        anywhere             /* montevideo uraguay */
DROP       all  --  78-0-0-0.adsl.net.t-com.hr/8  anywhere             /* amsterdam */

これにより、海外からのすべての「スニッフィング」トラフィックが効果的に遅くなります。


ほぼ突然、過去2週間、イリノイ州シカゴ、Amazon AWS(ワシントン州シアトル)、カリフォルニア州フリーモントなどで1日に3〜6件のリクエストを受け始めました。


以下はApache access_logのいくつかのログエントリです。

./myurl.com-access.log:23.20.12.111 - - [16/Jan/2018:00:16:21 -0600] "HEAD / HTTP/1.1" 200 - "-" "Cloud mapping experiment. Contact [email protected]"
./myurl.com-access.log:23.20.54.152 - - [16/Jan/2018:08:10:03 -0600] "HEAD / HTTP/1.1" 200 - "-" "Cloud mapping experiment. Contact [email protected]"
./myurl.com-access.log-20180114:23.20.12.111 - - [13/Jan/2018:08:07:44 -0600] "HEAD / HTTP/1.1" 200 - "-" "Cloud mapping experiment. Contact [email protected]"
./myurl.com-ssl-access.log:74.82.47.3 - - [14/Jan/2018:07:20:31 -0600] "GET / HTTP/1.1" 200 21 "-" "-"
./myurl.com-ssl-access.log:108.178.61.58 - - [15/Jan/2018:06:40:17 -0600] "GET / HTTP/1.1" 200 20 "-" "Mozilla/5.0 zgrab/0.x"
./myurl.com-ssl-access.log:184.154.189.90 - - [15/Jan/2018:07:54:29 -0600] "GET / HTTP/1.1" 200 21 "-" "Mozilla/5.0 zgrab/0.x"
./myurl.com-ssl-access.log:108.178.61.58 - - [16/Jan/2018:06:16:45 -0600] "GET / HTTP/1.1" 200 21 "-" "Mozilla/5.0 zgrab/0.x"
./myurl.com-ssl-access.log:184.154.189.90 - - [16/Jan/2018:06:51:18 -0600] "GET / HTTP/1.1" 200 21 "-" "Mozilla/5.0 zgrab/0.x"
./myurl.com-ssl-access.log:74.82.47.3 - - [16/Jan/2018:07:28:43 -0600] "GET / HTTP/1.1" 200 20 "-" "-"
./myurl.com-ssl-access.log-20180114:74.82.47.3 - - [08/Jan/2018:06:25:14 -0600] "GET / HTTP/1.1" 302 - "-" "-"

予防する方法は?(できるだけ早く完全に停止してください)正しい単一の仮想ホストを持たないサーバーに要求する


fail2ban役に立つ可能性のあるソリューションに応答して、失敗した2banが実行されていることを確認しました。

$ ps aux | grep fail2ban
root      2824  0.0  0.0 368832 53632 ?        Sl    2017  17:44 /usr/bin/python2 -s /usr/bin/fail2ban-server -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid -x -b

私はこれに関するルールを書くことを検討します。正当なトラフィックをブロックできません。有効なトラフィックが仮想ホストなしでホストを要求しないと仮定するのは安全ですか? (もちろん、Webアプリケーションの作成方法に応じて、これは正直でなければなりません)。


修正する

fall2ban は各 IP アドレスを一度だけ使用してサーバーにアクセスするため、機能せず再利用しません。 Webアプリケーションの2行目のトラフィックを効果的に識別したと思います。今、私は非常に小さく、非常に高速なランダム数を含む状態200を送信します。しかし、何とか簡単にサーバーを「隠す」方法が必要です。反応なしサーバーに実際の負荷を与えない方法です。

ベストアンサー1

問題のある要求は毎回異なるIPアドレスを使用するため、fall2banは機能しません。 200、403、および404の応答には、すべてサーバーリソースを占有するためにApacheリクエストが必要です。

私はただ「電話を切って」Apacheが要求者との会話を中断したかったことに気づき、インストールを見つけました。モジュールセキュリティApacheを次のように設定できます。すべてのリクエストを削除サーバーIPの仮想ホストを照合します。 centos 7にmod_securityをインストールするのはとても簡単です。

sudo yumのインストールmod_security

次に、ServerNameがホストIPアドレスである仮想ホストディレクティブに次の行を入力します。

<VirtualHost *:80>
    ServerName 1xx.1xx.1xx.1xx

    SecRuleEngine On
    SecRule REMOTE_ADDR "^\d" "log,drop,phase:1,id:111,msg:'dropped bad host request'"
    ...

FirefoxでIP経由でサーバーにアクセスする方法は次のとおりです。

ここに画像の説明を入力してください。

...もう一度お試しください!

サーバーログにドロップが記録されます。

# tail -f 1xx.1xx.1xx.1xx-error.log
[Thu Jan 18 18:51:00.357113 2018] [:error] [pid 41716] [client 69.137.81.33] ModSecurity: Access denied with connection close (phase 1). Pattern match "^\\\\d" at REMOTE_ADDR. [file "/etc/httpd/vhost.d/ipaddyhost.conf"] [line "8"] [id "111"] [msg "dropped bad host access request"] [hostname "1xx.1xx.1xx.1xx"] [uri "/"] [unique_id "WmFA@q@5uqLACI9MKaxAAABbfwX"]

つまり、自分のホスト名を知っているか、次のようにすることができます。禁止する

おすすめ記事