Настройка почтовой системы Postfix


Данная статья описывает установку и настройку почтовой системы на основе Postfix, Cyrus-SASL, MySQL, Courier-IMAP, postfixadmin, Greylist, Autoreplay(vacation) и вэб-интерфейса Roundcube.


Перед началом настройки данной связки рекомендую обновить дерево портов.

В нашем распоряжении имеется следующая система:

# uname -srm
FreeBSD 8.1-RELEASE amd64

C двумя сетевыми интерфейсами:

  • msk0 [192.168.10.1] — внутренний ip
  • sk0 [91.203.85.37] — внешний ip, выданный провайдером
  • Perl

Итак, начнем по порядку. Скорее всего, perl уже стоит у вас в системе, т.к. на него завязано слишком много пакетов.

# cd /usr/ports/lang/perl5.8/
# make install clean
# rehash
  • Openssl

Устанавливаем openssl. Он нам может понадобится для генерации сертификатов/ключей, а также для поддержки SSL/TLS.

# cd /usr/ports/security/openssl/
# make install clean
# rehash
  • Mysql

Устанавливаем и настраиваем MySQL. На unix системах, наверное, одна из самых распространенных СУБД. MySQL необходим для работы postfixadmin. В базе данных мы будем хранить информацию о пользователях и почтовых ящиках.

# cd /usr/ports/databases/mysql51-server/
# setenv BUILD_OPTIMIZED yes
# setenv WITH_OPENSSL yes
# setenv WITH_CHARSET utf8
# make install clean
# rehash

Производим первоначальную настройку MySQL сервера. Настраиваем запуск MySQL вместе с системой

echo 'mysql_enable="YES"' >> /etc/rc.conf

Далее стартуем и настраиваем Mysql под себя (установка пароля на root и т.д)
Все, с MySQL мы разобрались, идем дальше.

  • Cyrus-Sasl

Собираем и настраиваем Cyrus-SASL.
Данную библиотеку мы будем использовать для SMTP аутентификации, т.е. проверки логина и пароля по некоторому алгоритму,
например PLAIN, LOGIN, CRAM-MD5.

# cd /usr/ports/security/cyrus-sasl2/
# make config

# make install clean
  • Courier-authlib

Собираем и настраиваем courier-authlib.
Данную библиотеку courier-imap использует для аутентификации пользователей.

# cd /usr/ports/security/courier-authlib/
# make config

# make install clean

Делаем автоматический запуск authdaemond при старте системы

# echo 'courier_authdaemond_enable="YES"' >>  /etc/rc.conf

Настраиваем courier-authlib. Для этого редактируем два конфигурационных файла: /usr/local/etc/authlib/authdaemonrc
и /usr/local/etc/authlib/authmysqlrc

# cat /usr/local/etc/authlib/authdaemonrc | grep -v ^# | grep -v ^$

authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=5
authdaemonvar=/var/run/authdaemond
subsystem=mail
DEBUG_LOGIN=2
DEFAULTOPTIONS="wbnodsn=1"
LOGGEROPTS= ""
# cat /usr/local/etc/authlib/authmysqlrc | grep -v ^# | grep -v ^$

MYSQL_SERVER            localhost
MYSQL_USERNAME          postfix
MYSQL_PASSWORD          postfix
MYSQL_SOCKET            /tmp/mysql.sock
MYSQL_PORT              3306
MYSQL_OPT               0
MYSQL_DATABASE          postfix
MYSQL_CHARACTER_SET     utf8
MYSQL_USER_TABLE        mailbox
MYSQL_CLEAR_PWFIELD     password
DEFAULT_DOMAIN          domnails.ru
MYSQL_UID_FIELD         1983
MYSQL_GID_FIELD         1983
MYSQL_LOGIN_FIELD       username
MYSQL_HOME_FIELD        '/var/spool/mail'
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir
MYSQL_QUOTA_FIELD       quota
MYSQL_AUXOPTIONS_FIELD  active='1'

MYSQL_UID_FIELD и MYSQL_GID_FIELD

Обратите внимание на значения этих полей, здесь необходимо указывать uid и gid пользователя и группы virtual

(которую мы создадим позже) соответственно.

Запускаем authdaemond

# /usr/local/etc/rc.d/courier-authdaemond start
Starting courier_authdaemond.

Если вы все правильно настроили, то в log-файле должно быть следующее:

# cat /var/log/maillog | grep authdaemond

Feb  9 23:01:56 mail authdaemond: modules="authmysql", daemons=5
Feb  9 23:01:56 mail authdaemond: Installing libauthmysql
Feb  9 23:01:56 mail authdaemond: Installation complete: authmysql
  • Courier-imap

Устанавливаем и настраиваем courier-imap. Несмотря на название, courier-imap также поддерживает и pop3, хотя основной акцент делается на работу с imap.

# cd /usr/ports/mail/courier-imap/
# make config

# make install clean

