Почтовые серверы · 8 min read · Oct 13, 2025

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

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

Этот учебник основан на Fedora 18 x86_64, поэтому вам следует установить базовую установку сервера Fedora 18 перед тем, как продолжить с этим учебником. Система должна иметь статический IP-адрес. Я использую 192.168.0.100 в этом учебнике и server1.example.com в качестве имени хоста.

Вы должны убедиться, что брандмауэр отключен (по крайней мере, на данный момент).

Также убедитесь, что SELinux отключен:

Отредактируйте /etc/selinux/config и установите SELINUX=disabled:

vi /etc/selinux/config

| # Этот файл управляет состоянием SELinux в системе. # SELINUX= может принимать одно из этих трех значений: # enforcing - Политика безопасности SELinux применяется. # permissive - SELinux выводит предупреждения вместо применения. # disabled - Политика SELinux не загружена. SELINUX=disabled # SELINUXTYPE= может принимать одно из этих двух значений: # targeted - Защищены целевые процессы, # minimum - Модификация целевой политики. Защищены только выбранные процессы. # mls - Защита многоуровневой безопасности. SELINUXTYPE=targeted |

После этого мы должны перезагрузить систему:

reboot

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

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

yum update

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

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

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

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

yum install ntp httpd mod_ssl 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 libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel libidn-devel sqlite-devel

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

К сожалению, нет rpm-пакетов для Courier-IMAP, Courier-Authlib и Maildrop, поэтому нам нужно будет собрать их самостоятельно.

RPM-пакеты не следует собирать от имени root; courier-imap даже откажется компилироваться, если обнаружит, что компиляция выполняется от имени пользователя root. Поэтому мы создаем обычную учетную запись пользователя (falko в этом примере) и задаем ему пароль:

useradd -m -s /bin/bash falko  
passwd falko

Нам понадобится команда sudo позже, чтобы пользователь falko мог компилировать и устанавливать rpm-пакеты. Но сначала мы должны разрешить falko выполнять все команды с помощью sudo:

Запустите

visudo

В открывшемся файле есть строка root ALL=(ALL) ALL. Добавьте аналогичную строку для falko сразу под этой строкой:

| [...] ## Разрешить root выполнять любые команды в любом месте root ALL=(ALL) ALL falko ALL=(ALL) ALL [...] |

Теперь мы готовы собрать наш rpm-пакет. Сначала станьте пользователем falko:

su falko

Затем создаем нашу среду сборки:

mkdir $HOME/rpm  
mkdir $HOME/rpm/SOURCES  
mkdir $HOME/rpm/SPECS  
mkdir $HOME/rpm/BUILD  
mkdir $HOME/rpm/BUILDROOT  
mkdir $HOME/rpm/SRPMS  
mkdir $HOME/rpm/RPMS  
mkdir $HOME/rpm/RPMS/i386  
mkdir $HOME/rpm/RPMS/x86_64
echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros

Теперь мы создаем каталог загрузок и загружаем исходные файлы с http://www.courier-mta.org/download.php:

mkdir $HOME/downloads  
cd $HOME/downloads
wget https://sourceforge.net/projects/courier/files/authlib/0.65.0/courier-authlib-0.65.0.tar.bz2  
wget https://sourceforge.net/projects/courier/files/imap/4.12.0/courier-imap-4.12.0.tar.bz2  
wget https://sourceforge.net/projects/courier/files/maildrop/2.6.0/maildrop-2.6.0.tar.bz2

Теперь (все еще в $HOME/downloads) мы можем собрать courier-authlib:

sudo rpmbuild -ta courier-authlib-0.65.0.tar.bz2

После процесса сборки rpm-пакеты можно найти в /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386, если вы находитесь на системе i386). Команда

sudo ls -l /root/rpmbuild/RPMS/x86_64

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

[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64  
total 616  
-rw-r--r-- 1 root root 140580 Jan 31 17:14 courier-authlib-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root 324148 Jan 31 17:14 courier-authlib-debuginfo-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  38928 Jan 31 17:14 courier-authlib-devel-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  18756 Jan 31 17:14 courier-authlib-ldap-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  13044 Jan 31 17:14 courier-authlib-mysql-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  14208 Jan 31 17:14 courier-authlib-pgsql-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   9356 Jan 31 17:14 courier-authlib-pipe-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  11696 Jan 31 17:14 courier-authlib-sqlite-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  37580 Jan 31 17:14 courier-authlib-userdb-0.65.0-1.fc18.x86_64.rpm  
[falko@server1 downloads]$

Выберите те, которые хотите установить, и установите их следующим образом:

sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/courier-authlib-0.65.0-1.fc18.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-mysql-0.65.0-1.fc18.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-devel-0.65.0-1.fc18.x86_64.rpm

Теперь мы возвращаемся в наш каталог загрузок:

cd $HOME/downloads

Запустите следующие команды, чтобы создать необходимые каталоги/изменить права доступа к каталогам (иначе процесс сборки для Courier-Imap завершится неудачей):

sudo mkdir /var/cache/ccache/tmp  
sudo chmod o+rwx /var/cache/ccache/  
sudo chmod 777 /var/cache/ccache/tmp

Теперь снова запустите rpmbuild, на этот раз без sudo, иначе компиляция завершится неудачей, потому что она была запущена от имени root:

rpmbuild -ta courier-imap-4.12.0.tar.bz2

После процесса сборки rpm-пакеты можно найти в $HOME/rpm/RPMS/x86_64 ($HOME/rpm/RPMS/i386, если вы находитесь на системе i386):

cd $HOME/rpm/RPMS/x86_64

Команда

ls -l

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

[falko@server1 x86_64]$ ls -l  
total 1256  
-rw-rw-r-- 1 falko falko 344996 Jan 31 17:19 courier-imap-4.12.0-1.18.x86_64.rpm  
-rw-rw-r-- 1 falko falko 934056 Jan 31 17:19 courier-imap-debuginfo-4.12.0-1.18.x86_64.rpm  
[falko@server1 x86_64]$

Вы можете установить courier-imap следующим образом:

sudo rpm -ivh courier-imap-4.12.0-1.18.x86_64.rpm

Теперь мы возвращаемся в наш каталог загрузок:

cd $HOME/downloads

и снова запускаем rpmbuild, на этот раз для сборки пакета maildrop:

sudo rpmbuild -ta maildrop-2.6.0.tar.bz2

После процесса сборки rpm-пакеты можно найти в /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386, если вы находитесь на системе i386). Команда

