Я установил 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 your users как
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-соединений .
Ответ на ваш вопрос подробно описан здесь.
Вам не нужно создавать учетную запись в Linux, а затем удалять ее. Вы просто создаете его виртуально. Я не буду повторять то, что написано в официальной ссылке Ubuntu, так как дублировать ее не имеет смысла, поэтому просто переходите по ссылке и читайте.
Есть несколько способов сделать это. Однако проще всего использовать только одно программное обеспечение для аутентификации - в вашем случае это будет 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;
(Обязательно настройте строку подключения в соответствии с хостом вашей базы данных, db имя, пользователь и, возможно, также пароль)
Моя структура базы данных:
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 для согласованности, хотя это совершенно необязательно, и вы можете доставлять их туда, где они у вас уже есть.
После такой настройки вы сможете сделать гораздо больше — настроить главных пользователей, которые могут входить в систему как кто угодно, настроить черные списки для временно отключенных учетных записей, настроить псевдонимы электронной почты и т. д. Но того, что выше, должно быть достаточно для аутентификации в БД и доставки электронной почты в виртуальные учетные записи пользователей.
[Редактировать]: я только что понял, что Postfix ДЕЙСТВИТЕЛЬНО нуждается в некоторых поисковых запросах для ретрансляции электронной почты, особенно для конфигураций virtual_domain, virtual_alias и virtual_mailbox. Я добавил соответствующие части.