В зависимости от того, что вы хотите использовать pop3 или imap, редактируем соответствующие файлы. Пока будем использовать pop3, поэтому редактируем следующий файл /usr/local/etc/courier-imap/pop3d

# cat /usr/local/etc/courier-imap/pop3d | grep -v ^# | grep -v ^$

PIDFILE=/var/run/pop3d.pid
MAXDAEMONS=40
MAXPERIP=4
POP3AUTH="PLAIN LOGIN CRAM-MD5"
POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5"
POP3AUTH_TLS="PLAIN LOGIN CRAM-MD5"
POP3AUTH_TLS_ORIG="PLAIN LOGIN CRAM-MD5"
POP3_PROXY=0
PORT=110
ADDRESS=192.168.10.1
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=courier-imap"
POP3DSTART=YES
MAILDIRPATH=Maildir

Примечание!!!:

Для того чтобы пользователи могли просматривать почту из мира, то в поле ADDRESS необходимо указать 0. В этом случае courier-imap будет слушать на всех активных интерфейсах.
Если вы хотите, чтобы пользователи могли просматривать почту только через веб интерфейс (imap), то в поле ADDRESS необходимо указать 127.0.0.1.
Если у вас в системе много интерфейсов, а вам нужно привязать pop/imap сервер только к некоторым, то это можно сделать так:
ADDRESS=0
PORT=192.168.10.1.110,127.0.0.1.110

Настраиваем автоматический запуск pop сервера при старте системы

# echo 'courier_imap_pop3d_enable="YES"' >> /etc/rc.conf

Запускаем pop сервер

# /usr/local/etc/rc.d/courier-imap-pop3d.sh start
Starting courier_imap_pop3d

Проверяем, запустился ли pop3 сервер

# sockstat | grep :110
root     couriertcp 6592  3  tcp4   192.168.10.1:110     *:*
  • Postfix

Ну а теперь собираем самое главное — Postfix

# cd /usr/ports/mail/postfix
# make config

# make install clean
# rehash

В конце установки на вопрос:

Would you like to activate Postfix in /etc/mail/mailer.conf [n]?
Отвечаем yes

Отключаем запуск sendmail при старте системы, иначе postfix и sendmail будут конфликтовать между собой. Для этого добавляем следующие строчки в rc.conf

# cat /etc/rc.conf | grep sendmail

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

Отключаем специфические для sendmail опции

# touch /etc/periodic.conf
# cat /etc/periodic.conf

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

Редактируем конфигурационный файл postfix, а именно main.cf

# /usr/local/etc/postfix/main.cf
# LOCAL PATHNAME INFORMATION
#
# Указываем месторасположения директории очереди postfix. Также данная
# директория является корнем, когда postfix запускается в chroot окружении.

queue_directory = /var/spool/postfix

# Задает месторасположение всех postXXX команд (postmap, postconf, postdrop)

command_directory = /usr/local/sbin

# Задаем корень конфигурационных файлов, для более "быстрой навигации".
# Например, теперь можно использовать $base/header_checks вместо
# /usr/local/etc/postfix/header_checks. Мелочь, а приятно.

base = /usr/local/etc/postfix

# Задает месторасположение всех программ демонов postfix. Это программы,
# перечисленные в файле master.cf. Владельцем этой директории должен быть root

daemon_directory = /usr/local/libexec/postfix

# QUEUE AND PROCESS OWNERSHIP
#
# Задает владельца очереди postfix, а также большинства демонов postfix.
# В целях безопасности, необходимо использовать выделенную учетную запись.
# Т.е. от данного пользователя не должны запускаться какие-либо процессы
# в системе, а также он не должен являться владельцем каких-либо файлов.

mail_owner = postfix

# Права по умолчанию, использующиеся local delivery agent. Не указывайте
# здесь привилегированного пользователя или владельца postfix.

default_privs = nobody

# INTERNET HOST AND DOMAIN NAMES
#
# Задает имя хоста в формате FQDN. По умолчанию, используется значение,
# возвращаемой функцией gethostname().

myhostname = mail.domnails.ru

# Задает имя нашего домена. По умолчанию используется значение $myhostname
# минус первый компонент.

mydomain = domnails.ru

# SENDING MAIL
#
# Данный параметр указывает имя домена, которое используется при отправлении
# почты с этой машины. По умолчанию, используется имя локальной машины -$myhostname.
#Для согласованности между адресами отправителя и получателя,
# myorigin также указывает доменное имя, которое добавляется к адресу
# получателя для которого не указана доменная часть.
# myorigin = $myhostname (отправлять письма от: "[email protected]")
# myorigin = $mydomain (отправлять письма от: "[email protected]")

myorigin = $mydomain

# RECEIVING MAIL
#
# Указывает адреса сетевых интерфейсов, на которых будет принимать почту
# наша почтовая система. По умолчанию используются все активные интерфейсы
# на машине. При изменении этого праметра необходимо перезапустить postfix

inet_interfaces = all

