Настройка почтового сервера Postfix в Debian Squeeze

Материал из First-Leon
Перейти к навигации Перейти к поиску

Подготовка

Требования

  • Хранение почты на сервере
  • Фильтрация спама
  • Проверка вложений на вирусы
  • Возможность использовать дополнительные домены
  • Средние нагрузки (250+ пользователей)
  • Списки рассылок
  • WEB клиент

Используемое ПО

  • Postfix
  • Courier
  • Amavis
  • Spamassassin
  • Razor
  • ClamAV
  • Roundcube
  • Mailman
  • Mailgraph
  • AwStats
  • MySQL
  • Saslauth
  • phpMyAdmin

Причины отказа от индивидуального квотирования

  • В большинстве случаев для не публичных почтовых серверов квоты не нужны
  • Для работы с индивидуальными квотами на postfix необходимо накладывать патч, что не позволит в дальнейшем стандартное обновление

Причины отказа от Pyzor

  • Более полутора лет назад выпущена последняя версия
  • Практически нет документации

Причины отказа от DCC

  • Отсутствие в стандартном репозитории, что не позволит в дальнейшем стандартное обновление
  • Непонятки с лицензией

Причины отказа от грэй листов

  • Теоретически возможно частичные потери входящей почты

Выбор оборудования

  • Гостевая система KVM
  • CPU: 2x ядра Intel(R) Xeon(R) CPU E5506 @2.13GHz
  • RAM: 2Gb
  • HDD: 15Gb для системы, 150gb для хранилища почты
  • Lan: 1Glan

Предварительные работы

  • Настройка сетевого интерфейса для работы со статический белым IP адресом (либо ваша собственная конфигурация NAT-а и др.)
  • Запись в прямой и обратной зоне DNS имени системы
  • Запись MX, PTR и SPF в DNS
  • Отдельный диск для хранилища почты (второй жесткий диск в /mnt/vdb1)

Советы

  • Перед редактированием какого либо конфигурационного файла создаем резервную копию оригинала (cp /path/filename /path/filename_orig)!

Установка Postfix, Courier, Saslauth, 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 postfix-pcre gamin

Будут заданы следующие вопросы:

  • Пароль пользователя root для сервера баз данных mysql
  • Создать ли каталоги для веб-администрирования? Выбираем "Да"
  • Выберите тип настройки почтового сервера, который оптимально удовлетворяет ваши требования. Выбираем "Интернет-сайт".
  • "Почтовое имя". Вводим имя почтового хоста с полным доменным именем. Предположим это будет mail.вашдомен.ru
  • Требуется сертификат SSL. Жмем Enter.
  • Выберите веб-сервер, который будет автоматически настроен для запуска phpMyAdmin. Выбираем Apache.
  • Настроить базу данных для phpmyadmin с помощью dbconfig-common? Вводим пароль root для mysql.
  • Пароль для пользователя базы phpmyadmin. Вводим пароль (не обязательно совпадающий с паролем root-а сервера mysql).

Создание базы данных для Postfix/Courier

Для создания базы данных воспользуемся phpmyadmin:

http://mail.вашдомен.ru/phpmyadmin
  • Создаем новую базу данных mail. В поле сравнение выбираем utf8_general_ci
  • Добавляем нового пользователя с именем mail_admin и паролем (этого пользователя будут использовать Postfix и Courier для доступа к базе mail
  • Добавляем права на SELECT, INSERT, UPDATE, DELETE для пользователя mail_admin на базу mail
  • Перезагружаем привилегии
  • Добавляем таблицы в базу
CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) );
CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
description TEXT NOT NULL,
PRIMARY KEY (source) );
CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
PRIMARY KEY (email));
CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain));

В таблице domains будут хранится имена доменов, для которых Postfix будет принимать почту. Для нас достаточно одной записи:

domain
вашдомен.ru

В таблице forwardings будут хранится алиасы.

source destination description
director@вашдомен.ru secretar@вашдомен.ru Перенаправление почты директора на секретаря. Не все директора умеют пользоваться электронкой :)
ivanov@вашдомен.ru ivanov@вашдомен.ru

petrov@вашдомен.ru

Письма Иванова дублируются Петрову. Иванов часто не выходит на работу, а на его адрес приходят срочные письма!

В таблице users хранятся данные о пользователях почты - адрес электронной почты, пароль:

email password
director@вашдомен.ru No9.E4skNvGa.

Тут нужно заметить, что пароль хранится в зашифрованном виде (функцией encript в mysql).

При необходимости, вы можете добавить другие поля в таблицу users - например номер телефона и кабинета в котором работает сотрудник (главное не забываем о 152-ФЗ).

Таблица transport содержит записи, указывающие Postfix, письма каких пользователей (доменов) обрабатывать самому, а каких пересылать (существует возможность пересылать письма определенных пользователей, или даже целый доменов на другой почтовый сервер).

domain transport
вашдомен.ru :
вашдомен.ru smtp:[a.b.c.d]
director@вашдомен.ru smtp:[c.d.e.f]

В первом примере почта будет доставляться локально (складываться в локальное хранилище).

Во втором примере, вся почта для домена "вашдомен.ru" будет пересылаться на сервер с ip адресом: [a.b.c.d]

И наконец третий пример указывает постфиксу пересылать почту пришедшую на адрес "director@вашдомен.ru" серверу с ip адресом [a.b.c.d].

Для более подробной информации смотрите

man transport

Помните, что порядок записей в транспортной таблице важен! Кроме этого знайте - данные из таблицы транспорта кэшируются и для применения изменений в базе данный необходима перезагрузка параметров Postfix-а командой:

/etc/init.d/postfix reload

