【ネットワーク】Juniper SRX(Junos OS) 非対称ルーティング 疎通不可

Juniper Networks製品のファイアウォール(FW)であるSRX300を利用していたところ、SRX300を経由した通信が上手くいかなかったのでメモとして以下に記載しておきます。

結論から言うと、以下の2点により、SRX300上で通信パケットをドロップさせておりました。

  • 送信元ホスト-SRX300間が非対称ルーティング(行きと戻りで通信経路が異なる)
  • SRX300上でTCP SYN チェックと TCP シーケンスチェック機能が有効(デフォルト設定)

Junos OSでは、TCP SYN チェックとTCP シーケンスチェックはデフォルトで有効化されております。非対称ルーティングだとTCP3ウェイハンドシェイク時に行きと戻りで送信元IPが違うためパケット拒否されてしまいます。非対称ルーティングでもパケットを通すようにするには、TCPパケットに対するセキュリティチェックを無効にする必要があります。コマンドは以下となります。

# set security flow tcp-session no-syn-check
# set security flow tcp-session no-sequence-check

非対称ルーティング状態で上記コマンドでTCP SYN チェックとTCP シーケンスチェックを無効化にしたところ、送信元ホスト-SRX300間の通信が疎通できるようになりました。

参考までに当時の状況を以下に記載します。

  • 送信元ホスト⇔SRX300間のping疎通は通る。
  • 送信元ホスト⇒SRX300⇒送信先ホストといったSRX300をGWとた別セグメントへのping疎通は通るが、リモートデスクトップなどのL4以上の疎通が通らない。
  • 送信元ホスト⇒送信先ホストへのポリシー(許可)のカウントアップされている。

といった状況でした。今思うとポリシーがカウントアップされていたのはping疎通後の時だったかもしれません。pingは通るのにリモートデスクトップができないということはTCPコネクションが確立できていないのか、非対称ルーティングが原因でFWで拒否されているのかなと思い、調べていたらJunos OSにはTCP SYN チェックとTCP シーケンスチェックという機能があることを知りました。事前の調査不足ということもあり、たまたま非対称ルーティングであることが発覚したネットワークだったので、ハマってしまいました。反省です。。

非対称ルーティング自体がネットワーク運用、セキュリティ上ともによろしくないので、各ホストのルーティング修正とSRX300のTCP SYN チェックとTCP シーケンスチェックを有効化にすることで本問題は解決しました。どうしても非対称ルーティングで通信させる必要がある場合はSRX300上でTCP SYN チェックとTCP シーケンスチェック機能を無効化することが必要ですが、ポリシー単位でも有効化できます。

ちなみにTCP SYN チェックとTCP シーケンスチェック機能を有効化する場合は、先ほどの無効化コマンドを削除します。

# delete security flow tcp-session no-syn-check
# delete security flow tcp-session no-sequence-check

以上、Juniper SRX(Junos OS)利用時の非対称ルーティング疎通不可対応でした。