
例
iptablesまたはnftablesを使用している場合
次のような特定のトラフィックを許可したいと思います。
iptables -A OUTPUT -d 192.168.1.1 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -p udp --sport 53 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
最初のルールは、DNSクエリを含むパケットの検査も含め拡張され、*を含むパケットのみを許可することができます。.wetransfer.comクエリの要求どおり、そうでない場合はドロップしますか?
これはいわゆるディープパケットインスペクションしかし、iptables/nftables に関してはどのようにすればよいのでしょうか?
答え1
iptables はネイティブでは DNS を理解しませんが、match を使用すると理解できるはずですstring
。
-p udp --dport 53 -m string --algo kmp --hex-string "|0A|wetransfer|03|com|00|" --icase
ネットワーク上の DNS 名ではドットが使用されないことに注意してください。DNS 名は、長さのプレフィックスが付いた一連のコンポーネントとして送信されます。たとえば、「.com」は . として送信されます0x03 c o m
。
--icase
クライアントがクエリを大文字と小文字が混在した状態で送信する可能性があるため (場合によっては意図的に)、大文字と小文字を区別しない一致 ( ) を使用する必要があります。