Поиск по сайту:

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


Это руководство существует для этих версий ОС

  • Ubuntu 13.10 (дерзкая саламандра)
  • Ubuntu 11.04 (Natty Narwhal)

На этой странице

  1. 1 Предварительное примечание
  2. 2. Установите Postfix, Courier, Saslauthd, MySQL, phpMyAdmin.
  3. 3. Применение исправления квоты к Postfix
  4. 4 Создание базы данных MySQL для Postfix/Courier
  5. 5 Настройка Postfix
  6. 6 Настройка Saslauthd
  7. 7 Настройка курьера
  8. 8 Изменить файл /etc/aliases
  9. 9 Установите amavisd-new, SpamAssassin и ClamAV
  10. 10. Установите Razor, Pyzor и DCC и настройте SpamAssassin

Это руководство защищено авторскими правами (c) 2014 Falko Timme & Srijan Kishore. Он основан на руководстве Кристофа Хааса, которое вы можете найти на 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 для создания файлов базы данных, никакой перезагрузки Postfix и т. д. Для администрирования базы данных MySQL вы можете использовать веб-инструменты, такие как phpMyAdmin, которые также будут установлены в этом руководстве. Третье преимущество заключается в том, что пользователи имеют адрес электронной почты в качестве имени пользователя (вместо имени пользователя и адреса электронной почты), что легче понять и запомнить.

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

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

1 Предварительное примечание

Это руководство основано на сервере Ubuntu 13.10 (Saucy Salamander), поэтому вам следует настроить базовую установку сервера Ubuntu 13.10, прежде чем продолжить работу с этим руководством. Система должна иметь статический IP-адрес. В этом руководстве я использую 192.168.0.100 в качестве своего IP-адреса и server1.example.com в качестве имени хоста.

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

sudo su

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

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

dpkg-reconfigure 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

Вам будет задано несколько вопросов:

Новый пароль для пользователя \root\ MySQL: <-- yourrootsqlpassword
Повторите пароль для пользователя \root\ MySQL: <-- yourrootsqlpassword
Создать каталоги для веб-администрирования? <-- Нет
Общий тип почтовой конфигурации: <-- Интернет-сайт
Системное почтовое имя: <-- server1.example.com
Требуется SSL-сертификат <-- Хорошо
Веб-сервер для перенастройки автоматически: <-- apache2
Настроить базу данных для phpmyadmin с помощью dbconfig-common? <-- Нет

3 Примените патч Quota к Postfix

Нам нужно получить исходники Postfix, исправить его с помощью патча quota, собрать новые пакеты 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

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

:/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: In function âdeliver_maildirâ:
maildir.c:974:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:977:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:983:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:986:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c: In function âsql2fileâ:
maildir.c:404:25: warning: ignoring return value of âreadâ, declared with attribute warn_unused_result [-Wunused-result]
maildir.c:417:26: warning: ignoring return value of âwriteâ, declared with attribute warn_unused_result [-Wunused-result]
cc1: some warnings being treated as errors
make: *** [maildir.o] Error 1
make: Leaving directory `/usr/src/postfix-2.10.2/src/virtual'
make[1]: *** [update] Error 1
make[1]: Leaving directory `/usr/src/postfix-2.10.2'
make: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
:/usr/src/postfix-2.10.2#

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

dpkg-buildpackage

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

cd ..

Команда

ls -l

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

:/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

Вам зададут этот вопрос:

Введите пароль: <-- yourrootsqlpassword

Далее переходим в оболочку MySQL:

mysql -u root -p

В оболочке MySQL мы создаем пользователя mail_admin с паролем mail_admin_password (замените его своим паролем), который имеет права SELECT, INSERT, UPDATE, DELETE в почтовой базе данных. Этот пользователь будет использоваться Postfix и Courier для подключения к почтовой базе данных:

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 .

