SSGでハマったこと

tcp-syn-check

図にあるセグメントBのFW(SSG)をNetScreenからSSGに変更した際、今まではセグメントAからセグメントBにあるサーバにアクセスが出来ていたが、SSGに変更した途端、アクセスが出来なくなった。
最初はルーティング設定の不備かと思ったが、正確に設定されており、セグメントAからセグメントBのSSGやサーバにはpingが通るのでルーティング問題ではないと思った。

色々調べてみると、ScreenOS5.1以上、ScreenOS6.2以上の機器(Netscreen、SSG)からルーティングを利用してデフォルトゲートウエイとは異なるゲートウエイにあるサーバにアクセスした場合、TCPパケットがDROPされるらしい。
困ったことにICMPやUDPは通過される模様なので、pingだけの通信確認ではこの現象は確認が難しい。

先程の図にあるように、セグメントAからセグメントBのサーバにアクセスした場合、そこを管轄している
ScreenOS6.2以上のSSG(Netscreenだと5.1以上)を経由した際にDROPされます。

なぜこのような事が発生するかというと、以下のマニュアルの17ページに記載されてます。
http://www.juniper.net/techpubs/software/screenos/screenos6.2.0/ce_v4.pdf

Non-SYN Flags
By default, the security device checks for SYN flags in the first packet of a session
and rejects any TCP segments with non-SYN flags attempting to initiate a session.
You can leave this packet flow as is or change it to so that the device does not
enforce SYN flag checking before creating a session. Figure 9 on page 18 illustrates
packet flow sequences when SYN flag checking is enabled and when it is disabled

SYN flagの接続が最初に無いまま、発行されるTCPはREJECT(DROP)される、と書いてあるらしい。
ちなみにこの設定はデフォルトとなっております。

これを解決させるにはWebUIでは設定出来ず、CUIからの操作となります。

set flow tcp-syn-check
↓
unset flow tcp-syn-check
save(セーブを忘れずに)