Você pode usar uma correspondência mais longa, incluir delimitadores de registros e usar hexadecimal para não imprimível. Sua regra pode se tornar:
iptables -A INPUT -p udp -m udp --dport 5060 -m string --icase --hex-string '|a|User-Agent: |0d0a|' --algo bm --to 65535 -j DROP
que será impresso de volta (usando iptables-save
) como:
iptables -A INPUT -p udp -m udp --dport 5060 -m string --icase --hex-string '|0a557365722d4167656e743a200d0a|' --algo bm --to 65535 -j DROP
Agora, você deve estar ciente da sintaxe do espaço em branco no formato de campo de cabeçalho do SIP . Como não há correspondência de regex disponível, há possibilidades quase infinitas (mesmo que apenas uma seja incentivada), portanto, você deve verificar regularmente o seu "spam" com o Wireshark em vez do tcpdump para ter o conteúdo exato. Aqui está uma Amostra de chamada SIP capturada de Captura de amostras do Wireshark .
Cabeçalhos também são insensíveis a maiúsculas e minúsculas, mas por ter testado, --icase
funciona com o conteúdo de --hex-string
, portanto, também corresponderia a USER-AGENT:
.