Данная статья описывает установку и настройку почтовой системы на основе 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:80ServerAdmin [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.confServerName 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/