#
# Данный параметр указывает список доменов, для которых почта будет доставляться
# локально, а не пересылаться на другой хост. Не указывайте здесь виртуальные
# домены, для этого есть специальный параметр virtual_mailbox_domains

mydestination = $myhostname, localhost.$mydomain, localhost

# REJECTING MAIL FOR UNKNOWN LOCAL USERS
#
# Таблица просмотра со всеми именами и адресами локальных получателей.

local_recipient_maps = unix:passwd.byname $alias_maps

# TRUST AND RELAY CONTROL
#
# Данный параметр задает список "доверенных" клиентов, которые обладают
# некоторыми привилегиями. В частности доверенным SMTP клиентам дозволено
# пересылать почту через postfix. Если вы не доверяете никому, то оставьте
# только 127.0.0.0/8

mynetworks = 127.0.0.0/8

#

smtpd_delay_reject = yes

#
# ALIAS DATABASE
#
# Данный параметр указывает список алиасов, используемый local delivery agent
# После внесения изменений в данный файл необходимо выполнить команду newaliases
# или postalias /etc/mail/aliases

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

# SHOW SOFTWARE VERSION OR NOT
#
# Желательно сообщать как можно меньше информации о нашем почтовом сервере.
# Согласно требованиям SMTP протокола вы должны указать $myhostname вначале текста

smtpd_banner = $myhostname ESMTP

# DEBUGGING CONTROL
#
# Задает уровень информативности, когда имя или адрес SMTP клиента
# или сервера соответствует шаблону, заданному в параметре debug_peer_list.
# Следует использовать только во время отладки.

debug_peer_list = 127.0.0.1, domnails.ru
debug_peer_level = 2

# RESTRICTIONS
#
# client, helo, sender, recipient, data, end-of-data
#
# Дополнительные ограничения доступа  smtp сервера в контексте
# smtp запроса клиента

smtpd_client_restrictions =  permit_mynetworks,
                             permit_sasl_authenticated,
                             check_client_access hash:$base/client_access,
                             reject_unknown_address
                             reject_unknown_recipient_domain
                             reject_unknown_sender_domain
                             reject_unknown_client_hostname
                             reject_unauth_destination
                             reject_unauth_pipelining

# Дополнительные ограничения, применяемые сервером Postfix
# в контексте SMTP команды HELO

smtpd_helo_restrictions =       permit_mynetworks,
                                permit_sasl_authenticated,
                                check_helo_access hash:$base/hello_access,
                                reject_invalid_helo_hostname,
                                reject_non_fqdn_helo_hostname,
                                reject_unknown_helo_hostname

# Дополнительные ограничения, применяемые сервером Postfix
# в контексте команды MAIL FROM

smtpd_sender_restrictions =     permit_mynetworks,
                                check_sender_access hash:$base/sender_access,
                                reject_authenticated_sender_login_mismatch,
                                reject_unknown_sender_domain,
                                reject_unlisted_sender,
                                reject_unverified_sender

# Дополнительные ограничения, применяемые сервером Postfix
# в контексте команды RCPT TO

smtpd_recipient_restrictions =  permit_mynetworks,
                                permit_sasl_authenticated,
                                check_recipient_access hash:$base/recipient_access,
#                              check_policy_service inet:127.0.0.1:10023
                                reject_unauth_destination,
                                reject_unlisted_recipient,
                                reject_unknown_recipient_domain,
                                reject_non_fqdn_recipient,
                                reject_unverified_recipient

# Отклонять команду ETRN

smtpd_etrn_restrictions = reject

# Заставляем отклонять почту с неизвестным адресом отправителя.
# Позволяет бороться с червями и некоторыми вирусами.

smtpd_reject_unlisted_sender = yes

# Отключает SMTP команду VRFY. В результате чего, невозможно определить
# существование определенного ящика. Данная техника (применение команды
# VRFY) используется спамерами для сбора имен почтовых ящиков.

disable_vrfy_command = yes

# Требуем чтобы адреса, передаваемые в SMTP командах MAIL FROM и RCPT TO
# заключались в <>, а также не содержали стилей или фраз RFC 822.

strict_rfc821_envelopes = yes

# Скрываем отображение имени таблицы получателей в ответе "User unknown"
# yes: User unknown in virtual mailbox table
# no: User unknown

show_user_unknown_table_name = no

# Данный адрес будет использоваться при проверки существования адреса отправителя.

address_verify_sender = [email protected]

# Числовой код ответа SMTP сервера Postfix в случае, когда адрес
# получателя отвергнут ограничением reject_unverified_sender.

unverified_sender_reject_code = 550

# Требуем, чтобы удаленный SMTP клиент представлял себя
# в начале SMTP сессии с помощью команды HELO или EHLO.

smtpd_helo_required = yes

# Всегда отправлять EHLO вначале SMTP сессии

smtp_always_send_ehlo = yes