В первом примере, все пришедшие письма Postfix будет пересылать другому почтовому серверу (определенному по MX записи для домена "другойдомен.ru") письма адресованные director@вашдомен.ru будут пересланы на другой домен.

Второй пример аналогичен первому за исключением того, что письма будут пересылаться на другой почтовый сервер с IP адресом "a.b.c.d" (нужно заметить, что в случае пересылки на заданный IP, сам IP указывается в квадратных скобках).

И наконец для третьего примера, письма пришедшие на конкретный адрес "director@вашдомен.ru" буду пересланы на сервер с IP "c.d.e.f".

Конфигурирование Postfix

Добавим пользователя Postfix в группу sasl:

adduser postfix sasl

Проверим, что сервер mysql ожидает соединений по адресу 127.0.0.1. В файле /etc/mysql/my.cnf переменная bind-address должна иметь значение 127.0.0.1:

bind-address            = 127.0.0.1

В случае если это не так, внесем необходимые изменения и рестартуем сервер mysql:

/etc/init.d/mysql restart

Для проверки того, что мы сделали все верно запустим команду:

netstat -tap

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

tcp        0      0 localhost:mysql *:*                     LISTEN     4556/mysqld

где 4556 это PID процесса и у всех будет разный. Если такая строка присутствует в выводе команды значит mysql работает правильно.

Настройка извлечения данных из mysql

Создадим папку для дополнительных конфигурационных файлов:

mkdir /etc/postfix/config

Теперь нам необходимо указать Postfix, как извлекать информацию из созданной нами базы. Для этого мы создадим пять текстовых файлов.

mcedit /etc/postfix/config/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
mcedit /etc/postfix/config/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
mcedit /etc/postfix/config/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
mcedit /etc/postfix/config/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
mcedit /etc/postfix/config/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

где mail_admin это имя пользователя созданного нами ранее, mail_admin_password его пароль.

Теперь создадим пользователя и группу для работы с хранилищем почты. Домашний каталог пользователя и будет корнем хранилища. Я буду использовать для хранилища почты отдельный раздел на отдельном диске (смонтированный в каталог /mnt/vdb1/vmail). Вы же указываете свой путь для хранилища почты.

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /mnt/vdb1/vmail -m

Общее

Дальше займемся конфигурированием Postfix. Редактируем файл /etc/postfix/main.cf:

#Время, в течении которого письма будут находится в очереди
maximal_queue_lifetime = 10d
#Ограничение на размер письма в байтах
message_size_limit = 10000000
#Дополнительные файлы конфигурации
additional_config_dir             = /etc/postfix/config
alias_maps                        = hash:/etc/aliases
#Соответствует полному доменному имени (FQDN)
myhostname                        = mail.вашдомен.ru
#Список доменов, для которых почта будет доставляться локально, а не пересылаться на другой хост.
mydestination                     = $myhostname, localhost, localhost.$mydomain, $myhostname.$mydomain
#Локальные сети
mynetworks                        = 127.0.0.0/8 10.0.0.0/8
#Карта алиасов
virtual_alias_maps                = proxy:mysql:$additional_config_dir/mysql-virtual_forwardings.cf, mysql:$additional_config_dir/mysql-virtual_email2email.cf
#Карта расположения почтовых ящиков
virtual_mailbox_maps              = proxy:mysql:$additional_config_dir/mysql-virtual_mailboxes.cf
#Содержит имена обслуживаемых доменов
virtual_mailbox_domains           = proxy:mysql:$additional_config_dir/mysql-virtual_domains.cf
#Нужен чтобы по MAIL FROM узнать логин и затем сверить с логином, по которому прошла аутентификация.
smtpd_sender_login_maps           = mysql:$additional_config_dir/mysql-virtual_email2email.cf
#Путь до каталога хранилища почты
virtual_mailbox_base              = /mnt/vdb1/vmail
#Карта UID-ов виртуальных пользователей
virtual_uid_maps                  = static:5000
#Тоже самое для групп:
virtual_gid_maps                  = static:5000
#Поддержку sasl авторизации
smtpd_sasl_auth_enable            = yes
#Поддержки старых версий почтовых клиентов, например Microsoft Outlook Express 4 и Microsoft Exchange 5, использующих другую форму команды AUTH
broken_sasl_auth_clients          = yes
#Требуем, чтобы удаленный SMTP клиент представлял себя в начале SMTP сессии с помощью команды HELO или EHLO.
smtpd_helo_required               = yes
#Всегда отправлять EHLO вначале SMTP сессии
smtp_always_send_ehlo = yes
#Отключает SMTP команду VRFY. В результате чего, невозможно определить существование определенного
#ящика. Данная техника (применение команды VRFY) используется спамерами для сбора имен почтовых ящиков.
disable_vrfy_command = yes
#Сообщать ли клиентам о возможности использования TLS (шифрования соединения)
smtpd_use_tls                     = yes
#Расположение файла сертификата сервера
smtpd_tls_cert_file = /etc/ssl/certs/mail.вашдомен.ru.crt
#Расположение файла открытого ключа
smtpd_tls_key_file = /etc/ssl/private/mail.вашдомен.ru.key
#Карта транспорта
transport_maps                    = proxy:mysql:$additional_config_dir/mysql-virtual_transports.cf
#Список таблиц, которым разрешено работать через proxymap (кэширует запросы и снижает нагрузку на БД)
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

Параметр proxy_read_maps описывается в одну строку. Переносы добавлены для лучшего отображения в MediaWiki.

Ограничения

