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

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

Содержание

Подготовка

Требования

  • Хранение почты на сервере
  • Фильтрация спама
  • Проверка вложений на вирусы
  • Возможность использовать дополнительные домены
  • Средние нагрузки (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
можно посмотреть графики работы почтового сервера.


Настройка почтового сервера: Postfix Dovecot MySQL SASL Clamav Spamassassin на Debian 7 Wheezy

Установим необходимые пакеты:
MySQL, Dovecot, Postfix, SASL, bsd-mailx (для тестирования)
# apt-get install mysql-client mysql-server postfix postfix-mysql postfix-doc dovecot-common dovecot-imapd libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl telnet bsd-mailx
В Debian 7 используется Dovecot v2.1.7, поэтому если есть конфиг более ранней версии — то его необходимо будет изменять, так как на новой версии он однозначно не заведется.
Для автоматического конвертирования конфига из ранней версии в позднюю есть утилита doveconf.
Используют ее следующим образом:
# doveconf -n -c /etc/dovecot/dovecot.conf > /etc/dovecot/dovecot-2.conf
После выполнения конвертирования стоит внимательно посмотреть что выплюнет консоль, ибо в ней 99% будет выведена информация для решения проблемы и помощи в поднятии до рабочего состояния нового конфига.
Настройка MySQL. Можно так же поставить phpmyadmin для облегченной работы с БД
Для начала необходимо создать БД для почтового сервера Postfix, для этого подключаемся к MySQL:
# mysql -u root -p
вводим пароль(он при вводе не отображается) и в случае удачного:
Теперь создаем БД:
CREATE DATABASE mail;
далее выбираем нашу базу:
USE mail;
Для дальнейшей настройки необходимо придумать логин и пароль который будет использоваться в почте для настройки файлов конфигурации (соответственно mail_admin_post и mail_adminPOST необходимо изменить на свое).
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin_post'@'localhost' IDENTIFIED BY 'mail_adminPOST';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin_post'@'localhost.localdomain' IDENTIFIED BY 'mail_adminPOST';
FLUSH PRIVILEGES;
Теперь необходимо создать таблицы в нашей БД.
Таблица для хранения виртуальных доменов (в ней будет храниться инфа о доменах которые будут обслуживаться):
CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY(domain));
Таблица в которой будет храниться информация о пересылке писем между почтовыми ящиками (перенаправление писем с одного почтового ящика на другой):
CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY(source));
Таблица для хранения почтовых аккаунтов:
CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY(email));
На этом работа пока с MySQL закончена.
Для проверки MySQL необходимо выполнить:
# cat /etc/mysql/my.cnf |grep bind
на что мы должны получить:
bind-address = 127.0.0.1
Далее необходимо настроить работу Postfix с MySQL, т.е дать ему понять откуда брать данные.
Создадим отдельно каталог mysql в /etc/postfix/ для хранения наших будущих файлов конфигурации:
# mkdir /etc/postfix/mysql
Далее создаем файлы конфигурации с указанным содержимым.
Файл конфигурации для виртуальных доменов /etc/postfix/mysql/virtual_domains.cf:
user = mail_admin_post
 password = mail_adminPOST
 dbname = mail
 query = SELECT domain AS virtual FROM domains WHERE domain = '%s'
 hosts = 127.0.0.1
Файл конфигурации для перенаправления почты с почтовых ящиков /etc/postfix/mysql/virtual_forwardings.cf:
user = mail_admin_post
 password = mail_adminPOST
 dbname = mail
 query = SELECT destination FROM forwardings WHERE source = '%s'
 hosts = 127.0.0.1
Файл конфигурации для почтовых аккаунтов /etc/postfix/mysql/virtual_mailboxes.cf:
user = mail_admin_post
 password = mail_adminPOST
 dbname = mail
 query = SELECT CONCAT( SUBSTRING_INDEX(email, '@', -1), '/' , SUBSTRING_INDEX(email, '@', 1), '/' ) FROM users WHERE email = '%s'
 hosts = 127.0.0.1
Файл конфигурации для отображения почты /etc/postfix/mysql/virtual_email2email.cf:
user = mail_admin_post
 password = mail_adminPOST
 dbname = mail
 query = SELECT email FROM users WHERE email = '%s'
 hosts = 127.0.0.1
