プロが教える店舗&オフィスのセキュリティ対策術

以下の現象が発生して、大変困っております。


<現象>
クライアントからhttpsアクセスをしようとして、
ブラウザに「ページが表示できません」エラーとなることがある。

<調査状況>
クライアント、OS上でWireSharkを仕掛けて、TCPの通信をキャッチしたところ、
問題が発生した通信は「SYN」がOSまでは来ているが、
「SYN/ACK」が返ってきていない。

<環境>
サーバ:windows2003server,Apache
クライアントOS:WindowsXP


<質問内容>
クライアントからの「SYN」要求に対して、「SYN/ACK」を返すのは、具体的に何が返しているのでしょうか。
(windowsのソケットプログラム?)

また、その調査方法があれば教えて頂けないでしょうか。
よろしくお願い致します。

A 回答 (5件)

SYN/ACKは、OSのTCPプロトコル処理プログラムが返送します。


SYNパケットを受信したTCP処理プログラムは、対象ポートを
listenしているアプリケーションがいればSYN/ACKを返却し、
誰もlistenしていなければRST/ACKを返却します。

SYN/ACKもRST/ACKも返却されていない場合、Windowsファイアウォールや
市販のパーソナルファイアウォールソフトがパケットを破棄している
可能性が高いと思います。

SYN/ACKの替わりにRST/ACKが返却されているのであれば、
アプリ(Apache)が指定ポートをListenしていない可能性が高いです。

いずれの場合も、OSのネットワーク処理レベルの話であり、
Apacheに着信は通知されません。
Apacheの着信処理が動作する前になんらかの異常が発生している
と思います。)、

この回答への補足

回答ありがとうございます。

Windowsファイアウォールは切っていますが、
市販のウィルス対策ソフトは入っております。

ただ、ウィルス対策ソフトオフにした状態で、現象が再現したので、
関連性は少ないと思っております。


今の時点では、RST/ACKが返却されている状況は確認できておりません。
となると、Apacheの可能性は低いということですね。。。

補足日時:2010/01/19 13:58
    • good
    • 0

> 問題のある通信の時だけ、サーバ側でポートが閉じているのかどうか、


> 調査することはできるのでしょうか。

ポートが待ち受け状態になっているかどうかは、コマンドラインから"netstat -a"を実行すればわかります。
ただ、ファイアウォール機能を使っている場合はそちらの影響も考える必要があります。

> といったことがあるのかどうか、疑っているのはいるのですが、

実装については素人なので外しているかもですが、基本的にTCPセッションの確立まではOSの仕事です。
Apacheは確立したセッション上でデータの送受信をやっているだけのはずです。

この回答への補足

回答ありがとうございます。

なるほど、netstatですね。
再現テストはできるので、その間のnetstatの状態をログで出力させるようにしてみます。

補足日時:2010/01/19 13:50
    • good
    • 0

サーバ側にSYNが届いていてかつサーバがSYN/ACKを返していないのであれば、問題はサーバ側にあると見て良いでしょう。


ポートが閉じているのかはたまた別の問題なのか、今提示されている情報だけでは何ともいえませんが…

> その通信が、Apache上のアクセスログには出ていないという状況です。

そもそもTCPのセッションが確立していないので、Apacheのログには何も出力されないと思います。

この回答への補足

回答ありがとうございます。

おっしゃるとおり、サーバ側に問題があると思っております。
問題のある通信の時だけ、サーバ側でポートが閉じているのかどうか、
調査することはできるのでしょうか。


>> その通信が、Apache上のアクセスログには出ていないという状況です。
>
>そもそもTCPのセッションが確立していないので、Apacheのログには何も出力されないと思います。

OSのソケットをオープンするのは、Apacheのプロセスだと思うので、
OSまで"SYN"は届いていて、Apacheのプロセスに渡せなかったから
ソケットをオープンできず、"SYN/ACK"が返らなかった。

といったことがあるのかどうか、疑っているのはいるのですが、
その辺りの調査方法がわからず、暗礁に乗り上げております。。。。

補足日時:2010/01/15 20:12
    • good
    • 1

Apacheのアクセスログより、エラーログを調べるべきかと思います。



> httpsアクセスをしようとして、
Windows2003側のポート443開放と、SSLの設定は出来てますか?

この回答への補足

ご回答ありがとうございます。
説明不足で申し訳ございません。

error.log、ssl_request.logは調査しておりますが、エラーは検知できておりません。

Windows2003側のポート443開放と、SSLの設定は出来ております。
通常、https通信が出来ておりますが、
1回/1時間程度、「ページが表示されません」と出てしまうことがあります。

補足日時:2010/01/15 19:53
    • good
    • 0

"SYN"に対して"SYN/ACK"を返すのは、"SYN"を受信したホストです。


クライアントが"SYN"を送っているのに"SYN/ACK"が返ってこないのであれば、
(1) SYNがサーバに届いているのか
(2) サーバはSYN/ACKを返しているのか
をまず調べないと始まりません。

サーバ側にWiresharkを仕込むなり「ネットワークモニタ」(2003に標準付属)を追加インストールするなりして調べるのが良いでしょう。

あとは、どこで通信がブロックされているかをしらみつぶしに調べていくことになります。

この回答への補足

回答ありがとうございます。
説明不足で申し訳ございません。

サーバ側にWireSharkを仕掛けた結果、
サーバ側のNickまでは"SYN"が届いていることは確認できております。

その通信が、Apache上のアクセスログには出ていないという状況です。

補足日時:2010/01/15 15:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!