#Создаем классы:
smtpd_restriction_classes         = verify_sender, rbl_cbl_abuseat_org, rbl_sbl_spamhaus_org, rbl_dul_ru, rbl_spamcop, white_client_ip, black_client_ip, block_dsl, helo_access, white_client, mx_access
#Описание классов: 
verify_sender                     = reject_unverified_sender, permit 
rbl_cbl_abuseat_org               = reject_rbl_client cbl.abuseat.org
rbl_dul_ru                        = reject_rbl_client dul.ru
rbl_sbl_spamhaus_org              = reject_rbl_client sbl.spamhaus.org
rbl_spamcop                       = reject_rbl_client bl.spamcop.net
#IP адреса, которые нужно пропускать не смотря ни на что
white_client_ip                   = check_client_access hash:$additional_config_dir/white_client_ip
#IP адреса, которые нужно блокировать не смотря ни на что
black_client_ip                   = check_client_access hash:$additional_config_dir/black_client_ip
#Правила для блокировки dsl/модемных пулов, с которых подключаются клиенты.
block_dsl                         = regexp:$additional_config_dir/block_dsl
#Соблюдение документа RFC 2821
helo_access                       = check_helo_access pcre:$additional_config_dir/helo_checks
white_client                      = check_sender_access pcre:$additional_config_dir/access_vip_sender
mx_access                         = check_sender_mx_access cidr:$additional_config_dir/mx_access 
#Далее restrictions:

#Проверки клиентского компьютера (или другого почтового сервера),
#который соединяется с сервером postfix для отправки письма
smtpd_client_restrictions         = 
                                    black_client_ip,
                                    #Принимать письма от клиентов локальной сети
                                    permit_mynetworks,
                                    #Пропускать письма от авторизованный пользователей
                                    permit_sasl_authenticated,
                                    #Если клиент не из mynetworks оценивает reject_unauth_destination. Отклоняется попытки пересылки, если получатель
                                    #сообщения не относится к доменам места назначения и доменам пересылки, указанным в ваших настройках
                                    reject_unauth_destination,
                                    white_client_ip,
                                    #Отвергает запрос, когда клиент отправляет команды SMTP раньше времени, еще не зная о том,
                                    #действительно ли Postfix поддерживает конвейерную обработку команд ESMTP
                                    reject_unauth_pipelining,
                                    helo_access,
                                    block_dsl,
                                    #блокируем клиентов с адресами from, домены которых не имеют A/MX записей
                                    reject_unknown_address,
                                    #блокирует почту от несуществующих доменов
                                    reject_unknown_recipient_domain,
                                    #Проверяем домен на записи типа A и MX в DNS — если нет, то отклоняем
                                    reject_unknown_sender_domain,
                                    rbl_dul_ru,
                                    rbl_sbl_spamhaus_org,
                                    rbl_spamcop,
                                    rbl_cbl_abuseat_org
#Проверки исходящей или пересылаемой через нас почты
smtpd_sender_restrictions         =
                                    white_client,
                                    white_client_ip,
                                    black_client_ip,
                                    #если пользователь авторизуется как user1@domain.com и попытается передать письмо в
                                    #котором в качестве обратного адреса указан user2@domain.com, то в ответ получит ошибку
                                    reject_authenticated_sender_login_mismatch,
                                    #Отклоняет сообщения в не существующие домены
                                    reject_unknown_recipient_domain,
                                    #Проверяем домен на записи типа A и MX в DNS — если нет, то отклоняем
                                    reject_unknown_sender_domain,
                                    #Если имя получателя не соответствует FQDN то отклоняем
                                    reject_non_fqdn_recipient,
                                    #Если имя отправителя не соответствует FQDN - отклоняем
                                    reject_non_fqdn_sender,
                                    permit_sasl_authenticated,
                                    permit_mynetworks,
                                    #Содержит список приватных сетей, которые по всем канонам глобальной сети интернет
                                    #не могут быть использованы в качестве IP для MX записей
                                    mx_access,
                                    #Отклонение писем с несуществующим адресом отправителя
                                    reject_unlisted_sender,
                                    #Если клиент не из mynetworks оценивает reject_unauth_destination. Отклоняется попытки пересылки, если получатель
                                    reject_unauth_destination

#Правила приема почты нашим сервером:
smtpd_recipient_restrictions      =
                                    white_client,
                                    #блокирует почту от несуществующих доменов
                                    reject_unknown_recipient_domain,
                                    #Проверяем домен на записи типа A и MX в DNS — если нет, то отклоняем
                                    reject_unknown_sender_domain,
                                    #Если имя получателя не соответствует FQDN — отклоняем
                                    reject_non_fqdn_recipient,
                                    #Если имя отправителя не соответствует FQDN - отклоняем
                                    reject_non_fqdn_sender,
                                    #Отвергает запрос, когда клиент отправляет команды SMTP раньше времени, еще не зная о том,
                                    #действительно ли Postfix поддерживает конвейерную обработку команд ESMTP
                                    reject_unauth_pipelining,
                                    #Пропускать письма от авторизованный пользователей
                                    permit_sasl_authenticated,
                                    #Принимать письма от клиентов локальной сети
                                    permit_mynetworks,
                                    helo_access,
                                    #Отклонить, если адреса RCPT TO нет в допустимых получателей
                                    reject_unlisted_recipient,
                                    #блокируем клиентов с адресами from, домены которых не имеют A/MX записей
                                    reject_unknown_address,
                                    #Если клиент не из mynetworks оценивает reject_unauth_destination. Отклоняется попытки пересылки, если получатель
                                    #сообщения не относится к доменам места назначения и доменам пересылки, указанным в ваших настройках
                                    reject_unauth_destination,
                                    #Для отказа в приеме сообщениям с пустым именем отправителя конверта, предназначенным нескольким получателям
                                    reject_multi_recipient_bounce
                                    