# Максимальное количество ошибок, которое может сделать удаленный SMTP клиент.
# При превышение данного числа Postfix разорвет соединение.

smtpd_hard_error_limit = 8

# Включаем поддержку sasl аутентификации

smtpd_sasl_auth_enable = yes

# Имя приложения, используемого для инициализации SASL сервера.
# Данный параметр задает имя конфигурационного файла. Имя smtpd
# будет соответсвовать конфигурационному файлу SASL - smtpd.conf.

smtpd_sasl_application_name = smtpd

# Включает функциональную совместимость с SMTP клиентами, которые
# используют устаревшую версию команды AUTH (RFC 2554),
# например, outlook express 4 и MicroSoft Exchange version 5.0.

broken_sasl_auth_clients = yes

# Отвергаем методы, позволяющие анонимную аутентификацию

smtpd_sasl_security_options = noanonymous

# Optional lookup table with the SASL login names
# that own sender (MAIL FROM) addresses

smtpd_sender_login_maps = mysql:$base/mysqlLookupMaps/sender.conf

# Указываем, где postfix должен брать информацию о алиасах

virtual_alias_maps = mysql:$base/mysqlLookupMaps/alias.conf

# Указываем, где postfix должен брать информацию о доменах

virtual_mailbox_domains = mysql:$base/mysqlLookupMaps/domain.conf

# Указываем, где postfix должен брать информацию о почтовых ящиках

virtual_mailbox_maps = mysql:$base/mysqlLookupMaps/mailbox.conf
virtual_mailbox_base = /var/spool/mail

# Настраиваем поддержку квот

virtual_mailbox_limit_maps = mysql:$base/mysqlLookupMaps/quota.conf
virtual_maildir_extended=yes
virtual_mailbox_limit_override=yes
virtual_create_maildirsize = yes
virtual_overquota_bounce = yes
virtual_maildir_limit_message = "Sorry, the user's maildir has overdrawn his diskspace quota"

#
# Ограничиваем максимальный размер письма до 5 Мб

message_size_limit = 5242880

# 1983 - uid и gid пользователя и группы virtual соответственно

virtual_gid_maps = static:1983
virtual_uid_maps = static:1983
virtual_minimum_uid = 1000

Указываем postfix, как производить аутентификацию пользователей. Для этого создаем файл smtpd.conf со следующим содержимым:

# cat /usr/local/lib/sasl2/smtpd.conf

pwcheck_method: auxprop
mech_list: PLAIN LOGIN CRAM-MD5
auxprop_plugin: sql
sql_usessl: yes
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfix
sql_passwd: postfix
sql_database: postfix
sql_select: select password from mailbox where username = '%u@%r'
log_level: 3

Инициализируем базу данных псевдонимов

# /usr/local/bin/newaliases

Создаем необходимые файлы

# cd /usr/local/etc/postfix
# touch hello_access sender_access
# touch recipient_access client_access
# postmap hello_access
# postmap sender_access
# postmap recipient_access
# postmap client_access
# mkdir /usr/local/etc/postfix/mysqlLookupMaps
# cat /usr/local/etc/postfix/mysqlLookupMaps/alias.conf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
# cat /usr/local/etc/postfix/mysqlLookupMaps/domain.conf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and active = '1' and backupmx = '0'
# cat /usr/local/etc/postfix/mysqlLookupMaps/mailbox.conf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
additional_conditions = and active = '1'
# cat /usr/local/etc/postfix/mysqlLookupMaps/quota.conf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = '1'
# cat /usr/local/etc/postfix/mysqlLookupMaps/sender.conf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = username
where_field = username
additional_conditions = and active = '1'

Создаем папку, где у нас будет храниться почта, и выставляем необходимые права.

# chown -R root:postfix /usr/local/etc/postfix/mysqlLookupMaps/
# chmod 440 /usr/local/etc/postfix/mysqlLookupMaps/*.conf
# chmod 550 /usr/local/etc/postfix/mysqlLookupMaps/
# pw group add virtual -g 1983
# pw user add virtual -g virtual -s /sbin/nologin -u 1983
# mkdir /var/spool/mail
# chown virtual:virtual /var/spool/mail/
# chmod 740 /var/spool/mail/

Настраиваем запуск postfix вместе с системой и стартуем postfix.

# echo 'postfix_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/postfix start
postfix/postfix-script: starting the Postfix mail system

Если все правильно настроено, то в log-файле должно быть следующее:

# cat /var/log/maillog | grep postfix

Feb  9 23:46:40 mail postfix/postfix-script[12718]: starting the Postfix mail system
Feb  9 23:46:40 mail postfix/master[12719]: daemon started -- version 2.7.0,
configuration /usr/local/etc/postfix
  • Greylist

Что такое greylisting?

Представьте себе ситуацию, когда почтовый сервер отправляет письмо, а ему в ответ: «Сервер временно недоступен, попробуйте отправить письмо позже». Порядочный сервер (не спамерский) повторит через некоторое время попытку. После второй попытки письмо успешно достигнет назначеного сервера. По этому принципу отсеиваются много спамерских писем.