Установим права и владельца для созданных файлов:
# chmod o= /etc/postfix/mysql/virtual_*.cf
# chgrp postfix /etc/postfix/mysql/virtual_*.cf
Добавим группу с пользователем для хранения/передачи почты:
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
Настройка Postfix.
Скопируем файл конфигурации для внештатных ситуаций:
# cp /etc/postfix/main.cf /etc/postfix/main.cf.back
и приступаем к его наполнению:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = /usr/share/doc/postfix
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = mail.sysadmin.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mail.sysadmin.com, localhost.sysadmin.com, , localhost
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html
# TLS parameters
smtpd_tls_cert_file = /etc/postfix/certificate/smtpd.pem
smtpd_tls_key_file = /etc/postfix/certificate/smtpd.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_loglevel = 0
#smtpd_tls_received_header = yes
# MySQL конфигурация
 virtual_alias_domains =
 virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/virtual_forwardings.cf, mysql:/etc/postfix/mysql/virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql/virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql/virtual_mailboxes.cf
 virtual_mailbox_base = /home/vmail
 virtual_uid_maps = static:5000
 virtual_gid_maps = static:5000
# SASL конфигурация
 smtpd_sasl_auth_enable = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_sasl_local_domain = $myhostname
 smtpd_sasl_security_options = noanonymous
 smtpd_sasl_type = dovecot
 smtpd_sasl_path = private/auth
 broken_sasl_auth_clients = yes
 smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks
 smtpd_recipient_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_destination,
 reject_unauth_pipelining,
 reject_invalid_hostname,
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
virtual_transport = dovecot
 
Далее приступаем к генерированию SSL сертификатов для Postfix:
# openssl req -new -outform PEM -out smtpd.pem -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509
вводим запрашиваемые данные и у нас появятся 2 файла.
Установим права доступа для созданного файла ключа:
# chmod o= /etc/postfix/certificate/smtpd.key
Настраиваем совместную работу Saslauthd c MySQL для Postfix.
Создадим каталог для Saslauthd:
# mkdir -p /var/spool/postfix/var/run/saslauthd
Создадим резервную копию файла конфигурации:
# cp -a /etc/default/saslauthd /etc/default/saslauthd.back
и можно приступить к редактированию конфига, который приводим к такому виду:
START=yes
 DESC="SASL Authentication Daemon"
 NAME="saslauthd"
 MECHANISMS="pam"
 MECH_OPTIONS=""
 THREADS=5
 OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
Далее создадим файл для smtp:
# touch /etc/pam.d/smtp
и внесем следующее содержимое:
auth required pam_mysql.so user=mail_admin_post passwd=mail_adminPOST host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
 account sufficient pam_mysql.so user=mail_admin_post passwd=mail_adminPOST host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
где необходимо заменить вместо mail_admin_post и mail_adminPOST свои значения использовавшиеся выше.
Создаем файл конфигурации smtpd.conf:
# touch /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_post
 sql_passwd: mail_adminPOST
 sql_database: mail
 sql_select: SELECT password FROM users WHERE email = '%u'
где также необходимо заменить вместо mail_admin_post и mail_adminPOST свои значения использовавшиеся выше.
Теперь необходимо установить права на созданные файлы:
# chmod o= /etc/pam.d/smtp
# chmod o= /etc/postfix/sasl/smtpd.conf
и добавить пользователя postfix в группу sasl:
# adduser postfix sasl
Теперь необходимо перезапустить сервисы postfix и saslauthd:
# service postfix restart
# service saslauthd restart
Ошибок не должно быть.
Настройка Dovecot.
Создаем резервную копию конфига:
# cp /etc/postfix/master.cf /etc/postfix/master.cf_back
и начинаем править master.cf добавляя в конце конфига:
dovecot   unix  -       n       n       -       -       pipe
   flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