smtpd_data_restrictions           =
                                    reject_unauth_pipelining,
                                    reject_multi_recipient_bounce,
                                    permit
#Пропустить серверы, которые приветствуют нас кодом состояния 5xx
smtp_skip_5xx_greeting            = no

#Отклонение писем с несуществующим адресом отправителя
smtpd_reject_unlisted_sender      = yes

#Отклонение писем с несуществующим адресом получателя
smtpd_reject_unlisted_recipient   = yes

Создадим файлы с правилами, используемые в конфиге:

touch /etc/postfix/config/white_client_ip
touch /etc/postfix/config/black_client_ip
touch /etc/postfix/config/white_client
touch /etc/postfix/config/access_vip_sender
mcedit /etc/postfix/config/helo_checks

С таким содержимым:

/^\[?10\.\d{1,3}\.\d{1,3}\.\d{1,3}\]?$/ REJECT Address in RFC 1918 private network
/^\[?192\.\d{1,3}\.\d{1,3}\.\d{1,3}\]?$/ REJECT Address in RFC 1918 private network
/^\[?172\.\d{1,3}\.\d{1,3}\.\d{1,3}\]?$/ REJECT Address in RFC 1918 private network
/\d{2,}[-\.]+\d{2,}/ REJECT Invalid hostname (D-D)
/^(((newm|em|gm|m)ail|yandex|rambler|hotbox|chat|rbc|subscribe|spbnit)\.ru)$/ REJECT Faked hostname ($1)
/^(((hotmail|mcim|newm|em)ail|post|hotbox|msn|microsoft|aol|news|compuserve|yahoo|google|earthlink|netscape)\.(com|net))$/ REJECT Faked hostname ($1)
/[^[] *[0-9]+((\.|-|_)[0-9]+){3}/ REJECT Invalid hostname (ipable)
/(modem|dia(l|lup)|cp[ce]|dsl|p[cp]p|cable|catv|poo(l|les)|pppoe|dhcp|client|customer|user|host|[0-9]{4,})(-|_|\.|[0-9])/ REJECT Invalid hostname (client)
mcedit /etc/postfix/config/mx_access

С таким содержимым:

127.0.0.1 DUNNO 
127.0.0.2 550 Domains not registered properly. Can't assign requested address 
0.0.0.0/8 REJECT Domain MX in broadcast network 
10.0.0.0/8 REJECT Domain MX in RFC 1918 private network 
127.0.0.0/8 REJECT Domain MX in loopback network 
169.254.0.0/16 REJECT Domain MX in link local network 
172.16.0.0/12 REJECT Domain MX in RFC 1918 private network 
192.0.2.0/24 REJECT Domain MX in TEST-NET network 
192.168.0.0/16 REJECT Domain MX in RFC 1918 private network 
224.0.0.0/4 REJECT Domain MX in class D multicast network 
240.0.0.0/5 REJECT Domain MX in class E reserved network 
248.0.0.0/5 REJECT Domain MX in reserved network
mcedit /etc/postfix/config/block_dsl

С таким содержимым:

/^dsl.*\..*/i                   553 AUTO_DSL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/.*\.dsl\..*/i                  553 AUTO_DSL2 We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/[a|x]dsl.*\..*\..*/i           553 AUTO_[A|X]DSL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/client.*\..*\..*/i             553 AUTO_CLIENT We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/cable.*\..*\..*/i              553 AUTO_CABLE We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/pool\..*/i                     553 AUTO_POOL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/.*dial(\.|-).*\..*\..*/i       553 AUTO_DIAL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/ppp.*\..*/i                    553 AUTO_PPP We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/dslam.*\..*\..*/i              553 AUTO_DSLAM We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/dslb.*\..*\..*/i               553 AUTO_DSLB We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/node.*\..*\..*/i               553 AUTO_NODE We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/.*\.dynamicIP\..*/i            553 AUTO_DYNAMIC We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/[ax]dsl.*\..*\..*/i            REJECT Your message looks like SPAM 01
/\.dsl.*\..*\..*/i              REJECT Your message looks like SPAM 02
/cable.*\..*\..*/i              REJECT Your message looks like SPAM 03
/client.*\..*\..*/i             REJECT Your message looks like SPAM 04
/dhcp.*\..*\..*/i               REJECT Your message looks like SPAM 05
/dial.*\..*\..*/i               REJECT Your message looks like SPAM 06
/dialup.*\..*\..*/i             REJECT Your message looks like SPAM 07
/dslam.*\..*\..*/i              REJECT Your message looks like SPAM 08
/node.*\..*\..*/i               REJECT Your message looks like SPAM 09
/pool.*\..*\..*/i               REJECT Your message looks like SPAM 10
/ppp.*\..*\..*/i                REJECT Your message looks like SPAM 11
/user.*\..*\..*/i               REJECT Your message looks like SPAM 12
/[0-9]+-[0-9]+/                 REJECT Invalid hostname (D-D) (dsl)
/(modem|dia(l|lup)|cp[ce]|dsl|p[cp]p|cable|catv|poo(l|les)|pppoe|dhcp|client|customer|user|host|[0-9]{4,})(-|_|\.|[0-9])/ REJECT Invalid hostname (client)
mcedit /etc/postfix/config/white_client_ip

С таким содержимым:

dwhite.ltd OK
10.11.12.13 OK

Где dwhite.ltd 10.11.12.13 имя домена и ip адреса сервер, которые заблокированы в каком либо блэк листе (например rbl)

Выставим права доступа:

chown root:postfix /etc/postfix/config/ -R
chmod 650 /etc/postfix/config/ -R

После каждого изменения конфигурационных файлов имеющих тип hash, необходимо выполнить:

postmap /etc/postfix/config/имя_конфигурационного_файла

В нашем случае таким файлом например является white_client_ip. Тип файла указывается в main.cf. Например: white_client_ip = check_client_access hash:$additional_config_dir/white_client_ip

Создание сертификата

Создадим приватный ключ:

openssl genrsa -des3 -out mail.вашдомен.ru.key 2048

На запрос два раза вводим пароль (и обязательно запомним)!

Теперь создадим подписанный сертификат:

openssl req -new -key mail.вашдомен.ru.key -out mail.вашдомен.ru.csr

На запрос вводим:

Country Name: RU                                            Страна, в виде двухсимвольного ISO-кода.
State or Province Name (full name) [Some-State]: Altai      Область, в которой официально зарегистрирована организация (на английском языке)
Locality Name (eg, city) []: Pavlovsk                       Город, где официально зарегистрирована организация (на английском языке)
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Точное наименование организации в соответствии с Уставом организации на английском языке
                                            GlavRazvedUprav (Не используйте сокращенное наименование организации)
Organizational Unit Name (eg, section) []: IT               Наименование отдела, подразделения (на английском языке)
Common Name (eg, YOUR name) []: mail.вашдомен.ru            Полное доменное имя для вашего веб-сервера.
Email Address []: postmaster.вашдомен.ru                    postmaster@вашдомен.ru
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Просмотреть данные сертификата можем с помощью команды:

openssl req -noout -text -in mail.вашдомен.ru.csr

Удалим пароль из ключа:

cp mail.вашдомен.ru.key mail.вашдомен.ru.key_orig
openssl rsa -in mail.вашдомен.ru.key_orig -out mail.вашдомен.ru.key
Enter pass phrase for debianworld.ru.key_orig: (Вводим пароль указанный при создании mail.вашдомен.ru.key)
writing RSA key

Генерируем SSL сертификат:

openssl x509 -req -days 3650 -in mail.вашдомен.ru.csr -signkey mail.вашдомен.ru.key -out mail.вашдомен.ru.crt
Signature ok
subject=/C=RU/ST=Russia/O=mail.вашдомен.ru/CN=mail.вашдомен.ru/emailAddress=ssl@вашдомен.ru
Getting Private key

Переместим сертификат и ключ в положенное место:

mv mail.вашдомен.ru.crt /etc/ssl/certs/
mv mail.вашдомен.ru.key /etc/ssl/private/

И заметем следы :) :

