четверг, 5 ноября 2009 г.

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

Перед тем, как приступить к настройке почтового сервера, необходимо убедиться в том, что на сервере имеется прямой доступ в Интернет, то есть на одном из интерфейсов имеется так называемый «белый» IP. Также на сервере должна быть доступна служба DNS. Поскольку почтовый сервер очень часто обращается к службе DNS, может потребоваться настроить локальный кэширующий DNS-сервер для снижения нагрузки на сеть и повышения отзывчивости подсистемы DNS.

Настраиваемая почтовая система обладает возможностями по администрированию доменов и почтовых ящиков через веб-интерфейс PostfixAdmin, в качестве основного домена в статье фигурирует домен stupin.homelinux.org, все учётные записи при этом хранятся в базе данных MySQL. Имеется почтовый клиент с веб-интерфейсом SquirrelMail, фильтрация спама средствами PostGrey, фильтрация вирусов средствами ClamSMTPd, отметка подозрительных писем с помощью SpamPd и SpamAssassin.

Не смотря на то, что настройка почтовой системы рассмотрена довольно подробно, данная статья конечно же не претендует на полноту. За кадром остаётся настройка защищённого подключения к веб-серверу, тонкая настройка фильтрации почты с помощью SpamAssassin, Postfix и PostGrey, повышение безопасности почтовой системы посредством запуска отдельных подсистем от имени непривилегированных пользователей и т.п. Статью можно использовать в качестве опорной для построения более развитой почтовой системы.

Настройка Lighttpd

Первым делом устанавливаем веб-сервер lighttpd, php.
# aptitude install lighttpd php5-cgi php5-json
Включаем модуль fastcgi веб-сервера lighttpd:
# lighty-enable-mod fastcgi
Заменяем в конфигурации модуля /etc/lighttpd/conf-enabled/10-fastcgi.conf интерпретатор PHP4 на PHP5:
fastcgi.server = (
  ".php" =>
  (
    (
      "bin-path" => "/usr/bin/php5-cgi",
      "socket" => "/tmp/php.socket",
      "max-procs" => 2,
      "idle-timeout" => 20,
      "bin-environment" =>
      (
        "PHP_FCGI_CHILDREN" => "4",
        "PHP_FCGI_MAX_REQUESTS" => "10000"
      ),
      "bin-copy-environment" =>
      (
        "PATH", "SHELL", "USER"
      ),
      "broken-scriptfilename" => "enable",
      "check-local" => "disable"
    )
  )
)
Перезапускаем веб-сервер:
# /etc/init.d/lighttpd restart
Настройка PostfixAdmin

Качаем последнюю стабильную версию PostfixAdmin со страницы http://sourceforge.net/projects/postfixadmin/files/. Для Debian существует готовый пакет postfixadmin_2.2.1.1_all.deb, его и скачаем:
$ wget "http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.2.1.1/postfixadmin_2.2.1.1_all.deb?use_mirror=sunet"
Установим пакет в систему:
# dpkg -i postfixadmin_2.2.1.1_all.deb
Пакет устанавливает все файлы проекта в каталог /usr/share/postfixadmin, файлы документации - в каталог /usr/share/doc/postfixadmin. Также создаются файлы с настройками самого PostfixAdmin - /etc/postfixadmin/config.inc.php и настройками Apache 2 - /etc/apache2/conf.d/postfixadmin.

Поскольку я собираюсь пользоваться PostfixAdmin на web-сервере Lighttpd, заглянем в файл /etc/apache2/conf.d/postfixadmin:
Alias /postfixadmin /usr/share/postfixadmin
И создадим на его основе настройки для Lighttpd - в файл /etc/lighttpd/lighttpd.conf нужно будет добавить строчки:
alias.url += (
  "/postfixadmin" => "/usr/share/postfixadmin",
)
Дополнительно, защитим каталог на web-сервере от случайных зевак:
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/htdigest"
auth.require = (
  "/posfixadmin" =>
  (
    "method" => "digest",
    "realm" => "PostfixAdmin",
    "require" => "user=morbo"
  )
)
И с помощью утилиты htdigest из пакета apache2-utils задаём пароль для пользователя morbo и рилма PostfixAdmin:
$ htdigest /etc/lighttpd/htdigest "PostfixAdmin" morbo
Настроим Postfix Admin в соответствии с вашей спецификой (например, зададим подходящий пароль к базе данных, настроим домен по умолчанию и т.п.)

