Назад | Перейти на главную страницу

Настройки, которые нужно изменить, чтобы PostFix мог принимать исходящую почту от аутентифицированных пользователей

У меня есть почтовый сервер, который может получать почту для пользователей, которые находятся в базе данных MySQL, и позволяет им загружать эти сообщения через POP3. Все работает нормально. Моя версия PostFix - 2.7.0, на Ubuntu Server 10.04.

Проблема в отправке почты. Есть несколько проблем:

1. Сервер прослушивает порт 25, но интернет-провайдеры блокируют 25, поэтому мне нужно добавить порт прослушивания. Это должно быть 465 или 587? или оба? Как добавить дополнительный порт для безопасного SMTP?

Мне нужно принимать все соединения на 25 без аутентификации, но принимать почту только для действительных получателей / доменов в системе и блокировать ретрансляцию. В настоящее время это работает.

Порт 587 или 465 должен разрешать ретрансляцию на любой адрес / домен, но только для допустимых пользователей, которые проходят аутентификацию.

Верх моего файла master.cf:

smtp      inet  n       -       -       -       -       smtpd
#submission inet n       -       -       -       -       smtpd
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#smtps     inet  n       -       -       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING

Я предполагаю, что могу раскомментировать одну из этих строк, но я не знаю, какую из них или какие варианты раскомментировать.

Кроме того, почему у SMTP нет ограничения на отклонение? Это потому, что он всегда принимает все на порт 25, а затем решает, сохранять ли их позже? Куда отправляются сообщения, поступающие на порт 25, но не имеющие здесь действительного домена? У меня есть справка по домену, который мы обслуживаем. Вернут ли они их обратно? Я читал, что подпрыгивание - это плохо, потому что из-за этого можно выглядеть спамером.

2. Мои пользователи уже находятся в базе данных MySQL для входящей почты, и я хотел бы использовать эту же базу данных для разрешения исходящих сообщений.

main.cf выглядит так:

smtpd_banner = $myhostname ESMTP $mail_name
biff = no
append_dot_mydomain = no    
readme_directory = no

# TLS parameters
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/mail.crt
smtpd_tls_key_file = /etc/ssl/private/mail.key.insecure 

myhostname = mysite.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination =
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

virtual_alias_domains =
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-forwards.cf, mysql:/etc/postfix/mysql-email.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-mailboxes.cf
virtual_mailbox_base = /home/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_can$

Что мне изменить, чтобы он аутентифицировал отправителей из существующей базы данных пользователей?

3. В настоящее время почта с этого сервера, созданная командой PHP mail (), доставляется только тем пользователям, которые находятся в базе данных mysql действующих пользователей. Мне нужен PHP, чтобы отправлять почту любому пользователю в любом месте. Должен ли я настроить PHP для аутентификации с помощью SMTP после его работы?

ОБНОВИТЬ:

Я изменил свой master.cf, чтобы он выглядел так, и открыл 587 в брандмауэре.

smtp      inet  n       -       -       -       -       smtpd
submission inet n       -       -       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

Теперь я не могу подключиться по telnet на 587:

telnet xxx.xxx.xxx.xx 587
Trying xxx.xxx.xxx.xx...
Connected to xxx.xxx.xxx.xx.
Escape character is '^]'.
220 mydomain.com ESMTP Postfix
EHLO you
250-mydomain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM: <me@example.com>
530 5.7.0 Must issue a STARTTLS command first
STARTTLS
220 2.0.0 Ready to start TLS

Хорошо, поэтому я должен использовать TLS, что хорошо, но я не знаю, как дальше тестировать, когда TLS запущен?

Когда я использую EHLO на 25-м порту, я получаю:

250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN

Я не хочу, чтобы пользователи могли отправлять пароли в открытом виде, могу ли я отключить простой вход?

ОБНОВЛЕНИЕ 2:

Мой исходный /etc/postfix/sasl/smtpd.conf:

pwcheck_method: saslauthd
allow_plaintext: true
auxprop_plugin: mysql
sql_hostnames: 127.0.0.1
sql_user: mailusr
sql_passwd: secret
sql_database: mail
sql_select: select password from users where email = '%u'