sudo ls -l /root/rpmbuild/RPMS/x86_64

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

[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64  
total 1880  
-rw-r--r-- 1 root root 140580 Jan 31 17:14 courier-authlib-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root 324148 Jan 31 17:14 courier-authlib-debuginfo-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  38928 Jan 31 17:14 courier-authlib-devel-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  18756 Jan 31 17:14 courier-authlib-ldap-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  13044 Jan 31 17:14 courier-authlib-mysql-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  14208 Jan 31 17:14 courier-authlib-pgsql-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   9356 Jan 31 17:14 courier-authlib-pipe-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  11696 Jan 31 17:14 courier-authlib-sqlite-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  37580 Jan 31 17:14 courier-authlib-userdb-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root 309340 Jan 31 17:23 maildrop-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root 805928 Jan 31 17:23 maildrop-debuginfo-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root 105756 Jan 31 17:23 maildrop-devel-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root   66416 Jan 31 17:23 maildrop-man-2.6.0-1.18.x86_64.rpm  
[falko@server1 downloads]$

Теперь вы можете установить maildrop следующим образом:

sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/maildrop-2.6.0-1.18.x86_64.rpm

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

exit

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

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

cd /usr/src  
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/fedora/linux/releases/18/Everything/source/SRPMS/p/postfix-2.9.4-3.fc18.src.rpm  
rpm -ivh postfix-2.9.4-3.fc18.src.rpm

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

warning: user mockbuild does not exist - using root  
warning: group mockbuild does not exist - using root
cd /root/rpmbuild/SOURCES  
wget http://vda.sourceforge.net/VDA/postfix-vda-v11-2.9.4.patch  
cd /root/rpmbuild/SPECS/

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

vi postfix.spec

Добавьте Patch0: postfix-vda-v11-2.9.4.patch в раздел # Patches и %patch0 -p1 -b .vda-v11 в раздел %setup -q:

| [...] # Патчи Patch0: postfix-vda-v11-2.9.4.patch Patch1: postfix-2.7.0-config.patch Patch2: postfix-2.6.1-files.patch Patch3: postfix-alternatives.patch Patch8: postfix-large-fs.patch Patch9: pflogsumm-1.1.3-datecalc.patch [...] %prep %setup -q # Применить обязательные патчи %patch0 -p1 -b .vda-v11 %patch1 -p1 -b .config %patch2 -p1 -b .files %patch3 -p1 -b .alternatives %patch8 -p1 -b .large-fs [...] |

Перед тем как собрать новый пакет Postfix, нам нужно установить его зависимость libdb-devel - и поскольку libdb-devel конфликтует с db4-devel, мы сначала должны удалить этот пакет:

yum remove db4-devel
yum install libdb-devel

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

rpmbuild -ba postfix.spec

Наш rpm-пакет Postfix создается в /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386, если вы находитесь на системе i386), поэтому мы идем туда:

cd /root/rpmbuild/RPMS/x86_64

Команда

ls -l

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

[root@server1 x86_64]# ls -l  
total 10504  
-rw-r--r-- 1 root root  140580 Jan 31 17:14 courier-authlib-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  324148 Jan 31 17:14 courier-authlib-debuginfo-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   38928 Jan 31 17:14 courier-authlib-devel-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   18756 Jan 31 17:14 courier-authlib-ldap-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   13044 Jan 31 17:14 courier-authlib-mysql-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   14208 Jan 31 17:14 courier-authlib-pgsql-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root    9356 Jan 31 17:14 courier-authlib-pipe-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   11696 Jan 31 17:14 courier-authlib-sqlite-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   37580 Jan 31 17:14 courier-authlib-userdb-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  309340 Jan 31 17:23 maildrop-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root  805928 Jan 31 17:23 maildrop-debuginfo-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root  105756 Jan 31 17:23 maildrop-devel-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root    66416 Jan 31 17:23 maildrop-man-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root 2553200 Jan 31 17:30 postfix-2.9.4-3.fc18.x86_64.rpm  
-rw-r--r-- 1 root root 6203284 Jan 31 17:30 postfix-debuginfo-2.9.4-3.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   66108 Jan 31 17:30 postfix-perl-scripts-2.9.4-3.fc18.x86_64.rpm  
[root@server1 x86_64]#

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

rpm -ivh postfix-2.9.4-3.fc18.x86_64.rpm
Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.