source destination
[email  [email 

В таблице users хранятся все виртуальные пользователи (т. е. адреса электронной почты, поскольку адрес электронной почты и имя пользователя совпадают) и пароли (в зашифрованном виде!) и значение квоты для каждого почтового ящика ( в этом примере значение по умолчанию — 10485760 байт, что означает 10 МБ).

email password quota
[email  No9.E4skNvGa. ("secret" in encrypted form) 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 подключаться к MySQL по IP-адресу 127.0.0.1 вместо локального хоста. Это связано с тем, что Postfix работает в chroot-тюрьме и не имеет доступа к сокету MySQL, к которому он попытается подключиться, если я скажу Postfix использовать localhost. Если я использую 127.0.0.1, Postfix использует сеть TCP для подключения к MySQL, что не является проблемой даже в тюрьме chroot (альтернативой может быть перемещение сокета MySQL в тюрьму chroot, что вызывает некоторые другие проблемы).

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

vi /etc/mysql/my.cnf
[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
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):

:~#

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

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 действительным полным доменным именем, иначе ваш 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 = "The user you are trying to reach is over quota."'
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

Название страны (двухбуквенный код) [AU]: <-- Введите название вашей страны (например, \DE\).
Название штата или провинции (полное название) [Some-State]: <-- Введите ваш Название штата или провинции.
Название местности (например, город) []: <-- Введите свой город.
Название организации (например, компания) [Internet Widgits Pty Ltd]: <-- Введите название вашей организации ( например, название вашей компании).
Название организационного подразделения (например, раздела) []: <-- Введите название вашего организационного подразделения (например, \ИТ-отдел\).
Обычное название (например, ВАШ name) []: <-- Введите полное доменное имя системы (например, \server1.example.com\).
Адрес электронной почты []: <-- Введите свой адрес электронной почты.

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

chmod o= /etc/postfix/smtpd.key

6 Настройте Саслаутд

Первый забег

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
#
# Settings for saslauthd daemon
# Please read /usr/share/doc/sasl2-bin/README.Debian for details.
#

# Should saslauthd run automatically on startup? (default: no)
START=yes

# Description of this saslauthd instance. Recommended.
# (suggestion: SASL Authentication Daemon)
DESC="SASL Authentication Daemon"

# Short name of this saslauthd instance. Strongly recommended.
# (suggestion: saslauthd)
NAME="saslauthd"

# Which authentication mechanisms should saslauthd use? (default: pam)
#
# Available options in this Debian package:
# getpwent  -- use the getpwent() library function
# kerberos5 -- use Kerberos 5
# pam       -- use PAM
# rimap     -- use a remote IMAP server
# shadow    -- use the local shadow password file
# sasldb    -- use the local sasldb database file
# ldap      -- use LDAP (configuration is in /etc/saslauthd.conf)
#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="pam"
MECHANISMS="pam"

# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS=""

# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5

# Other options (default: -c -m /var/run/saslauthd)
# Note: You MUST specify the -m option or saslauthd won't run!
#
# WARNING: DO NOT SPECIFY THE -d OPTION.
# The -d option will cause saslauthd to run in the foreground instead of as
# a daemon. This will PREVENT YOUR SYSTEM FROM BOOTING PROPERLY. If you wish
# to run saslauthd in debug mode, please run it by hand to be safe.
#
# See /usr/share/doc/sasl2-bin/README.Debian for Debian-specific information.
# See the saslauthd man page and the output of 'saslauthd -h' for general
# information about these options.
#
# Example for chroot Postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
# Example for non-chroot Postfix users: "-c -m /var/run/saslauthd"
#
# To know if your Postfix is running chroot, check /etc/postfix/master.cf.
# If it has the line "smtp inet n - y - - smtpd" or "smtp inet n - - - - smtpd"
# then your Postfix is running in a chroot.
# If it has the line "smtp inet n - n - - smtpd" then your Postfix is NOT
# running in a 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 = '%[email %r'

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

adduser postfix sasl

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

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

7 Настроить курьера

Теперь мы должны сообщить 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

... и перезапустите Курьера:

/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 Привет. (Введите quit, чтобы вернуться в оболочку Linux.)

[электронная почта защищена]:/etc/courier#

8 Изменить /etc/псевдонимы

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

vi /etc/aliases
[...]
postmaster: root
root: [email 
[...]

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

[...]
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;

# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Please note, that anti-virus checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:


@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);


#
# Default SPAM checking mode
# Please note, that anti-spam checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:


@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1;  # ensure a defined return

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

vi /etc/amavis/conf.d/20-debian_defaults
[...]
$QUARANTINEDIR = "$MYHOME/virusmails";
$quarantine_subdir_levels = 1; # enable quarantine dir hashing

$log_recip_templ = undef;    # disable by-recipient level-0 log entries
$DO_SYSLOG = 1;              # log via syslogd (preferred)
$syslog_ident = 'amavis';    # syslog ident tag, prepended to all messages
$syslog_facility = 'mail';
$syslog_priority = 'debug';  # switch to info to drop debug output, etc

$enable_db = 1;              # enable use of BerkeleyDB/libdb (SNMP and nanny)
$enable_global_cache = 1;    # enable use of libdb-based cache if $enable_db=1

$inet_socket_port = 10024;   # default listening socket

$sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 6.31; # triggers spam evasive actions
$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent
[...]
$final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)
$final_banned_destiny     = D_BOUNCE;   # D_REJECT when front-end MTA
$final_spam_destiny       = D_BOUNCE;
$final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)
[...]

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

vi /etc/amavis/conf.d/50-user
use strict;

#
# Place your configuration directives here.  They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file
#
$pax='pax';

#------------ Do not modify anything below this line -------------
1;  # ensure a defined return

После этого выполните следующие команды, чтобы добавить пользователя 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

Затем перезапустите Постфикс:

/etc/init.d/postfix restart

Теперь беги

netstat -tap

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

:/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 - perform DCC message checks.
#
# DCC is disabled here because it is not open source.  See the DCC
# license for more details.
#
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

Это будет обновлять наборы правил каждый второй день в 4:23.