Установка:

# cd /usr/ports/mail/postgrey/ && make install clean

После установки в папке с postfix’ом появятся файлы postgrey_whitelist_clients и postgrey_whitelist_recipients, которые содержат
список соотвественно «белых» отправителей и получателей. Здесь можно вводить как домены, так и отдельные адреса.
Теперь переходим к активированию postgrey в postfix’e. Открываем main.cf и ищем рестрикшн smtpd_recipient_restrictions,
и добавляем в него строку:

check_policy_service inet:127.0.0.1:10023

Осталось добавить строку

 postgrey_enable="YES" в /etc/rc.conf

запустить postgrey и перечитать конфиг postfix’a. После этого отправляем письмо и смотрим в логи, обращая внимание на выделенные строки(при первой отправке он как бы карантиниться,
при повторном — уже пропускается):

Apache

Подробно описывать установку и настройку вэб-сервера Apache я не буду, приведу лишь пример настройки php-extentions:

# cd /usr/ports/lang/php5-extensions/
# make config

[X] BZ2
[X] DOM
[X] GD
[X] GETTEXT
[X] ICONV
[X] IMAP
[X] MBSTRING
[X] MYSQLI
[X] PCRE
[X] POSIX
[X] SESSION
[X] SPL
[X] XML
[X] ZLIB

Postfixadmin

Устанавливаем веб интерфейс для администрирования почтовых ящиков.

# cd /usr/ports/mail/postfixadmin
# make config && make install clean

Внимательно читаем файл /usr/local/www/postfixadmin/INSTALL.TXT. После этого следуем инструкциям и настраиваем postfixadmin. Лично я делаю отдельный виртуалхост для postfixadmin. Для этого добавляем следующую директиву в httpd.conf.

NameVirtualHost 91.203.85.37:80
 
 ServerAdmin [email protected]
 DocumentRoot /usr/local/www/postfixadmin
 ServerName postfix-admin.domnails.ru
 
 Options Indexes
 AllowOverride All
 DirectoryIndex index.php
 
 

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

# mysql -p
# password:
mysql > create database postfix;
mysql > grant all on postfix.* to 'postfix'@'localhost' identified by 'postfix';
mysql > flush privileges;
mysql > quit

Редактируем файл /usr/local/www/postfixadmin/config.inc.php.

# less /usr/local/www/postfixadmin/config.inc.php

//Указываем, где у нас установлен postfixadmin
$CONF['postfix_admin_url'] = 'http://postfix-admin.domnails.ru/';
$CONF['postfix_admin_path'] = '/usr/local/www/postfixadmin/';

// Язык интерфейса. Список всех языков можно посмотреть в папке ‘./languages’
$CONF['default_language'] = 'ru';

// Параметры БД. Здесь необходимо указать тип БД (MySQL или PostgreSQL),
// имя пользователя и пароль, использующиеся при подключении, а также имя БД.
// mysql – MySQL 3.23 and 4.0 or 5
// mysqli – MySQL 4.1+
// pgsql – PostgreSQL
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfix';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';

// Здесь необходимо указать email, от имени которого будет посылаться
// письмо пользователю при создании нового почтового ящика.
// Это т.н. null адрес, согласно RFC вы должны принимать почту с такого адреса.
$CONF['admin_email'] = '';

// Имя хоста в формате FQDN (Fully Qualified Domain Name) где находится
// почтовый сервер postfix. Эти данные будут использоваться при отправке
// email для создания почтовых ящиков.
$CONF['smtp_server'] = 'localhost';
$CONF['smtp_port'] = '25';

// Тип шифрования пароля.
// md5crypt – внутренний алгоритм шифрования postfix admin
// system – используется метод шифрования установленный по умолчанию в php
// cleartext – в чистом виде, т.е. без шифрования.
$CONF['encrypt'] = 'cleartext';

// Если вы хотите, чтобы postfix admin автоматически генерировал и отображал
// пароль при создании почтового ящика установите значение YES
$CONF['generate_password'] = 'NO';

// Количество записей, одновременно отображаемых на странице
$CONF['page_size'] = '20';

// Алиасы, создаваемые при создании домена
$CONF['default_aliases'] = array (
'abuse' => '[email protected]',
'hostmaster' => '[email protected]',
'postmaster' => '[email protected]',
'webmaster' => '[email protected]'
);

// Использовать имя домена в пути к почтовому ящику.
// YES: /var/spool/mail/domnails.ru/vitek
// NO: /var/spool/mail/vitek
$CONF['domain_path'] = 'YES';

// Включать имя домена в имя почтового ящика
// YES: /var/spool/mail/[email protected]
// NO: /var/spool/mail/vitek
$CONF['domain_in_mailbox'] = 'YES';

// $CONF['domain_in_mailbox'] = 'YES' + $CONF['domain_path'] = 'YES'
// /var/spool/mail/domnails.ru/[email protected]/

