Solução de problemas de conectividade IPv4 limitada na porta 25.
Tenha regras ipTables:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 185.121.228.0/24 anywhere
ACCEPT all -- 127.0.0.0/24 anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
Uma vez que a política de ENTRADA padrão é ACEITAR,
root@mail:/home/ubuntu# echo “HELO” | nc -4 smtp.google.com 25
220 mx.google.com ESMTP ffacd0b85a97d-38a1c8bb5f7si23003263f8f.375 - gsmtp
502-5.5.1 Unrecognized command. For more information, go to
502 5.5.1 https://support.google.com/a/answer/3221692 ffacd0b85a97d-38a1c8bb5f7si23003263f8f.375 - gsmtp
Quando a política de ENTRADA padrão é DROP, o mesmo comando trava indefinidamente.
Agora, a parte mais interessante é que a mudança na política de INPUT não tem efeito sobre
root@mail:/home/ubuntu# echo “HELO” | nc -6 smtp.google.com 25
que está recebendo resposta do Google de qualquer maneira.
É preciso que o servidor de e-mail envie e-mails para todos os outros servidores de e-mail, não apenas para aqueles compatíveis com IPv6.
Se alguém pudesse explicar o que está acontecendo, seria fantástico!
Atualizado: a impressão do ip-save é:
:INPUT DROP [41791:1739301]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6390374:3802889072]
-A INPUT -i ens3 -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -s 127.0.0.0/24 -i lo -j ACCEPT
-A INPUT -s 185.121.228.0/24 -i ens3 -j ACCEPT
COMMIT
A maneira como você filtra a entrada obstrui sua saída também. Isso porque qualquer conexão "de saída", de fato, requer replies , pacotes de retorno, que não são permitidos atualmente em seu firewall.
Pense em como a conexão de saída funciona, digamos TCP: sua máquina envia SYN, então ela precisa receber SYN e ACK (que serão processados na cadeia INPUT), enviar seu próprio ACK, e assim por diante, por exemplo, enquanto a conexão é iniciada de dentro, o tráfego sempre flui em ambas as direções. Seu firewall não tem nenhuma regra na cadeia INPUT para reconhecer e permitir esse SYN e ACK, então ele é processado de acordo com a política, por exemplo, descartado, e a conexão de saída não pode prosseguir.
Para alguns casos, o firewall simples sem estado que não considera que alguns pacotes são respostas para outros é o suficiente. É quando você pode criar o conjunto de regras que cobre todo o tráfego de ida e volta. Mas para a grande maioria dos casos você não pode, e é por isso que temos que introduzir um conceito de conexões no firewall (para tudo, incluindo UDP aparentemente sem conexão, ICMP e assim por diante) e distinguir pacotes que se relacionam a alguma conexão ativa.
Resumindo, o Linux tem um módulo rastreador de conexão que faz isso, comumente conhecido como
conntrack
, e sua interface iptables tem algumas correspondências e alvos na sintaxe do conjunto de regras. Além disso, todo o recurso NAT do Linux é baseado no conntrack.Em um típico conjunto de regras de firewall stateful, uma das primeiras regras é a que usa conntrack para permitir pacotes de todas as conexões estabelecidas atualmente ou novas conexões relacionadas a conexões já estabelecidas. Ela pode ser adicionada assim:
E sua conexão de saída começará a funcionar magicamente mesmo quando a política de ENTRADA for DROP.
Havia uma forma mais antiga dessa regra, que usava o
state
módulo obsoleto,-m state --state RELATED,ESTABLISHED
. Estou lhe contando isso caso você a encontre em algum tutorial antigo online; apenas saiba o que é, mas não a use. Não há tal módulo em kernels recentes, mas essa forma antiga ainda funcionaria, sendo silenciosamente traduzida para oconntrack
módulo, então é melhor apenas usá-la explicitamente.-I INPUT 1
significa "inserir na frente" (ser o primeiro).Uma pequena ressalva, se você já estabeleceu uma conexão e quer se livrar dela, você não precisa apenas adicionar uma regra abaixo dela; você também precisa quebrar a conexão ativa real para que o rastreador de conexão pare de reconhecê-la e permiti-la. Com TCP, geralmente não é um grande problema, mas quando você começa a usar protocolos baseados em UDP, especialmente protocolos complexos como SIP, você encontrará alguns problemas desagradáveis, e você precisa ter um bom entendimento do comportamento do rastreador de conexão para resolvê-los.
Quanto ao IPv6, suspeito que você não tenha nenhum firewall para ele. É uma coisa separada, configuração usando
ip6tables
, pode ser visualizada comip6tables-save
e tem o mesmoconntrack
módulo.