Инструменты пользователя

Инструменты сайта


mail:mail-howto-p1

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

mail:mail-howto-p1 [2009/09/11 15:58] (текущий)
Строка 1: Строка 1:
 +====== Настройка почтовой системы на freebsd. Часть I ======
  
 +===== Вступление =====
 +
 +\\ Данный документ описывает установку и настройку почтовой системы на основе Postfix, Cyrus-SASL, MySQL, Courier-IMAP,​ postfixadmin,​ clamav, spamassassin,​ amavisd-new. При этом нет разницы,​ сколько почтовых доменов заведено в системе,​ как называются пользователи,​ мы будем использовать виртуальных пользователей,​ которые с системными никак не пересекаются.
 +
 +\\ Но аналогично построенные системы работают на CentOS и на других RedHat подобных дистрибутивах. Сейчас данная связка у меня работает больше года на СentOS-4.0,​ пока ни одного сбоя замечено не было. Поэтому не вижу причин,​ почему бы данной связке не работать на других системах.
 +
 +<​note>​** Архитектура современных почтовых систем **
 +\\ Перед началом установки почтовой системы настоятельно рекомендую прочитать статью ** [[ http://​sys-adm.org.ua/​mail/​mail-architech.php | Архитектура современных почтовых систем ]] **. Для лучшего понимания принципов работы современных почтовых систем. </​note>​
 +
 +<​note>​** Совет всем линуксоидам ** 
 +\\ Не собирайте ничего из исходников tar.bz2 или tar.gz. Лучше скачайте src.rpm и ** [[ http://​sys-adm.org.ua/​system/​rpm-build.php | соберите rpm пакет ]] **. Лично я, собираю все пакеты на VMware, а на сервер ставлю уже готовые rpm пакеты. Очень удобно и система не засоряется. Также рекомендую прочитать статью ** [[ http://​sys-adm.org.ua/​system/​rpm.php | про основы работы с менеджером пакетов rpm ]] **.</​note>​
 +
 +===== Обновление системы =====
 +Настраивал данную связку на FreeBSD-7.2. Установленную с помощью образа 7.2-RELEASE-i386-bootonly.iso. Поэтому перед началом использования данной симстемы мы ее обновим. Так как система у нас новая, то воспользуемся бинарным обновлением. Для этого выполняем следующие команды
 +
 +<cli>
 +# freebsd-update fetch
 +# freebsd-update install
 +</​cli>​
 +
 +После этого перегружаем сервер. В итоге мы должны получить следующую систему:​
 +<cli>
 +# uname -a
 +FreeBSD freebsd7.w3.lan 7.2-RELEASE-p2 FreeBSD 7.2-RELEASE-p2 #0: Wed Jun 24 00:57:44 UTC 2009
 +root@i386-builder.daemonology.net:/​usr/​obj/​usr/​src/​sys/​GENERIC ​ i386
 +</​cli>​
 +
 +А теперь займемся обновление дерева портов. Для начала скачаем самое свежее дерево портов
 +<cli>
 +# portsnap fetch
 +Looking up portsnap.FreeBSD.org mirrors... 3 mirrors found.
 +Fetching public key from portsnap2.FreeBSD.org... done.
 +Fetching snapshot tag from portsnap2.FreeBSD.org... done.
 +Fetching snapshot metadata... done.
 +...
 +...
 +...
 +Fetching 11 patches.....10 done.
 +Applying patches... done.
 +Fetching 0 new ports or files... done.
 +</​cli>​
 +
 +Разпаковываем дерево портов
 +<cli>
 +# portsnap extract
 +/​usr/​ports/​.cvsignore
 +/​usr/​ports/​CHANGES
 +/​usr/​ports/​COPYRIGHT
 +...
 +...
 +...
 +/​usr/​ports/​x11/​yeahconsole/​
 +/​usr/​ports/​x11/​yelp/​
 +/​usr/​ports/​x11/​zenity/​
 +Building new INDEX files... done.
 +</​cli>​
 +
 +И так у нас полностью обновленная и свежая система,​ теперь переходим к установке ПО.
 +===== Perl =====
 +
 +\\ Итак, начнем по порядку. Скорее всего, perl уже стоит у вас в системе,​ т.к. на него завязано слишком много пакетов. В линуксе он вообще сразу ставится с системой. Если perl не установлен,​ то ставим его
 +
 +<​note>​
 +\\ Некоторые командные процессоры для ускорения поиска выполнимых файлов и команд кэшируют имена программ,​ доступных для вызова из каталогов,​ перечисленных в переменной окружения ** PATH **.
 +
 +Если вы используете один из таких командных процессоров,​ то перед использованием только что добавленных программ вам может понадобиться вызвать команду rehash после установки порта. Эта команда будет работать с такими оболочками,​ как, например,​ tcsh.
 +
 +При работе с такими командными процессорами,​ как sh или shells/​bash,​ воспользуйтесь командой hash -r. Дополнительную информацию можно найти в документации к вашему командному процессору</​note>​
 +
 +
 +===== Openssl =====
 +
 +\\ Устанавливаем openssl. Он нам понадобится для генерации сертификатов/​ключей,​ а также для поддержки SSL/TLS.
 +<cli>
 +# cd /​usr/​ports/​security/​openssl/​
 +# make install clean
 +# rehash </​cli>​
 +
 +===== Mysql =====
 +
 +\\ Устанавливаем и настраиваем MySQL. На unix системах,​ наверное,​ одна из самых распространенных СУБД. MySQL необходим для работы postfixadmin. В базе данных мы будем хранить информацию о пользователях и почтовых ящиках.
 +
 +<cli>
 +# cd /​usr/​ports/​databases/​mysql50-server/​
 +# setenv BUILD_OPTIMIZED yes
 +# setenv WITH_OPENSSL yes
 +# setenv WITH_CHARSET utf8
 +# make install clean
 +# rehash
 +</​cli>​
 +
 +Устанавливаем набор вспомогательных скриптов,​ которые помогают настроить MySQL.
 +
 +<cli>
 +# cd /​usr/​ports/​databases/​mysql50-scripts/​
 +# make install clean
 +# rehash ​
 +</​cli>​
 +
 +Производим первоначальную настройку MySQL сервера. Настраиваем запуск MySQL вместе с системой
 +
 +<cli>
 +# echo '​mysql_enable="​YES"'​ >> /​etc/​rc.conf ​
 +</​cli>​
 +
 +Создаем конфигурационный файл, исправляем по своему желанию
 +
 +<cli>
 +# cp /​usr/​local/​share/​mysql/​my-large.cnf /​etc/​my.cnf ​
 +</​cli> ​
 +
 +<​code>​
 +#
 +# /etc/my.cnf
 +#
 +
 +[mysqld]
 +# Указываем log файл, полезно для отладки и поиска проблем
 +log=/​var/​log/​mysql.log
 +
 +# Привязываем MySQL к loopback интерфейсу.
 +bind-address=127.0.0.1 ​
 +
 +# Задаем кодировку по умолчанию
 +default-character-set=utf8
 +character-set-server=utf8
 +collation-server=utf8_general_ci
 +init-connect="​SET NAMES utf8"
 +</​code>​
 +
 +Создаем соответствующий файл и выставляем необходимые права
 +
 +<cli>
 +# touch /​var/​log/​mysql.log
 +# chown mysql:mysql /​var/​log/​mysql.log ​
 +</​cli>​
 +
 +Запускаем MySQL
 +
 +<​cli> ​
 +# /​usr/​local/​etc/​rc.d/​mysql-server start
 +Starting mysql.
 +
 +# cat /​var/​log/​mysql.log
 +/​usr/​local/​libexec/​mysqld,​ Version: 5.0.85-log (FreeBSD port: mysql-server-5.0.85). started with:
 +Tcp port: 3306  Unix socket: /​tmp/​mysql.sock
 +Time                 Id Command ​   Argument
 +</​cli>​
 +
 +А теперь воспользуемся скриптом для настройки безопасности MySQL сервера
 +
 +<​cli> ​
 +# /​usr/​local/​bin/​mysql_secure_installation
 +
 +
 +
 +
 +NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
 +      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
 +
 +
 +In order to log into MySQL to secure it, we'll need the current
 +password for the root user.  If you've just installed MySQL, and
 +you haven'​t set the root password yet, the password will be blank,
 +so you should just press enter here.
 +
 +Enter current password for root (enter for none):
 +OK, successfully used password, moving on...
 +
 +Setting the root password ensures that nobody can log into the MySQL
 +root user without the proper authorisation.
 +
 +Set root password? [Y/n] y
 +New password: *******
 +Re-enter new password: *******
 +Password updated successfully!
 +Reloading privilege tables..
 + ... Success!
 +
 +
 +By default, a MySQL installation has an anonymous user, allowing anyone
 +to log into MySQL without having to have a user account created for
 +them.  This is intended only for testing, and to make the installation
 +go a bit smoother. ​ You should remove them before moving into a
 +production environment.
 +
 +Remove anonymous users? [Y/n] y
 + ... Success!
 +
 +Normally, root should only be allowed to connect from '​localhost'​. ​ This
 +ensures that someone cannot guess at the root password from the network.
 +
 +Disallow root login remotely? [Y/n] y
 + ... Success!
 +
 +By default, MySQL comes with a database named '​test'​ that anyone can
 +access. ​ This is also intended only for testing, and should be removed
 +before moving into a production environment.
 +
 +Remove test database and access to it? [Y/n] y
 + - Dropping test database...
 + ... Success!
 + - Removing privileges on test database...
 + ... Success!
 +
 +Reloading the privilege tables will ensure that all changes made so far
 +will take effect immediately.
 +
 +Reload privilege tables now? [Y/n] y
 + ... Success!
 +
 +Cleaning up...
 +
 +
 +
 +All done!  If you've completed all of the above steps, your MySQL
 +installation should now be secure.
 +
 +Thanks for using MySQL!
 +</​cli>​
 +
 +<​note>​** Что делает скрипт mysql_secure_installation **
 +\\ Как видно из названия самого скрипта он предназначен для повышения безопасности MySQL сервера. С помощью этого скрипта мы выполнили следующие действия:​
 +
 +    * задали пароль для супер пользователя root (с системным root он не имеет ничего общего,​ это абсолютно два разных пользователя),​ так как по умолчанию для него не установлен пароль;​
 +    * удалили анонимного пользователя,​ который создается только для тестовых целей;
 +    * запретили пользователю root входить удаленно. Теперь он сможет заходить только с localhost;
 +    * удалили тестовую БД test и доступ к ней;
 +</​note>​
 +
 +Все, с MySQL мы разобрались,​ идем дальше.
 +
 +===== Cyrus-Sasl =====
 +
 +Собираем и настраиваем Cyrus-SASL. Данную библиотеку мы будем использовать для SMTP аутентификации,​ т.е. проверки логина и пароля по некоторому алгоритму,​ например PLAIN, LOGIN, CRAM-MD5.
 +
 +<cli>
 +# cd /​usr/​ports/​security/​cyrus-sasl2/​
 +# make config ​
 +</​cli>​
 +
 +{{ :​mail:​cyrus-sasl-mc.png |}}
 +
 +<cli>
 +# make install clean
 +</​cli>​
 +
 +===== Courier-authlib =====
 +
 +\\ Собираем и настраиваем courier-authlib. Данную библиотеку courier-imap использует для аутентификации пользователей.
 +
 +<cli>
 +# cd /​usr/​ports/​security/​courier-authlib/​
 +# make config </​cli>​
 +
 +{{ :​mail:​courier-authlib-mc.png |}}
 +
 +<cli>
 +# make install clean </​cli>​
 +
 +\\ Делаем автоматический запуск authdaemond при старте системы
 +
 +<cli>
 +# echo '​courier_authdaemond_enable="​YES"'​ >> /​etc/​rc.conf </​cli>​
 +
 +\\ Настраиваем courier-authlib. Для этого редактируем два конфигурационных файла: ** /​usr/​local/​etc/​authlib/​authdaemonrc и /​usr/​local/​etc/​authlib/​authmysqlrc **
 +
 +<cli>
 +# 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=""​ </​cli>​
 +
 +<cli>
 +# cat /​usr/​local/​etc/​authlib/​authmysqlrc | grep -v ^# | grep -v ^$
 +MYSQL_USERNAME ​         postfix
 +MYSQL_PASSWORD ​         postfix
 +MYSQL_SOCKET ​           /​tmp/​mysql.sock
 +MYSQL_OPT ​              0
 +MYSQL_DATABASE ​         postfix
 +MYSQL_CHARACTER_SET ​    utf8
 +MYSQL_USER_TABLE ​       mailbox
 +MYSQL_CLEAR_PWFIELD ​    ​password
 +MYSQL_UID_FIELD ​        '​1981'​
 +MYSQL_GID_FIELD ​        '​1981'​
 +MYSQL_LOGIN_FIELD ​      ​username
 +MYSQL_HOME_FIELD ​       '/​var/​spool/​mail'​
 +MYSQL_NAME_FIELD ​       name
 +MYSQL_MAILDIR_FIELD ​    ​maildir
 +MYSQL_QUOTA_FIELD ​      quota
 +MYSQL_WHERE_CLAUSE ​     active='​1'​ </​cli>​
 +
 +<​note>​** MYSQL_UID_FIELD и MYSQL_GID_FIELD **
 +\\ Обратите внимание на значения этих полей, здесь необходимо указывать uid и gid пользователя и группы [[ http://​sys-adm.org.ua/​mail/​mail-howto-p1.php#​virtual | virtual ]] соответственно.</​note>​
 +
 +<​note>​** Настройка authmysqlrc **
 +\\ Если MySQL запускается на той же машине,​ что и courier-authlib вы можете использовать сокет, вместо указания порта и имени сервера. При этом не нужно инициализировать MYSQL_SERVER/​MYSQL_PORT.</​note>​
 +
 +\\ Запускаем authdaemond
 +<cli>
 +# /​usr/​local/​etc/​rc.d/​courier-authdaemond start
 +Starting courier_authdaemond. </​cli>​
 +
 +\\ Если вы все правильно настроили,​ то в log-файле должно быть следующее
 +
 +<cli>
 +# cat /​var/​log/​maillog | grep authdaemond
 +Sep  7 18:17:24 freebsd7 authdaemond:​ modules="​authmysql",​ daemons=5
 +Sep  7 18:17:24 freebsd7 authdaemond:​ Installing libauthmysql
 +Sep  7 18:17:24 freebsd7 authdaemond:​ Installation complete: authmysql
 +</​cli>​
 +
 +===== Courier-imap =====
 +
 +\\ Устанавливаем и настраиваем courier-imap. Несмотря на название,​ courier-imap также поддерживает и pop3, хотя основной акцент делается на работу с imap. В качестве альтернативы очень рекомендую посмотреть в сторону dovecot.
 +
 +\\ Dovecot это IMAP сервер,​ разработанный для Linux/UNIX подобных систем,​ написанный прежде всего с учетом безопасности. Несмотря на то, что он написан на C, он использует несколько техник программирования,​ которые позволяют избежать большинства общих ошибок. Dovecot может работать со стандартными форматами mbox и maildir, а также он полностью совместим с серверами UW-IMAP и Courier IMAP.
 +
 +<cli>
 +# cd /​usr/​ports/​mail/​courier-imap/​
 +# make config </​cli>​
 +
 +{{ :​mail:​courier-imap-mc.png |}}
 +
 +<cli> # make install clean </​cli>​
 +
 +\\ В зависимости от того, что вы хотите использовать pop3 или imap, редактируем соответствующие файлы. Лично я использую pop3, поэтому редактируем следующий файл /​usr/​local/​etc/​courier-imap/​pop3d ​
 +
 +<cli>
 +# 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.127.1
 +TCPDOPTS="​-nodnslookup -noidentlookup"​
 +LOGGEROPTS="​-name=courier-imap"​
 +POP3DSTART=YES
 +MAILDIRPATH=Maildir ​
 +</​cli>​
 +
 +<cli>
 +# cat /​usr/​local/​etc/​courier-imap/​imapd | grep -v ^# | grep -v ^$
 +ADDRESS=0
 +PORT=143
 +MAXDAEMONS=40
 +MAXPERIP=4
 +PIDFILE=/​var/​run/​imapd.pid
 +TCPDOPTS="​-nodnslookup -noidentlookup"​
 +LOGGEROPTS="​-name=imapd"​
 +IMAP_CAPABILITY="​IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE"
 +IMAP_KEYWORDS=1
 +IMAP_ACL=1
 +IMAP_CAPABILITY_ORIG="​IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE"
 +IMAP_PROXY=0
 +IMAP_PROXY_FOREIGN=0
 +IMAP_IDLE_TIMEOUT=60
 +IMAP_MAILBOX_SANITY_CHECK=1
 +IMAP_CAPABILITY_TLS="​$IMAP_CAPABILITY AUTH=PLAIN"​
 +IMAP_CAPABILITY_TLS_ORIG="​$IMAP_CAPABILITY_ORIG AUTH=PLAIN"​
 +IMAP_DISABLETHREADSORT=0
 +IMAP_CHECK_ALL_FOLDERS=0
 +IMAP_OBSOLETE_CLIENT=0
 +IMAP_UMASK=022
 +IMAP_ULIMITD=65536
 +IMAP_USELOCKS=1
 +IMAP_SHAREDINDEXFILE=/​usr/​local/​etc/​courier-imap/​shared/​index
 +IMAP_ENHANCEDIDLE=0
 +IMAP_TRASHFOLDERNAME=Trash
 +IMAP_EMPTYTRASH=Trash:​7
 +IMAP_MOVE_EXPUNGE_TO_TRASH=0
 +SENDMAIL=/​usr/​sbin/​sendmail
 +HEADERFROM=X-IMAP-Sender
 +IMAPDSTART=YES
 +MAILDIRPATH=Maildir
 +</​cli>​
 +
 +<​note>​** Примечание !!! **
 +\\ Для того чтобы пользователи могли просматривать почту из мира, то в поле ADDRESS необходимо указать 0. В этом случае courier-imap будет слушать на всех активных интерфейсах.
 +
 +Если вы хотите,​ чтобы пользователи могли просматривать почту только через веб интерфейс (imp), то в поле ADDRESS необходимо указать 127.0.0.1.
 +
 +Если у вас в системе много интерфейсов,​ а вам нужно привязать pop/imap сервер только к некоторым,​ то это можно сделать так:
 +\\ ** ADDRESS=0 **
 +\\ ** PORT=192.168.127.1.110,​127.0.0.1.110 **</​note>​
 +
 +Настраиваем автоматический запуск pop/imap сервера при старте системы
 +
 +<cli>
 +# echo '​courier_imap_pop3d_enable="​YES"'​ >> /​etc/​rc.conf ​
 +# echo '​courier_imap_imapd_enable="​YES"'​ >> /​etc/​rc.conf
 +</​cli>​
 +
 +Запускаем pop/imap сервер
 +
 +<​cli> ​
 +# /​usr/​local/​etc/​rc.d/​courier-imap-pop3d start
 +Starting courier_imap_pop3d. ​
 +
 +# /​usr/​local/​etc/​rc.d/​courier-imap-imapd start
 +Starting courier_imap_imapd.
 +</​cli>​
 +
 +\\ Проверяем,​ запустился ли pop3/imap сервер
 +
 +<cli>
 +# sockstat | grep 143
 +root     ​couriertcp 84757 3  tcp4   ​*:​143 ​                *:*
 +
 +# sockstat | grep 110
 +root     ​couriertcp 84745 3  tcp4   ​*:​110 ​                *:*
 +</​cli>​
 +
 +===== Postfix =====
 +
 +Ну а теперь собираем сердце нашей системы - Postfix
 +
 +<cli>
 +# cd /​usr/​ports/​mail/​postfix
 +# make config ​
 +</​cli>​
 +
 +{{ :​mail:​postfix-mc.png |}}
 +
 +<cli>
 +# make install clean
 +# rehash ​
 +</​cli>​
 +
 +В конце установки на вопрос
 +
 +<cli>
 +Would you like to activate Postfix in /​etc/​mail/​mailer.conf [n]?
 +</​cli>​
 +
 +Отвечаем y.
 +
 +\\ Отключаем запуск sendmail при старте системы,​ иначе postfix и sendmail будут конфликтовать между собой. Для этого добавляем следующие строчки в rc.conf
 +
 +<cli>
 +# cat /​etc/​rc.conf | grep sendmail
 +sendmail_enable="​NO"​
 +sendmail_submit_enable="​NO"​
 +sendmail_outbound_enable="​NO"​
 +sendmail_msp_queue_enable="​NO"​ </​cli>​
 +
 +\\ Отключаем специфические для sendmail опции
 +
 +<​cli> ​
 +# 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" ​
 +</​cli>​
 +
 +Редактируем конфигурационный файл postfix, а именно main.cf
 +
 +<​code> ​
 +#
 +# /​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.sys-adm.org.ua
 +
 +# Задает имя нашего домена. По умолчанию используется значение $myhostname
 +# минус первый компонент.
 +mydomain = sys-adm.org.ua
 +
 +# SENDING MAIL
 +#
 +# Данный параметр указывает имя домена,​ которое используется при отправлении
 +# почты с этой машины. По умолчанию,​ используется имя локальной машины -
 +# $myhostname. Для согласованности между адресами отправителя и получателя,​
 +# myorigin также указывает доменное имя, которое добавляется к адресу
 +# получателя для которого не указана доменная часть.
 +# myorigin = $myhostname (отправлять письма от: "​alex@mail.sys-adm.org.ua"​)
 +# myorigin = $mydomain (отправлять письма от: "​alex@sys-adm.org.ua"​)
 +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
 +
 +# 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, sys-adm.org.ua
 +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_client_hostname
 +
 +# Дополнительные ограничения,​ применяемые сервером Postfix
 +# в контексте SMTP команды HELO
 +smtpd_helo_restrictions =       ​check_helo_access hash:​$base/​hello_access,​
 +                                permit_mynetworks,​
 +                                permit_sasl_authenticated,​
 +                                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,​
 +                                reject_unauth_destination,​
 +                                check_recipient_access hash:​$base/​recipient_access,​
 +                                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 = <>
 +
 +# Числовой код ответа 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, please try again later"
 +
 +# Ограничиваем максимальный размер письма до 5 Мб
 +message_size_limit = 5242880
 +
 +# 1981 - uid и gid пользователя и группы virtual соответственно
 +virtual_gid_maps = static:1981
 +virtual_uid_maps = static:1981
 +virtual_minimum_uid = 1000 
 +</​code>​
 +
 +Указываем postfix, как производить аутентификацию пользователей. Для этого создаем файл smtpd.conf со следующим содержимым:​
 +
 +<cli>
 +# 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 </​cli>​
 +
 +Инициализируем базу данных псевдонимов
 +
 +<​cli> ​
 +# /​usr/​local/​bin/​newaliases ​
 +</​cli>​
 +
 +Создаем необходимые файлы
 +
 +<​cli> ​
 +# 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' ​
 +</​cli>​
 +
 +Создаем папку, где у нас будет храниться почта, и выставляем необходимые права.
 +
 +<cli>
 +# 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 1981
 +# pw user add virtual -g virtual -s /​sbin/​nologin -u 1981
 +
 +# mkdir /​var/​spool/​mail
 +# chown virtual:​virtual /​var/​spool/​mail/​
 +# chmod 740 /​var/​spool/​mail/ ​
 +</​cli>​
 +
 +Настраиваем запуск postfix вместе с системой.
 +
 +<​cli> ​
 +# echo '​postfix_enable="​YES"'​ >> /​etc/​rc.conf
 +
 +# /​usr/​local/​etc/​rc.d/​postfix start
 +postfix/​postfix-script:​ starting the Postfix mail system ​
 +</​cli> ​
 +
 +Если все правильно настроено,​ то в log-файле должно быть следующее
 +
 +<​cli> ​
 +# cat /​var/​log/​maillog | grep postfix
 +Sep  7 19:04:44 freebsd7 postfix/​postfix-script[92841]:​ starting the Postfix mail system
 +Sep  7 19:04:45 freebsd7 postfix/​master[92842]:​ daemon started -- version 2.6.5, configuration /​usr/​local/​etc/​postfix
 +</​cli>​
 +
 +===== Apache =====
 +
 +Устанавливаем веб сервер apache, он нам понадобится для postfixadmin.
 +
 +<​cli> ​
 +# cd /​usr/​ports/​www/​apache13-modssl/​
 +# make install clean
 +# rehash
 +</​cli>​
 +
 +\\ Настраиваем автоматический запуск apache сервера при старте системы
 +
 +<cli> # echo '​apache_enable="​YES"'​ >> /​etc/​rc.conf </​cli>​
 +
 +===== Php =====
 +
 +\\ Устанавливаем php, также необходим для работы postfixadmin.
 +
 +<cli> # cd /​usr/​ports/​lang/​php5
 +# make config </​cli>​
 +
 +{{ :​mail:​php-mc.png |}}
 +
 +<cli> # make install clean </​cli>​
 +
 +\\ В самом конце установки обращаем внимание на следующие строчки
 +
 +<cli> ***************************************************************
 +
 +Make sure index.php is part of your DirectoryIndex.
 +
 +You should add the following to your Apache configuration file:
 +
 +AddType application/​x-httpd-php .php
 +AddType application/​x-httpd-php-source .phps
 +
 +*************************************************************** </​cli>​
 +
 +\\ И вносим соответствующие параметры в /​usr/​local/​etc/​apache/​httpd.conf
 +
 +\\ Создаем php.ini и изменяем под свои нужды.
 +
 +<​cli> ​
 +# cd /​usr/​local/​etc
 +# cp php.ini-dist php.ini </​cli>​
 +
 +===== Php-extentions =====
 +
 +\\ Теперь устанавливаем необходимые расширения для php. Список конкретных расширений зависит от специфики сервера. Так как перечень поддерживаемых расширений очень большой,​ то я не буду приводить их всех, а лишь укажу те, которые я включил. Все расширения кроме выбранных,​ отключены,​ но вы в любой момент можете установить любое необходимое вам расширение.
 +
 +<cli>
 +# cd /​usr/​ports/​lang/​php5-extensions/​
 +# make config </​cli>​
 +
 +<cli>
 +[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 </​cli>​
 +
 +<cli>
 +# make install clean
 +# rehash </​cli>​
 +
 +\\ Проверяем нашу связку apache + php. Для этого создаем тестовый файл, со следующим содержимым.
 +
 +<cli>
 +# touch /​usr/​local/​www/​data/​test.php
 +# cat /​usr/​local/​www/​data/​test.php
 +<?
 +   ​phpinfo();​
 +?> </​cli>​
 +
 +\\ Запускаем apache
 +
 +<cli>
 +# /​usr/​local/​etc/​rc.d/​apache.sh start
 +Starting apache.
 +
 +# cat /​var/​log/​httpd-error.log
 +[Sun Feb 10 02:01:26 2008] [notice] Apache/​1.3.39 (Unix) PHP/5.2.5 with Suhosin-Patch mod_ssl/​2.8.30
 +OpenSSL/​0.9.8g configured -- resuming normal operations
 +[Sun Feb 10 02:01:26 2008] [notice] Accept mutex: flock (Default: flock)
 +</​cli>​
 +
 +\\ Открываем в любимом интернет проводнике test.php. Если все правильно настроено,​ то мы должны увидеть [[ http://​sys-adm.org.ua/​mail/​phpinfo.html | подобную страничку ]].
 +
 +===== Postfixadmin =====
 +
 +\\ Устанавливаем веб интерфейс для администрирования почтовых ящиков.
 +
 +<cli>
 +# cd /​usr/​ports/​mail/​postfixadmin
 +# make config </​cli>​
 +
 +{{ :​mail:​postfixadmin-mc.png |}}
 +
 +<​cli> ​
 +# make install clean </​cli>​
 +
 +\\ Внимательно читаем файл /​usr/​local/​www/​postfixadmin/​INSTALL.TXT. После этого следуем инструкциям и настраиваем postfixadmin. Лично я делаю отдельный виртуалхост для postfixadmin. Для этого добавляем следующую директиву в httpd.conf.
 +
 +<​cli> ​
 +NameVirtualHost 212.42.65.100:​80
 +<​VirtualHost 212.42.65.100:​80>​
 +    ServerAdmin webmaster@sys-adm.org.ua
 +    DocumentRoot /​usr/​local/​www/​postfixadmin
 +    ServerName postfix-admin.sys-adm.org.ua
 +    <​Directory "/​usr/​local/​www/​postfixadmin">​
 +        Options Indexes
 +        AllowOverride All
 +        DirectoryIndex index.php
 +    </​Directory>​
 +</​VirtualHost>​
 +</​cli>​
 +
 +\\ В целях безопасности изменяем стандартный пароль администратора postfixadmin.
 +
 +<cli>
 +# cd /​usr/​local/​www/​postfixadmin/​admin/​
 +# htpasswd -b .htpasswd admin 1234567
 +Updating password for user admin </​cli>​
 +
 +\\ Так как postfixadmin хранит все данные в БД, то нам необходимо создать саму БД и соответствующие таблицы. К счастью эту работу за нас уже сделали разработчики. Вместе с postfixadmin поставляется sql скрипт,​ который создает БД и все таблицы. Этот скрипт располагается в корневой директории postfixadmin. Нам лишь необходимо выполнить его.
 +
 +<cli>
 +# cd /​usr/​local/​www/​postfixadmin
 +# mysql -u root -p < DATABASE_MYSQL.TXT
 +Enter password: ****** </​cli>​
 +
 +<​note>​** Примечание !!! **
 +\\ Перед применением скрипта настоятельно рекомендую поменять пароли в файле DATABASE_MYSQL.TXT для пользователей postfix и postfixadmin. После изменения пароля не забываем также поменять его в следующих файлах:​
 +\\ ** /​usr/​local/​lib/​sasl2/​smtpd.conf **
 +\\ ** /​usr/​local/​etc/​authlib/​authmysqlrc **
 +\\ ** /​usr/​local/​etc/​postfix/​mysqlLookupMaps/​alias.conf **
 +\\ ** /​usr/​local/​etc/​postfix/​mysqlLookupMaps/​domain.conf **
 +\\ ** /​usr/​local/​etc/​postfix/​mysqlLookupMaps/​mailbox.conf **
 +\\ ** /​usr/​local/​etc/​postfix/​mysqlLookupMaps/​quota.conf ** 
 +\\ ** /​usr/​local/​etc/​postfix/​mysqlLookupMaps/​sender.conf **
 +\\ ** /​usr/​local/​www/​postfixadmin/​config.inc.php **</​note> ​
 +
 +Редактируем файл ** /​usr/​local/​www/​postfixadmin/​config.inc.php **.
 +
 +<​code>​
 +#
 +# /​usr/​local/​www/​postfixadmin/​config.inc.php
 +#
 +
 +//​Указываем,​ где у нас установлен postfixadmin
 +$CONF['​postfix_admin_url'​] = '​http://​postfix-admin.sys-adm.org.ua/';​
 +$CONF['​postfix_admin_path'​] = '/​usr/​local/​www/​postfixadmin/';​
 +
 +// Язык интерфейса. Список всех языков можно посмотреть в папке '​./​languages'​
 +$CONF['​default_language'​] = '​ru';​
 +
 +// Параметры БД. Здесь необходимо указать тип БД (MySQL или PostgreSQL),​
 +// имя пользователя и пароль,​ использующиеся при подключении,​ а также имя БД.
 +// mysql - MySQL 3.23 and 4.0
 +// mysqli - MySQL 4.1+
 +// pgsql - PostgreSQL
 +$CONF['​database_type'​] = '​mysqli';​
 +$CONF['​database_host'​] = '​localhost';​
 +$CONF['​database_user'​] = '​postfixadmin';​
 +$CONF['​database_password'​] = '​postfixadmin';​
 +$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'​ => '​abuse@sys-adm.org.ua',​
 +        '​hostmaster'​ => '​hostmaster@sys-adm.org.ua',​
 +        '​postmaster'​ => '​postmaster@sys-adm.org.ua',​
 +        '​webmaster'​ => '​webmaster@sys-adm.org.ua'​
 +);
 +
 +// Использовать имя домена в пути к почтовому ящику.
 +// YES: /​var/​spool/​mail/​sys-adm.org.ua/​alex
 +// NO: /​var/​spool/​mail/​alex
 +$CONF['​domain_path'​] = '​YES';​
 +
 +// Включать имя домена в имя почтового ящика
 +// YES: /​var/​spool/​mail/​alex@sys-adm.org.ua
 +// NO: /​var/​spool/​mail/​alex
 +$CONF['​domain_in_mailbox'​] = '​YES';​
 +
 +// $CONF['​domain_in_mailbox'​] = '​YES'​ + $CONF['​domain_path'​] = '​YES'​
 +// /​var/​spool/​mail/​sys-adm.org.ua/​alex@sys-adm.org.ua/​
 +
 +// Значения по умолчанию при создании домена. Количество алиасов,​
 +// почтовых ящиков и максимальная квота в Мб. Я специально указал квоту
 +// равную 0, т.е. анлим, иначе себе вы тоже не сможете задать размер
 +// ящика больше этого значения.
 +$CONF['​aliases'​] = '​10';​
 +$CONF['​mailboxes'​] = '​50';​
 +$CONF['​maxquota'​] = '​0';​
 +
 +// Позволяет задавать квоты при создании почтового ящика
 +$CONF['​quota'​] = '​YES';​
 +
 +// Вы можете использовать '​1024000'​ или '​1048576'​
 +$CONF['​quota_multiplier'​] = '​1024000';​
 +
 +// Позволяет устанавливать дополнительные параметры транспорта для домена
 +$CONF['​transport'​] = '​NO';​
 +
 +// Следующих два параметра используются для организации DNS.
 +// Лучше их не использовать.
 +$CONF['​vacation'​] = '​NO';​
 +$CONF['​vacation_domain'​] = '​autoreply.sys-adm.org.ua';​
 +
 +// Управления алиасами,​ которые создает 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.sys-adm.org.ua/';​
 +
 +// Текст письма привествия. Это письмо будет высылаться на каждый
 +// создаваемый почтовый ящик.
 +$CONF['​welcome_text'​] = <<<​EOM
 +С уважением,​ системный администратор.
 +EOM; 
 +</​code>​
 +
 +\\ Перегружаем apache и пробуем открыть главную страницу postfixadmin - http://​postfix-admin.sys-adm.org.ua/​.
 +
 +<cli>
 +# /​usr/​local/​etc/​rc.d/​apache.sh restart
 +Stopping apache.
 +Waiting for PIDS: 1810.
 +Starting apache. </​cli>​
 +
 +\\ Если мы производим настройку первый раз, то нам предлагают перейти по ссылке setup. Если все правильно настроенно,​ то мы увидим [[  http://​sys-adm.org.ua/​mail/​postfixadmin.html | следующую страницу ]].
 +
 +\\ Переходим по ссылке ** admin section ** (логин и пароль по умолчанию - admin/​admin). Создаем домен (в моем случае sys-adm.org.ua) и три почтовыx ящика, например,​ alex@sys-adm.org.ua,​ quota@sys-adm.org.ua и virusalert@sys-adm.org.ua (этот ящик пригодится для проверки антивируса). Для ящика quota@sys-adm.org.ua задаем маленькую квоту, например,​ 2 Мб. При этом у вас должна быть примерно такая [[ http://​sys-adm.org.ua/​images/​mail/​pa-mailbox-list.png | структура ]].
 +
 +\\ При создании ящика в log-файле должно быть такое:
 +
 +<​cli> ​
 +# cat /​var/​log/​maillog | grep 51F94B851
 +Feb 10 13:40:58 freebsd postfix/​smtpd[1967]:​ 51F94B851: client=localhost.sys-adm.org.ua[127.0.0.1]
 +Feb 10 13:40:58 freebsd postfix/​cleanup[1969]:​ 51F94B851: message-id=<​20080210114058.51F94B851@freebsd.sys-adm.org.ua>​
 +Feb 10 13:40:58 freebsd postfix/​qmgr[1964]:​ 51F94B851: from=<>,​ size=404, nrcpt=1 (queue active)
 +Feb 10 13:40:58 freebsd postfix/​virtual[1970]:​ 51F94B851: to=<​alex@sys-adm.org.ua>,​ relay=virtual,​ delay=0.22, delays=0.13/​0.06/​0/​0.03,​ dsn=2.0.0, status=sent (delivered to maildir)
 +Feb 10 13:40:58 freebsd postfix/​qmgr[1964]:​ 51F94B851: removed </​cli>​
 +
 +<cli>
 +# cat /​var/​log/​maillog | grep 739C4B83B
 +Feb 10 13:42:36 freebsd postfix/​smtpd[1967]:​ 739C4B83B: client=localhost.sys-adm.org.ua[127.0.0.1]
 +Feb 10 13:42:36 freebsd postfix/​cleanup[1969]:​ 739C4B83B: message-id=<​20080210114236.739C4B83B@freebsd.sys-adm.org.ua>​
 +Feb 10 13:42:36 freebsd postfix/​qmgr[1964]:​ 739C4B83B: from=<>,​ size=406, nrcpt=1 (queue active)
 +Feb 10 13:42:36 freebsd postfix/​virtual[1970]:​ 739C4B83B: to=<​quota@sys-adm.org.ua>,​ relay=virtual,​ delay=0.1, delays=0.08/​0.01/​0/​0.01,​ dsn=2.0.0, status=sent (delivered to maildir)
 +Feb 10 13:42:36 freebsd postfix/​qmgr[1964]:​ 739C4B83B: removed </​cli>​
 +
 +<​cli> ​
 +# cat /​var/​log/​maillog | grep C5ED3B842
 +Feb 10 13:42:41 freebsd postfix/​smtpd[1967]:​ C5ED3B842: client=localhost.sys-adm.org.ua[127.0.0.1]
 +Feb 10 13:42:41 freebsd postfix/​cleanup[1969]:​ C5ED3B842: message-id=<​20080210114241.C5ED3B842@freebsd.sys-adm.org.ua>​
 +Feb 10 13:42:41 freebsd postfix/​qmgr[1964]:​ C5ED3B842: from=<>,​ size=416, nrcpt=1 (queue active)
 +Feb 10 13:42:41 freebsd postfix/​virtual[1970]:​ C5ED3B842: to=<​virusalert@sys-adm.org.ua>,​ relay=virtual,​ delay=0.04, delays=0.03/​0/​0/​0.01,​ dsn=2.0.0, status=sent (delivered to maildir)
 +Feb 10 13:42:41 freebsd postfix/​qmgr[1964]:​ C5ED3B842: removed </​cli>​
 +
 +\\ После настройки удаляем файл setup.php
 +
 +\\ Если все правильно настроено,​ то в ** /​var/​spool/​mail/​ ** должны появиться следующие папки:
 +
 +<cli>
 +# ls -l /​var/​spool/​mail/​
 +total 2
 +drwx------ ​ 5 virtual ​ virtual ​ 512 Feb 10 13:42 sys-adm.org.ua
 +
 +# ls -l /​var/​spool/​mail/​sys-adm.org.ua/​
 +total 6
 +drwx------ ​ 5 virtual ​ virtual ​ 512 Feb 10 13:40 alex@sys-adm.org.ua
 +drwx------ ​ 5 virtual ​ virtual ​ 512 Feb 10 13:42 quota@sys-adm.org.ua
 +drwx------ ​ 5 virtual ​ virtual ​ 512 Feb 10 13:42 virusalert@sys-adm.org.ua
 +</​cli>​
 +
 +\\ Эти папки появляются только после создания почтовых ящиков в postfixadmin. При создании домена в postfixadmin никакие папки не создаются.
 +
 +===== Тестирование почтовой системы =====
 +
 +\\ Отправка письма с аутентификацией
 +
 +<cli>
 +# cat maillog
 +Feb 10 14:11:48 freebsd postfix/​smtpd[2200]:​ connect from alex.sys-adm.local[192.168.127.111]
 +Feb 10 14:11:48 freebsd postfix/​cleanup[2204]:​ B6FBAB865: message-id=<​20080210121148.B6FBAB865@freebsd.sys-adm.org.ua>​
 +Feb 10 14:11:48 freebsd postfix/​qmgr[2198]:​ B6FBAB865: from=<>,​ size=260, nrcpt=1 (queue active)
 +Feb 10 14:11:48 freebsd postfix/​virtual[2205]:​ B6FBAB865: to=<​alex@sys-adm.org.ua>,​ relay=virtual,​ delay=0.08, delays=0.02/​0.04/​0/​0.01,​ dsn=2.0.0, status=deliverable (delivers to maildir)
 +Feb 10 14:11:48 freebsd postfix/​qmgr[2198]:​ B6FBAB865: removed
 +Feb 10 14:11:51 freebsd postfix/​smtpd[2200]:​ AFD8AB866: client=alex.sys-adm.local[192.168.127.111],​ sasl_method=CRAM-MD5,​ sasl_username=alex@sys-adm.org.ua
 +Feb 10 14:11:51 freebsd postfix/​cleanup[2204]:​ AFD8AB866: message-id=<​56523328.20080210154429@sys-adm.org.ua>​
 +Feb 10 14:11:51 freebsd postfix/​qmgr[2198]:​ AFD8AB866: from=<​alex@sys-adm.org.ua>,​ size=778, nrcpt=1 (queue active)
 +Feb 10 14:11:51 freebsd postfix/​virtual[2205]:​ AFD8AB866: to=<​quota@sys-adm.org.ua>,​ relay=virtual,​ delay=3.1, delays=3.1/​0.01/​0/​0.01,​ dsn=2.0.0, status=sent (delivered to maildir)
 +Feb 10 14:11:51 freebsd postfix/​qmgr[2198]:​ AFD8AB866: removed
 +Feb 10 14:11:51 freebsd postfix/​smtpd[2200]:​ disconnect from alex.sys-adm.local[192.168.127.111] </​cli>​
 +
 +\\ Обращаем внимание на следующее строчки:​
 +
 +    * ** sasl_method=CRAM-MD5 ** - метод аутентификации;​
 +    * ** sasl_username=alex@sys-adm.org.ua ** - имя пользователя в почтовом клиенте необходимо указывать вместе с именем домена
 +
 +\\ Получение письма по протоколу pop3
 +
 +<cli> Feb 10 14:08:38 freebsd authdaemond:​ Authenticated:​ sysusername=<​null>,​ sysuserid=1981,​ sysgroupid=1981,​ homedir=/​var/​spool/​mail,​ address=alex@sys-adm.org.ua,​ fullname=sysadmin,​ maildir=sys-adm.org.ua/​alex@sys-adm.org.ua/,​ quota=10240000,​ options=<​null>​
 +Feb 10 14:08:38 freebsd authdaemond:​ Authenticated:​ clearpasswd=123,​ passwd=<​null>​
 +Feb 10 14:08:38 freebsd courier-imap:​ LOGIN, user=alex@sys-adm.org.ua,​ ip=[192.168.127.111],​ port=[1280]
 +Feb 10 14:08:38 freebsd courier-imap:​ LOGOUT, user=alex@sys-adm.org.ua,​ ip=[192.168.127.111],​ port=[1280],​ top=0, retr=477, rcvd=40, sent=706, time=0 </​cli>​
 +
 +\\ Проверим поддержку квот. Для этого отправим пользователю quota@sys-adm.org.ua,​ у которого квота 2Мб, письмо с вложением ~3МБ
 +
 +<cli>
 +# cat maillog
 +Feb 10 14:22:54 freebsd postfix/​smtpd[2237]:​ connect from alex.sys-adm.local[192.168.127.111]
 +Feb 10 14:22:54 freebsd postfix/​smtpd[2237]:​ D7AD2B822: client=alex.sys-adm.local[192.168.127.111],​ sasl_method=CRAM-MD5,​ sasl_username=alex@sys-adm.org.ua Feb 10 14:22:54 freebsd postfix/​cleanup[2240]:​ D7AD2B822: message-id=<​452854827.20080210180915@sys-adm.org.ua>​
 +Feb 10 14:22:55 freebsd postfix/​qmgr[2198]:​ D7AD2B822: from=<​alex@sys-adm.org.ua>,​ size=4422958,​ nrcpt=1 (queue active)
 +Feb 10 14:22:55 freebsd postfix/​smtpd[2237]:​ disconnect from alex.sys-adm.local[192.168.127.111]
 +Feb 10 14:22:56 freebsd postfix/​virtual[2241]:​ D7AD2B822: to=<​quota@sys-adm.org.ua>,​ relay=virtual,​ delay=1.3, delays=1.1/​0.05/​0/​0.24,​ dsn=5.2.3, status=bounced (maildir delivery failed: "​Sorry,​ the user's maildir has overdrawn his diskspace quota, please try again later"​)
 +Feb 10 14:22:56 freebsd postfix/​cleanup[2240]:​ 2A834B826: message-id=<​20080210122256.2A834B826@freebsd.sys-adm.org.ua>​
 +Feb 10 14:22:56 freebsd postfix/​bounce[2242]:​ D7AD2B822: sender non-delivery notification:​ 2A834B826
 +Feb 10 14:22:56 freebsd postfix/​qmgr[2198]:​ 2A834B826: from=<>,​ size=2577, nrcpt=1 (queue active)
 +Feb 10 14:22:56 freebsd postfix/​qmgr[2198]:​ D7AD2B822: removed
 +Feb 10 14:22:56 freebsd postfix/​virtual[2241]:​ 2A834B826: to=<​alex@sys-adm.org.ua>,​ relay=virtual,​ delay=0.03, delays=0.02/​0.01/​0/​0.01,​ dsn=2.0.0, status=sent (delivered to maildir)
 +Feb 10 14:22:56 freebsd postfix/​qmgr[2198]:​ 2A834B826: removed </​cli>​
 +
 +\\ Как видно из log-файла - // "​status=bounced (maildir delivery failed: "​Sorry,​ the user's maildir has overdrawn his diskspace quota, please try again later"​)",​ // поддержка квот работает. Текст сообщения можно задать в main.cf в параметре [[ http://​www.postfix.org/​Documentation/​postconf.5.html#​virtual_maildir_limit_message | virtual_maildir_limit_message ]].
 +
 +\\ На RHEL системах поддержка квот отсутствует,​ чтобы ее использовать вам необходимо пересобрать postfix и применить [[ http://​vda.sourceforge.net/​VDA/​ | патч ]] , который добавляет данный функционал.
 +
 +\\ А теперь попробуем отправить письмо в мир, без аутентификации.
 +
 +<cli>
 +# telnet 192.168.127.1 25
 +Trying 192.168.127.1...
 +Connected to freebsd.sys-adm.local.
 +Escape character is '​^]'​.
 +220 freebsd.sys-adm.org.ua ESMTP
 +helo alex.sys-adm.local
 +250 freebsd.sys-adm.org.ua
 +mail from:<​alex@sys-adm.org.ua>​
 +250 2.1.0 Ok
 +rcpt to:<​alex_hha@mail.ru>​
 +554 5.7.1 <​alex_hha@mail.ru>:​ Relay access denied
 +quit
 +221 2.0.0 Bye
 +Connection closed by foreign host. </​cli>​
 +
 +\\ При этом в log-файле должно быть следующее:​
 +
 +<cli>
 +# cat maillog
 +Feb 10 14:35:12 freebsd postfix/​smtpd[2287]:​ connect from alex.sys-adm.local[192.168.127.111]
 +Feb 10 14:35:18 freebsd postfix/​smtpd[2287]:​ NOQUEUE: reject: RCPT from alex.sys-adm.local[192.168.127.111]:​ 554 5.7.1 <​alex@mail.ru>:​ Relay access denied; from=<​alex@sys-adm.org.ua>​ to=<​alex_hha@mail.ru>​ proto=SMTP helo=<​alex.sys-adm.local>​
 +Feb 10 14:35:20 freebsd postfix/​smtpd[2287]:​ disconnect from alex.sys-adm.local[192.168.127.111] </​cli>​
 +
 +\\ Как видно из сообщения - "Relay access denied"​. Релей почты для пользователей,​ не прошедших аутентификацию запрещен.
 +
 +\\ Теперь попробуем отправить почту с несуществующего ящика внутри домена. ​
 +
 +<cli>
 +# telnet 192.168.127.1 25
 +Trying 192.168.127.1...
 +Connected to freebsd.sys-adm.local.
 +Escape character is '​^]'​.
 +220 freebsd.sys-adm.org.ua ESMTP
 +helo alex.sys-adm.local
 +250 freebsd.sys-adm.org.ua
 +mail from:<​user1@sys-adm.org.ua>​
 +250 2.1.0 Ok
 +rcpt to:<​alex@sys-adm.org.ua>​
 +550 5.1.0 <​user1@sys-adm.org.ua>:​ Sender address rejected: User unknown
 +quit
 +221 2.0.0 Bye
 +Connection closed by foreign host. </​cli>​
 +
 +\\ Как видно из сообщения,​ наш сервер не разрешает отправлять почту с несуществующих адресов. А теперь проверим,​ что будет, когда почту будут нам отправлять с внешних почтовых серверов с несуществующих адресов. Для этого нам необходимо отправить почту с удаленного сервера от имени несуществующего пользователя.
 +
 +<cli>
 +# telnet localhost 25
 +Trying 127.0.0.1...
 +Connected to localhost.somedomain.org.ua.
 +Escape character is '​^]'​.
 +220 mail.somedomain.org.ua ESMTP
 +helo localhost
 +250 mail.somedomain.org.ua
 +mail from:<​user@somedomain.org.ua>​
 +250 2.1.0 Ok
 +rcpt to:<​alex@sys-adm.org.ua>​
 +250 2.1.5 Ok
 +data
 +354 End data with <​CR><​LF>​.<​CR><​LF>​
 +Hello world
 +.
 +250 2.0.0 Ok: queued as B9E0EB833
 +quit
 +221 2.0.0 Bye
 +Connection closed by foreign host. </​cli>​
 +
 +<cli>
 +# cat /​var/​log/​maillog | grep B9E0EB833
 +Feb 10 19:28:01 mail postfix/​smtpd[1058]:​ B9E0EB833: client=localhost.somedomain.org.ua[127.0.0.1]
 +Feb 10 19:28:05 mail postfix/​cleanup[1060]:​ B9E0EB833: message-id=<​20080210172801.B9E0EB833@mail.somedomain.org.ua>​
 +Feb 10 19:28:05 mail postfix/​qmgr[1056]:​ B9E0EB833: from=<​user@somedomain.org.ua>,​ size=376, nrcpt=1 (queue active)
 +Feb 10 19:28:08 mail postfix/​smtp[1061]:​ B9E0EB833: to=<​alex@sys-adm.org.ua>,​ relay=freebsd.sys-adm.org.ua[212.42.65.100]:​25,​ delay=7.8, delays=4.6/​0/​0.01/​3.1,​ dsn=5.1.7, status=bounced (host freebsd.sys-adm.org.ua[212.42.65.100] said: 550 5.1.7 <​user@somedomain.org.ua>:​ Sender address rejected: undeliverable address: host mail.somedomain.org.ua[217.20.223.100] said: 550 5.1.1 <​user@somedomain.org.ua>:​ Recipient address rejected: User unknown (in reply to RCPT TO command) (in reply to RCPT TO command))
 +Feb 10 19:28:08 mail postfix/​bounce[1075]:​ B9E0EB833: sender non-delivery notification:​ 45DACB835
 +Feb 10 19:28:08 mail postfix/​qmgr[1056]:​ B9E0EB833: removed </​cli> ​
 +
 +\\ А теперь посмотрим log-файл на нашем почтовом сервере
 +
 +<cli>
 +# cat maillog
 +Feb 10 19:28:15 freebsd postfix/​smtpd[1306]:​ connect from mail.somedomain.org.ua[217.20.223.100]
 +Feb 10 19:28:15 freebsd postfix/​cleanup[1388]:​ 3EA3CB825: message-id=<​20080210172815.3EA3CB825@freebsd.sys-adm.org.ua>​
 +Feb 10 19:28:15 freebsd postfix/​qmgr[773]:​ 3EA3CB825: from=<>,​ size=260, nrcpt=1 (queue active)
 +Feb 10 19:28:15 freebsd postfix/​smtp[1390]:​ 3EA3CB825: to=<​user@somedomain.org.ua>,​ relay=mail.somedomain.org.ua[217.20.223.100]:​25,​ delay=0.17, delays=0.06/​0.09/​0.02/​0.01,​ dsn=5.1.1, status=undeliverable (host mail.somedomain.org.ua[217.20.223.100] said: 550 5.1.1 <​user@somedomain.org.ua>:​ Recipient address rejected: User unknown (in reply to RCPT TO command))
 +Feb 10 19:28:15 freebsd postfix/​qmgr[773]:​ 3EA3CB825: removed
 +Feb 10 19:28:18 freebsd postfix/​smtpd[1306]:​ NOQUEUE: reject: RCPT from mail.somedomain.org.ua[217.20.223.100]:​ 550 5.1.7 <​user@somedomain.org.ua>:​ Sender address rejected: undeliverable address: host mail.somedomain.org.ua[217.20.223.100] said: 550 5.1.1 <​user@somedomain.org.ua>:​ Recipient address rejected: User unknown (in reply to RCPT TO command); from=<​user@somedomain.org.ua>​ to=<​alex@sys-adm.org.ua>​ proto=ESMTP helo=<​mail.somedomain.org.ua>​
 +Feb 10 19:28:18 freebsd postfix/​smtpd[1306]:​ disconnect from mail.somedomain.org.ua[217.20.223.100] </​cli>​
 +
 +\\ Как видно из сообщения,​ наш почтовый сервер не принимает почту, если ящик отправителя не существует.
 +
 +\\ Но здесь также есть свои подводные камни. Например,​ yandex отправляет открытки с несуществующего адреса,​ а mxs.mail.ru всегда говорит,​ что ящик существует. Так что подобные домены/​серверы необходимо вносить в исключения.
 +
 +\\ А теперь попробуем,​ аутентифицировавшись под пользователем alex@sys-adm.org.ua,​ отправить почту от имени quota@sys-adm.org.ua.
 +
 +<cli>
 +# telnet 192.168.127.1 25
 +Trying 192.168.127.1...
 +Connected to freebsd.sys-adm.local.
 +Escape character is '​^]'​.
 +220 freebsd.sys-adm.org.ua ESMTP
 +ehlo alex.sys-adm.local
 +250-freebsd.sys-adm.org.ua
 +250-PIPELINING
 +250-SIZE 5242880
 +250-ETRN
 +250-AUTH LOGIN PLAIN CRAM-MD5
 +250-AUTH=LOGIN PLAIN CRAM-MD5
 +250-ENHANCEDSTATUSCODES
 +250-8BITMIME
 +250 DSN
 +auth plain
 +334
 +AGFsZXhAc3lzLWFkbS5vcmcudWEAMTIz
 +235 2.0.0 Authentication successful
 +mail from:<​quota@sys-adm.org.ua>​
 +250 2.1.0 Ok
 +rcpt to:<​alex@sys-adm.org.ua>​
 +553 5.7.1 <​quota@sys-adm.org.ua>:​ Sender address rejected: not owned by user alex@sys-adm.org.ua
 +quit
 +221 2.0.0 Bye
 +Connection closed by foreign host. </​cli>​
 +
 +\\ Для того, чтобы сгенерировать ответ для PLAIN аутентификации выполните следующую команду:​
 +
 +<cli>
 +# perl -MMIME::​Base64 -e 'print encode_base64("​\0alex\@sys-adm\.org\.ua\000123"​)'​
 +AGFsZXhAc3lzLWFkbS5vcmcudWEAMTIz </​cli>​
 +
 +\\ На этом базовую настройку МТА можно считать завершенной.
 +
 +\\ После настройки MTA рекомендую проверить систему на http://​test.nettools.ru/,​ на возможность использования почтового сервера в качестве пересыльщика почты (mail relay). В поле Mail Relay вводим ip или dns имя своего почтового сервера и нажимаем на кнопку ОК. После некоторого времени система напишет результат. Если все настроено правильно,​ то мы должны увидеть следующую страницу.
 +
 +\\ Если у вас такое же сообщение,​ то поздравляю вас, ваша почтовая система готова к работе.
 +
 +===== Примечания =====
 +
 +<​note>​** reject_unverified_sender и подводные камни **
 +\\ Применять данную опцию следует с умом. Так как на очень нагруженных серверах она может создать проблемы. Смысл ее заключается в проверке существования адреса отправителя.
 +
 +\\ Проверка осуществляется путем анализа кода ответа на сервере отправителя. Например,​ если нам пришло письмо от пользователя user@domain.com с сервера mx1.domain.com. То после команды mail from:<​user@domain.com>​ наш сервер подсоединится к mx1.domain.com и проверит код ответа после команды rcpt to:<​user@domain.com>​.
 +
 +\\ Если mx1.domain.com ответит 2xx, то наш сервер считает,​ что ящик существует (deliverable) и smtp сессия продолжится,​ если же mx1.domain.com вернет 550, то наш сервер будет считать,​ что ящик отсутствует (undeliverable) и не примет это письмо. Если по каким либо причинам не удалось связаться с mx1.domain.com,​ то наш сервер отвергнет письмо с результатом 450, даже не смотря на то, что unverified_sender_reject_code установлен в 550.
 +
 +\\ Для некоторых доменов данная проверка вообще не имеет смысла,​ например для домена mail.ru, ответ всегда будет положительным. Так что для снижения нагрузки следует вносить в исключения домены,​ которым вы доверяете или для которых адрес отправителя нельзя проверить.
 +
 +\\ Так же для снижения нагрузки можно кешировать результаты проверок и сохранять их в файл. По умолчанию результаты хранятся в памяти и при перезагрузке postfix теряются. Для этого используйте следующий параметр:​
 +** address_verify_map = btree:/​var/​spool/​postfix/​verified_sender **
 +</​note>​
 +
 +<​note>​ ** reject_authenticated_sender_login_mismatch **
 +\\ Если вам необходимо сделать так, чтобы некоторые пользователи могли отправлять почту не только от своего имени, но и от других,​ то необходимо изменить параметр ** smtpd_sender_login_maps **.
 +</​note>​
 +<cli>
 +smtpd_sender_login_maps = hash:​$base/​sender_logins_maps
 +/​usr/​local/​etc/​postfix/​sender_logins_maps
 +user@domain.com sasl_login_name1,​ sasl_login_name2,​ ... sasl_login_namex
 +</​cli>​
 +
 +При таких настройках адрес user@domain.com в поле mail from, смогут указывать пользователи,​ прошедшие аутентификацию под именами sasl_login_name1,​ sasl_login_name2 и т.д.
 +
 +<​note>​ ** Postfixadmin и MySQL 4.1.х **
 +\\ Несколько раз сталкивался с такой проблемой. Если в системе установлен MySQL 4.1.x, то согласно документации необходимо установить $CONF['​database_type'​] = '​mysqli'​. Но после этого при попытке зайти в postfixadmin выдается следующее сообщение:​
 +
 +\\ ** DEBUG INFORMATION:​ **
 +\\ ** MySQL 4.1 functions not available! **
 +\\ ** database_type = '​mysqli'​ in config.inc.php,​ are you using a different database? **
 +
 +\\ ** Please check the documentation and website for more information. **
 +
 +Исправляется данная ошибка путем установления ** $CONF['​database_type'​] = '​mysql';​ ** </​note> ​
 +
 +
 +<​note>​ ** Postfixadmin и русский язык **
 +\\ Если вы выбрали русский язык, то придется немного подправить файл ** /​templates/​admin_menu.tpl **, т.к. иначе меню будут "​налезать"​ друг на друга. Да и качество перевода на русский язык мне не очень понравилось. Поэтому,​ я немного подрправил эти файлы, берем ** [[ http://​sys-adm.org.ua/​mail/​tools/​postfixadmin.tar.bz2 | два исправленных файла ]] ** и копируем поверх существующих. </​note>​
 +
 +<note warning>​При размещении данного материала у себя на сайте, просьба указывать ссылку на оригинальный сайт - www.sys-adm.org.ua.</​note>​
mail/mail-howto-p1.txt · Последние изменения: 2009/09/11 15:58 (внешнее изменение)