Почтовые серверы · 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-utils2 Установка 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 postfixcd /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.deb4 Создание базы данных 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].
| source | destination |
| [email protected] | [email protected] |
Таблица users хранит всех виртуальных пользователей (т.е. адреса электронной почты, потому что адрес электронной почты и имя пользователя совпадают) и пароли (в зашифрованном виде!) и значение квоты для каждого почтового ящика (в этом примере значение по умолчанию составляет 10485760 байт, что означает 10 МБ).
| password | quota | |
| [email protected] | No9.E4skNvGa. (“секрет” в зашифрованном виде) | 10485760 |
Таблица transport является необязательной, она предназначена для продвинутых пользователей. Она позволяет пересылать письма для отдельных пользователей, целых доменов или всех писем на другой сервер. Например,
| domain | transport |
| example.com | smtp:[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.key6 Настройка 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 restart7 Настройка 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 restart9 Установка 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 pyzorDCC недоступен в репозиториях 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 |
Get new posts in your inbox
No spam. Unsubscribe anytime.