Вышеупомянутое делает это при попытке аутентификации:

Feb 27 09:40:00 MyHOSTNAME postfix/smtpd[27274]: < c-65-34-234-133.hsd1.fl.comcast.net[65.34.xxx.xxx]: dGVzdEBhcsEZ2Vdci1jb20=
Feb 27 09:40:00 MyHOSTNAME postfix/smtpd[27274]: xsasl_cyrus_server_next: decoded response: test@mydomain.com
Feb 27 09:40:00 MyHOSTNAME postfix/smtpd[27274]: xsasl_cyrus_server_auth_response: uncoded server challenge: Password:
Feb 27 09:40:00 MyHOSTNAME postfix/smtpd[27274]: > c-65-34-234-133.hsd1.fl.comcast.net[65.34.xxx.xxx]: 334 UGFzc3dvcmQ6
Feb 27 09:40:20 MyHOSTNAME postfix/smtpd[27274]: < c-65-34-234-133.hsd1.fl.comcast.net[65.34.xxx.xxx]: dGVzdGluZw==
Feb 27 09:40:20 MyHOSTNAME postfix/smtpd[27274]: xsasl_cyrus_server_next: decoded response: testing
Feb 27 09:40:20 MyHOSTNAME postfix/smtpd[27274]: warning: c-65-34-234-133.hsd1.fl.comcast.net[65.34.xxx.xxx]: SASL LOGIN authentication failed: authentication failure
Feb 27 09:40:20 MyHOSTNAME postfix/smtpd[27274]: > c-65-34-234-133.hsd1.fl.comcast.net[65.34.xxx.xxx]: 535 5.7.8 Error: authentication failed: authentication failure

Я также попытался изменить файл на следующий на основе этот предложенный учебник:

pwcheck_method: authdaemond
mech_list: PLAIN LOGIN
authdaemond_path: courier-authdaemon-socket

Но мне не удалось создать жесткую ссылку на последнем шаге руководства:

ln /var/run/courier/authdaemon/socket courier-authdaemon-socket

Потому что / var / run находится в отдельном разделе. Вместо этого я создал программную ссылку, но аутентификация все равно не удалась. Я думаю, что первый пример с MySQL кажется более правильным.

1)
Чтобы smtpd прослушивал альтернативный порт, вы измените master.cf, скопируйте существующую запись smtpd и просто измените первое поле с smtp к 587 или любой другой порт, который вы хотите прослушивать. Если вы хотите использовать порт 465, раскомментируйте smtps вход. Я бы не советовал использовать незашифрованный smtp на этом порте, поскольку это, скорее всего, вызовет путаницу и проблемы с почтовыми клиентами (поскольку 465 обозначен как порт ssl).
Вариант, который вы ищете для включения аутентификации: smtpd_sasl_auth_enable=yes и smtpd_recipient_restrictions=permit_sasl_authenticated (который у вас уже есть, поэтому вам просто нужно его настроить). Поскольку у вас есть эти настройки в вашем main.cf, они включены для всех портов. Нет причин разрешать их только на портах, отличных от 25. Если почта приходит без аутентификации, она будет принята только для локальной доставки. Если он проходит аутентификацию, он может пойти куда угодно.

Я не уверен, что вы имеете в виду, говоря «почему у SMTP нет ограничения на отклонение?».

2)
Вы должны использовать SASL для аутентификации. Таким образом, аутентификация обеспечивается внешней службой, с которой общается postfix. Вы по-прежнему можете использовать существующую базу данных MySQL, вам просто нужно настроить службу SASL для ее использования. Cyrus SASL - провайдер по умолчанию в postfix. Больше можно прочитать Вот.

3)
У тебя уже есть smtpd_recipient_restrictions = permit_mynetworks, и mynetworks = 127.0.0.0/8, поэтому будет приниматься все, что угодно с localhost, включая PHP.

НОТА Советую посмотреть все варианты, доступные для smtpd_recipient_restrictions. Просто установите для этого значения, указанные здесь, и ничто другое не может вызвать нежелательное поведение. Я бы прочитал страница руководства postconf обо всех упомянутых мною настройках, чтобы вы понимали, что они делают, прежде чем реализовывать их.