Отредактируем файл /usr/share/postfixadmin/config.inc.php и укажем следующее:
# vi config.inc.php
[...]
$CONF['configured'] = true;
$CONF['postfix_admin_url'] = 'http://stupin.homelinux.org/postfixadmin';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'SecretPassword!';
$CONF['database_name'] = 'postfix';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['encrypt'] = 'cleartext';
Просмотрите остаток файла, если вам захочется сделать более тонкие настройки.

Вы можете быстро заменить домен по умолчанию на ваш собственный:
$ replace "change-this-to-your.domain.tld" "stupin.homelinux.org" - /usr/share/postfixadmin/config.inc.php
Создайте базу данных и пользователя в mysql:
$ mysql -u root -p
mysql> create database postfix;
mysql> grant all privileges on postfix.* to 'postfixadmin'@'localhost' identified by 'SecretPassword!';
mysql> flush privileges;
mysql> q
Откройте браузер и перейдите по ссылке http://stupin.homelinux.org/postfix/setup.php или http://ваш-IP/postfixadmin/. Будет предложено запустить процесс настройки. Удостоверьтесь, что все проверки установщика сообщают 'OK'.

Рекомендуется удалить setup.php.

Теперь перейдите по ссылке http://stupin.homelinux.org/postfixadmin/admin. Вы должны получить приглашение. Войдите с использованием почтового ящика администратора, заведённого ранее на странице настройки. Отсюда вы можете добавлять домены, почтовые ящики и т.п. Но Postfix этого не увидит. Нам нужно установить Postfix и настроить его.

Настройка Postfix

Установим Postfix и SASL2 с поддержкой MySQL:
# aptitude install postfix-mysql postfix-tls libsasl2-modules-sql libsasl2-modules
Добавим в файл /etc/postfix/main.cf следующие строки:
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:106
virtual_mailbox_base = /var/spool/mail/virtual
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 106
virtual_transport = virtual
virtual_uid_maps = static:106
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,
  reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient,
  reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
ЗАМЕЧАНИЕ: UID и GID равные 106 на вашей системе могут быть другими. Посмотрите на UID и GID пользователя postfix (или vmail) в файле /etc/passwd и укажите их. Например, на моём сервере:
# grep postfix /etc/passwd
postfix:x:102:105::/var/spool/postfix:/bin/false
--> uid: 102; gid: 105
Создайте файл /etc/postfix/mysql_virtual_alias_maps.cf:
user = postfix
password = SecretPassword!
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address
Файл mysql_virtual_domains_maps.cf:
user = postfix
password = SecretPassword!
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
Файл mysql_virtual_mailbox_maps.cf:
user = postfix
password = SecretPassword!
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
Если вы хотите разрешить ретрансляцию почты через ваш сервер после SMTP AUTH, пропишите в файле /etc/postfix/sasl/smtpd.conf следующие настройки:
pwcheck_method: auxprop
mech_list: PLAIN LOGIN
auxprop_plugin: sql
sql_verbose: yes
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: postfix
sql_passwd: SecretPassword!
sql_database: postfix
sql_select: select password from mailbox where username = '%u@%r'
Создайте структуру каталогов, включая каталог для первого домена. Вы так же можете войти в PostfixAdmin и создать учётную запись 'test' для домена stupin.homelinux.org.
# mkdir -p /var/spool/mail/virtual/stupin.homelinux.org/test
# chmod -R 770 /var/spool/mail/virtual
# chown -R postfix:postfix /var/spool/mail/virtual
Настройка Dovecot

Установим Dovecot с поддержкой MySQL:
# aptitude install dovecot-common dovecot-imapd dovecot-pop3d
Отредактируем файл /etc/dovecot/dovecot-mysql.conf с настройками Dovecot/MySQL, воспользовавшись следующими опциями:
driver = mysql
connect = dbname=postfix user=postfixadmin host=127.0.0.1 password=SecretPassword!
default_pass_scheme = PLAIN
password_query = SELECT password
                 FROM mailbox
                 WHERE username = '%u'
user_query = SELECT maildir,
                    106 AS uid,
                    106 AS gid
             FROM mailbox
             WHERE username = '%u'
