Почтовый сервер · 6 min read · Nov 08, 2025

Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail (Ubuntu 12.04 LTS)

Этот учебник является объектом авторского права (c) 2012 года Фалко Тимме. Он основан на учебнике Кристофа Хааса, который вы можете найти по адресу http://workaround.org. Вы можете свободно использовать этот учебник в соответствии с лицензией Creative Commons 2.5 или любой более поздней версией.

Этот документ описывает, как установить почтовый сервер Postfix, основанный на виртуальных пользователях и доменах, т.е. пользователях и доменах, которые находятся в базе данных MySQL. Я также продемонстрирую установку и настройку Courier (Courier-POP3, Courier-IMAP), чтобы Courier мог аутентифицироваться с использованием той же базы данных MySQL, которую использует Postfix.

Получившийся сервер Postfix способен на SMTP-AUTH и TLS и квоты (квота по умолчанию не встроена в Postfix, я покажу, как правильно патчить ваш Postfix). Пароли хранятся в зашифрованном виде в базе данных (большинство документов, которые я нашел, имели дело с паролями в открытом виде, что является риском безопасности). В дополнение к этому, этот учебник охватывает установку Amavisd, SpamAssassin и ClamAV, чтобы электронные письма сканировались на наличие спама и вирусов. Я также покажу, как установить SquirrelMail в качестве веб-интерфейса для почты, чтобы пользователи могли читать и отправлять электронные письма и изменять свои пароли.

Преимущество такой “виртуальной” настройки (виртуальные пользователи и домены в базе данных MySQL) заключается в том, что она гораздо более производительна, чем настройка, основанная на “реальных” системных пользователях. С этой виртуальной настройкой ваш почтовый сервер может обрабатывать тысячи доменов и пользователей. Кроме того, администрировать ее проще, потому что вам нужно иметь дело только с базой данных MySQL, когда вы добавляете новых пользователей/домены или редактируете существующие. Больше никаких команд postmap для создания db файлов, больше никаких перезагрузок Postfix и т.д. Для администрирования базы данных MySQL вы можете использовать веб-инструменты, такие как phpMyAdmin, которые также будут установлены в этом руководстве. Третье преимущество заключается в том, что у пользователей есть адрес электронной почты в качестве имени пользователя (вместо имени пользователя + адреса электронной почты), что проще для понимания и запоминания.

Этот учебник предназначен как практическое руководство; он не охватывает теоретические основы. Они рассматриваются во многих других документах в сети.

Этот документ предоставляется без каких-либо гарантий! Я хочу сказать, что это не единственный способ настройки такой системы. Существует множество способов достижения этой цели, но это тот путь, который я выбираю. Я не даю никаких гарантий, что это сработает для вас!

1 Предварительная заметка

Этот учебник основан на Ubuntu 12.04 LTS Server (Precise Pangolin), поэтому вам следует установить базовую установку сервера Ubuntu 12.04 перед тем, как продолжить с этим учебником (например, как показано на страницах 1 - 3 в этом учебнике: Идеальный сервер - Ubuntu 12.04 LTS (Apache2, BIND, Dovecot, ISPConfig 3)). Система должна иметь статический IP-адрес. Я использую 192.168.0.100 в этом учебнике и server1.example.com в качестве имени хоста.

Убедитесь, что вы вошли как root (введите

sudo su

чтобы стать root), потому что мы должны выполнять все шаги из этого учебника от имени пользователя root.

Очень важно, чтобы вы сделали /bin/sh символической ссылкой на /bin/bash…

dpkg-reconfigure dash

Использовать dash в качестве оболочки по умолчанию (/bin/sh)? <– Нет

… и чтобы вы отключили AppArmor:

/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils

2 Установка Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Чтобы установить Postfix, Courier, Saslauthd, MySQL и phpMyAdmin, просто выполните

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl  libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass

Вам будет задано несколько вопросов:

Новый пароль для пользователя MySQL “root”: <– вашпарольsqlroot
Повторите пароль для пользователя MySQL “root”: <– вашпарольsqlroot
Создать каталоги для веб-администрирования? <– Нет
Общий тип конфигурации почты: <– Интернет-сайт
Имя системной почты: <– server1.example.com
Требуется SSL-сертификат <– Ок
Веб-сервер для автоматической перенастройки: <– apache2
Настроить базу данных для phpmyadmin с dbconfig-common? <– Нет

3 Применение патча квоты к Postfix

Нам нужно получить исходные коды Postfix, патчить их с помощью патча квоты, собрать новые пакеты Postfix.deb и установить эти пакеты:

apt-get build-dep postfix

cd /usr/src
apt-get source postfix

(Убедитесь, что вы используете правильную версию Postfix в следующих командах. У меня установлена версия Postfix 2.9.1. Вы можете узнать вашу версию Postfix, выполнив

 postconf -d | grep mail_version

Вывод должен выглядеть так:

root@server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.9.1
milter_macro_v = $mail_name $mail_version
root@server1:/usr/src#

)

wget http://vda.sourceforge.net/VDA/postfix-vda-v11-2.9.1.patch
cd postfix-2.9.1
patch -p1 < ../postfix-vda-v11-2.9.1.patch

Далее откройте debian/rules и измените DEB_BUILD_HARDENING с 1 на 0:

vi debian/rules

| [...] export DEB_BUILD_HARDENING=0 [...] |

Если вы этого не сделаете, ваша сборка завершится неудачей с следующими сообщениями об ошибках:

maildir.c: В функции âdeliver_maildirâ:
maildir.c:974:17: ошибка: формат не является строковым литералом и нет аргументов формата [-Werror=format-security]
maildir.c:977:17: ошибка: формат не является строковым литералом и нет аргументов формата [-Werror=format-security]
maildir.c:983:17: ошибка: формат не является строковым литералом и нет аргументов формата [-Werror=format-security]
maildir.c:986:17: ошибка: формат не является строковым литералом и нет аргументов формата [-Werror=format-security]
maildir.c: В функции âsql2fileâ:
maildir.c:404:25: предупреждение: игнорирование возвращаемого значения âreadâ, объявленного с атрибутом warn_unused_result [-Wunused-result]
maildir.c:417:26: предупреждение: игнорирование возвращаемого значения âwriteâ, объявленного с атрибутом warn_unused_result [-Wunused-result]
cc1: некоторые предупреждения рассматриваются как ошибки
make: [maildir.o] Ошибка 1
make: Выход из каталога `/usr/src/postfix-2.9.1/src/virtual’
make[1]:
[update] Ошибка 1
make[1]: Выход из каталога `/usr/src/postfix-2.9.1’
make: * [build] Ошибка 2
dpkg-buildpackage: ошибка: debian/rules build завершился с кодом выхода 2
root@server1:/usr/src/postfix-2.9.1#

Теперь мы можем собрать новые пакеты Postfix.deb:

  dpkg-buildpackage

Теперь мы поднимаемся на один уровень вверх, там были созданы новые пакеты .deb:

cd ..

Команда

ls -l

показывает доступные пакеты:

