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

Настройка почтовых учетных записей без реальных пользователей Linux

Я установил 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, так как дублировать это не имеет смысла, поэтому просто перейдите по ссылке и прочтите.