// Значения по умолчанию при создании домена. Количество алиасов,
// почтовых ящиков и максимальная квота в Мб. Я специально указал квоту
// равную 0, т.е. анлим, иначе себе вы тоже не сможете задать размер
// ящика больше этого значения.
$CONF['aliases'] = '10';
$CONF['mailboxes'] = '50';
$CONF['maxquota'] = '0';

// Позволяет задавать квоты при создании почтового ящика
$CONF['quota'] = 'YES';

// Вы можете использовать '1024000' или '1048576'
$CONF['quota_multiplier'] = '1024000';

// Позволяет устанавливать дополнительные параметры транспорта для домена
$CONF['transport'] = 'NO';

// Следующих два параметра используются для организации Автоответчика.
$CONF['vacation'] = 'NO';
$CONF['vacation_domain'] = 'autoreply.domnails.ru';

// Управления алиасами, которые создает postfix для каждого ящика
$CONF['alias_control'] = 'YES';

// Разрещает администраторам домена изменять стандартные алиасы
$CONF['special_alias_control'] = 'YES';

// Позволяет вести лог действий работы с postfix admin, т.е. вы сможете
// посомтреть кто создавал, редактировал и удалял почтовые ящики и т.п.
$CONF['logging'] = 'YES';

// Отображать текст вверху страницы и его содержимое
$CONF['show_header_text'] = 'NO';
$CONF['header_text'] = ':: Postfix Admin ::';

// Аналогично, только текст будет отображаться внизу всех страниц
$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'Вернуться на главную страницу';
$CONF['footer_link'] = 'http://postfix-admin.domnails.ru/';

// Текст письма привествия. Это письмо будет высылаться на каждый
// создаваемый почтовый ящик.
$CONF['welcome_text'] = <<
С уважением, системный администратор.
EOM;

Перегружаем apache и пробуем открыть главную страницу postfixadmin — http://postfix-admin.domnails.ru/
Следуем указаниям инсталятора, вконце когда все уже настроено и работает,удаляем на всякий случай файл setup.php
Далее просто создаем домен и почтовые ящики которые нам нужны…

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

# perl -MMIME::Base64 -e 'print encode_base64("\0admin\@domnails\.ru\000123")'
AGFsZXhAc3lzLWFkbS5vcmcudWEAMTIz
  • Autoreplay (Автоответчик)

Автоответчик- полезная штука,особенно в организации.Уходит кто-нить в отпуск,поставил себе автоответчик и на все
входящие ему письма автоответчик сообщает что «Меня нет,я в отпуске,вернусть тогда-то,пишите пока тому-то».
Немного пришлось покапаться с его настройкой, так как не нашел в интернете статей на эту тему применительно к FreeBSD.
Вообще процесс настройки описан в  /usr/local/www/postfixadmin/VIRTUAL_VACATION/INSTALL.TXT , но все равно пришлось копаться и доводить до ума.

Начнем:

Для начала нам нужно создать группу и системного пользователя, от которого будет работать собственно автоответчик.

# pw group add vacation -g 65501
# pw useradd vacation -u 65501 -g vacation -d /nonexistent -s "/sbin/nologin"

Далее создаем директорию, копируем скрипт vacation.pl и устанавливаем на директорию и скрипт владельца и права

# mkdir /var/spool/vacation
# chown -R vacation:vacation /var/spool/vacation/
# cp /usr/local/www/postfixadmin/VIRTUAL_VACATION/vacation.pl /var/spool/vacation/
# chown -R vacation:vacation /var/spool/vacation/vacation.pl
# chmod 700 /var/spool/vacation/vacation.pl

Правим файл /usr/local/etc/postfix/master.cf, добавляем в него строчку:

# less /usr/local/etc/postfix/master.cf

vacation    unix  -       n       n       -       -       pipe
  flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} — ${recipient}

Правим файл /usr/local/etc/postfix/main.cf, добавляем туда строчку

# ee /usr/local/etc/postfix/main.cf

transport_maps = hash:/usr/local/etc/postfix/transport

Создаем файл /usr/local/etc/postfix/transport такого содержания:

# less /usr/local/etc/postfix/transport

autoreply.domnails.ru        vacation:

Далее правим файл /etc/hosts, добавляем в него такую строчку:

# less /etc/hosts

127.0.0.1               autoreplay.domnails.ru

Теперь отредактируем vacation.pl внеся в него данные для подключения к БД. Если posttfix настроен в связке с MySQL,
то необходимо закомментировать строку:

our $db_type = 'Pg';