root@server1:/usr/src# ls -l
total 6932
drwxr-xr-x 24 root root    4096 Apr 27 11:20 linux-headers-3.2.0-23
drwxr-xr-x  7 root root    4096 Apr 27 11:20 linux-headers-3.2.0-23-generic
drwxr-xr-x 18 root root    4096 May  7 15:57 postfix-2.9.1
-rw-r–r–  1 root root    3814 May  7 15:58 postfix_2.9.1-4_amd64.changes
-rw-r–r–  1 root root 1497792 May  7 15:58 postfix_2.9.1-4_amd64.deb
-rw-r–r–  1 root root  246141 May  7 15:51 postfix_2.9.1-4.diff.gz
-rw-r–r–  1 root root    1492 May  7 15:51 postfix_2.9.1-4.dsc
-rw-r–r–  1 root root 3768329 Mar 22 05:05 postfix_2.9.1.orig.tar.gz
-rw-r–r–  1 root root   46620 May  7 15:58 postfix-cdb_2.9.1-4_amd64.deb
-rw-r–r–  1 root root  160196 May  7 15:58 postfix-dev_2.9.1-4_all.deb
-rw-r–r–  1 root root 1080772 May  7 15:58 postfix-doc_2.9.1-4_all.deb
-rw-r–r–  1 root root   55478 May  7 15:58 postfix-ldap_2.9.1-4_amd64.deb
-rw-r–r–  1 root root   48550 May  7 15:58 postfix-mysql_2.9.1-4_amd64.deb
-rw-r–r–  1 root root   48718 May  7 15:58 postfix-pcre_2.9.1-4_amd64.deb
-rw-r–r–  1 root root   48686 May  7 15:58 postfix-pgsql_2.9.1-4_amd64.deb
-rw-r–r–  1 root root   55009 Apr 11 14:54 postfix-vda-v11-2.9.1.patch
root@server1:/usr/src#

Выберите пакеты postfix и postfix-mysql и установите их следующим образом:

dpkg -i postfix_2.9.1-4_amd64.deb postfix-mysql_2.9.1-4_amd64.deb

4 Создание базы данных MySQL для Postfix/Courier

Теперь мы создаем базу данных с именем mail:

mysqladmin -u root -p create mail

Затем мы переходим в оболочку MySQL:

mysql -u root -p

В оболочке MySQL мы создаем пользователя mail_admin с паролем mail_admin_password (замените его на свой собственный пароль), который имеет привилегии SELECT, INSERT, UPDATE, DELETE на базе данных mail. Этот пользователь будет использоваться Postfix и Courier для подключения к базе данных mail:

GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost’ IDENTIFIED BY ‘mail_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.
TO ‘mail_admin’@’localhost.localdomain’ IDENTIFIED BY ‘mail_admin_password’;
FLUSH PRIVILEGES;

Все еще в оболочке MySQL мы создаем таблицы, необходимые для Postfix и Courier:

USE mail;

CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
ENGINE=MyISAM;

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
ENGINE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) ENGINE=MyISAM;

CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) ENGINE=MyISAM;

quit;

Как вы могли заметить, с помощью команды quit; мы вышли из оболочки MySQL и вернулись в оболочку Linux.

Таблица domains будет хранить каждый виртуальный домен, для которого Postfix должен принимать электронные письма (например, example.com).

domain
example.com

Таблица forwardings предназначена для алиасов одного адреса электронной почты на другой, например, пересылки электронных писем с [email protected] на [email protected].

sourcedestination
[email protected][email protected]

Таблица users хранит всех виртуальных пользователей (т.е. адреса электронной почты, поскольку адрес электронной почты и имя пользователя совпадают) и пароли (в зашифрованном виде!) и значение квоты для каждого почтового ящика (в этом примере значение по умолчанию составляет 10485760 байт, что означает 10 МБ).

emailpasswordquota
[email protected]No9.E4skNvGa. (“секрет” в зашифрованном виде)10485760

Таблица transport является необязательной, она предназначена для опытных пользователей. Она позволяет пересылать письма для отдельных пользователей, целых доменов или всех писем на другой сервер. Например,

domaintransport
example.comsmtp:[1.2.3.4]

пересылала бы все электронные письма для example.com через протокол smtp на сервер с IP-адресом 1.2.3.4 (квадратные скобки [] означают “не выполнять поиск записи MX DNS” (что имеет смысл для IP-адресов…). Если вы используете полностью квалифицированное доменное имя (FQDN), то квадратные скобки не используются.).

Кстати, (я предполагаю, что IP-адрес вашей почтовой системы 192.168.0.100) вы можете получить доступ к phpMyAdmin по адресу http://192.168.0.100/phpmyadmin/ в браузере и войти как mail_admin. Затем вы можете взглянуть на базу данных. Позже вы можете использовать phpMyAdmin для администрирования вашего почтового сервера.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.