Temos um servidor DNS do RHEL 6.7 e estamos tentando descartar pacotes que contêm determinados domínios. Por exemplo, um de nossos servidores DNS estava envolvido em um ataque de subdomínio aleatório, em que hosts externos ou outros servidores DNS nos enviam consultas que, em seguida, o nosso servidor inicia sua própria consulta recursiva para um nome de host específico. Cada nome de host consultado é inválido e aleatório e não existe. Do tcpdump, aqui está uma dessas consultas.
123.123.123.123.54729 > 140.205.228.52.53: [bad udp cksum 0x3701 -> 0x0d53!] 37401 A? llij.x99moyu.net. (34)
Neste exemplo, nosso servidor DNS é o endereço 123.123.123.123 e está lidando com a pesquisa entrando em contato com outro servidor DNS. Estamos executando uma versão mais antiga do BIND que não suporta RRL ou Limitação de Taxa de Cliente Recursiva. Nós tentamos limitar a taxa com o iptables, mas não obtivemos os resultados que queríamos. Agora estamos olhando para a string correspondente ao iptables, mas até agora não tivemos sorte com isso. Eu não consigo fazer isso funcionar. Pelo que pesquisei, parece bastante direto. Aqui está uma regra do iptables.
-A INPUT -p udp --dport 53 -m string --algo bm --string x99moyu.net. -j DROP
E aqui está o que parece do comando iptables.
#iptables -L -vxn
0 0 DROP udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 STRING match "x99moyu.net." ALGO name bm TO 65535
Esta regra deve descartar qualquer pacote que venha ao servidor com o x99moyu.net. domínio presente (em qualquer lugar no pacote). Mas isto não está funcionando. A regra está no topo da cadeia INPUT, então eu sei que ela deve estar tomando precedência. Eu tentei tirar o período do fim do domínio e colocar um ponto à frente, mas isso também não funciona. Eu também tentei colocar o - string x99moyu.net. antes do - algo, mas isso não tem efeito. Eu também tentei o KMP algo sem sucesso.
Alguém tem alguma experiência com padrões de seqüência de correspondência com o iptables que pode ajudar e me dizer o que estou fazendo de errado?