0252215,229
2017/05/24(水) 21:22:07.40ID:???環境構成ですが、クライアントPCをAのネットワーク、WEBサーバをBのネットワークに接続し、
AとBのネットワークはサーバのeth0をAに、eth1をBに接続してます。
サーバ内ではeth0あてのパケットをWEBサーバに、eth1あてのパケットをクライアントPCに転送しています。
サーバ内でtcpdumpをeth0、eth1のtcpパケットのみ記録して調べてみた所、iptables停止時は以下の状態でした。
実オペレーションは、クライアントPCからeth0に対してブラウザでアクセス
1.クライアントPCからSYNを送付し、サーバ内のプログラムでeth1からWEBサーバへ転送
2.WEBサーバから、eth1にSYN,ACKを送付
3.eth1からWEBサーバにRSTパケットを送付
4.eth1に届いたSYN、ACKをサーバ内のプログラムでeth0からクライアントPCへ転送
2と3の間に作成したプログラムは介入しておらず、3が終わった後の4で転送プログラムが転送しています。
上記から、RAWSOCKETを使っていてListenをしていないので、3番でListenしていないポートへのコネクション
確立をさせずにOSがRSTパケットを送付しているのではないのかと考えました。
iptablesを起動時は、OSがListenしていると扱ってRSTパケットを送付しないのではないかと思ったのですが、
どうすれば確認できるかわからず、もやっとしています。
netstat -Lでiptables実行時と停止時にListen状況を見たのですが、変化はありませんでした。
また、もしListenしていないポートへのアクセスにRSTパケットを送る仕様だとすると、クライアントPCから
サーバへのSYN送信時は何故RSTパケットをブラウザに返さないのか。
※サーバ上でHTTPDのサービスは起動していません。
一瞬、わかった気がしたのですが、まだ理解不足のようです。ネットワーク難しいです。