私たちは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"]
つまり、自分のホスト名を知っているか、次のようにすることができます。禁止する
答え2
失敗2禁止IPアドレスをスキャンしたり、サーバーに悪い操作を試みたりするのをブロックするいくつかの規則があります。apache
独自のルールを作成するか(Apacheエラーログの「無効なホスト要求」と一致する)、既存のルールに追加できます。
fail2ban
ほとんどのLinuxディストリビューション用に事前パッケージされています。
答え3
私は完全に新しい包括的な仮想ホスト(つまり、実際の/設定された名前と一致しないすべてのもののデフォルト名)を設定します。 Googleまたは同様のサイトにリダイレクトするようにカスタム404エラーを設定し、他の人が述べたように、その包括的なfail2ban
ホストのログを監視するように設定します。