O Sendmail não funciona com o iptables, mesmo que smtp e dns sejam permitidos

4

Eu tenho o sendmail instalado no Ubuntu 10.04 exclusivamente para o uso da função php mail() . Isso funciona bem a menos que o iptables esteja rodando (eu tenho usado sendmail [email protected] para testar isso).

Acho que eu permiti SMTP e DNS (o script que estou usando para testar as regras do iptables está abaixo, na minha versão são os IPs reais dos servidores de nomes dos meus hosts), mas sem sucesso!

iptables --flush

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Postgres
iptables -A INPUT -p tcp --dport 5432 -j ACCEPT

# Webmin
iptables -A INPUT -p tcp --dport 10000 -j ACCEPT

# Ping
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

# sendmail
iptables -A INPUT -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

# DNS
iptables -A INPUT -p udp --sport 53 -s <nameserver1> -j ACCEPT
iptables -A INPUT -p udp --sport 53 -s <nameserver2> -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -s <nameserver1> -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -s <nameserver2> -j ACCEPT

iptables -A OUTPUT -p udp --dport 53 -d <nameserver1> -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -d <nameserver2> -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -d <nameserver1> -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -d <nameserver2> -j ACCEPT


iptables -A INPUT -j DROP

# Add loopback
iptables -I INPUT 1 -i lo -j ACCEPT
    
por tom 04.07.2012 / 02:35

2 respostas

8

Atualmente você tem:

iptables -A INPUT -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

O que permite:

  • pacotes para o seu sendmail,
  • pacotes de sua porta 25 de saída, mas apenas para conexões já estabelecidas (portanto, somente conexões de fora).

Para e-mails enviados, você precisa do seu sendmail para poder se conectar ao mundo externo.

Você também precisará de algo assim:

iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

Por favor, certifique-se de não se tornar um revezamento aberto.

    
por 04.07.2012 / 05:19
3

Estou assumindo que você estará se conectando a um retransmissor (smarthost) para enviar e-mails e não precisa receber nenhum e-mail recebido. Se não, terá mais trabalho a fazer. Os sistemas automatizados tendem a não ter serviços de e-mail bem configurados, o que pode resultar na queda de seus e-mails ou no envio para o repositório de spam.

Você pode querer usar conntrack para lidar com conexões estabelecidas. Isso simplifica o restante de suas regras, pois você só precisa se preocupar com novas conexões no restante das regras.

iptable -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptable -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Suas regras antes de suas entradas de ping parecem boas.

Suas regras precisam cobrir o tráfego de saída

iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

Suas regras de ICMP parecem incompletas

iptables -A INPUT -p icmp --icmp-type 3/4 -j ACCEPT 
iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT 
iptables -A OUTPUT -p icmp --icmp-type 3/4 -j ACCEPT 
iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT 
iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT 
    
por 04.07.2012 / 05:27