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

Я установил Postfix и Dovecot на своем сервере Ubuntu. Моя цель - создать 27 почтовых учетных записей, которые могут получать и отправлять почту везде. У меня есть электронные письма, которые не отображаются как спам в Gmail, Yahoo и Outlook. Я отправляю электронные письма с помощью Rainloop, и все в порядке. За исключением:

В системе не должно быть так много пользователей. Пока я пишу, У меня 6 пользователей в этой системе, кроме моего личного пользователя sudo и пользователя root. Я даю людям доступ для получения и отправки электронной почты, создавая для них пользователей Linux и предоставляя им учетные данные.

Я не могу представить себе, что у крупных почтовых сервисов, таких как Yahoo, более десяти миллионов системных пользователей, должно быть решение, позволяющее мне подключать Postfix / Dovecot в базу данных (возможно, MySQL?), В которой хранятся все пользователи электронной почты, вместо того, чтобы создавать так много пользователей Linux.

Итак, в общем, как мне настроить то, что я написал в последнем абзаце, без потери существующих данных? Я не часто получаю электронные письма на сервере, но потеря данных - плохая практика, а предотвращение этого всегда хорошо.

Спасибо!

5
задан 22 June 2016 в 13:23
3 ответа

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

5
ответ дан 3 December 2019 в 01:36

Ответ на ваш вопрос подробно описан здесь.

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

-1
ответ дан 7 April 2020 в 01:57

Есть несколько способов сделать это. Однако проще всего использовать только одно программное обеспечение для аутентификации - в вашем случае это будет 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. Я добавил соответствующие части.

1
ответ дан 7 April 2020 в 06:01

Теги

Похожие вопросы