Делаем резервную копию dovecot.conf:
# cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf_back
и заменяем все содержимое файла конфига на ниже приведенный код:
# Dovecote configuration file
 protocols = imap
 listen = *
 shutdown_clients = yes
 mail_uid = vmail
 mail_gid = vmail
 first_valid_uid = 5000
 last_valid_uid = 5000
 
 # Log files
 log_path = /var/log/dovecot.log
 log_timestamp = "%Y-%m-%d %H:%M:%S "
 
 # SSL
 ssl_cert = </etc/dovecot/certificate/dovecot.pem
 ssl_key = </etc/dovecot/certificate/dovecot.key
 
 # Расположениеиформатфайловпочты (%d - домен, %n - имяпользователя)
 mail_location = maildir:/home/vmail/%d/%n
 
 protocol lda {
   auth_socket_path = /var/run/dovecot/auth-master
   log_path = /home/vmail/dovecot-deliver.log
   mail_plugins = sieve
   postmaster_address = postmaster@sysadmin-komi.ru
 }
 
 namespace {
   inbox = yes
   location =
   prefix = INBOX.
   separator = .
 }
 
 passdb {
   args = /etc/dovecot/dovecot-sql.conf
   driver = sql
 }
 
 service auth {
   unix_listener /var/spool/postfix/private/auth {
     group = postfix
     mode = 0660
     user = postfix
   }
   unix_listener auth-master {
     mode = 0600
     user = vmail
   }
   user = root
 }
 
 userdb {
   args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
   driver = static
 }
где необходимо изменить адрес postmaster@sysadmin-komi.ru на свой.
Далее
# cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf
и заменяем содержимое на:
driver = mysql
 connect = host=127.0.0.1 dbname=mail user=mail_admin_post password=mail_adminPOST
 default_pass_scheme = CRYPT
 password_query = SELECT email AS user, password FROM users WHERE email = '%u'
где необходимо также поменять mail_admin_post и mail_adminPOST на свои.
Создадим каталог для сертификатов Dovecot:
# mkdir /etc/dovecot/certificate
Далее приступаем к генерированию SSL сертификатов для Dovecot:
# openssl req -new -outform PEM -out dovecot.pem -newkey rsa:2048 -nodes -keyout dovecot.key -keyform PEM -days 365 -x509
вводим запрашиваемые данные и у нас появятся 2 файла.
Установим права доступа для созданного файла ключа:
# chmod o= /etc/dovecot/certificate/dovecot.key
Перезапускаемсервис dovecot:
# service dovecot restart
Устанавливаем права и владельца на созданные файлы конфигурации:
# chgrp vmail /etc/dovecot/dovecot.conf
# chmod g+r /etc/dovecot/dovecot.conf
Настройка почтовых алиасов.
Для настройки почтовых алиасов необходимо отредактировать файл /etc/aliases. Нас интересует две строки:
postmaster: root
root: postmaster@sysadmin-komi.ru
где меняем адрес postmaster@sysadmin-komi.ru  на желаемый. Сохраняем изменения и применяем изменения:
# newaliases
Теперь перезагружаем сервисы Postfix, Saslauthd, Dovecot:
# service postfix restart
# service saslauthd restart
# service dovecot restart
Теперь можно проверить работу IMAP сервера и для этого воспользуемся telnet:
telnet localhost 25
на что нам должно выдать сообщение:
Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '^]'.
 220 sysadmin-komi.ru ESMTP Postfix (Debian/GNU)
далее необходимо убедиться в наличии 250-STARTTLS
ehlo localhost
на что выдаст что то наподобие:
250-sysadmin-komi.ru
 250-PIPELINING
 250-SIZE 10240000
 250-VRFY
 250-ETRN
 250-STARTTLS
 250-AUTH PLAIN
 250-AUTH=PLAIN
 250-ENHANCEDSTATUSCODES
 250-8BITMIME
 250 DSN