rm mail.вашдомен.ru.csr mail.вашдомен.ru.key_orig

Укажем web серверу использовать новый сертификат:

mcedit /etc/apache2/sites-available/default-ssl
SSLCertificateFile    /etc/ssl/certs/mail.вашдомен.ru.crt
SSLCertificateKeyFile /etc/ssl/private/mail.вашдомен.ru.key

Конфигурирование Saslauthd

Создаем каталог:

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

Редактируем файл конфигурации:

mcedit /etc/default/saslauthd
#Включаем автозапуск
START=yes
#Изменим значение PARAMS
OPTIONS="-m /var/spool/postfix/var/run/saslauthd -r"
#Добавим новый параметр PIDFILE
PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"

Создадим файл /etc/pam.d/smtp

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

Где mail_admin и mail_admin_password это имя и пароль созданного выше пользователя базы данных.

Далее создадим файл /etc/postfix/sasl/smtpd.conf:

mcedit /etc/postfix/sasl/smtpd.conf

Со следующим содержимым:

pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true
auxprop_plugin: 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'

На забываем про mail_admin и mail_admin_password.

После проделанных операций, для применения новых параметров, необходимо перезагрузить Postfix и Saslauth:

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

Конфигурирование Courier

Необходимо указать Courier-у, где у нас хранятся авторизационные данные пользователей. Для этого в конфигурационном файле /etc/courier/authdaemonrc изменим значение authmodulelist на "authmysql":

mcedit /etc/courier/authdaemonrc
authmodulelist="authmysql"

Редактируем файл /etc/courier/authmysqlrc

mcedit /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_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD "/mnt/vdb1/vmail"
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')

Не забыв подставить свои авторизационные данные к базе и путь к хранилищу почты.

Мне предпочтительнее, чтобы пользователи хранили свою почту на сервере (использовали IMAP). Основной причиной этого является отсутствие возможности потери почтовых сообщений из за выхода их строя жесткого диска на клиентской машине. Плюс к этому IMAP позволяет работать с почтой через web интерфейс. По этим причинам отключим протокол POP3. В файле /etc/courier/pop3d поправим:

...
POP3DSTART=NO
...

В файле /etc/courier/pop3d-ssl:

...
POP3DSSLSTART=NO
...

К тому же отключим не шифрованное соединение по протоколу IMAP. Файле /etc/courier/imapd:

...
IMAPDSTART=NO
...

Увеличим количество одновременных подключений для IMAP (максимальное количество запускаемых копий демона), и укажем сертификат:

mcedit /etc/courier/imapd-ssl
...
MAXDAEMONS=300
TLS_CERTFILE=/etc/courier/mail.вашдомен.ru.crt
...

Создадим для Courier сертификат в том формате, в котором он требует:

cp /etc/ssl/certs/mail.вашдомен.ru.crt /etc/courier/
cat /etc/ssl/private/mail.вашдомен.ru.key >> /etc/courier/mail.вашдомен.ru.crt

Перезагружаем все сервисы 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

Для проверки работоспособности Courier-а подключимся к порту IMAP-SSL (993 порт) с помощью телнета:

telnet localhost 993

Если в ответ вы увидели нечто, похожее на это:

Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.

значит Courier работает. Для выхода из telnet достаточно шесть раз нажать ENTER :)

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

В файле /etc/aliases мы определим администратора почты.

