Почтовые серверы · 6 min read · Oct 03, 2025

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

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

Версия 1.0
Автор: Фалко Тимме
Следите за мной в Twitter

Этот учебник является объектом авторского права (c) 2011 года Фалко Тимме. Он основан на учебнике Кристофа Хааса, который вы можете найти по адресу 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 Предварительная заметка

Этот учебник основан на Debian Squeeze, поэтому вам следует установить базовую установку сервера Debian Squeeze, прежде чем продолжить с этим учебником (например, как показано в первых восьми главах этого учебника: Идеальный сервер - Debian Squeeze (Debian 6.0) [ISPConfig 2]). Система должна иметь статический IP-адрес. Я использую 192.168.0.100 в этом учебнике и server1.example.com в качестве имени хоста.

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

dpkg-reconfigure dash

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

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

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

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

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

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

apt-get build-dep postfix
cd /usr/src  
 apt-get source postfix

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

postconf -d | grep mail_version

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

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

)

wget http://vda.sourceforge.net/VDA/postfix-vda-2.7.1.patch  
 cd postfix-2.7.1  
 patch -p1 < ../postfix-vda-2.7.1.patch  
 dpkg-buildpackage

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

cd ..

Команда

ls -l

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

root@server1:/usr/src# ls -l  
 total 6416  
 drwxr-xr-x 19 root root    4096 Фев 28 15:33 postfix-2.7.1  
 -rw-r--r--  1 root root    3980 Фев 28 15:33 postfix_2.7.1-1_amd64.changes  
 -rw-r--r--  1 root root 1419128 Фев 28 15:33 postfix_2.7.1-1_amd64.deb  
 -rw-r--r--  1 root root  234708 Фев 28 15:31 postfix_2.7.1-1.diff.gz  
 -rw-r--r--  1 root root    1181 Фев 28 15:31 postfix_2.7.1-1.dsc  
 -rw-r--r--  1 root root 3418747 Июн 21  2010 postfix_2.7.1.orig.tar.gz  
 -rw-r--r--  1 root root   42086 Фев 28 15:33 postfix-cdb_2.7.1-1_amd64.deb  
 -rw-r--r--  1 root root  146770 Фев 28 15:33 postfix-dev_2.7.1-1_all.deb  
 -rw-r--r--  1 root root 1003542 Фев 28 15:33 postfix-doc_2.7.1-1_all.deb  
 -rw-r--r--  1 root root   50510 Фев 28 15:33 postfix-ldap_2.7.1-1_amd64.deb  
 -rw-r--r--  1 root root   44160 Фев 28 15:33 postfix-mysql_2.7.1-1_amd64.deb  
 -rw-r--r--  1 root root   44252 Фев 28 15:33 postfix-pcre_2.7.1-1_amd64.deb  
 -rw-r--r--  1 root root   44214 Фев 28 15:33 postfix-pgsql_2.7.1-1_amd64.deb  
 -rw-r--r--  1 root root   59667 Ноя  5 15:05 postfix-vda-2.7.1.patch  
 root@server1:/usr/src#

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

dpkg -i postfix_2.7.1-1_amd64.deb postfix-mysql_2.7.1-1_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) )  
 TYPE=MyISAM;
CREATE TABLE forwardings (  
 source varchar(80) NOT NULL,  
 destination TEXT NOT NULL,  
 PRIMARY KEY (source) )  
 TYPE=MyISAM;
CREATE TABLE users (  
 email varchar(80) NOT NULL,  
 password varchar(20) NOT NULL,  
 quota INT(10) DEFAULT '10485760',  
 PRIMARY KEY (email)  
 ) TYPE=MyISAM;
CREATE TABLE transport (  
 domain varchar(128) NOT NULL default '',  
 transport varchar(128) NOT NULL default '',  
 UNIQUE KEY domain (domain)  
 ) TYPE=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.