
Я настроил Postfix, но у меня возникли проблемы с настройкой.
Всякий раз, когда я отправлял электронные письма на сервер, он отклонял их с сообщением «Ретрансляция отклонена», поэтому я изменил следующее main.cf
:
mynetworks = 0.0.0.0/0
mynetworks_style = subnet
Теперь я могу отправлять электронную почту, и это работает, но тесты MX показывают, что это открытый ретранслятор (очевидно, непреднамеренно).
Как мне решить эту проблему? Я, конечно, хочу, чтобы любой мог отправлять письма на мой домен, но я не уверен в конфигурации.
Я знаю, что могу изменить mynetworks
, но разве это не ограничивает тех, кто МОЖЕТ отправлять электронные письма на сервер?
решение1
Проблема, которая вас открывает, это
mynetworks = 0.0.0.0/0
Потому что где-то ниже вы, вероятно, это перечислили в
smtpd_recipient_restrictions = ... permit_mynetworks ...
Если вам нужно иметь возможность отправлять электронную почту с любого IP-адреса, то вам просто нужно включить пользователя/пароль для отправки электронной почты, обычно это sasl.
решение2
mynetworks должен содержать только доверенных пользователей, которые могут использовать сервер для ретрансляции почты на другие домены - в противном случае, как вы обнаружили, это открытый ретранслятор. Вы можете установить его на 192.168.0.0/16, 10/8 или 172.16.0.0/12, если используете адреса RFC 1918 во внутренней сети.
Настройки, которые контролируют, могут ли люди отправлять почту на ваш сервер, включают mydestination и virtual_mailbox_domains — ознакомьтесь с документацией.здесьилиздесь.
решение3
Как задокументировано вhttp://www.postfix.org/postconf.5.html#mynetworks:
mynetworks (по умолчанию: см. вывод "postconf -d")
Список "доверенных" удаленных SMTP-клиентов, имеющих больше привилегий, чем "чужие".В частности, «доверенным» SMTP-клиентам разрешено ретранслировать почту через Postfix.
Описание параметра smtpd_recipient_restrictions см. в руководстве postconf(5).
решение4
используйте аутентификацию только для вашего IP: main.cf
smtpd_recipient_restrictions =
permit_mynetworks
reject_unauth_destination
используйте файл для хранения вашего ip main.cf:
mynetworks = hash:/etc/postfix/network_table
Используйте скрипт для обновления вашего IP-адреса в случае его изменения (запустите в cron)
#!/bin/bash
###
## sh /sx_sys/postfix_mynetwork_ip_checker.sh
LOGFILE="/var/log/smtp_relay.log"
curent_ip=$(dig @exemple.com exemple.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 }')
#echo $curent_ip
saved_ip=$(</etc/postfix/network_table )
#echo $saved_ip
if [ "$curent_ip OK" != "$saved_ip" && -n "$curent_ip"]; then
echo "$curent_ip OK" > "/etc/postfix/network_table"
postmap /etc/postfix/network_table
echo "$(date) smtp allow for $curent_ip" >> $LOGFILE 2>&1
mail -s "smtp allow for $curent_ip $(date)" [email protected] < /dev/null
fi
exit 0