20.15. Использование виртуальных доменов Postfix
Проблема
Сервер Postfix должен обслуживать сразу несколько доменов. А может быть, вы хотите отделить системные учётные записи Linux от почтовых учётных записей. Другими словами, вы хотите иметь возможность раздавать пользователям почтовые учётные записи, не создавая для них учётные записи Linux на почтовом сервере. Чем меньше системных учётных записей, тем безопаснее система.
Решение
Воспользуйтесь виртуальными доменами Postfix. Это позволит вам создавать виртуальные почтовые ящики без создания системных учётных записей пользователей. Затем введите данные пользователей в файл userdb в Courier (для POP или IMAP).
Сначала включите следующий фрагмент в /etc/postfix/main.cf
(подставьте свои имена доменов и каталоги):
virtual_mailbox_domains = tuxcomputing.com test.net foober.com
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 1000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual
Создайте или отредактируйте файл /etc/postfix/vmailbox
. В этом файле указываются пары из имён пользователей и их локальных каталогов для хранения почты, которые в данном примере находятся в каталоге /var/mail/vhosts
:
akkana@tuxcomputing.com tuxcomputing.com/akkana/
dancer@tuxcomputing.com tuxcomputing.com/dancer/
telsa@test.net test.net/telsa/
telsa.gwynne@test.net test.net/telsa/
val.henson@foober.com foober.com/valh/
# Для спама и вирусов
@foober.com foober.com/catchall
Преобразуйте файл в таблицу поиска Postfix:
# postmap /etc/postfix/vmailbox
На следующем этапе создаются почтовые учётные записи пользователей. Это делается не в Postfix, а в Courier. Создайте или отредактируйте файл /etc/courier/userdb
, используя следующий формат (обязательно включите символ табуляции после имени и задайте уникальную комбинацию UID/GID):
telsa uid=1100 gid=1100 home=/var/mail/vhosts/telsa shell=/bin/bash imapw= pop3pw=
В строке не должно быть пробелов.
Теперь для каждого нового пользователя необходимо сгенерировать новый пароль командой userdbpw
. В следующем примере пароль создаётся с применением хеширования MD5:
$ userdbpw -md5
Password:
Reenter password:
$l$G41nVriv$GzWal_KidkoVIE2DxMxHBxl
Скопируйте полученный код в /etc/courier/userdb
:
telsa uid=1100 gid=1100 home=/var/mail/vhosts/telsa shell=/bin/bash imapw=$l$G41nVriv$GzWal_KidkoVIE2DxMxHBxl pop3pw=$l$G41nVriv$GzWal_KidkoVIE2DxMxHBxl
Не забудьте записать пары «имя/пароль»! Когда всё будет готово, остановите authdaemond
и преобразуйте /etc/courier/userdb
в хешированную базу данных:
# /etc/init.d/courier-authdaemon stop
# makeuserdb
Настройте Courier так, чтобы при аутентификации наряду с системными паролями использовался файл /etc/courier/userdb
. Для этого в файл /etc/courier/authdaemonrc
включается строка:
authmodulelist="authuserdb authpam"
Наконец, перезапустите authdaemonrc
:
# /etc/init.d/courier-authdaemon start
Теперь пользователи могут изменить конфигурацию своих почтовых клиентов, а ваша работа закончена. С использованием виртуальных доменов Postfix и правильной настройки Courier вы можете управлять множеством доменов на одном сервере, обеспечивая безопасность и изоляцию данных пользователей. Виртуальные домены особенно полезны для серверов, обслуживающих небольшие компании или отделы, где требуется гибкость и безопасность в управлении почтовыми учетными записями.
Комментарий
Если количество доменов велико, перечислите их в текстовом файле (по одному домену на строку) и включите в директиву virtual_mailbox_domains
имя этого файла:
virtual_mailbox_domains = /etc/postfix/virtualdomains
См. также
postmap(1), userdbpw(8), makeuserdb(8), authdaemond(8).