web-dev-qa-db-ja.com

iptablesは、16進文字列の一致によってパケットをドロップします

このパケットをtcpdumpでキャプチャしましたが、-hex-stringパラメータを使用してパケットを照合する方法がわかりません。誰かがそれを行う方法を教えてもらえますか?

11:18:26.614537 IP (tos 0x0, ttl 17, id 19245, offset 0, flags [DF], proto UDP (17), length 37)
    x.x.187.207.1234 > x.x.152.202.6543: [no cksum] UDP, length 9
        0x0000:  f46d 0425 b202 000a b853 22cc 0800 4500  .m.%.....S"...E.
        0x0010:  0025 4b2d 4000 1111 0442 5ebe bbcf 6701  .%[email protected]^...g.
        0x0020:  98ca 697d 6989 0011 0000 ffff ffff 5630  ..i}i.........V0
        0x0030:  3230 3300 0000 0000 0000 0000            203.........
6
Flint

16進文字列は|記号で囲む必要があります。スペースはオプションです

iptables --append INPUT --match string --algo kmp --hex-string '|f4 6d 04 25 b2 02 00 0a|' --jump ACCEPT

文字列マッチングは最後の手段であるべきであることに注意してください。それは集中的であり、接続ではなくパケットで動作するため、信頼できません。また、TCP接続で3番目のパケットの処理を開始するだけで、使用できるアクションが制限されます(NAT接続など)はできません)。

10
mgorven