web-dev-qa-db-ja.com

Apache VirtualHostブロックホール(IP上のすべてのポートですべてのリクエストを処理します)

疲れた。私はこの2時間、過去1年間オンとオフを繰り返してきたガチョウを追いかけました。これが目標であり、可能な限り簡潔に述べています。

ステップ1:HOSTSファイル:

127.0.0.5 NastyAdServer.com
127.0.0.5 xssServer.com
127.0.0.5 SQLInjector.com
127.0.0.5 PornAds.com
127.0.0.5 OtherBadSites.com
…

ステップ2:Apache httpd.conf

<VirtualHost 127.0.0.5:80>
    ServerName BlackHole
    DocumentRoot "X:\Docs\…\BlackHole"
    RewriteEngine On
    RewriteRule (\.(gif|jpg|png|jpeg)$) /p.png [L]
    RewriteRule (.*) /ad.htm [L]
</VirtualHost>

つまり、基本的には、HOSTSファイルが指定されたドメインをローカルホストにリダイレクトしますが、特定のループバックIPアドレスにリダイレクトします。 Apacheは、このアドレスでの要求をリッスンし、透明なピクセルグラフィック、または空のHTMLファイルを提供します。したがって、悪いサイトのページやグラフィックは何も置き換えられません(言い換えれば、広告/マルウェア/ポルノ/その他のブロッカー)。


これはそのままでうまく機能します(そして私にとっては何年も前からあります)。問題は、これらの悪いことがHTTPトラフィックだけに限定されなくなったことです。例えば:

<script src="http://NastyAdServer.com:99">
or
<iframe src="https://PornAds.com/ad.html">
or a Trojan using
ftp://spammaster.com/[email protected];[email protected];[email protected]
or an app “phoning home” with private info in a crafted ICMP packet by pinging
CardStealer.ru:99

HTTPSの処理は、比較的小さな問題です。上記のような別のVirtualHostを作成し、ポート80を443に置き換え、SSLディレクティブを追加することができます。これにより、他のポートを処理する必要があります。

ポートに*を使用しようとしましたが、オーバーラップエラーが発生します。すべてのリクエストをHTTPSサーバーにリダイレクトしようとしましたが、その逆も同様でしたが、どちらも機能しませんでした。 SSLリクエストが正しくリダイレ​​クトされないか、HTTPリクエストによってSSL対応のサーバーポートにプレーンHTTPを話している…エラーが発生しました。さらに、他のポートが正常にリダイレクトされているかどうかをテストする方法がわかりません(ブラウザーを使用してみることができますが、FTP、ICMPなどはどうですか?)


ポートブロッカー(ProtoWall、PeerBlockなど)を使用できることはわかっていますが、それには2つの問題があります。まず、IPアドレスではなく、この方法でドメインをブロックしているため、ポートブロッカーを使用するには、すべてのドメインのIPを取得し、テーマを頻繁に更新する必要があります。次に、この方法を使用すると、Apacheにすべての広告/マルウェア/スパムなどのログを保持させることができます。将来の分析のリクエスト(私の現在のBlackHoleログは現在すでに466MBです)。

ApacheVirtualHostブラックホールを正常に設定するための助けに感謝します。ありがとう。

1
Synetech

興味深い解決策..私はそれが好きです!ただし、localhost以外のアドレスを使用する必要があります。

ボックスのNIC(または2番目のNICを使用)に別のIPをバインドし、必要なポートについて、そのアドレスをリッスンするようにApacheを設定します。ワイルドカード(*)が機能するはずです。そのアドレスへの唯一のトラフィックは、HOSTSファイル「spoof」によって送信され、そのトラフィックは、ローカルホストにアクセスする可能性のある他の(レギット)サービスに干渉しません。

また、HOSTSファイルではなくDNSを使用してこれを行うこともできます。これは私見より良い長期的な解決策です。最後に、最も簡単な解決策は、ファイアウォールでこれらのドメインへのトラフィックをブロックする可能性が最も高いです。


更新-コメントに基づく。 HTTP用とHTTPS用の2つの異なるIPアドレスを使用することをお勧めします。それぞれがすべてのポートでリッスンし、トラフィックを適切なポートに転送します。次に、ブロックするドメインをHOSTSファイルに追加するときに、エントリの追加をトリガーしたリクエストのタイプに基づいて、SSL/VanillaIPに設定します。

1
tomjedrz

すべてのErrorDocumentコードとワイルドカード画像タイプを以下のように同じ空白のページ/画像にリダイレクトすることで、物事を本当に単純化することができます。最初にデッドオンを照合しようとし、次にエラードキュメントのルーチンをフォールスルーとして許可します。 (私が思うエラールーチンですべてを行うことができますが、エラールーチンとしてはかなり遅いと思いますか?)http.confの最後で、SEPARATE IPアドレスで(Listen 192.168.1.9:80を使用)たとえば、私のセットアップでは、192.168.1ネットワーク上にあり、メインサーバーは.10上にあります)

<VirtualHost 192.168.1.9:80>

ServerName adware
DocumentRoot /usr/local/httpsd/adware
CustomLog /dev/null common
ErrorLog /dev/null

<Directory "/usr/local/httpsd/adware">
AllowOverride none
Order allow,deny
Allow from all
</Directory>

AliasMatch /*.php /usr/local/httpsd/adware/no.html
AliasMatch /*.sql /usr/local/httpsd/adware/no.html
AliasMatch /*.html /usr/local/httpsd/adware/no.html
AliasMatch /*.htm /usr/local/httpsd/adware/no.html
AliasMatch /*.gif /usr/local/httpsd/adware/no.gif
AliasMatch /*.jpg /usr/local/httpsd/adware/no.jpg
AliasMatch /*.png /usr/local/httpsd/adware/no.png

ErrorDocument  400  /usr/local/httpsd/adware/no.html
ErrorDocument  401  /usr/local/httpsd/adware/no.html
ErrorDocument  403  /usr/local/httpsd/adware/no.html
ErrorDocument  404  /usr/local/httpsd/adware/no.html
ErrorDocument  405  /usr/local/httpsd/adware/no.html
ErrorDocument  414  /usr/local/httpsd/adware/no.html
ErrorDocument  500  /usr/local/httpsd/adware/no.html

</VirtualHost>

-私たちのために御馳走を動作します。 no.htmlファイルは次のFigletテキストです。

 _______ __ 
 | _ | .-- | | .-----。
 | || _ || __- | __ __ 
 | ___ | ___ || _____ || _____ | __ | __ | 

そして、画像はすべて1x1のそれぞれの空の画像、2のカラーパレットです。

そして、メインのDNSに変換された広告ブロックサイトリストをバインドするhostsファイルがあり、ネットワークレベルですべてをキャッチします。したがって、DHCPの訪問者、労働者は同じ丁寧な保護を受けます。

1
Jason F