Почтовый сервер · 7 min read · Jan 26, 2026
Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail (Ubuntu 14.04LTS)
Этот учебник является объектом авторского права (c) 2014 года Фалко Тимме и Сриджан Кишор. Он основан на учебнике Кристофа Хааса, который вы можете найти по адресу 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 14.04 Server (Trusty Tahr), поэтому вам следует установить базовую установку сервера Ubuntu 14.04 перед тем, как продолжить с этим учебником. Система должна иметь статический IP-адрес. Я использую 192.168.0.100 в этом учебнике и server1.example.com в качестве имени хоста.
Убедитесь, что вы вошли в систему как root (введите
sudo su
чтобы стать root), потому что мы должны выполнять все шаги из этого учебника от имени пользователя root.
Очень важно, чтобы вы сделали /bin/sh символической ссылкой на /bin/bash…
dpkg-reconfigure dash
Использовать dash в качестве оболочки по умолчанию для системы (/bin/sh)? <– Нет
… и чтобы вы отключили AppArmor, если вы получаете apparmor: unrecognized service, тогда удалите его из update-rc.d
service 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
Иногда вы можете получить ошибку следующего вида:-
root@server1:~# apt-get build-dep postfix
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение состояния информации… Готово
E: Вы должны указать некоторые ‘source’ URIs в вашем sources.list
root@server1:~#
Вы можете исправить это следующим образом, добавив репозитории источников:
vi /etc/apt/sources.list
Сделайте запись, как в моем случае:
deb http://archive.ubuntu.com/ubuntu trusty main restricted universe
deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe
deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu trusty partner
deb-src http://archive.ubuntu.com/ubuntu trusty main restricted universe
deb-src http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe
deb-src http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
deb-src http://archive.canonical.com/ubuntu trusty partner
Далее
apt-get update
apt-get build-dep postfix
cd /usr/src
apt-get source postfix
(Убедитесь, что вы используете правильную версию Postfix в следующих командах. У меня установлена версия Postfix 2.11.0. Вы можете узнать вашу версию Postfix, выполнив
postconf -d | grep mail_version
Вывод должен выглядеть так:
root@server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.11.0
milter_macro_v = $mail_name $mail_version
root@server1:/usr/src#
wget http://vda.sourceforge.net/VDA/postfix-vda-v13-2.10.0.patch
cd postfix-2.11.0
patch -p1 < ../postfix-vda-v13-2.10.0.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.11.0/src/virtual’
make[1]: [update] Ошибка 1
make[1]: Выход из директории `/usr/src/postfix-2.11.0’
make: * [build] Ошибка 2
dpkg-buildpackage: ошибка: debian/rules build дала код выхода 2
root@server1:/usr/src/postfix-2.11.0#
Теперь мы можем собрать новые пакеты Postfix.deb:
dpkg-buildpackage
Теперь мы переходим на один уровень вверх, там были созданы новые .deb пакеты:
cd ..
Команда
ls -l
показывает вам доступные пакеты:
root@server1:/usr/src# ls -l
total 6824
drwxr-xr-x 18 root root 4096 Apr 30 04:28 postfix-2.11.0
-rw-r–r– 1 root root 46756 Apr 30 04:28 postfix-cdb_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 142842 Apr 30 04:28 postfix-dev_2.11.0-1_all.deb
-rw-r–r– 1 root root 851842 Apr 30 04:28 postfix-doc_2.11.0-1_all.deb
-rw-r–r– 1 root root 53898 Apr 30 04:28 postfix-ldap_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 48500 Apr 30 04:28 postfix-mysql_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 48610 Apr 30 04:28 postfix-pcre_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 48324 Apr 30 04:28 postfix-pgsql_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 55701 Jun 7 2013 postfix-vda-v13-2.10.0.patch
-rw-r–r– 1 root root 267855 Apr 30 04:27 postfix_2.11.0-1.diff.gz
-rw-r–r– 1 root root 1522 Apr 30 04:27 postfix_2.11.0-1.dsc
-rw-r–r– 1 root root 3885 Apr 30 04:28 postfix_2.11.0-1_amd64.changes
-rw-r–r– 1 root root 1329238 Apr 30 04:28 postfix_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 4034741 Feb 12 01:38 postfix_2.11.0.orig.tar.gz
root@server1:/usr/src#
Выберите пакеты postfix и postfix-mysql и установите их следующим образом:
dpkg -i postfix_2.11.0-1_amd64.deb postfix-mysql_2.11.0-1_amd64.deb
4 Создание базы данных MySQL для Postfix/Courier
Теперь мы создаем базу данных с именем mail:
mysqladmin -u root -p create mail
Вам будет задан этот вопрос:
Введите пароль: <– вашпарольsqlroot
Далее мы переходим в оболочку 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].
| source | destination |
| [email protected] | [email protected] |
Таблица users хранит всех виртуальных пользователей (т.е. адреса электронной почты, потому что адрес электронной почты и имя пользователя совпадают) и пароли (в зашифрованном виде!) и значение квоты для каждого почтового ящика (в этом примере значение по умолчанию составляет 10485760 байт, что означает 10 МБ).
| password | quota | |
| [email protected] | No9.E4skNvGa. (“секрет” в зашифрованном виде) | 10485760 |
Таблица transport является необязательной, она предназначена для продвинутых пользователей. Она позволяет пересылать письма для отдельных пользователей, целых доменов или всех писем на другой сервер. Например,
| domain | transport |
| example.com | smtp:[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 для администрирования вашего почтового сервера.
Get new posts in your inbox
No spam. Unsubscribe anytime.