Почтовые серверы · 6 min read · Nov 07, 2025
Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail (CentOS 4.8 i386)
Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail (CentOS 4.8 i386)
Версия 1.0
Автор: Фалько Тимме
Этот учебник является объектом авторского права (c) 2009 года Фалько Тимме. Он основан на учебнике Кристофа Хааса, который вы можете найти по адресу 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 Предварительная заметка
Этот учебник основан на CentOS 4.8 i386, поэтому вам следует установить базовую установку сервера CentOS 4.8 перед тем, как продолжить с этим учебником (например, как показано в первых пяти главах The Perfect Server - CentOS 4.8 Server i386 [ISPConfig 2]). Система должна иметь статический IP-адрес. Я использую 192.168.0.100 в этом учебнике и server1.example.com в качестве имени хоста.
Вы должны убедиться, что брандмауэр выключен (по крайней мере, на данный момент) и что SELinux отключен (это важно!).
Я протестировал эту настройку на системе i386. Настройка должна быть аналогичной или, возможно, даже идентичной для системы x86_64, но я этого не тестировал.
2 Установка программного обеспечения
Сначала мы обновим наши существующие пакеты на системе:
yum updateТеперь мы установим некоторые программы, которые нам понадобятся позже:
yum groupinstall 'Development Tools'yum groupinstall 'Development Libraries'3 Установка Apache, MySQL, phpMyAdmin
Сначала мы включаем репозиторий RPMforge на нашей системе CentOS, так как многие из пакетов, которые мы собираемся установить в ходе этого учебника, недоступны в официальных репозиториях CentOS 4.8:
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txtrpm -Uhv http://apt.sw.be/redhat/el4/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.i386.rpmПосле этого мы можем установить необходимые пакеты одной командой (включая пакеты, необходимые для сборки Courier-IMAP):
yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel phpmyadmin pcre-devel openldap-devel postgresql-devel expect openldap-servers libtool gdbm-devel pam-devel gamin-devel4 Установка Courier-IMAP, Courier-Authlib и Maildrop
К сожалению, нет rpm-пакетов для Courier-IMAP, Courier-Authlib и Maildrop, поэтому нам придется собрать их самостоятельно.
RPM-пакеты не должны собираться от имени root; courier-imap даже откажется компилироваться, если обнаружит, что компиляция выполняется от имени пользователя root. Поэтому мы создадим обычную учетную запись пользователя сейчас (compileuser в этом примере) и зададим ему пароль:
useradd -m -s /bin/bash compileuser
passwd compileuserНам понадобится команда sudo позже, чтобы пользователь compileuser мог компилировать и устанавливать rpm-пакеты. Но сначала мы должны разрешить compileuser выполнять все команды с помощью sudo:
Запустите
visudoВ открывшемся файле есть строка root ALL=(ALL) ALL. Добавьте аналогичную строку для falko сразу под этой строкой:
| [...] root ALL=(ALL) ALL compileuser ALL=(ALL) ALL [...] |
Теперь мы готовы собрать наш rpm-пакет. Сначала станьте пользователем compileuser:
su compileuserЗатем создайте нашу среду сборки:
mkdir $HOME/rpm
mkdir $HOME/rpm/SOURCES
mkdir $HOME/rpm/SPECS
mkdir $HOME/rpm/BUILD
mkdir $HOME/rpm/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386
mkdir $HOME/rpm/RPMS/x86_64echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacrosТеперь мы загружаем исходные файлы с http://www.courier-mta.org/download.php:
cd /tmp
wget http://prdownloads.sourceforge.net/courier/courier-authlib-0.62.4.tar.bz2
wget http://prdownloads.sourceforge.net/courier/courier-imap-4.6.0.tar.bz2
wget http://prdownloads.sourceforge.net/courier/maildrop-2.2.0.tar.bz2Теперь (все еще в /tmp) мы можем собрать courier-authlib:
sudo rpmbuild -ta courier-authlib-0.62.4.tar.bz2После процесса сборки rpm-пакеты можно найти в $HOME/rpm/RPMS/i386 ($HOME/rpm/RPMS/x86_64, если вы находитесь на системе x86_64):
cd $HOME/rpm/RPMS/i386Команда
ls -lпоказывает вам доступные rpm-пакеты:
[compileuser@server1 i386]$ ls -l
total 616
-rw-r--r-- 1 root root 142923 Sep 24 15:50 courier-authlib-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 346388 Sep 24 15:50 courier-authlib-debuginfo-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 35075 Sep 24 15:50 courier-authlib-devel-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 17473 Sep 24 15:50 courier-authlib-ldap-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 13032 Sep 24 15:50 courier-authlib-mysql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 12585 Sep 24 15:50 courier-authlib-pgsql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 7457 Sep 24 15:50 courier-authlib-pipe-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 32403 Sep 24 15:50 courier-authlib-userdb-0.62.4-1.i386.rpm
[compileuser@server1 i386]$Выберите те, которые хотите установить, и установите их следующим образом:
sudo rpm -ivh courier-authlib-0.62.4-1.i386.rpm courier-authlib-mysql-0.62.4-1.i386.rpm courier-authlib-devel-0.62.4-1.i386.rpmТеперь мы возвращаемся в директорию /tmp:
cd /tmpи снова запускаем rpmbuild, на этот раз без sudo, иначе компиляция завершится неудачей, потому что она была запущена от имени root:
rpmbuild -ta courier-imap-4.6.0.tar.bz2После процесса сборки rpm-пакеты можно найти в $HOME/rpm/RPMS/i386 ($HOME/rpm/RPMS/x86_64, если вы находитесь на системе x86_64):
cd $HOME/rpm/RPMS/i386Команда
ls -lпоказывает вам доступные rpm-пакеты:
[compileuser@server1 i386]$ ls -l
total 1812
-rw-r--r-- 1 root root 142923 Sep 24 15:50 courier-authlib-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 346388 Sep 24 15:50 courier-authlib-debuginfo-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 35075 Sep 24 15:50 courier-authlib-devel-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 17473 Sep 24 15:50 courier-authlib-ldap-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 13032 Sep 24 15:50 courier-authlib-mysql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 12585 Sep 24 15:50 courier-authlib-pgsql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 7457 Sep 24 15:50 courier-authlib-pipe-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 32403 Sep 24 15:50 courier-authlib-userdb-0.62.4-1.i386.rpm
-rw-r--r-- 1 compileuser compileuser 357587 Sep 24 16:05 courier-imap-4.6.0-1.i386.rpm
-rw-r--r-- 1 compileuser compileuser 854996 Sep 24 16:05 courier-imap-debuginfo-4.6.0-1.i386.rpm
[compileuser@server1 i386]$Вы можете установить courier-imap следующим образом:
sudo rpm -ivh courier-imap-4.6.0-1.i386.rpmТеперь мы возвращаемся в директорию /tmp:
cd /tmpи снова запускаем rpmbuild, на этот раз для сборки пакета maildrop:
sudo rpmbuild -ta maildrop-2.2.0.tar.bz2После процесса сборки rpm-пакеты можно найти в $HOME/rpm/RPMS/i386 ($HOME/rpm/RPMS/x86_64, если вы находитесь на системе x86_64):
cd $HOME/rpm/RPMS/i386Команда
ls -lпоказывает вам доступные rpm-пакеты:
[compileuser@server1 i386]$ ls -l
total 3012
-rw-r--r-- 1 root root 142923 Sep 24 15:50 courier-authlib-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 346388 Sep 24 15:50 courier-authlib-debuginfo-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 35075 Sep 24 15:50 courier-authlib-devel-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 17473 Sep 24 15:50 courier-authlib-ldap-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 13032 Sep 24 15:50 courier-authlib-mysql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 12585 Sep 24 15:50 courier-authlib-pgsql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 7457 Sep 24 15:50 courier-authlib-pipe-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 32403 Sep 24 15:50 courier-authlib-userdb-0.62.4-1.i386.rpm
-rw-r--r-- 1 compileuser compileuser 357587 Sep 24 16:05 courier-imap-4.6.0-1.i386.rpm
-rw-r--r-- 1 compileuser compileuser 854996 Sep 24 16:05 courier-imap-debuginfo-4.6.0-1.i386.rpm
-rw-r--r-- 1 root root 283291 Sep 24 16:13 maildrop-2.2.0-1.i386.rpm
-rw-r--r-- 1 root root 734265 Sep 24 16:13 maildrop-debuginfo-2.2.0-1.i386.rpm
-rw-r--r-- 1 root root 122406 Sep 24 16:13 maildrop-devel-2.2.0-1.i386.rpm
-rw-r--r-- 1 root root 63497 Sep 24 16:13 maildrop-man-2.2.0-1.i386.rpm
[compileuser@server1 i386]$Теперь вы можете установить maildrop следующим образом:
sudo rpm -ivh maildrop-2.2.0-1.i386.rpmПосле того как вы скомпилировали и установили все необходимые пакеты, вы можете снова стать root, набрав
exit5 Применение патча квоты к Postfix
Нам нужно получить исходный rpm Postfix, патчить его с помощью патча квоты, собрать новый rpm-пакет Postfix и установить его.
cd /usr/src
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/4.8/os/SRPMS/postfix-2.2.10-1.2.1.el4_7.src.rpm
rpm -ivh postfix-2.2.10-1.2.1.el4_7.src.rpmПоследняя команда покажет некоторые предупреждения, которые вы можете игнорировать:
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using rootcd /usr/src/redhat/SOURCES
wget http://vda.sourceforge.net/VDA/postfix-2.2.10-vda.patch.gz
gunzip postfix-2.2.10-vda.patch.gz
cd /usr/src/redhat/SPECS/Теперь мы должны отредактировать файл postfix.spec:
vi postfix.specИзмените %define MYSQL 0 на %define MYSQL 1, добавьте Patch0: postfix-2.2.10-vda.patch в раздел # Patches, и, наконец, добавьте %patch0 -p1 -b .vda в раздел %setup -q:
| [...] %define MYSQL 1 [...] # Patches Patch0: postfix-2.2.10-vda.patch Patch1: postfix-2.1.1-config.patch Patch3: postfix-alternatives.patch Patch4: postfix-hostname-fqdn.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 Patch10: postfix-2.2.10-CVE-2008-2936.patch [...] %setup -q # Применить обязательные патчи %patch0 -p1 -b .vda %patch1 -p1 -b .config %patch3 -p1 -b .alternatives %patch4 -p1 -b .postfix-hostname-fqdn %patch6 -p1 -b .obsolete %patch7 -p1 -b .aliases %patch8 -p1 -b .large-fs %patch9 -p1 -b .cyrus %patch10 -p1 -b .CVE-2008-2936 [...] |
Затем мы собираем наш новый rpm-пакет Postfix с поддержкой квоты и MySQL:
rpmbuild -ba postfix.specНаш rpm-пакет Postfix создается в /usr/src/redhat/RPMS/i386, (/usr/src/redhat/RPMS/x86_64 на системе x86_64), поэтому мы идем туда:
cd /usr/src/redhat/RPMS/i386Команда
ls -lпоказывает вам доступные пакеты:
[root@server1 i386]# ls -l
total 10052
-rw-r--r-- 1 root root 3237646 Sep 28 16:49 postfix-2.2.10-1.2.1.i386.rpm
-rw-r--r-- 1 root root 6984691 Sep 28 16:49 postfix-debuginfo-2.2.10-1.2.1.i386.rpm
-rw-r--r-- 1 root root 49047 Sep 28 16:49 postfix-pflogsumm-2.2.10-1.2.1.i386.rpm
[root@server1 i386]#Выберите пакет Postfix и установите его следующим образом:
rpm -ivh postfix-2.2.10-1.2.1.i386.rpmGet new posts in your inbox
No spam. Unsubscribe anytime.