и расскомментировать (убрать # перед):

#our $db_type = 'mysql';

и вносим свои данные ниже:

our $db_host = 'localhost';
our $db_username = 'postfix';
our $db_password = 'postfix';
our $db_name     = 'postfix';
our $vacation_domain = 'autoreply.domnails.ru';
our $smtp_auth = '';
our $smtp_authid = '';
our $smtp_authpwd = '';

А вот то, что меня интересовало в первую очередь после удобного интерфейса:

# notification interval, in seconds
# set to 0 to notify only once
# e.g. 1 day ...
#my $interval = 60*60*24;
# disabled by default
our $interval = 0;

Значение

"0"

как раз то, которое мне необходимо — отвечать 1 раз. Либо можно указать нужный интервал в секундах,
через который автоответчик снова ответит одному и тому же адресату.
Дальше нам нужно разрешить в конфиге Postfixadmin использование автоответчика

# ee /usr/local/www/postfixadmin/config.inc.php

$CONF['vacation_domain'] = 'autoreply.domnails.ru';
$CONF['vacation'] = 'YES';
$CONF['vacation_control'] ='YES';
$CONF['vacation_control_admin'] = 'YES';

Перечитываем карту транспорта и конфиг postfix

# postmap hash:/usr/local/etc/postfix/transport
# /usr/local/etc/rc.d/postfix reload

И наконец последний шаг…нужно установить дополнительные модули для Perl,которые использует автоответчик:

# cd /usr/ports/databases/p5-DBD-mysql
# make install clean
# cd /usr/ports/databases/p5-DBI
# make install clean
# cd /usr/ports/mail/p5-MIME-EncWords
# make install clean
# cd /usr/ports/mail/p5-Email-Valid
# make install clean
# cd /usr/ports/mail/p5-Mail-Sender
# make install clean
# cd /usr/ports/devel/p5-Log-Log4perl
# make install clean

Теперь из админки Postfixadmin мы можем включать и выключать автоответчик,задавать нужный нам текст.
Причем пользовательсам может включить автоответчик и задать желаемый текст автоответа. Админ может централизовано
делать это с любым ящиком. Вот как это выглядит:

На этом базовую настройку МТА можно считать завершенной. Но мы пойдем дальше и прикрутим еще вэб-интерфейс для почты,
чтобы пользователи могли читать и отправлять почту из интернета. В качестве вэб-интерфейса я выбрал Roundcube,
он достаточно прост в настройке и приятен глазу (на мой взгляд конечно).

  • Roundcube


Roundcube – это web-интерфейс или, если хотите, почтовый клиент, написанный на PHP. Roundcube сочетает в себе приятность дизайна интерфейса и удобство, которое проявляется даже в мелочах.

# cd /usr/ports/mail/roundcube
# make config && make install clean
[X] MYSQL       Use MySQL backend

Создадим базу данных MySQL:

# mysql -p
# mysql> create database roundcube;
# mysql> grant all on roundcube.* to 'roundcube'@'localhost' identified by 'roundcube';
# mysql> flush privileges;
# mysql> quit

Создадим системного пользователя roundcube с шелом /sbin/nologin  и добавим его в группу www.

# pw useradd roundcube -g www -s "/sbin/nologin" -c "Roundcube"

Создадим конфигурационный файл виртуалхоста  в Apache:

# touch /usr/local/etc/apache/vhosts/roundcube.conf


ServerName mail.domnails.ru
ServerAdmin [email protected]
DocumentRoot "/usr/local/www/roundcube/"
# Поскольку roundcube написан на PHP и мы
# не предполагаем запуск чего-либо кроме PHP скриптов
# на этом виртуалхосте, то на всякий случай отключаем CGI
# и запрещаем изменение параметров ./htaccess'ом

Options -ExecCGI
AllowOverride None

# Запрещаем PHP скриптам выходить за пределы
# директории виртуалхоста
php_admin_value open_basedir /usr/local/www/roundcube/
php_admin_value safe_mode_include_dir /usr/local/www/roundcube/
php_admin_value safe_mode_exec_dir /noexec
php_admin_value doc_root /usr/local/www/roundcube/
php_admin_value upload_tmp_dir /usr/local/www/roundcube/tmp
php_admin_value session.save_path /usr/local/www/roundcube/tmp
# Логирование
ErrorLog /var/log/httpd/roundcube-error.log
TransferLog /var/log/httpd/roundcube-access.log

Перезапускаем apache, чтобы изменения вступили в силу:

# apachectl restart

Заполняем базу данных:

# mysql roundcube < /usr/local/www/roundcube/SQL/mysql.initial.sql

Переходим к настройке Roundcube.
Отредактируем файл /usr/local/www/roundcube/config/db.inc.php:

$rcmail_config = array();
$rcmail_config['db_dsnw'] = 'mysql://roundcube:roundcube@localhost/roundcube';
$rcmail_config['db_dsnr'] = '';
$rcmail_config['db_max_length'] = 512000;  // 500K
$rcmail_config['db_persistent'] = FALSE;
$rcmail_config['db_table_users'] = 'users';
$rcmail_config['db_table_identities'] = 'identities';
$rcmail_config['db_table_contacts'] = 'contacts';
$rcmail_config['db_table_session'] = 'session';
$rcmail_config['db_table_cache'] = 'cache';
$rcmail_config['db_table_messages'] = 'messages';
$rcmail_config['db_sequence_users'] = 'user_ids';
$rcmail_config['db_sequence_identities'] = 'identity_ids';
$rcmail_config['db_sequence_contacts'] = 'contact_ids';
$rcmail_config['db_sequence_cache'] = 'cache_ids';
$rcmail_config['db_sequence_messages'] = 'message_ids';

Теперь отредактируем файл  /usr/local/www/roundcube/config/main.inc.php:

$rcmail_config = array();
$rcmail_config['debug_level'] = 1;
$rcmail_config['enable_caching'] = TRUE;
$rcmail_config['message_cache_lifetime'] = '10d';
$rcmail_config['auto_create_user'] = TRUE;
$rcmail_config['default_host'] = 'localhost';
$rcmail_config['default_port'] = 143;
$rcmail_config['username_domain'] = '';
$rcmail_config['mail_domain'] = 'domnails.ru';
$rcmail_config['virtuser_file'] = '';
$rcmail_config['virtuser_query'] = '';
$rcmail_config['smtp_server'] = 'localhost';
$rcmail_config['smtp_port'] = 25;
$rcmail_config['smtp_user'] = '%u';
$rcmail_config['smtp_pass'] = '%p';
$rcmail_config['smtp_auth_type'] = '';
$rcmail_config['smtp_helo_host'] = 'mail.domnails.ru';
$rcmail_config['smtp_log'] = TRUE;
$rcmail_config['list_cols'] = array('subject', 'from', 'date', 'size');
$rcmail_config['skin_path'] = 'mvision';
$rcmail_config['skin_include_php'] = FALSE;
$rcmail_config['temp_dir'] = 'temp/';
$rcmail_config['log_dir'] = 'logs/';
$rcmail_config['session_lifetime'] = 10;
$rcmail_config['ip_check'] = false;
$rcmail_config['double_auth'] = false;
$rcmail_config['des_key'] = 'rcmail-!24ByteDESkey*Str';
$rcmail_config['language'] = 'ru_RU';
$rcmail_config['default_charset'] = 'UTF8';
$rcmail_config['date_short'] = 'D H:i';
$rcmail_config['date_long'] = 'd.m.Y H:i';
$rcmail_config['date_today'] = 'H:i';
$rcmail_config['useragent'] = 'RoundCube Webmail/0.1';
$rcmail_config['product_name'] = 'RoundCube Webmail';
$rcmail_config['imap_root'] = '';
$rcmail_config['drafts_mbox'] = 'Drafts';
$rcmail_config['junk_mbox'] = 'Junk';
$rcmail_config['sent_mbox'] = 'Sent';
$rcmail_config['trash_mbox'] = 'Trash';
$rcmail_config['default_imap_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash');
$rcmail_config['create_default_folders'] = TRUE;
$rcmail_config['protect_default_folders'] = TRUE;
$rcmail_config['skip_deleted'] = FALSE;
$rcmail_config['read_when_deleted'] = TRUE;
$rcmail_config['flag_for_deletion'] = FALSE;
$rcmail_config['enable_spellcheck'] = TRUE;
$rcmail_config['spellcheck_uri'] = '';
$rcmail_config['spellcheck_languages'] = 'ru';
$rcmail_config['generic_message_footer'] = '';
$rcmail_config['mail_header_delimiter'] = NULL;
$rcmail_config['dont_override'] = array();
$rcmail_config['javascript_config'] = array('read_when_deleted', 'flag_for_deletion');
$rcmail_config['include_host_config'] = FALSE;
/***** these settings can be overwritten by user's preferences *****/
$rcmail_config['pagesize'] = 40;
$rcmail_config['timezone'] = intval(date('O'))/100 - date('I');
$rcmail_config['dst_active'] = (bool)date('I');
$rcmail_config['prefer_html'] = TRUE;
$rcmail_config['htmleditor'] = TRUE;
$rcmail_config['prettydate'] = TRUE;
$rcmail_config['message_sort_col'] = 'date';
$rcmail_config['message_sort_order'] = 'DESC';
$rcmail_config['draft_autosave'] = 300;
$rcmail_config['max_pagesize'] = 200;
$rcmail_config['preview_pane'] = TRUE;

Roundcube — забирает почту по IMAP, так что для его работы нам необходимо что бы наш сервер слушал 143 порт.

# echo 'courier_imap_imapd_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/courier-imap-imapd start

RoundCube установлен и готов к работе.

Материалы, которые были использованы для написания статьи:
Базовая настройка Postfix — http://www.sys-adm.org.ua/
Roundcube — http://wolandblog.com/

Источник : http://it.domnails.ru/index.php/2010/04/07/nastrojka-pochtovoj-sistemy-postfix/

Запись опубликована в рубрике *Unix,*Linux, Postfix. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Я не спамер This plugin created by Alexei91