Для выхода необходимо ввести команду quit.
Если нашли указанную строку — все в порядке и можно идти дальше.
Теперь можно приступить к заполнению БД MySQL.
Предварительно сделаем резервную копию наше пустой БД:
Для начала необходимо внести домен. Так как домен будет использоваться только одни, вносим соответственно тоже один: входим в MySQL:
mysql -u root -p
выбираем нашу БД:
USE mail;
вносим наш домен:
INSERT INTO domains (domain) VALUES ('sysadmin-komi.ru');
Теперь создадим нашего первого пользователя:
INSERT INTO users (email, password) VALUES ('test@sysadmin-komi.ru', ENCRYPT('password'));
Теперь необходимо проверить работу отправки сообщения на созданный аккаунт, для этого воспользуемся программой mailx из пакета bsd-mailx:
mailxtest@sysadmin-komi.ru
где изменяем аккаунт на свой.
вводим тему сообщения, нажимаем Enter и вводим текст сообщения после чего нажимаем комбинацию Ctrl+D. Поле «СС» оставляем пустым.
Теперь смотрим файл логов на предмет ошибок и прочего:
Jan 19 01:29:21 user postfix/pickup[7933]: 444AF3F130: uid=1000 from=<userpc>
 Jan 19 01:29:21 user postfix/cleanup[7944]: 444AF3F130: message-id=&lt;20140118232921.444AF3F130@sysadmin-komi.ru>;
 Jan 19 01:29:21 user postfix/qmgr[7113]: 444AF3F130: from=<>, size=292, nrcpt=1 (queue active)
 an 19 01:29:21 user postfix/pipe[7949]: 444AF3F130: to=<test@sysadmin-komi.ru>;, relay=dovecot, delay=0.32, delays=0.12/0.01/0/0.19, dsn=2.0.0, status=sent (delivered via dovecot service)
 Jan 19 01:29:21 user postfix/qmgr[7113]: 444AF3F130: removed
заодносмотримфайллогов Dovecot в /home/vmail/dovecot-deliver.log:
2014-01-19 01:29:21 lda(test@sysadmin-komi.ru): Info: msgid=&lt;20140118232921.444AF3F130@sysadmin-komi.ru>;: saved mail to INBOX
Ошибок нет. Письмо тестовое успешно отправлено и доставлено.
Настройка переадресации почты.
Для переадресации почты мы изначально создавали конфиг virtual_forwardings.cf с таблицей в MySQL, теперь только осталось заполнить БД данными для требуемых пользователей.
Настроим переадресацию почты с пользователя root на нашего созданного пользователя test@sysadmin-komi.ru(не забываем менять данные на свои):
mysql -u root -p
USE mail;
INSERT INTO forwardings (source, destination) VALUES ('root@sysadmin-komi.ru', 'test@sysadmin-komi.ru');
quit
Теперь можно протестировать перенаправление почты с одного пользователя на другого.
На этом настройка MTA закончена. Можно прикрутить SpamAssassin, ClamAV, Roundcube но это уже дело вкуса и по надобности.
Ставим SpamAssassin, ClamAV
apt-get install amavisd-new spamassassin clamav-daemon pyzor razor arj cabextract cpio nomarch pax rar unrar unzip zip
Clamav
adduser clamav amavis
adduser amavis clamav
gpasswd -a amavis clamav

Spamassassin

Spamassassin автоматически определяет общие компоненты и использует их, если они присутствуют. Это означает, что нет необходимости настраивать pyzor и razor.
Отредактируйте /etc/default/spamassassin для активации сервиса Spamassassin. Измените
ENABLED=0
на
ENABLED=1
Теперь запустим сервис:
service spamassassin start

Amavisd-new

Сначала активируем проверку на спам и вирусы в Amavisd-new, отредактировав /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
#
@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
#
@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 установку $final_spam_destiny на D_DISCARD вместо D_BOUNCE, как показано ниже:
$final_spam_destiny       = D_DISCARD;
Дополнительно вы можете захотеть установить следующие опциональные флаги для отметки большего количества сообщений как спам:
$sa_tag_level_deflt = -999; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.0; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 21.0; # triggers spam evasive actions
$sa_dsn_cutoff_level = 4; # spam level beyond which a DSN is not sent
Если сетевое имя сервера отличается от MX записи домена, вам может потребоваться установить вручную опцию $myhostname. Также, если сервер принимает почту для нескольких доменов, опцию @local_domains_acl потребуется изменить. Отредактируйте файл /etc/amavis/conf.d/50-user:
$myhostname = 'mail.sysadmin-komi.ru';
@local_domains_acl = ( "sysadmin-komi.ru", "example.org" );
Если вы хотите покрывать несколько доменов, вы можете использовать следующее в файле /etc/amavis/conf.d/50-user:
@local_domains_acl = qw(.);
После настройки Amavisd-new требуется перезапустить:
service amavis restart

Postfix

