Почтовые серверы · 5 min read · Sep 28, 2025

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

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

Версия 1.0
Автор: Фалко Тимме

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

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

Этот учебник основан на CentOS 5.1 (i386). Вы должны уже настроить базовую систему CentOS, как описано здесь: https://www.howtoforge.com/centos-5.1-server-lamp-email-dns-ftp-ispconfig и https://www.howtoforge.com/centos-5.1-server-lamp-email-dns-ftp-ispconfig-p2. Кроме того, вы должны убедиться, что брандмауэр выключен (по крайней мере, на данный момент) и что SELinux отключен (это важно!), как показано в главе шесть на https://www.howtoforge.com/centos-5.1-server-lamp-email-dns-ftp-ispconfig-p3.

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

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

1 Измените /etc/hosts

Наше имя хоста в этом примере server1.example.com, и у него есть IP-адрес 192.168.0.100, поэтому мы изменяем /etc/hosts следующим образом:

vi /etc/hosts

| # Не удаляйте следующую строку, иначе различные программы # которые требуют сетевой функциональности, будут работать некорректно. 127.0.0.1 localhost.localdomain localhost 192.168.0.100 server1.example.com server1 ::1 localhost6.localdomain6 localhost6 |

2 Установите необходимое программное обеспечение

Сначала мы импортируем GPG-ключи для программных пакетов:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Затем мы обновляем наши существующие пакеты в системе:

yum update

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

yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'

3 Установите Apache, MySQL, phpMyAdmin

Сначала мы включаем репозиторий RPMforge на нашей системе CentOS, так как многие из пакетов, которые мы собираемся установить в ходе этого учебника, недоступны в официальных репозиториях CentOS 5.1:

rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

(Если вышеуказанная ссылка больше не работает, вы можете найти текущую версию rpmforge-release здесь: http://apt.sw.be/packages/rpmforge-release/)

После этого мы можем установить необходимые пакеты одной командой (включая пакеты, необходимые для сборки Courier-IMAP):

yum install ntp httpd mysql-server php php-mysql php-mbstring php-mcrypt phpmyadmin rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel

4 Установите Courier-IMAP, Courier-Authlib и Maildrop

К сожалению, нет rpm-пакетов для Courier-IMAP, Courier-Authlib и Maildrop, поэтому мы должны установить их, как описано в этом учебнике: Как установить courier-imap, courier-authlib и maildrop на Fedora, RedHat, CentOS

В случае, если у вас возникнут проблемы с созданием rpm-пакетов, вы можете скачать мои:

  • courier-authlib-0.60.2-1.i386.rpm
  • courier-authlib-devel-0.60.2-1.i386.rpm
  • courier-authlib-mysql-0.60.2-1.i386.rpm
  • courier-imap-4.2.1-1.i386.rpm
  • maildrop-2.0.4-1.i386.rpm

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

Нам нужно получить исходный rpm Postfix, патчить его с помощью патча квоты, собрать новый rpm-пакет Postfix и установить его.

cd /usr/src  
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.1/os/SRPMS/postfix-2.3.3-2.src.rpm  
rpm -ivh postfix-2.3.3-2.src.rpm

Последняя команда покажет некоторые предупреждения, которые вы можете игнорировать:

warning: user mockbuild does not exist - using root  
warning: group mockbuild does not exist - using root
cd /usr/src/redhat/SOURCES  
wget http://vda.sourceforge.net/VDA/postfix-2.3.3-vda.patch.gz  
gunzip postfix-2.3.3-vda.patch.gz  
cd /usr/src/redhat/SPECS/

Теперь мы должны отредактировать файл postfix.spec:

vi postfix.spec

Измените %define MYSQL 0 на %define MYSQL 1, добавьте Patch0: postfix-2.3.3-vda.patch в раздел # Patches, и, наконец, добавьте %patch0 -p1 -b .vda в раздел %setup -q:

| [...] %define MYSQL 1 [...] # Патчи Patch0: postfix-2.3.3-vda.patch Patch1: postfix-2.1.1-config.patch Patch3: postfix-alternatives.patch Patch6: postfix-2.1.1-obsolete.patch Patch7: postfix-2.1.5-aliases.patch Patch8: postfix-large-fs.patch Patch9: postfix-2.2.5-cyrus.patch [...] %setup -q # Применить обязательные патчи %patch0 -p1 -b .vda %patch1 -p1 -b .config %patch3 -p1 -b .alternatives %patch6 -p1 -b .obsolete %patch7 -p1 -b .aliases %patch8 -p1 -b .large-fs %patch9 -p1 -b .cyrus [...] |

Затем мы собираем наш новый rpm-пакет Postfix с поддержкой квоты и MySQL:

rpmbuild -ba postfix.spec

Вы увидите много предупреждений, подобных этим, которые вы можете игнорировать:

msg.h:12:1: warning: "/*" within comment  
msg.h:14:1: warning: "/*" within comment  
msg.h:33:1: warning: "/*" within comment  
msg.h:34:1: warning: "/*" within comment  
msg.h:35:1: warning: "/*" within comment  
msg.h:36:1: warning: "/*" within comment

Наш rpm-пакет Postfix создается в /usr/src/redhat/RPMS/i386, поэтому мы переходим туда:

cd /usr/src/redhat/RPMS/i386

Команда

ls -l

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

[root@server1 i386]# ls -l  
total 11280  
-rw-r--r-- 1 root root 3819299 Dec  5 15:25 postfix-2.3.3-2.i386.rpm  
-rw-r--r-- 1 root root 7655069 Dec  5 15:25 postfix-debuginfo-2.3.3-2.i386.rpm  
-rw-r--r-- 1 root root   50346 Dec  5 15:25 postfix-pflogsumm-2.3.3-2.i386.rpm  
[root@server1 i386]#

Выберите пакет Postfix и установите его следующим образом:

rpm -ivh postfix-2.3.3-2.i386.rpm

(Если у вас возникли проблемы с созданием rpm-пакета Postfix, вы можете скачать мой отсюда: postfix-2.3.3-2.i386.rpm.)

6 Установите пароли MySQL и настройте phpMyAdmin

Запустите MySQL:

chkconfig --levels 235 mysqld on  
/etc/init.d/mysqld start

Затем установите пароли для учетной записи root MySQL:

mysqladmin -u root password yourrootsqlpassword  
mysqladmin -h server1.example.com -u root password yourrootsqlpassword

Теперь мы настраиваем phpMyAdmin. Мы изменяем конфигурацию Apache, чтобы phpMyAdmin разрешал подключения не только с localhost (закомментировав раздел ):

vi /etc/httpd/conf.d/phpmyadmin.conf

| # # Веб-приложение для управления MySQL # # # Order Deny,Allow # Deny from all # Allow from 127.0.0.1 # Alias /phpmyadmin /usr/share/phpmyadmin Alias /phpMyAdmin /usr/share/phpmyadmin Alias /mysqladmin /usr/share/phpmyadmin |

Далее мы изменяем аутентификацию в phpMyAdmin с cookie на http:

vi /usr/share/phpmyadmin/config.inc.php

| [...] /* Тип аутентификации */ $cfg['Servers'][$i]['auth_type'] = 'http'; [...] |

Затем мы создаем системные ссылки для запуска Apache и запускаем его:

chkconfig --levels 235 httpd on  
/etc/init.d/httpd start

Теперь вы можете направить ваш браузер на http://server1.example.com/phpmyadmin/ или http://192.168.0.100/phpmyadmin/ и войти с именем пользователя root и вашим новым паролем root MySQL.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.