Eu sempre vi a regra -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
aplicada. Embora eu não seja um especialista, essa linha em particular me preocupa. É bastante óbvio que a regra permite todo o tráfego, com a única exceção de que a conexão deve ter sido estabelecida ou relacionada a uma conexão estabelecida.
Cenário
- Permitirei conexões à porta SSH padrão
22
da LAN dos servidores na sub-rede192.168.0.0/16
ou o que for. SuperInsecureApp®
expõe algo na porta1337
, que eu adiciono à minhaINPUT
cadeia.- Eu adicionei a
conntrack
regra para aceitarESTABLISHED
eRELATED
de todas as fontes - A política da cadeia é
DROP
Então, basicamente, esse shoud de configuração permite conexões SSH apenas da LAN, enquanto permite tráfego de entrada na porta 1337 do mundo.
É aqui que minha confusão floresce. Exporia de conntrack
alguma forma uma falha de segurança que permitiria obter uma conexão estabelecida em 1337 (já que é mundial), e depois utilizaria essa conexão para obter acesso à porta SSH (ou a qualquer outra porta)?
conntrack
regra estiver no início ou no fim da cadeia? Pelo que entendiiptables
, ele teria que processar todas as regras em conexões estabelecidas se elas estivessem no final, e somente essa regra única se fosse colocada no início?ESTABELECIDO e RELACIONADO são recursos da filtragem de pacotes "com estado", em que a filtragem não depende apenas de um conjunto de regras estático, mas também do contexto em que os pacotes são considerados. Você precisa de ESTABELECIDO para permitir que as conexões funcionem, e precisa de RELATED para mensagens relevantes de ICMP. A filtragem com estado permite filtrar com mais precisão em comparação com as regras estáticas "sem estado".
Vejamos primeiro ESTABELECIDO. Por exemplo, considere o TCP na porta 22. O iniciador (cliente) envia um
SYN
paraserverIPaddr:22
. O servidor retornaSYN+ACK
ao cliente. Agora é a vez do cliente enviar umACK
. Como deve ser a regra de filtragem no servidor, de modo que apenas a "correspondência"ACK
seja aceita? Uma regra sem estado geral seria semelhante aque é mais liberal do que a regra de estado de acordo. A regra sem estado permite segmentos TCP arbitrários, por exemplo,
ACK
ouFIN
sem ter estabelecido uma conexão primeiro. Os scanners de portas podem explorar esse tipo de comportamento para impressões digitais do SO.Agora vamos dar uma olhada em RELATED. Isso é usado para mensagens ICMP, principalmente mensagens de erro. Por exemplo, se um pacote do servidor para o cliente for descartado, uma mensagem de erro será enviada ao servidor. Essa mensagem de erro está "relacionada" à conexão estabelecida anteriormente. Sem a regra RELATED, seria necessário permitir mensagens de erro recebidas em geral (sem contexto) ou, como é costume em muitos sites, eliminar completamente o ICMP e aguardar o tempo limite na camada de transporte. (Observe que essa é uma má ideia para o IPv6; o ICMPv6 desempenha um papel mais importante para o IPv6 do que o ICMP para o legado do IP.)
fonte