Почтовые серверы · 19 min read · Sep 25, 2025

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

Этот учебник является объектом авторского права (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 13.10 Server (Saucy Salamander), поэтому вам следует установить базовую установку сервера Ubuntu 13.10 перед тем, как продолжить с этим учебником. Система должна иметь статический IP-адрес. Я использую 192.168.0.100 в этом учебнике и server1.example.com в качестве имени хоста.

Убедитесь, что вы вошли как root (введите

sudo su

чтобы стать root), потому что мы должны выполнять все шаги из этого учебника от имени пользователя root.

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

dpkg-reconfigure dash

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

… и чтобы вы отключили AppArmor:

/etc/init.d/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 и установить эти пакеты .deb:

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

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

postconf -d | grep mail_version

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

root@server1:/usr/src# postconf -d | grep mail_version  
mail_version = 2.10.2  
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.10.2  
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.10.2/src/virtual'  
make[1]: * [update] Ошибка 1  
make[1]: Выход из каталога `/usr/src/postfix-2.10.2'  
make: *** [build] Ошибка 2  
dpkg-buildpackage: ошибка: debian/rules build завершилась с кодом выхода 2  
root@server1:/usr/src/postfix-2.10.2#

Теперь мы можем собрать новые пакеты Postfix.deb:

dpkg-buildpackage

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

cd ..

Команда

ls -l

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

root@server1:/usr/src# ls -l  
total 7124  
drwxr-xr-x 18 root root    4096 Apr 16 04:29 postfix-2.10.2  
-rw-r--r--  1 root root   48594 Apr 16 04:29 postfix-cdb_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root  161974 Apr 16 04:29 postfix-dev_2.10.2-1_all.deb  
-rw-r--r--  1 root root 1094344 Apr 16 04:29 postfix-doc_2.10.2-1_all.deb  
-rw-r--r--  1 root root   57342 Apr 16 04:29 postfix-ldap_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root   50554 Apr 16 04:29 postfix-mysql_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root   50804 Apr 16 04:29 postfix-pcre_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root   50756 Apr 16 04:29 postfix-pgsql_2.10.2-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  282175 Apr 16 04:28 postfix_2.10.2-1.diff.gz  
-rw-r--r--  1 root root    1522 Apr 16 04:28 postfix_2.10.2-1.dsc  
-rw-r--r--  1 root root    3899 Apr 16 04:29 postfix_2.10.2-1_amd64.changes  
-rw-r--r--  1 root root 1542368 Apr 16 04:29 postfix_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root 3828326 Sep 12  2013 postfix_2.10.2.orig.tar.gz

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

dpkg -i postfix_2.10.2-1_amd64.deb postfix-mysql_2.10.2-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].

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 для администрирования вашего почтового сервера.

5 Настройка Postfix

Теперь нам нужно сказать Postfix, где он может найти всю информацию в базе данных. Для этого нам нужно создать шесть текстовых файлов. Вы заметите, что я говорю Postfix подключаться к MySQL по IP-адресу 127.0.0.1 вместо localhost. Это связано с тем, что Postfix работает в chroot jail и не имеет доступа к сокету MySQL, к которому он попытается подключиться, если я скажу Postfix использовать localhost. Если я использую 127.0.0.1, Postfix использует TCP-сетевое соединение для подключения к MySQL, что не является проблемой даже в chroot jail (альтернативой было бы перемещение сокета MySQL в chroot jail, что вызывает некоторые другие проблемы).

Пожалуйста, убедитесь, что /etc/mysql/my.cnf содержит следующую строку:

vi /etc/mysql/my.cnf

| [...] # Вместо skip-networking по умолчанию теперь слушает только на # localhost, что более совместимо и не менее безопасно. bind-address = 127.0.0.1 [...] |

Если вам пришлось изменить /etc/mysql/my.cnf, пожалуйста, перезапустите MySQL сейчас:

/etc/init.d/mysql restart

Запустите

netstat -tap | grep mysql

чтобы убедиться, что MySQL слушает на 127.0.0.1 (localhost.localdomain):

root@server1:~# netstat -tap | grep mysql  
tcp        0      0 localhost.localdo:mysql *:*                      LISTEN      24970/mysqld      
root@server1:~#

Теперь давайте создадим наши шесть текстовых файлов.

vi /etc/postfix/mysql-virtual_domains.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_forwardings.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT destination FROM forwardings WHERE source='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_mailboxes.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_email2email.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT email FROM users WHERE email='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_transports.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT transport FROM transport WHERE domain='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT quota FROM users WHERE email='%s' hosts = 127.0.0.1 |

Затем измените разрешения и группу этих файлов:

chmod o= /etc/postfix/mysql-virtual_*.cf  
chgrp postfix /etc/postfix/mysql-virtual_*.cf

Теперь мы создаем пользователя и группу с именем vmail с домашним каталогом /home/vmail. Здесь будут храниться все почтовые ящики.

groupadd -g 5000 vmail  
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Далее мы выполняем некоторую настройку Postfix. Убедитесь, что вы заменили server1.example.com на действительное FQDN, в противном случае ваш Postfix может работать неправильно!

postconf -e 'myhostname = server1.example.com'  
postconf -e 'mydestination = server1.example.com, localhost, localhost.localdomain'  
postconf -e 'mynetworks = 127.0.0.0/8'  
postconf -e 'virtual_alias_domains ='  
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'  
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'  
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'  
postconf -e 'virtual_mailbox_base = /home/vmail'  
postconf -e 'virtual_uid_maps = static:5000'  
postconf -e 'virtual_gid_maps = static:5000'  
postconf -e 'smtpd_sasl_auth_enable = yes'  
postconf -e 'broken_sasl_auth_clients = yes'  
postconf -e 'smtpd_sasl_authenticated_header = yes'  
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'  
postconf -e 'smtpd_use_tls = yes'  
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'  
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'  
postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'  
postconf -e 'virtual_maildir_extended = yes'  
postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'  
postconf -e 'virtual_mailbox_limit_override = yes'  
postconf -e 'virtual_maildir_limit_message = "Пользователь, к которому вы пытаетесь обратиться, превышает квоту."'  
postconf -e 'virtual_overquota_bounce = yes'  
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'

После этого мы создаем SSL-сертификат, необходимый для TLS:

cd /etc/postfix  
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

Страна (2 буквы) [AU]: <– Введите название вашей страны (например, “DE”).
Название штата или провинции (полное название) [Some-State]: <– Введите название вашего штата или провинции.
Название населенного пункта (например, город) []: <– Введите название вашего города.
Название организации (например, компания) [Internet Widgits Pty Ltd]: <– Введите название вашей организации (например, название вашей компании).
Название организационного подразделения (например, отдел) []: <– Введите название вашего организационного подразделения (например, “IT-отдел”).
Общее название (например, ВАШЕ имя) []: <– Введите полное квалифицированное доменное имя системы (например, “server1.example.com”).
Адрес электронной почты []: <– Введите свой адрес электронной почты.

Затем измените разрешения для smtpd.key:

chmod o= /etc/postfix/smtpd.key

6 Настройка Saslauthd

Сначала выполните

mkdir -p /var/spool/postfix/var/run/saslauthd

Затем отредактируйте /etc/default/saslauthd. Установите START в yes и измените строку OPTIONS=”-c -m /var/run/saslauthd” на OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”:

vi /etc/default/saslauthd

| # # Настройки для демона saslauthd # Пожалуйста, прочитайте /usr/share/doc/sasl2-bin/README.Debian для получения подробностей. # # Должен ли saslauthd запускаться автоматически при старте? (по умолчанию: нет) START=yes # Описание этого экземпляра saslauthd. Рекомендуется. # (предложение: Демон аутентификации SASL) DESC="Демон аутентификации SASL" # Краткое название этого экземпляра saslauthd. Настоятельно рекомендуется. # (предложение: saslauthd) NAME="saslauthd" # Какие механизмы аутентификации должен использовать saslauthd? (по умолчанию: pam) # # Доступные опции в этом пакете Debian: # getpwent -- использовать библиотечную функцию getpwent() # kerberos5 -- использовать Kerberos 5 # pam -- использовать PAM # rimap -- использовать удаленный IMAP-сервер # shadow -- использовать локальный файл паролей shadow # sasldb -- использовать локальный файл базы данных sasldb # ldap -- использовать LDAP (конфигурация находится в /etc/saslauthd.conf) # # Может быть использована только одна опция за раз. См. страницу man saslauthd # для получения дополнительной информации. # # Пример: MECHANISMS="pam" MECHANISMS="pam" # Дополнительные параметры для этого механизма. (по умолчанию: нет) # См. страницу man saslauthd для получения информации о параметрах, специфичных для механизма. MECH_OPTIONS="" # Сколько процессов saslauthd мы должны запустить? (по умолчанию: 5) # Значение 0 создаст новый процесс для каждого соединения. THREADS=5 # Другие параметры (по умолчанию: -c -m /var/run/saslauthd) # Примечание: ВЫ ДОЛЖНЫ указать параметр -m, иначе saslauthd не запустится! # # ПРЕДУПРЕЖДЕНИЕ: НЕ УКАЗЫВАЙТЕ ПАРАМЕТР -d. # Параметр -d заставит saslauthd работать в фоновом режиме вместо демона. Это ПРЕДОТВРАТИТ НОРМАЛЬНУЮ ЗАГРУЗКУ ВАШЕЙ СИСТЕМЫ. Если вы хотите # запустить saslauthd в режиме отладки, пожалуйста, запустите его вручную для безопасности. # # См. /usr/share/doc/sasl2-bin/README.Debian для получения информации, специфичной для Debian. # См. страницу man saslauthd и вывод 'saslauthd -h' для общей информации об этих параметрах. # # Пример для пользователей Postfix в chroot: "-c -m /var/spool/postfix/var/run/saslauthd" # Пример для пользователей Postfix, не работающих в chroot: "-c -m /var/run/saslauthd" # # Чтобы узнать, работает ли ваш Postfix в chroot, проверьте /etc/postfix/master.cf. # Если в нем есть строка "smtp inet n - y - - smtpd" или "smtp inet n - - - - smtpd" # тогда ваш Postfix работает в chroot. # Если в нем есть строка "smtp inet n - n - - smtpd", то ваш Postfix НЕ # работает в chroot. #OPTIONS="-c -m /var/run/saslauthd" OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r" |

Затем создайте файл /etc/pam.d/smtp. Он должен содержать только следующие две строки (убедитесь, что вы заполнили свои правильные данные базы данных):

vi /etc/pam.d/smtp

| auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 |

Затем создайте файл /etc/postfix/sasl/smtpd.conf. Он должен выглядеть так:

vi /etc/postfix/sasl/smtpd.conf

| pwcheck_method: saslauthd mech_list: plain login allow_plaintext: true auxprop_plugin: sql sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: mail_admin sql_passwd: mail_admin_password sql_database: mail sql_select: select password from users where email = '%u@%r' |

Затем добавьте пользователя postfix в группу sasl (это гарантирует, что у Postfix есть разрешение на доступ к saslauthd):

adduser postfix sasl

Затем перезапустите Postfix и Saslauthd:

/etc/init.d/postfix restart  
/etc/init.d/saslauthd restart

7 Настройка Courier

Теперь нам нужно сказать Courier, что он должен аутентифицироваться с использованием нашей базы данных MySQL. Сначала отредактируйте /etc/courier/authdaemonrc и измените значение authmodulelist так, чтобы оно выглядело следующим образом:

vi /etc/courier/authdaemonrc

| [...] authmodulelist="authmysql" [...] |

Затем сделайте резервную копию /etc/courier/authmysqlrc и очистите старый файл:

cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig  
cat /dev/null > /etc/courier/authmysqlrc

Затем откройте /etc/courier/authmysqlrc и вставьте в него следующие строки:

vi /etc/courier/authmysqlrc

| MYSQL_SERVER localhost MYSQL_USERNAME mail_admin MYSQL_PASSWORD mail_admin_password MYSQL_PORT 0 MYSQL_DATABASE mail MYSQL_USER_TABLE users MYSQL_CRYPT_PWFIELD password #MYSQL_CLEAR_PWFIELD password MYSQL_UID_FIELD 5000 MYSQL_GID_FIELD 5000 MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD "/home/vmail" MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') #MYSQL_NAME_FIELD MYSQL_QUOTA_FIELD quota |

Во время установки SSL-сертификаты для IMAP-SSL и POP3-SSL создаются с именем хоста localhost. Чтобы изменить это на правильное имя хоста (server1.example.com в этом учебнике), удалите сертификаты…

cd /etc/courier  
rm -f /etc/courier/imapd.pem  
rm -f /etc/courier/pop3d.pem

… и измените следующие два файла; замените CN=localhost на CN=server1.example.com (вы также можете изменить другие значения, если это необходимо):

vi /etc/courier/imapd.cnf

| [...] CN=server1.example.com [...] |

vi /etc/courier/pop3d.cnf

| [...] CN=server1.example.com [...] |

Затем воссоздайте сертификаты…

mkimapdcert  
mkpop3dcert

… и перезапустите Courier:

/etc/init.d/courier-authdaemon restart  
/etc/init.d/courier-imap restart  
/etc/init.d/courier-imap-ssl restart  
/etc/init.d/courier-pop restart  
/etc/init.d/courier-pop-ssl restart

Запустив

telnet localhost pop3

вы можете увидеть, работает ли ваш POP3-сервер правильно. Он должен вернуть +OK Hello there. (Введите quit, чтобы вернуться в оболочку Linux.)

root@server1:/etc/courier# telnet localhost pop3
Trying ::1…
Connected to localhost.localdomain.
Escape character is ‘^]’.
+OK Hello there.
<– quit
+OK Better luck next time.
Connection closed by foreign host.
root@server1:/etc/courier#

8 Изменение /etc/aliases

Теперь мы должны открыть /etc/aliases. Убедитесь, что postmaster указывает на root, а root на ваше собственное имя пользователя или адрес электронной почты, например, так:

vi /etc/aliases

| [...] postmaster: root root: [email protected] [...] |

или так (если администратор - это ваше собственное имя пользователя):

| [...] postmaster: root root: administrator [...] |

Каждый раз, когда вы изменяете /etc/aliases, вы должны выполнить

newaliases

после этого и перезапустить Postfix:

/etc/init.d/postfix restart

9 Установка amavisd-new, SpamAssassin и ClamAV

Чтобы установить amavisd-new, spamassassin и clamav, выполните следующую команду:

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax

После этого мы должны настроить amavisd-new. Конфигурация разбита на различные файлы, которые находятся в каталоге /etc/amavis/conf.d. Ознакомьтесь с каждым из них, чтобы ознакомиться с конфигурацией. Большинство настроек в порядке, однако мы должны изменить три файла:

Сначала мы должны включить ClamAV и SpamAssassin в /etc/amavis/conf.d/15-content_filter_mode, раскомментировав строки @bypass_virus_checks_maps и @bypass_spam_checks_maps:

vi /etc/amavis/conf.d/15-content_filter_mode

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

| use strict; # Вы можете изменить этот файл, чтобы повторно включить проверку СПАМА через spamassassin # и повторно включить проверку антивирусов. # # Режим проверки антивирусов по умолчанию # Обратите внимание, что проверка антивирусов ОТКЛЮЧЕНА по умолчанию. # Если вы хотите включить его, пожалуйста, раскомментируйте следующие строки: @bypass_virus_checks_maps = ( \\%bypass_virus_checks, \\@bypass_virus_checks_acl, \\$bypass_virus_checks_re); # # Режим проверки СПАМА по умолчанию # Обратите внимание, что проверка антивирусов ОТКЛЮЧЕНА по умолчанию. # Если вы хотите включить его, пожалуйста, раскомментируйте следующие строки: @bypass_spam_checks_maps = ( \\%bypass_spam_checks, \\@bypass_spam_checks_acl, \\$bypass_spam_checks_re); 1; # обеспечить определенный возврат |

Затем вам следует взглянуть на настройки спама и действия для спам-/вирусных писем в /etc/amavis/conf.d/20-debian_defaults. Нет необходимости ничего менять, если настройки по умолчанию вас устраивают. Файл содержит много объяснений, поэтому нет необходимости объяснять настройки здесь:

vi /etc/amavis/conf.d/20-debian_defaults

| [...] $QUARANTINEDIR = "$MYHOME/virusmails"; $quarantine_subdir_levels = 1; # включить хеширование каталога карантина $log_recip_templ = undef; # отключить записи уровня 0 по получателю $DO_SYSLOG = 1; # вести журнал через syslogd (предпочтительно) $syslog_ident = 'amavis'; # тег идентификатора syslog, добавляемый ко всем сообщениям $syslog_facility = 'mail'; $syslog_priority = 'debug'; # переключиться на info, чтобы убрать вывод отладки и т.д. $enable_db = 1; # включить использование BerkeleyDB/libdb (SNMP и nanny) $enable_global_cache = 1; # включить использование кеша на основе libdb, если $enable_db=1 $inet_socket_port = 10024; # сокет по умолчанию для прослушивания $sa_spam_subject_tag = '*SPAM* '; $sa_tag_level_deflt = 2.0; # добавлять заголовки информации о спаме, если на уровне или выше $sa_tag2_level_deflt = 6.31; # добавлять заголовки 'спам обнаружен' на этом уровне $sa_kill_level_deflt = 6.31; # триггер спам-избегающих действий $sa_dsn_cutoff_level = 10; # уровень спама, за которым DSN не отправляется [...] $final_virus_destiny = D_DISCARD; # (данные не потеряны, см. карантин вирусов) $final_banned_destiny = D_BOUNCE; # D_REJECT, когда фронтальный MTA $final_spam_destiny = D_BOUNCE; $final_bad_header_destiny = D_PASS; # Подвержен ложным срабатываниям (для спама) [...] |

Наконец, отредактируйте /etc/amavis/conf.d/50-user и добавьте строку $pax=’pax’; посередине:

vi /etc/amavis/conf.d/50-user

| use strict; # Поместите свои директивы конфигурации здесь. Они переопределят те, что в # более ранних файлах. # См. /usr/share/doc/amavisd-new/ для документации и примеров директив, которые вы можете использовать в этом файле $pax='pax'; #------------ Не изменяйте ничего ниже этой строки ------------- 1; # обеспечить определенный возврат |

После этого выполните следующие команды, чтобы добавить пользователя clamav в группу amavis и перезапустить amavisd-new и ClamAV:

adduser clamav amavis  
/etc/init.d/amavis restart  
/etc/init.d/clamav-freshclam restart  
/etc/init.d/clamav-daemon restart

Теперь нам нужно настроить Postfix, чтобы перенаправлять входящие электронные письма через amavisd-new:

postconf -e 'content_filter = amavis:[127.0.0.1]:10024'  
postconf -e 'receive_override_options = no_address_mappings'

После этого добавьте следующие строки в /etc/postfix/master.cf:

vi /etc/postfix/master.cf

| [...] amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes 127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks |

Затем перезапустите Postfix:

/etc/init.d/postfix restart

Теперь выполните

netstat -tap

и вы должны увидеть, что Postfix (master) слушает на порту 25 (smtp) и 10025, а amavisd-new на порту 10024:

root@server1:/etc/courier# netstat -tap  
Активные интернет-соединения (сервера и установленные)  
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
tcp        0      0 *:http                  *:*                     LISTEN      6134/apache2  
tcp        0      0 *:ssh                   *:*                     LISTEN      610/sshd  
tcp        0      0 *:smtp                  *:*                     LISTEN      23128/master  
tcp        0      0 localhost.localdo:10024 *:*                     LISTEN      21937/amavisd-new (  
tcp        0      0 localhost.localdo:10025 *:*                     LISTEN      23128/master  
tcp        0      0 localhost.localdo:mysql *:*                     LISTEN      4308/mysqld  
tcp        0      52 server1.example.com:ssh 192.168.0.206:57597     ESTABLISHED 976/0  
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      610/sshd  
tcp6       0      0 [::]:smtp               [::]:*                  LISTEN      23128/master  
tcp6       0      0 [::]:imaps              [::]:*                  LISTEN      18191/couriertcpd  
tcp6       0      0 [::]:pop3s              [::]:*                  LISTEN      18259/couriertcpd  
tcp6       0      0 [::]:pop3               [::]:*                  LISTEN      18222/couriertcpd  
tcp6       0      0 [::]:imap2              [::]:*                  LISTEN      18154/couriertcpd  
root@server1:/etc/courier#
 

10 Установка Razor, Pyzor и DCC и настройка SpamAssassin

Razor, Pyzor и DCC - это фильтры спама, которые используют сеть совместной фильтрации. Чтобы установить Razor и Pyzor, выполните

apt-get install razor pyzor

DCC недоступен в репозиториях Ubuntu 13.10, поэтому мы устанавливаем его следующим образом:

cd /tmp  
wget http://www.dcc-servers.net/dcc/source/dcc-dccproc.tar.Z   
tar xzvf dcc-dccproc.tar.Z  
cd dcc-dccproc-1.3.1.154  
./configure --with-uid=amavis  
make  
make install  
chown -R amavis:amavis /var/dcc  
ln -s /var/dcc/libexec/dccifd /usr/local/bin/dccifd

Теперь нам нужно сказать SpamAssassin использовать эти три программы. Отредактируйте /etc/spamassassin/local.cf и добавьте в него следующие строки:

vi /etc/spamassassin/local.cf

| [...] #dcc use_dcc 1 dcc_path /usr/local/bin/dccproc #pyzor use_pyzor 1 pyzor_path /usr/bin/pyzor #razor use_razor2 1 razor_config /etc/razor/razor-agent.conf #bayes use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1 |

Затем мы должны включить плагин DCC в SpamAssassin. Откройте /etc/spamassassin/v310.pre и раскомментируйте строку loadplugin Mail::SpamAssassin::Plugin::DCC:

vi /etc/spamassassin/v310.pre

| [...] # DCC - выполнять проверки сообщений DCC. # # DCC отключен здесь, потому что он не является открытым исходным кодом. См. лицензию DCC для получения дополнительных сведений. # loadplugin Mail::SpamAssassin::Plugin::DCC [...] |

Вы можете проверить свою конфигурацию SpamAssassin, выполнив:

spamassassin --lint

Не должно быть никаких ошибок.

После этого перезапустите amavisd-new:

/etc/init.d/amavis restart

Теперь мы обновляем наши наборы правил SpamAssassin следующим образом:

sa-update --no-gpg

Мы создаем задание cron, чтобы наборы правил обновлялись регулярно. Выполните

crontab -e

чтобы открыть редактор заданий cron. Создайте следующее задание cron:

| 23 4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null |

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.