Я установил Postfix и Dovecot на свой сервер Ubuntu. Моя цель - создать 27 почтовых аккаунтов, которые могут получать и отправлять почту везде. У меня есть электронные письма, которые не отображаются как спам в Gmail, Yahoo и Outlook. Я отправляю электронные письма с помощью Rainloop, и все в порядке. Кроме;
У системы не должно быть столько пользователей. На момент написания в этой системе у меня 6 пользователей, за исключением моего личного пользователя sudo и пользователя root. Я даю людям доступ к получению и отправке электронных писем, создавая для них пользователей Linux и предоставляя им учетные данные.
Я не могу представить себе, что у крупных почтовых сервисов, таких как Yahoo, более десяти миллионов пользователей системы, должно быть решение, позволяющее мне подключить Postfix / Dovecot к базе данных (возможно, MySQL?), В которой хранятся все пользователи электронной почты, вместо того, чтобы создавать так много Linux пользователей.
Итак, как мне настроить то, что я написал в последнем абзаце, без потери существующих данных? Я не получаю много писем на сервере, но потеря данных - плохая практика, а предотвращать ее всегда приятно.
Спасибо!
Честный совет, используйте обычные учетные записи пользователей и позвольте вашей системе Linux аутентифицировать пользователей. Этим легко управлять и очень безопасно. Я не хочу сказать, что другие системы небезопасны, но я доверяю своей системе Linux, когда дело касается хранения и аутентификации паролей. Я использую эти команды для создания пользователей вручную. Таким образом, они не причинят вреда моей системе.
useradd -d /home/username -g 515 -u 603 -s /sbin/nologin username
echo 12345678 | passwd user --stdin
-g 515 is your groupid for mail users
-u 603 needs to be incremeted by one for each user you create
Это удаляет пользователя
userdel -f username
Затем добавьте в файл / etc / postfix / virtual ваших пользователей как
username@example.com username
Это та часть, которую я использую в master.cf
submission inet n - n - - smtpd
-o smtpd_helo_required=no
-o smtpd_tls_wrappermode=no
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=reject_non_fqdn_recipient,permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
После добавления или удаления пользователя выполните следующие команды
postmap /etc/postfix/virtual
service postfix restart
(Последняя команда может отличаться от клонов RHEL, например Ubuntu. Не уверен, не используйте ее.) И в вашем /etc/postfix/main.cf должны быть следующие настройки
virtual_alias_maps = hash:/etc/postfix/virtual
Не забудьте увеличить в dovecot переменную mail_max_userip_connections, см. Dovecot игнорирует максимальное количество IMAP-подключений .
Сделать это можно несколькими способами. Однако самый простой способ - использовать только одно программное обеспечение для аутентификации - в вашем случае это будет Dovecot, поскольку postfix можно настроить для использования Dovecot SASL для аутентификации. Также удобно иметь только один программный управляющий каталог для электронной почты, поэтому я рекомендую использовать Dovecot в качестве LDA (агента локальной доставки, также известного как «программное обеспечение, которое помещает файлы в каталоги») вместо того, чтобы позволить postfix делать это самому.
Ниже я покажу вам соответствующие части моей конфигурации, имейте в виду, что они никоим образом не являются полными рабочими конфигурациями. Нет смысла публиковать мою полную конфигурацию почтового стека, поскольку ваши точные потребности, вероятно, будут отличаться от моих.
Я использую PostgreSQL в качестве базы данных, однако MySQL должен работать так же хорошо - просто не забудьте сменить драйвер, а также установить соответствующий драйвер, если ваш голубятня не поставляется с ним.
Из postfix / main.cf
virtual_mailbox_domains = $mydomain, pgsql:/etc/postfix/pgsql_domains.cf
virtual_alias_maps = pgsql:/etc/postfix/pgsql_aliases.cf
virtual_mailbox_maps = pgsql:/etc/postfix/pgsql_mailboxes.cf
######################
### Authentication ###
######################
# Basic
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
# Allowed Methods
smtpd_tls_auth_only = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous
########################
### Mailbox Settings ###
########################
mail_spool_directory = /srv/mail/localhost/
virtual_mailbox_base = /srv/mail/
mailbox_command = /usr/lib/dovecot/dovecot-lda -f "$SENDER" -a
"$RECIPIENT" -d "$USER"
virtual_transport = dovecot
Не забудьте также установить ограничения вашего клиента, чтобы включить permit_sasl_authenticated
но исключить других отправителей для исходящей электронной почты, чтобы не создавать открытый ретранслятор.
содержимое /etc/postfix/pgsql_domains.cf
hosts = /var/run/postgresql
user = mail
dbname = mail
query = SELECT DISTINCT 1 FROM users WHERE domain='%s';
содержимое /etc/postfix/pgsql_aliases.cf
hosts = /var/run/postgresql
user = mail
dbname = mail
query = SELECT email||'@'||domain AS alias FROM users WHERE '%u'='users' AND domain='%d';
содержимое /etc/postfix/pgsql_mailboxes.cf
hosts = /var/run/postgresql
user = mail
dbname = mail
query = SELECT 1 FROM email WHERE email='%u' AND domain='%d';
из postfix / master.cf
dovecot unix - n n - - pipe
flags=DRhu user=mail:mail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -a ${recipient} -d ${user}@${nexthop}
Из конфигурации dovecot (не имеет значения, помещаете ли вы его в файл, который куда-то включается, или непосредственно в основную конфигурацию):
service auth {
#-- Default Socket
unix_listener auth-userdb {
mode = 0666
user = mail
group = mail
}
#-- Socket for Postfix
unix_listener /var/spool/postfix/private/dovecot-auth {
mode = 0660
user = postfix
group = postfix
}
}
######################
### Authentication ###
######################
passdb {
driver = sql
args = /etc/dovecot/conf.d/sql-login.conf.ext
}
userdb {
driver = sql
args = /etc/dovecot/conf.d/sql-login.conf.ext
}
#########################
### Location Settings ###
#########################
# %u - username
# %n - user part in user@domain, same as %u if there's no domain
# %d - domain part in user@domain, empty if there's no domain
# %h - home directory
mail_home = /srv/mail/%d/%n
mail_location = maildir:~/mai
Отрегулируйте / var / spool / postfix там, где ваш постфикс привязан к корневому каталогу (если это так, но должно быть)
Содержимое /etc/dovecot/conf.d/sql-login.conf.ext, указанного выше:
driver = pgsql
connect = host=/var/run/postgresql/ dbname=mail user=mail
default_pass_scheme = SHA512
password_query = SELECT email as username, domain, password FROM users WHERE email = '%n' AND domain = '%d';
user_query = SELECT email as username, domain FROM users WHERE email = '%n' AND domain = '%d';
iterate_query = SELECT email as username, domain FROM users;
(Обязательно настройте строку подключения в соответствии с вашим хостом базы данных, именем базы данных, пользователем и, возможно, также паролем)
Макет моей базы данных:
Table "mail.users"
Column | Type | Modifiers
---------------+---------+---------------
email | text | not null
domain | text | not null
password | text |
Indexes:
"users_pkey" PRIMARY KEY, btree (email, domain)
Имейте в виду, что они взяты буквально из моей конфигурации почты и могут нуждаться в корректировке и должны быть интегрированы в вашу текущую конфигурацию. Это особенно верно для dovecot, где в вашем дистрибутиве могут быть или уже не быть некоторые настройки в файлах, разбросанных по вашему каталогу конфигурации - для дистрибутивов dovecot часто используется множество включений.
Также убедитесь, что папки входящих сообщений для пользователей / конфигурация выше помещает их в / srv / mail), и dovecot-lda может записывать и получать доступ ко всем папкам. Конфигурация выше также доставляет электронную почту локальных пользователей электронной почты в / srv / mail / localhost для единообразия, хотя это полностью необязательно, и вы можете доставить их туда, где они у вас уже есть.
После такой настройки вы можете сделать гораздо больше - настроить основных пользователей, которые могут входить в систему как кто угодно, настроить черные списки для временно отключенных учетных записей, настроить псевдонимы электронной почты и так далее. Но того, что указано выше, должно быть достаточно для аутентификации в базе данных и доставки электронной почты в учетные записи виртуальных пользователей.
[Edit]: Я только что понял, что Postfix НУЖДАЕТСЯ в некоторых поисках для ретрансляции электронной почты, особенно для конфигураций virtual_domain, virtual_alias и virtual_mailbox. Я добавил соответствующие части.
Ответ на ваш вопрос подробно здесь.
Вам не нужно создавать учетную запись в Linux, а затем удалять ее. Вы просто создаете это виртуально. Я не буду повторять то, что написано в официальной ссылке Ubuntu, так как дублировать это не имеет смысла, поэтому просто перейдите по ссылке и прочтите.