mcedit /etc/aliases
root:   postmaster
postmaster: postmaster@вашдомен.ru

Теперь почта адресованная пользователю root будет перенаправлена postmaster-у. А почта postmaster-а в свою очередь будет переправлена на postmaster@вашдомен.ru

Для применения изменений необходимо выполнить команду:

newaliases

И перезагрузить Postfix:

/etc/init.d/postfix restart

Установка 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

Для правильной работы Amavasd-new необходимо отредактировать три файла.

Включим ClamAV и SpamAssassin. Для этого разкоментируем строки с @bypass_virus_checks_maps и @bypass_spam_checks_maps:

mcedit /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
# Uncomment the two lines below to enable it back
#
@bypass_virus_checks_maps = (
  \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
#
# Default SPAM checking mode
# Uncomment the two lines below to enable it back
#
@bypass_spam_checks_maps = (
  \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
1;  # insure a defined return

Дальше необходимо взглянуть на настройки определения спама и действий выполняемых со спамом в файле /etc/amavis/conf.d/20-debian_defaults. Сам файл мы не редактируем, а все необходимые параметры добавляем в файл /etc/amavis/conf.d/50-user:

mcedit /etc/amavis/conf.d/50-user
use strict;
$pax='pax';
#Считываем таблицу обслуживаемых доменов. Письма адресованные пользователям этих доменов будут проверяться на спам
@lookup_sql_dsn = ( ['DBI:mysql:database=mail;host=127.0.0.1;port =3306', 'mail_admin', 'password']);
$sql_select_policy = 'SELECT domain FROM domains';
#Что дописываем в тему спам сообщения
$sa_spam_subject_tag                 = '***СПАМ***';
$sa_spam_modifies_subj = 1;
#Дописывать данные о проверке на спам в заголовок письма всегда
$sa_tag_level_deflt                  = undef;
#Пропускаем спам письма адресату.
$final_spam_destiny                  = D_PASS;
#Пропускаем письма содержащие вирус адресату.
$final_virus_destiny                 = D_PASS;
$final_banned_destiny  = D_PASS; 
#Добавляем в тему письма содержащего вирус
$subject_tag_maps_by_ccat{+CC_VIRUS} = [ '***ВИРУС*** ' ];
#Таким образом отключим оповещения о вирусах и спаме
$virus_admin                         = undef;
$spam_admin                          = undef;
1;

Теперь добавим пользователя clamav в группу amavis и перезагрузим amavis и clamav:

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

Теперь мы должны реконфигурировать Postfix так, чтобы он пропускал всю входящую почту через amavisd-new. Для этого добавим в конфигурационный файл main.cf строки:

content_filter             = amavis:[127.0.0.1]:10024
receive_override_options   = no_address_mappings

И в конец файла /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
       -o smtpd_bind_address=127.0.0.1

После чего рестартуем Postfix:

/etc/init.d/postfix restart

Для проверки работоспособности всего того, что мы настроили запустим следующую команду:

netstat -tap

Среди прочего мы должны увидеть строки подобные этим:

tcp        0      0 localhost.localdo:10024 *:*                     LISTEN     16043/amavisd
tcp        0      0 localhost.localdo:10025 *:*                     LISTEN     15794/master
tcp        0      0 *:smtp                  *:*                     LISTEN     15794/master

Первая строка говорит нам о том, что порт 10024 слушает amavisd, а порты 10025 и 25 (smtp) слушает postfix.

Установка и конфигурирование SpamAssassin

Редактируем файл конфигурации SpamAssassin:

mcedit /etc/spamassassin/local.cf

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

# Указываем какие подсети будут "доверенными", письма с которых не будут считаться спамом
trusted_networks                10.0.0.0/8
# Включаем bayes обучение системы
use_bayes                       1
use_bayes_rules                 1
# Указываем путь до базы bayes
bayes_path                      /var/lib/amavis/.spamassassin/bayes
# SA будет автоматически добавлять сообщения, распознанные как SPAM
#на 100% или на 100% как не SPAM сообщения, в bayes базу данных
bayes_auto_learn                1
# Не отключаем разные сетевые проверки
skip_rbl_checks                 0
# Указываем SA использовать Razor
use_razor2                      1
# Указываем SA не использовать DCC
use_dcc                         0
# Указываем SA не использовать Pyzor
use_pyzor                       0
#Следующие строчки указывают, на каких языках Вам обычно приходят письма. Если
#проверяемое письмо будет на другом языке, то его Spam-Level повысится.
ok_languages                    en ru
ok_locales                      en ru

Перезагрузим amavis для применения параметров:

/etc/init.d/amavis restart

Установка и конфигурирование Razor

Устанавливаем пакет:

apt-get install razor

Создаем конфигурацию по умолчанию:

razor-admin -create

(конфигурационные файлы будут созданы в ~/.razor) Регистрируемся на сервера razor:

razor-admin -register -user=user -pass=pass

Тестирование Postfix

Чтобы проверить работоспособность Postfix-а коннектимся на 25 порт телнетом:

telnet localhost 25

После установки соединения, передадим Postfix-у команду:

ehlo localhost

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

250-server1.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Обратите внимание на эти строки:

250-STARTTLS
250-AUTH PLAIN LOGIN

Если они есть то все отлично.

Чтобы выйти наберите quit.

Наполнение базы и тестирование

Будем добавлять данные в базу. Для этого как и прежде воспользуемся phpmyadmin.

В таблицу domains добавим запись:

domains
вашдомен.ru

В таблицу users добавим пользователей:

mail password
secretar@вашдомен.ru secr
director@вашдомен.ru direct

Для поля password, в phpmyadmin указываем функцию encript. Это позволить хранить хэши паролей, а ни сами пароли в открытом виде.

В таблицу forwards добавим один алиас:

source distanation description
director@вашдомен.ru secretar@вашдомен.ru Почту директора пересылаем секретарю

Данная запись укажет Postfix-у на то, что письма пришедшие на director@вашдомен.ru нужно переслать на адрес secretar@вашдомен.ru. В данном примере директор не получит ни единого письма, так как вся его почта будет пересылаться секретарю. Если же мы хотим, чтобы директор получал свою почту, а секретарь получал копию писем пришедших на директорский адрес, вместо указанной выше записи, следует использовать такую:

source distanation description
director@вашдомен.ru director@вашдомен.ru

secretar@вашдомен.ru

Шлем секретарю копии директорских писем

В таблицу transport добавим:

domain transport
вашдомен.ru :

Эта запись укажет Postfix-у на то, что почтовые адреса с доменом "вашдомен.ru" он будет обрабатывать сам, а не пересылать куда либо. Изменения в данную таблицу нам понадобится вносить в том случае, если мы захотим чтобы наш сервер обслуживал более одного домена.

Перегрузим Postfix для применения новых параметров:

/etc/init.d/postfix reload

Отправка первого сообщения для создания структуры каталогов maildir

После того как вы создали нового пользователя в базе данных, необходимо отправить письмо на адрес этого пользователя, чтобы в хранилище почты создалась необходимая структура каталогов для этого пользователя. В противном случае, при попытке соединиться с IMAP сервером вы получите ошибку.

Установим пакет mailutils

apt-get install mailutils

Для отправки сообщения добавленному пользователю secretar@вашдомен.ru выполним команду:

mailx secretar@вашдомен.ru

Жмем enter, вводим тему письма, жмем enter, пишем текст письма, жмем enter, CTRL-D и еще раз enter.

#mailx secretar@вашдомен.ru
Cc: <-- ENTER
Subject: Welcome <-- ENTER
Welcome! Have fun with your new mail account. <-- ENTER
<-- CTRL+D
#

Логирование

mcedit /etc/logrotate.d/rsyslog

Удаляем строки:

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log

Создаем:

mcedit /etc/logrotate.d/mail

Такого содержания:

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
{
 rotate 24
 weekly
 missingok
 notifempty
 compress
 delaycompress
 sharedscripts
 postrotate
 invoke-rc.d rsyslog reload > /dev/null
 endscript
}

Ротироваться лог файлы почты будут каждый день, хранится в течении 24 месяцев. Вы можете выбрать и другие значения, но знайте, что при достаточно высокой нагрузке, лог файлы будут очень быстро расти и за месяц по объему могут перевалить за сотни мегабайт.

Теперь отключим запись логов в /etc/var/log/syslog:

mcedit /etc/rsyslog.conf

Добавляем запись "mail.none" в строку "*.*;auth,authpriv.none -/var/log/syslog"

*.*;mail.none,auth,authpriv.none            -/var/log/syslog

Установка RoundCube

Установка

apt-get install roundcube roundcube-mysql

На вопрос "Прежде чем использовать пакет roundcube, нужно установить и настроить его базу данных" отвечаем утвердительно.

Использовать будем базу данных mysql.

Вводим пароль root для mysql.

Два раза вводим пароль для создаваемого автоматически пользователя roundcube.

Настроим работу RoundCube через https.

mv /etc/apache2/conf.d/roundcube /etc/apache2/sites-available/
a2ensite roundcube
a2enmod ssl

Файл /etc/apache2/sites-available/roundcube приведем к следующему виду

mcedit /etc/apache2/sites-available/roundcube
<VirtualHost _default_:443>
ServerName mail.вашдомен.ru
DocumentRoot /var/www
Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/
Alias /roundcube /var/lib/roundcube
<Directory "/usr/share/tinymce/www/">
      Options Indexes MultiViews FollowSymLinks
     AllowOverride None
     Order allow,deny
     allow from all
</Directory>
<Directory /var/lib/roundcube/>
 Options +FollowSymLinks
 AllowOverride All
 order allow,deny
 allow from all
</Directory>
<Directory /var/lib/roundcube/config>
       Options -FollowSymLinks
       AllowOverride None
</Directory>
<Directory /var/lib/roundcube/temp>
       Options -FollowSymLinks
       AllowOverride None
	Order allow,deny
	Deny from all
</Directory>
<Directory /var/lib/roundcube/logs>
       Options -FollowSymLinks
       AllowOverride None
	Order allow,deny
	Deny from all
</Directory>
SSLEngine on
SSLCertificateFile    /etc/ssl/certs/mail.вашдомен.ru.crt
SSLCertificateKeyFile /etc/ssl/private/mail.вашдомен.ru.key
Alias /awstatsicons /usr/share/awstats/icon
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
   AllowOverride None
   Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
   Order allow,deny
   Allow from all
</Directory>
</VirtualHost>

Настроим перенаправление с адреса http://mail.вашдомен.ru:

mcedit /etc/apache2/sites-enabled/000-default

И добавим в начало файла следующие строки:

<VirtualHost *:80>
 ServerAdmin administrator@вашдомен.ru
 ServerName mail.вашдомен.ru
 DocumentRoot /var/www
 RewriteEngine   on
 RewriteRule     ^(.*)$ https://mail.вашдомен.ru/roundcube
 RewriteLog      "/var/log/apache2/rewrite.log"
 RewriteLogLevel 2
</VirtualHost>

Включим модуль rewrite:

a2enmod rewrite

Конфигурирование

В файле /etc/roundcube/main.inc.php содержится значительное количество параметров. Поправим некоторые из них:

//Принудительное использование https. Не гоже чтобы пароли к почте гуляли в открытом виде:
$rcmail_config['force_https'] = TRUE;
//IMAP сервер. Тут шифрацию включать не будем, потому как и IMAP сервер и RoundCube находятся на одной машине:
$rcmail_config['default_host'] = 'ssl://mail.вашдомен.ru';
//Почтовый домен. Пропишем его, если не собираемся использовать несколько виртуальных доменов. Это упростит ввод авторизационных данных при регистрации:
$rcmail_config['username_domain'] = 'вашдомен.ru';
$rcmail_config['mail_domain'] = 'mail.вашдомен.ru';
//Наш smtp сервер:
$rcmail_config['smtp_server'] = 'localhost';
//Преверять все папки на предмет новых сообщений
$rcmail_config['check_all_folders'] = FALSE;
//Не отображать удаленные письма
$rcmail_config['skip_deleted'] = TRUE;
//При первом логине пользователя создаются стандартные почтовые папки (Входящие, Исходящие, Корзина и тд.) 
$rcmail_config['create_default_folders'] = TRUE;

И еще поправим некоторые параметры в файле /usr/share/roundcube/.htaccess:

#Объем вложений:
php_value       upload_max_filesize     10M
#В конфиге по умолчанию, этот параметр указан на 20% больше чем выше. Мы поступим так же:
php_value       post_max_size           12M
#Выделяемый объем оперативной памяти. Немного увеличим:
php_value       memory_limit            128M

Рестартуем apache:

/etc/init.d/apache2 restart

Теперь web интерфейс к нашей почте доступ по адресу:

http://mail.вашдомен.ru

Статистика

Установка AwStats

apt-get install awstats

Конфигурируем awstats:

mcedit /etc/awstats/awstats.postfix.conf
LogFile                         = "perl /usr/share/doc/awstats/examples/maillogconvert.pl standard < /var/log/mail.log |"
LogType                         = M
LogFormat                       = "%time2 %email %email_r %host %host_r %method %url %code %bytesd"
SiteDomain                      = "mail.вашдомен.ru"
HostAliases                     = "127.0.0.1 localhost REGEX[mail.вашдомен\.ru$]"
DirData                         = "/mnt/vdb1/awstats"
DirCgi                          = "/awstats"
DirIcons                        = "/awstatsicons"
AllowFullYearView               = 3
AllowToUpdateStatsFromBrowser   = 0

LevelForBrowsersDetection       = 0
LevelForOSDetection             = 0
LevelForRefererAnalyze          = 0
LevelForRobotsDetection         = 0
LevelForWormsDetection          = 0
LevelForSearchEnginesDetection  = 0
LevelForFileTypesDetection      = 0

UseFramesWhenCGI                = 1
ShowSummary                     = HB
ShowMonthStats                  = HB
ShowDaysOfMonthStats            = HB
ShowDaysOfWeekStats             = HB
ShowHoursStats                  = HB
ShowDomainsStats                = 1
ShowHostsStats                  = HBL
ShowAuthenticatedUsers          = 0
ShowRobotsStats                 = 0
ShowEMailSenders                = HBML
ShowEMailReceivers              = HBML
ShowSessionsStats               = 0
ShowPagesStats                  = 0
ShowFileTypesStats              = 0
ShowFileSizesStats              = 0
ShowBrowsersStats               = 0
ShowOSStats                     = 0
ShowOriginStats                 = 0
ShowKeyphrasesStats             = 0
ShowKeywordsStats               = 0
ShowMiscStats                   = 0
ShowHTTPErrorsStats             = 0
ShowSMTPErrorsStats             = 1

LoadPlugin                      = "decodeutfkeys"

Настраиваем ежечасное автоматическое обновление данных:

echo "55  * * * * root     /usr/lib/cgi-bin/awstats.pl -config=postfix -update > /dev/null" >> /etc/cron.d/awstats

Отредактируем настройки виртуального хоста mail.вашдомен.ru:

mcedit /etc/apache2/sites-enabled/roundcube
Alias /awstatsicons /usr/share/awstats/icon
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

Для отображения иконок в awstats выполняем:

ln -s /usr/share/awstats/icon/ /var/www/awstatsicons

Создадим каталог, в котором Awstats будет хранить свои данные (этот же каталог указан в конфиге):

mkdir /mnt/vdb1/awstats
chown www-data:www-data /mnt/vdb1/awstats

Теперь по адресу:

https://mail.вашдомен.ru/cgi-bin/awstats.pl?config=postfix

мы можем видеть статистику.

Установка MailGraph

apt-get install mailgraph

Теперь по адресу:

http://mail.вашдомен.ru/cgi-bin/mailgraph.cgi

можно посмотреть графики работы почтового сервера.

Источники информации

Фильтрация спама регулярными выражениями (rus)

Virtual Users And Domains With Postfix, Courier And MySQL (eng)

Настройка SpamAssassin (rus)

Установка и настройка SpamAssassin (rus)

Фильтрация спама в postfix посредством регулярных вырежений (rus)

Настройка связки Postfix + amavisd-new + SpamAssassin (rus)

Amavisd (rus)

Razor (rus)

Распределенные методы обнаружения спама (часть 2) (rus)

Два средства против спама (rus)

Postfix - проверка отправителя (rus)

postfix:restrictions (rus)

Настройка почтового сервера (Postfix, Dovecot, DSpam, SQLGrey, DomainKeys, SPF) (rus)

Создание сертификатов для SSL

Защита пользователей почтового сервера от спамеров (rus)

HowTo. Почтовый сервер Postfix, Courier, MySQL и SquirrelMail (Ubuntu 8,04)

Обсуждение

Вопросы, предложения, правки оставляем тут