Для интеграции Postfix, введите следующее из терминала:
postconf -e 'content_filter = smtp-amavis:[127.0.0.1]:10024'
Далее отредактируйте /etc/postfix/master.cf, добавив следующее в коне файла:
smtp-amavis     unix    -       -       -       -       2       smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
        -o disable_dns_lookups=yes
        -o max_use=20
 
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_delay_reject=no
        -o smtpd_client_restrictions=permit_mynetworks,reject
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o smtpd_data_restrictions=reject_unauth_pipelining
        -o smtpd_end_of_data_restrictions=
        -o mynetworks=127.0.0.0/8
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
        -o smtpd_client_connection_count_limit=0
        -o smtpd_client_connection_rate_limit=0
        -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
Также добавьте следующие две строки непосредственно после транспортного сервиса "pickup":
        -o content_filter=
        -o receive_override_options=no_header_body_checks
Это предотвратит от попадания в спам сообщений, созданных в качестве отчетов о спаме.
Теперь перезапустите Postfix:
service postfix restart
Фильтрация содержимого с поиском спама и вирусов теперь включена.

Amavisd-new и Spamassassin

При интеграции Amavisd-new со Spamassassin, если вы решили заблокировать фильтр Байеса, отредактировав /etc/spamassassin/local.cf, и использовать cron для обновления ночных правил, то это может привести к ситуации, когда большой объем сообщений об ошибках будет посылаться пользователю amavis через задание cron amavisd-new.
Существует несколько вариантов разрешить эту ситуацию:
  1. Настройте ваш MDA на фильтрацию сообщений, которые вы не желаете видеть.
  2. Измените /usr/sbin/amavisd-new-cronjob на проверку, что use_bayes установлен в 0. Например, отредактируйте /usr/sbin/amavisd-new-cronjob, добавив следующее в начало до строк проверки:
egrep -q "^[ \t]*use_bayes[ \t]*0" /etc/spamassassin/local.cf && exit 0

Проверка

Для начала проверьте, что Amavisd-new SMTP активен:
telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
^]
В заголовке сообщений, которые будут проходить через фильтр содержимого вы должны увидеть следующее:
X-Spam-Level:
X-Virus-Scanned: Debian amavisd-new at sysadmin-komi.ru
X-Spam-Status: No, hits=-2.3 tagged_above=-1000.0 required=5.0 tests=AWL, BAYES_00
X-Spam-Level:

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

По просьбе трудящихся, допилим эту связку…
Установка PostfixAdmin
Качаем deb-пакет от производителя. На данный момент версия - 2.91-1.
root@mail:/# cd /usr/src/
root@mail:/usr/src# wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-2.91/postfixadmin_2.91-1_all.deb
Устанавливаем
root@mail:/usr/src# dpkg -i postfixadmin_2.91-1_all.deb
Debian ругнется на то, что нет определенных пакетов.  Выполним следующее
root@mail:/usr/src# apt-get -f install
Теперь ответим на вопросы:
1. Webserver, на котором будет работать PostfixAdmin — выбираем apache2
2. Настроить базу данных для PostfixAdmin с помощью dbconfig-common — выбираем Да
3. Тип базы, используемой в PostfixAdmin - mysql
4. Вводим пароль root  MySQL
5. Вводим пароль для подключения к базе postfixadmin - 123456789
6. Подтверждаем пароль
Редактируем файл конфига /etc/postfixadmin/config.inc.php — проверяем следующие строки
$CONF['database_type'] = 'mysql'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfixadmin'; $CONF['database_password'] = '123456789'; $CONF['database_name'] = 'postfixadmin'; $CONF['database_prefix'] = '';
Остальные опции правим под себя. В качестве примера привожу полный вариант своего config.inc.php
Придумываем пароль, вводим его и нажимаем «Generate password hash».Теперь копируем всю строку с хэшем пароля установки (начинается с $CONF['setup_password']) и заменяем нею соответствующую строку в файле config.inc.php, сохраняем изменения в файле. Теперь обновляем страницу в браузере.
Вводим пароль, вводим e-mail администратора и подтверждаем его пароль. После этого нажимаем «Добавить администратора». Должно появиться сообщение о том, что администратор успешно добавлен.

Комментарии

Популярные сообщения из этого блога

Права на папки и файлы (unix/chmod)

Автоматическое монтирование дисков и разделов в Linux или что такое fstab? Проблема Debian

Как подключить сетевой диск Windows в Linux