Iptables блокирует исходящий и входящий smtp на моем сервере, хотя я указал, что это не нужно. Моя политика - ОТКАЗАТЬ все, кроме указанного. Изменение политики на ПРИНЯТЬ все "решает" проблему, но мне не нужен неограниченный трафик на этом сервере. Были установлены следующие правила (smtp часть последняя):
# Flush all rules
iptables -F
iptables -X
# Allow unlimited traffic on loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Allow incoming and outgoing SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
# Allow incoming HTTP/HTTPS
# HTTP
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
# HTTPS
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
# Allow outgoing SMTP
iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
# Finally, change policy to DROP ALL
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
Это веб-сервер. Джанго send_mail
функция это то, что используется для отправки почты. Настройки следующие:
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'person@gmail.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587
Я предположил, что 587 используется для электронной почты, поэтому я добавил для порта 587 те же правила, что и для порта 25. Я также пробовал переключаться. --dport
/--sport
для smtp ничего. Установка правил как в этот и этот вопросы (как для порта 25, так и для 587) тоже не помогли. Я даже попытался сделать то же самое для порта 1025, только потому, что он был упомянут в документации, ничего ...
Правила вашего брандмауэра не разрешают трафик DNS (порт UDP 53). Таким образом, ваше приложение Django не может выполнять поиск в DNS, чтобы найти smtp.gmail.com
:
gaierror at /contact/mailto [Errno -2] Name or service not known
Чтобы исправить это, напишите правила брандмауэра, разрешающие исходящие DNS-запросы и входящие DNS-ответы.
Может ли быть, что --sport и --dsport должны быть наоборот?
# Allow outgoing SMTP
iptables -A OUTPUT -o eth0 -p tcp --dport 587 -m state --state NEW,ESTABLISHED -j A
iptables -A INPUT -i eth0 -p tcp --sport 587 -m state --state ESTABLISHED -j ACCEPT