最近、サーバーがnetstat -na
によって奇妙な場所「121.11.76.48」にデータを送信し続けていることに気付きました。
それが何を送っているのかを知るために、私は試しました:
tcpdump -i eth0 Host 121.11.76.48 -nnvvXSs 1514
そして、この場所にHTTPリクエストを送信し続けることがわかりました:
22:55:21.179353 IP (tos 0x0, ttl 64, id 26103, offset 0, flags [DF], proto: TCP (6), length: 296) 192.168.1.13.58155 > 121.11.76.48.80: P, cksum 0x880b (incorrect (-> 0xd884), 1904784743:1904784999(256) ack 915059568 win 46
0x0000: 4500 0128 65f7 4000 4006 4ce8 c0a8 010d E..(e.@[email protected].....
0x0010: 790b 4c30 e32b 0050 7188 b567 368a b370 y.L0.+.Pq..g6..p
0x0020: 5018 002e 880b 0000 4745 5420 2f20 4854 P.......GET./.HT
0x0030: 5450 2f31 2e31 0d0a 486f 7374 3a20 0d0a TP/1.1..Host:...
0x0040: 4163 6365 7074 3a20 2a2f 2a0d 0a52 6566 Accept:.*/*..Ref
0x0050: 6572 6572 3a20 6874 7470 3a2f 2f77 7777 erer:.http://www
0x0060: 2e78 6264 796d 2e63 6f6d 2f69 6e64 6578 .xbdym.com/index
0x0070: 2e61 7370 0d0a 4163 6365 7074 2d4c 616e .asp..Accept-Lan
0x0080: 6775 6167 653a 207a 682d 636e 0d0a 4163 guage:.zh-cn..Ac
0x0090: 6365 7074 2d45 6e63 6f64 696e 673a 2067 cept-Encoding:.g
0x00a0: 7a69 702c 2064 6566 6c61 7465 0d0a 5573 Zip,.deflate..Us
0x00b0: 6572 2d41 6765 6e74 3a20 4d6f 7a69 6c6c er-Agent:.Mozill
0x00c0: 612f 342e 3020 2863 6f6d 7061 7469 626c a/4.0.(compatibl
0x00d0: 653b 204d 5349 4520 362e 303b 2057 696e e;.MSIE.6.0;.Win
0x00e0: 646f 7773 2035 2e31 290d 0a50 7261 676d dows.5.1)..Pragm
0x00f0: 613a 206e 6f2d 6361 6368 650d 0a56 6961 a:.no-cache..Via
どうやら、私のサーバーの何かがIE6ブラウザでwww.xbdym.com(121.11.76.48)にパケット(約1パケット/秒)を送信し続けています!
しかし、私のボックスはLinuxボックス(CentOS 5.6)であり、IE6を実行する方法はありません。そして、私はWindows VMをインストールしていません。
次に、lsof -i
を使用して、どのプロセスがパケットを送信するかを見つけます。
httpd 13232 Apache 20u IPv4 326404481 TCP 192.168.1.13:48988->121.11.76.48:http (ESTABLISHED)
Apacheです!奇妙なことに、Apacheがこの場所にパケットを頻繁に送信するのはなぜですか?
次に、Apacheのログを調べて、access_logで多くのレコードを見つけます。
121.11.80.126 - - [23/Dec/2011:22:58:58 +0800] "GET http://www.xbdym.com HTTP/1.1" 502 495 "http://www.xbdym.com/index.asp"
"Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)"
およびrewrite.log:
121.11.80.126 - - [23/Dec/2011:23:05:57 +0800] [www.xbdym.com/sid#2b1de9435be0][rid#2b1df49d6ad0/initial] (1) pass through proxy:http://www.xbdym.com
サーバーはプロキシとして動作しますか?実際、サーバーに直接接続すると、内部のJavaサーバー(ProxyPassとProxyPassReserveによって設定))にリダイレクトされ、次のように設定します。
RewriteEngine On
RewriteCond %{HTTP_Host} ^myserver.com
RewriteLog "/home/myserver/log/rewrite.log"
RewriteLogLevel 1
そこに「RewriteCond
」があります。「myserver.com」で始まらないホストは合格しないでください!しかし、それが私のプロキシをどのように通過するのか!?そして、それを止める方法!?
環境:
httpd-2.2.3-53.el5.centos.3
CentOS 5.6
2.6.18-238.12.1.el5xen
- 更新しました -
私のProxyPass設定:
ProxyPreserveHost on
ProxyPass /app http://localhost:8080/app
ProxyPassReverse /app http://localhost:8080/app
RewriteCond
行は、処理される次のRewriteRule
にのみ影響します。それ自体は何もしません。
あなたが私たちに与えたあなたの設定のスニペットにはそれに続くRewriteRule
がないので、私の最も良い推測はRewriteCond
が何もしていないということです。
正しいHost:
ヘッダーを送信しないものをブロックする必要があるクイック変更:
RewriteCond %{HTTP_Host} !^myserver.com
RewriteRule - - [F]
あなたが見たもののあなたの分析は私には正しいようです。 Apacheはオープンリレーとして構成されています。
ProxyPassとProxyPassReverseの行はどのように見えますか? (実際には、ProxyPassReserveではなくApache構成でProxyPassReverseを記述したと思います。)
リクエストが空のHost:
ヘッダーを送信したことに気づきました。これは非常に奇妙です。 VirtualHostがデフォルトとして構成されていると思われます。つまり、Host:
ヘッダーがServerName
またはServerAlias
変数と一致しない場合でもすべてのリクエストを処理します。
Apache wiki に、プロキシ以外のデフォルトのVirtualHostを追加する方法に関するアドバイスがいくつかあります。そして、完全を期すために、ここに mod_proxyドキュメント へのリンクがあります。