Теперь настроим Dovecot на использование MySQL, задав следующие опции в файле /etc/dovecot/dovecot.conf:
protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/var/spool/mail/virtual/%d/%n
mail_access_groups = mail
first_valid_uid = 106
first_valid_gid = 106
protocol imap {
}
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}
auth default {
  mechanisms = digest-md5 plain
  passdb sql {
    args = /etc/dovecot/dovecot-mysql.conf
  }
  userdb sql {
    args = /etc/dovecot/dovecot-mysql.conf
  }
  user = root
}
Перезапустим Dovecot и Postfix и проверим их.

По завершении вы должны получить возможность добавлять новые домены, почтовые ящики, псевдонимы с помощью PostfixAdmin и получить правильно работающую систему, включая SMTP-аутентификацию. Отметим, что для работы SMTP-аутентификации saslauthd не требуется.

Настройка SquirrelMail

Устанавливаем пакет squirrelmail:
# aptitude install squirrelmail
В файл /etc/lighttpd/lighttpd.conf нужно будет добавить строчки:
alias.url += (
  "/mail" => "/usr/share/squirrelmail"
)
Настройку SquirrelMail можно осуществить с помощью ncurses-утилиты squirrelmail-configure.

Настройка плагина SquirrelMail PosfixAdmin

Для того, чтобы пользователи имели возможность самостоятельно менять свои пароли, можно установить расширение postfixadmin для squirrelmail. Адрес проекта http://squirrelmail-postfixadmin.palepurple.co.uk/

