У меня sendmail установлен на Ubuntu 10.04 исключительно для использования php mail()
функция. Это отлично работает, если не запущен iptables (я использовал sendmail myemailaddress@domain.com
чтобы проверить это).
Я думаю, что я разрешил SMTP и DNS (сценарий, который я использую для проверки правил iptables, ниже, в моей версии - фактические IP-адреса серверов имен моих хостов), но безрезультатно!
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
В настоящее время у вас есть:
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
Который позволяет:
Для исходящей электронной почты вам понадобится sendmail, чтобы иметь возможность подключаться к внешнему миру.
Так что вам тоже понадобится что-то вроде этого:
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
Пожалуйста, убедитесь, что вы не становитесь открытым реле.
Я предполагаю, что вы будете подключаться к ретранслятору (smarthost) для отправки почты и вам не нужна входящая почта. Если нет, придется еще поработать. Автоматизированные системы, как правило, не имеют хорошо настроенных почтовых служб, что может привести к тому, что их почта будет отброшена или отправлена в корзину для спама.
Вы можете использовать conntrack для обработки установленных соединений. Это упрощает остальные ваши правила, поскольку вам нужно беспокоиться только о новых соединениях в остальных правилах.
iptable -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptable -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Ваши правила перед вашими записями ping выглядят хорошо.
Ваши правила должны охватывать исходящий трафик
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
Ваши правила ICMP кажутся неполными
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