・自社サーバーを公開する(1)
http://jp.yamaha.com/products/network/solution/server/
ここに
ip filter 1031 pass * 192.168.10.2 tcpflag=0x0002/0x0017 * www
という設定があります。
このtcpflag=0x0002/0x0017については補足で
「最初のパケット(SYN)だけを通すフィルタです。」
という説明があります。どういうことかなと思って、調べてみました。
コマンドリファレンス(PDF)の「9.1.8 IP パケットのフィルタの設定」の章によると
tcpflag=value/maskということらしいです。
TCPフラグの値とmaskの値の論理積 (AND) が、valueに一致
tcpflag=0x0002/0x0017を当てはめてみます。
URG | ACK | PSH | RST | SYN | FIN | |
value(0x0020) | 0 | 0 | 0 | 0 | 1 | 0 |
mask(0x0017) | 0 | 1 | 0 | 1 | 1 | 1 |
で、例えば 000010(SYNのみ) というフラグのパケットが来た場合、
対象パケット000010 と mask 010111 の論理積は 000010 になって
value 000010 と一致するのでマッチする。
他、010000(ACKのみ) が来た場合、
対象パケット010000 と mask 010111 の論理積は 010000 になって
value 000010 と一致しないのでマッチしない。
まとめると、tcpflag=0x0002/0x0017 の場合、以下の4パターンがマッチするはずです。
- 000010 : SYN
- 001010 : PSH,SYN
- 100010 : URG,SYN
- 101010 : URG,PSH,SYN
当初「最初のパケット(SYN)だけを通すフィルタです。」という記述を見たとき
短絡的にSYNビットだけがセットされているパケット、と考えてしまいました。
それならmaskが0xffffとかなるはずなので、一人で混乱していたのでまとめてみました。
※フラグの意味はこちらのサイトが参考になります。
http://atnetwork.info/tcpip/tcpip29.html
とても解りやすい説明ありがとうございました、すごく為になり助かりました。
ただ、今さらですが、一瞬あれ?と思ったので一つ訂正です。
中あたりにあるテーブルですが
value(0x0020) → value(0x0002)
かと思います。