Чтобы скачать исходники проекта, необходимо поставить утилиты subversion:
# aptitude install subversion
Создадим каталог для скачиваемых из svn исходников плагина, скачаем исходники, скопируем необходимое нам, а лишнее удалим:
$ mkdir ~/squirrelmail-postfixadmin
$ cd ~/squirrelmail-postfixadmin
$ svn co -r 35 http://squirrelmail-postfixadmin.palepurple.co.uk/svn
$ mkdir ~/squirrelmail
$ cp ~/squirrelmail-postfixadmin/svn/tags/squirrelmail-postfixadmin-0.4.3/* ~/postfixadmin/
$ rm -R ~/squirrelmail-postfixadmin
Почистим исходники плагина от служебных файлов subversion:
$ find ~/postfixadmin/ -name .svn -type d -exec rm -R \{\} \;
Установим плагин в каталог squirrelmail:
# cp ~/postfixadmin /usr/share/squirrelmail/plugins/
Тонкая настройка Postfix

Во-первых, я задаю имя, которое будет использовать Postfix при отправке почты на другие почтовые серверы (в команде HELO или EHLO) или при приёме почты на 25 порту в приглашении (например, «220 stupin.homelinux.org ESMTP Postfix»):
myhostname = stupin.homelinux.org
myorigin = $myhostname
Во-вторых, укажем сети, имеющие право отправки почты без прохождения авторизации:
mynetworks = 10.16.7.0/24, 127.0.0.1
Далее, мой провайдер поместил все клиентские сети в список динамических IP, так называемый DUL. Из-за этого подавляющее большинство почтовых серверов отказываются принимать от меня почту. Чтобы отправка почты всё-таки работала, мой провайдер позволяет отправлять почту через его почтовый сервер mail.ufanet.ru:
relayhost = [mail.ufanet.ru]
И, наконец, я хочу чтобы Postfix не пытался складывать локальную почту в локальные же файлы mailbox. Вместо этого, он должен обрабатывать такую почту, как и всю остальную, то есть передавать её dovecot'у. Для этого пропишем следующую опцию:
local_transport = virtual
Настройка PostGrey

Установим postgrey:
# aptitude install postgrey

Поменять настройки можно в файле /etc/default/postgrey. Я добавил одну дополнительную опцию, которая помещает отправителя в белый список после 5 удачно пройденных тестов:
POSTGREY_OPTS="--inet=127.0.0.1:60000 --auto-whitelist-clients=5"
Настраиваем postfix на использование сервера политик postgrey. В файле /etc/postfix/main.cf к опции smtpd_recipient_restrictions в конец списка добавляем «check_policy_service inet:127.0.0.1:60000». После этого опция smtpd_recipient_restrictions в моей системе приняла следующий вид:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,
  reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient,
  reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname,
  check_policy_service inet:127.0.0.1:60000
Теперь, чтобы настройки вступили в силу, можно перезапустить postgrey и postfix:
# /etc/init.d/postgrey restart
# /etc/init.d/postfix reload
Настройка ClamSMTPD

Устанавливаем clamsmtpd (если на сервере установлен стабильный релиз Debian, то лучше подключить дополнительный репозиторий volatile, в который помещаются обновления антивирусных баз данных и систем фильтрации спама):
# aptitude install clamsmtpd
Обновляем антивирусные базы:
# freshclam -v
Настраиваем порты демона в файле /etc/clamsmtpd.conf (я изменил их следующим образом):
OutAddress: 10026
Listen: 127.0.0.1:10025
Настраиваем postfix на передачу файла в clamsmtp. Во-первых добавим в файле /etc/postfix/main.cf следующие опции:
content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings
Во-вторых, в файл /etc/postfix/master.cf добавляем следующее:
scan      unix  -       -       n       -       16      smtp
  -o smtp_send_xforward_command=yes

127.0.0.1:10026 inet  n -       n       -       16      smtpd
  -o content_filter=
  -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
  -o smtpd_helo_restrictions=
  -o smtpd_client_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks_style=host
  -o smtpd_authorized_xforward_hosts=127.0.0.0/8
Перезапускаем clamsmtpd и postfix:
# /etc/init.d/clamsmtp restart
# /etc/init.d/postfix restart
Настройка SpamPd

Устанавливаем spampd:
# aptitude install spampd
Настраиваем spampd, в файле /etc/default/spampd меняем следующие опции:
LISTENPORT=10026
DESTPORT=10027
Также необходимо поменять настройки входного порта postfix, на котором письмо принимается без дополнительных проверок. В файле /etc/postfix/master.cf меняем строку
127.0.0.1:10026 inet  n -       n       -       16      smtpd
на строку
127.0.0.1:10027 inet  n -       n       -       16      smtpd
Для вступления настроек в силу перезапускаем postfix и spampd:
# /etc/init.d/postfix restart
# /etc/init.d/spampd restart
Пояснение принципов фильтрации писем

Теперь clamsmtpd и spampd работают последовательно. Postfix получая новое письмо на порт 25, передаёт письмо на проверку на порт 10025, где его принимает clamsmtpd. Далее, проверив письмо, clamsmtpd передаёт письмо на порт 10026, где его принимает spampd. Далее, после проверки, spampd возвращает письмо Posfix'у на порт 10027. Postfix, получив письмо на порт 10027, принимает его без дополнительных проверок.

clamsmtpd работает в связке с clamav-daemon, последовательно передавая ему на проверку все секции и вложения письма.

spampd тоже работает в связке с демоном spamassassin, передавая ему на проверку письмо целиком. Важно, что в данном примере настройки, не происходит автоматическое удаление писем, похожих на спам. Вместо этого в начало темы подозрительного письма добавляется текст «*****SPAM***** », а в заголовок письма помещаются метки SpamAssassin, свидетельствующие о количестве набранных спам-баллов и описанием каждого признака спама. Для удаления подозрительных писем необходимо воспользоваться дополнительными компонентами почтовой системы.

Ссылки

  1. Настройка веб-интерфейса Clutch - взята часть про настройку Lighttpd и PHP. Не пропадать же однажды уже написанному добру?!
  2. Squirrelmail - PostfixAdmin plugin
  3. Перевод этой и следующих двух статей я сделал отчасти для того, чтобы потом по ней написать этот мануал:
  4. PostfixAdmin на Debian
  5. ClamAV + clamsmtpd + Postfix
  6. Postfix и Postgrey: Проактивный способ фильтрации спама

31 комментарий:

Unknown комментирует...

спасибо, очень кстати :)

morbo комментирует...

Будешь настраивать - обращайся, т.к. в статье есть некоторые недоработки. Помню, что были какие-то проблемы при настройке PostfixAdmin (нужно было установить дополнительный модуль для php и что-то ещё сделать). Писал в основном по памяти и по статьям, на которые ссылаюсь.

Unknown комментирует...

Спасибо еще раз.

Маленькие оЧеПятки это ерунда :)

Когда буду настраивать, если столкнусь, то сообщу где да что :)

Nik_K комментирует...

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

Задал пароль для юзера ручками с шифрованием по MD5 - заработало (ну и в запросе для довекот поменял PLAIN на PLAIN-MD5).

Пошел вкуривать, почему для PLAIN-авторизации не прокатывает заданный через postfixadmin пароль.

morbo комментирует...

Я сейчас не помню, но по-моему, нужно настроить хранение паролей в зашифрованном виде в самом PostfixAdmin.

Nik_K комментирует...

Заработало.
Сделал вот что:
postfixadmin: config.inc.php
выставил
$CONF['authlib_default_flavor'] = 'md5';

dovecot: dovecot-mysql.conf
default_pass_scheme = PLAIN-MD5

В базе пароли шифруются по методу MD5

Анонимный комментирует...

И как заставить отправлять почту? Прием почты заработал после вдумчивого исправления опечаток. А вот с отправкой затык. И в логах поствикса и довекота тишина!

morbo комментирует...

Если принимается, но не отправляется - значит с настройками Dovecot всё в порядке, а проблема с Postfix. Для начала советую отключить проверку почты на вирусы и спам и посмотреть, что будет писать Postfix в своём журнале /var/log/mail.log

Анонимный комментирует...

Спасибо за скорый ответ! Я ничего кроме постфикса и довекота не поднимал. Выше я писал, что логи пустые ( tail -f /var/log/dovecot tail -f /var/log/mail.err) Ubuntu 8.04

Швед комментирует...

спасибо, статья хорошая
но также исправил на md5, как и в предыдущих комментах

один затык - почта нормально отправляется, если почтовый клиент нахоодится в доверенной сети
если нет, если стоит в настройках авторизация SMTP - постоянно запрашивается пароль
насколько я понимаю, клиент отправляет пароль, а postfix его не принимает
но вот почему?..

Швед комментирует...

добрый день
настроил по этой статье
все работает
почти..
почта нормально отправляется из внутренней (доверенной) сети
если откуда то еще - проблемы
в почтовом клиенте ставим использовать smtp авторизацию
после этого клиент запрашивает пароль
ввод пароля ничего не дает..

morbo комментирует...

Швед, проверьте, может ли Postfix обращаться к MySQL с указанным именем и паролем доступа к базе данных. Проверьте, везде ли прописаны в конфигурации Postfix правильные SQL-запросы. В конце концов, настроенный в клиенте способ аутентификации может не поддерживаться сервером, попробуйте в настройках клиента указать другой способ.

Швед комментирует...

а как проверить, может ли Postfix обращаться к базе с указанными данными?
сам же пользователь (у меня postfixadmin) проходит проверку при обращении к базе (у меня postfix)

запросы прописан, пути правильные

клиенты разные, outlook, thunderbird..

в логе mail.warn следующее
warning: SASL LOGIN authentication failed: authentication failure

morbo комментирует...

Швед, попробуйте сделать так, как сделал Николай, отписавшийся в комментариях выше вас. Я конфигурацию с шифрованием при написании статьи не пробовал, а экспериментировать сейчас не на чем.

Швед комментирует...

да я так и сделал
проблема, мне кажется, в /etc/postfix/sasl/smtpd.conf

там стоит использовать PLAIN LOGIN
а надо MD5, насколько я понимаю, раз уж у меня пароли хранятся таким образом
но чтобы не ставил, не хочет
кто может подсказать, что надо указать в mech_list ?

morbo комментирует...

Может быть, как и в Dovecot указать PLAIN-MD5?

Швед комментирует...

не, не катит

"postfix/smtpd[20245]: warning: xsasl_cyrus_server_get_mechanism_list: no applicable SASL mechanisms

postfix/smtpd[20245]: fatal: no SASL authentication mechanisms
"
Каких только вариантов не пробовал:
#mech_list: PLAIN LOGIN
#mech_list: CRAM-MD5
#mech_list: DIGEST-MD5 PLAIN
#mech_list: PLAIN LOGIN CDRAM-MD5 DIGEST-MD5
mech_list: PLAIN LOGIN CRAM-MD5


насколько я понимаю, настроенный по этой статье сервер планируется использовать только внутри локальной сети? т.е. доступ к нему извне для отправки писем не планировался?

Швед комментирует...

проверил - если через phpmyadmin напрямую поменять пароль у пользователя без использования Md5, то при отправке сообщения и при включенной в клиент smtp авторизации, письмо нормально уходит
это говорит о том, что postfix в данном случае использует совсем не md5.

Швед комментирует...

я наверное, надоел, но похоже на то, что Sasl 2.x не умеет работать с хешироваными паролями
вроде как есть патч на это дело

по крайней мере, здесь об этом пишут
http://www.opennet.ru/openforum/vsluhforumID1/65009.html
http://www.opennet.ru/openforum/vsluhforumID1/80788.html
http://www.opennet.ru/openforum/vsluhforumID1/55675.html

Швед комментирует...

в общем, настроил авторизацию через dovecot-sasl
опять же и промежуточных звеньев меньше )

morbo комментирует...

Не поделитесь рецептом?

morbo комментирует...

Я так понимаю, вот таким образом: http://wiki.dovecot.org/HowTo/PostfixAndDovecotSASL ?

Швед комментирует...

именно =)
правда руководствовался http://rubuntu.ru/blog/471/ustanovka-pochtovogo-servera-postfix-dovecot-mysql-i-virtualnyh-domenov.html

надо еще в master.cf добавлять dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
причем вторая строчка должна начинаться с двух пробелов, что не сразу бросается в глаза, если просто копипастишь, и не знаком с синтаксисом master.cf =)

Unknown комментирует...

вот тут ещё одно решение smtp аутентификации http://www.opennet.ru/openforum/vsluhforumID1/88772.html

Ваня комментирует...

Если у вас будет минутка, можете помочь с настройкой, Я все делал по вашей статье только хранилище почты изменил
virtual_mailbox_base = /var/mail
mail_location = /var/mail/%d/%n
в логах ошибка:
imap dovecot: IMAP(zotoz@imap.XXX.ru): mail_location: Ambiguous mail location setting, don't know what to do with it: /var/mail/imap.XXX.ru/zotoz (try prefixing it with mbox: or maildir:)

morbo комментирует...

У dovecot должно быть вот так:
mail_location = maildir:/var/mail/%d/%n

Анонимный комментирует...

ПОдскажите, сижу за железным фаерволом в домене(Вин).

Почта внутри ходит отлично. А вот наружу пишет в логах:
Dec 28 13:24:28 mail-server postfix/smtp[2504]: E7EC61FC3DB: to=<*@gala.net>, relay=none, delay=70310, delays=70205/0.02/105/0, dsn=4.4.1, status=deferred (connect to aspmx5.googlemail.com[74.125.157.27]:25: Connection timed out)
Dec 28 13:24:28 mail-server postfix/smtp[2505]: connect to aspmx3.googlemail.com[74.125.127.27]:25: Connection timed out

* - заменил реальный адрес

Это я не правильно настроил что-то? Или железка не пускает?!
Причем инет(на этой машине) работает нормально.

morbo комментирует...

Во-первых, на железке нужно открыть помимо 80 TCP-порта наружу ещё и 25 порт. Во-вторых, на железке нужно настроить проброс трафика с 25 TCP-порт железки с интернет-интерфейса в локальную сеть на 25 порт вашего почтового сервера. В-третьих, нужно указать postfix'у на то, что он расположен за NAT-ом. Для этого в main.cf нужно указать опцию proxy_interfaces = 1.2.3.4, где 1.2.3.4 - это интернет-адрес вашей железки. У железки всегда должен быть именно этот адрес, нужно договориться с провайдером о статическом IP-адресе, если до этого он выдавался динамически. В-четвёртых, нужно приобрести домен DNS и настроить MX и A-записи так, чтобы они указывали на IP-адрес вашей железки. В-пятых, большинство почтовых серверов отклоняют письма от тех IP-адресов, для которых не прописана в DNS правильная PTR-запись. Нужно договориться с провайдером, чтобы они настроили PTR-запись вашего IP-адреса на одно из DNS-имён, почту которого обрабатывает ваш почтовый сервер. Вкратце так.

Анонимный комментирует...

Подскажите пожалуста, как открыть 25 порт.
Постификс не может отправить письмо, в логах:
status=defferd ( connect to 127.0.0.1[127.0.0.1]:10025: Connection refused

пытаюсь подцепиться телнетом тоже ничего не выходит

morbo комментирует...

Судя по ошибке, постфикс не может отправить письмо на локальный адрес и порт 10025. Если вы настраивали по этой статье, то значит у вас не запущен ClamSMTP.

Unknown комментирует...

Создаются две директории для почтовых ящиков.

В postfix так
ee /usr/local/etc/postfix/main.cf
virtual_mailbox_base = /var/vmail
mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
ee /usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
user = postfix
password = 123456
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username

В dovecot так
mail_location = maildir:/var/vmail/%Ld/%Ln

В /var/vmail создаются две директории
/var/vmail/domain_name/user_name - наверное создал dovecot
/var/vmail/user_name@domain_name - наверное создал postfix

Как сделать так, чтобы почта была в одной директории
/var/vmail/domain_name/user_name

Спасибо.