特定のクエリを含むDNSリクエストをファイアウォールでブロックする

特定のクエリを含むDNSリクエストをファイアウォールでブロックする

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クライアントがクエリを大文字と小文字が混在した状態で送信する可能性があるため (場合によっては意図的に)、大文字と小文字を区別しない一致 ( ) を使用する必要があります。

関連情報