Cenário:Eu escrevi iptables
regras para um host onde um mecanismo DPI está observando as filas do Netfilter: as regras de firewall enfileiram o tráfego que chega a esse host em diferentes filas do Netfilter, dependendo se o tráfego vem de um determinado ipset
meu.
Na FORWARD
cadeia, todas as conexões são enfileiradas em diferentes NFQUEUES
: o mecanismo DPI monitora nas filas do espaço do usuário os pacotes enviados pelo iptables, se uma conexão proibida for observada ele marca o pacote com um valor especial; O mecanismo DPI reinsere pacotes proibidos na pilha; na POSTROUTING
cadeia eu verifico se as conexões estão marcadas com aquele valor especial, se sim, eu DROP
as verifico.
Está tudo funcionando bem, mas...
Problema: o mecanismo de DPI é bom, mas não perfeito: às vezes,
- o tráfego que deveria ser identificado como proibido não é identificado como tal e, portanto, não é bloqueado;
- o tráfego proibido é bloqueado, mas não imediatamente, e uma conexão proibida enquanto isso pode abrir outra conexão (
RELATED
, de acordo com a máquina conntrack) que não está marcada como proibida, mas eu gostaria de bloquear a conexão relacionada também.
O segundo caso é aquele em que quero agir: como exemplo para o caso 2, imagine que o motor DPI quer bloquear o YouTube mas não consegue fazê-lo rapidamente; permite que a conexão do YouTube abra outra conexão rotulada como SSL do mecanismo DPI; O mecanismo DPI finalmente bloqueia o YouTube, mas a conexão SSL é selvagem e gratuita; Não posso dizer ao mecanismo DPI para bloquear conexões SSL, independentemente de quais conexões as abriram.
Considerações: conforme explicado emCenário, os pacotes que chegam em POSTROUTING
cadeia podem ser marcados com 0 (que é o valor padrão, então o mecanismo DPI não tomou nenhuma ação) ou com esse valor especial (o mecanismo DPI viu uma conexão proibida e a marcou): um simples
iptables -t mangle -A POSTROUTING -m mark --mark DROPVALUE -j DROP
quase sempre é suficiente, mas emProblemaseção escrevi que conexões RELACIONADAS às proibidas, mas não são vistas como tal pelo motor DPI, porquemesmo que tenham sido criados por uma conexão proibida, seu protocolo não está na lista negra e por isso não são vistos como proibidos. Isso está certo porque não posso colocar na lista negra SSL
e HTTPS
.
Preciso bloquear conexões RELATED
proibidas: RELATED
e ESTABLISHED
(se entendi bem) não me refiro a conexões específicas, mas preciso me referir a conexões proibidas.
Pergunta: é possível descartar conexões RELATED
para conexões para serem descartadas (ou já descartadas) iptables
? Ou algum hack conntrack
é necessário?
Agradecemos antecipadamente por qualquer sugestão.
Responder1
Você não entende RELATED
. Isso não é usado para todas as conexões que um único endereço possa fazer. Ele é usado apenas para dados realmente relacionados, como o fluxo de dados FTP associado a uma conexão de controle FTP ou mensagens de erro ICMP associadas a uma conexão aberta. Existem muito poucas conexões desse tipo que realmente correspondam RELATED
.