Установка Postfix с поддержкой IMAP

Ноябрь 2nd, 2012

Введение

В данном документе будет рассмотрена настройка почтового сервера:

  • smtp сервер - postfix (с авторизацией)
  • pop3, imap сервер - cyrus-imap
  • Почтовые пользователи - sasldb

Что будет использовано

Установка Berkeley DB

Для работы Postfix-a необходима Berkeley DB

Устанавливаем версию 4.3

cd /usr/ports/databases/db43
make install

Установка и настройка SASL2

Установка SASL2

cd /usr/ports/security/cyrus-sasl2-saslauthd

Отмечаем опцию BDB

make install

Установка и настройка Postfix-а

Установка Postfix-а

Перед установкой было бы логичным “убить” уже работающий по умолчанию sendmail

kill -KILL `head -1 /var/run/sendmail.pid`

Собственно MTA Postfix ставим из портов.

cd /usr/ports/mail/postfix
make install clean

Выбираем следующие опции установки – PCRE, SASL2, TLS, BDB, VDA.

Ближе к окончанию установки будет задано еще несколько вопросов, отвечаем на них, yes:

You need user "postfix" added to group "mail".
Would you like me to add it? - [y]?

и

Would you like to activate Postfix in /etc/mail/mailer.conf [n]?

На этом установка Postfix-а завершена.
Для запуска Postfix-а из командной строки используем:

postfix start

Смотрим запущенные процессы

ps ax | grep master

Смотрим лог на предмет отсутствия “ругательств”

cat /var/log/maillog

Для остановки Postfix-а используем:

postfix stop

Настраиваем автозапуск Postfix-а. Добавляем в /etc/rc.conf следующие строки

postfix_enable="YES"
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

Дописываем в файл /etc/periodic.conf (если он не существует то создаем его) следующие строчки:

daily_clean_hoststat_enable="NO"
daily_status_mail_reject_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

Незабываем про повторную инициализацию базу данных псевдонимов, чтоб Postfix понимал нашу базу.

newaliases

Если у Вас возникли ошибки при установке, повторяем все шаги снова. Если у вас установился какой-то порт “криво” то удаляем его при помощи make deinstall.

Настройка запуска Postfix-а в chroot окружении

Копируем необходимые файлы для запуска Postfix-а в chroot окружении

umask 022
mkdir /var/spool/postfix/etc
chmod 755 /var/spool/postfix/etc
cd /etc
cp host.conf localtime services resolv.conf /var/spool/postfix/etc

При изменении host.conf localtime services resolv.conf не забываем их копировать в “песочницу” Postfix-а.

Настраиваем syslogd, чтобы он слушал сокет внутри директории очередей Postfix. Создаем директории:

mkdir /var/spool/postfix/var
mkdir /var/spool/postfix/var/run
chmod 755 /var/spool/postfix/var
chmod 755 /var/spool/postfix/var/run

В ручную перезапускаем syslogd

kill -KILL `head -1 /var/run/syslog.pid`
syslogd -s -l /var/spool/postfix/var/run/log

Если все в порядке то дописываем в /etc/rc.conf следующее:

syslogd_flags="-s –l /var/spool/postfix/var/run/log"

Настраиваем запуск сервисов Postfix-а в chroot окружении.
Перед правкой master.cf делаем его копию

cd /usr/local/etc/postfix/
cp master.cf master.cf.original

Правим master.cf

mcedit master.cf

Ставим в колонке chroot символ 'y' у всех процессов за исключением proxymap, local, virtual и pipe
Находим строку, которая начинается с pickup и добавляем ниже две строки -o content_filter= -o receive_override_options=no_header_body_checks

Это позволит всем локальным письмам (например, от Cron-а) не подвергаются фильтрации заголовков и содержимого письма.
Сохраняем изменения в master.cf и запускаем для проверки Postfix из командной строки:

postfix start

Смотрим запущенные процессы

ps ax | grep master

Смотрим лог на предмет отсутствия “ругательств”

cat /var/log/maillog

Останавливаем Postfix:

postfix stop

Основная настройка Postfix-а

Основной конфигурационный файл Postfix-а main.cf при соответствующих настройках можно считать предварительным фильтром спама, т.к. позволяет исключить подключение к почтовому серверу не совсем “правильным” образом, что часто используется спамерами.
Переименовываем main.cf

cd /usr/local/etc/postfix/
mv main.cf main.cf.original

Создаем новый main.cf и редактируем его:

touch main.cf
mcedit main.cf

Прописываем необходимые директории

queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
sample_directory = /usr/local/etc/postfix
sendmail_path = /usr/local/sbin/sendmail
command_directory = /usr/local/sbin
manpage_directory = /usr/local/man
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
data_directory = /var/db/postfix
readme_directory = no
html_directory = no

Определяем от имени, какого пользователя запускается Postfix

mail_owner = postfix
setgid_group = maildrop

Задаем полное название сервера, предварительно меняем mail1.example.com на ваше полное имя сервера.

myhostname = mail1.example.com

Задаем домен, предварительно меняем example.com на ваш домен.

mydomain = example.com

Прописываем имя домена добавляемого к локально посланным сообщениям

myorigin = $mydomain

Прописываем для какие домены обслуживает сервер

mydestination = localhost.$mydomain, localhost, $mydomain

Задаем список надежных узлов, которые пересылают почту без smtp авторизации (для сети 10.20.30.0/24)

mynetworks = 10.20.30.40

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

relay_domains = example2.com

Ограничиваем максимальный размер письма 20MB (20*1024*1024=20971520)

message_size_limit = 20971520

Прописываем где искать маршруты доставки.
Каждый раз, когда изменяется (создается) хешируемый файл, необходимо запустить команду postmap <имя хешируемого файла>, после выполнения команды появляется файл с расширением .db. Это позволит ”понять” Postfix-у соответствующий хешируемый файл.

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

Задаем локальный транспорт

local_transport =  cyrus

Требуем отправителя представиться.
Примечание: Это связано с параметром smtpd_helo_restrictions см. ниже

smtpd_helo_required = yes

Запрещаем проверку отправителем существование адреса получателя на этапе передачи заголовка

disable_vrfy_command = yes

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

alias_maps = hash:/etc/aliases

Прописываем базу данных виртуальных псевдонимов

virtual_alias_maps = hash:/usr/local/etc/postfix/virtual

Пропускаем авторизованных клиентов, указываем, каким клиентам разрешен или запрещен доступ к почтовому серверу и определяем сайты с которых будем брать “черные” списки доменов, IP-адреса, и т.д.

smtpd_client_restrictions = 
  permit_sasl_authenticated,
  check_client_access hash:/usr/local/etc/postfix/client_access,
  reject_unknown_client_hostname,
  reject_unknown_client,
  reject_rbl_client bl.spamcop.net,
  reject_unauth_pipelining

Задаем ограничения, на приветствие отправителя HELO/EHLO.
Пропускаем авторизованных клиентов, используем файл для определения хороших и плохих “представлений” клиентов, а также не пропускаем клиентов с «неправильным» доменным именем.

smtpd_helo_restrictions = 
  permit_sasl_authenticated,
  check_helo_access hash:/usr/local/etc/postfix/helo_access,
  reject_unknown_hostname,
  reject_invalid_hostname

Задаем ограничения, которые проверяются на этапе MAIL FROM:
Пропускаем авторизованных клиентов, используем файл для определения "хороших" и "плохих" почтовых адресов отправителя,
отклоняем отправителей с неправильным доменным именем, а также если в DNS нет записей типа A или MX о домене отправителя сообщения.

smtpd_sender_restrictions = 
  permit_sasl_authenticated,
  check_sender_access hash:/usr/local/etc/postfix/sender_access,
  reject_non_fqdn_sender,
  reject_unknown_sender_domain

Задаем ограничения, которые проверяются на этапе RCPT TO:
Отклоняем получателей, с неправильным доменным именем, а также если в DNS нет записей типа A или MX о домене получателя сообщения, пропускаем авторизованных клиентов, используем файл для определения «разрешенных» и «запрещенных» получателей, в этом файле также можно будет прописать получателей, которым не нужна проверка SpamAssassin-ом.

smtpd_recipient_restrictions = 
  reject_non_fqdn_recipient,
  reject_unknown_recipient_domain,
  permit_sasl_authenticated,
  reject_unauth_destination,
  check_recipient_access hash:/usr/local/etc/postfix/recipient_access

Блокируем клиентов, которые начинают общаться слишком рано.

smtpd_data_restrictions = reject_unauth_pipelining

Строка представления нашего SMTP сервера

smtpd_banner = $myhostname ESMTP

Запрещаем использовать biff программу, которая позволяет пользователям узнать, что им пришла почта.

biff = no

Разрешаем дополнительные проверки пока отправитель передает RCPT TO: и MAIL FROM: заголовки, для детализации maillog

smtpd_delay_reject = yes

Жесткие коды ответа

unknown_client_reject_code = 550
unknown_hostname_reject_code = 550
unknown_address_reject_code = 550

настраиваем smtp авторизацию

smtpd_sasl_auth_enable = yes
smtpd_sasl_application_name = smtpd
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $mydomain
broken_sasl_auth_clients = yes

Дополнительная настройка Postfix-а

Определяем виртуальные псевдонимы (virtual)

mv /usr/local/etc/postfix/virtual /usr/local/etc/postfix/virtual.original
touch /usr/local/etc/postfix/virtual

Редактируем базу данных виртуальных псевдонимов:

mcedit /usr/local/etc/postfix/virtual

Вы в этом файле можете сами прописать необходимые псевдонимы, а в приведенном примере не забываем поменять example.com на ваш домен:

root         admin@example.com
postmaster   admin@example.com
abuse        admin@example.com
virus        virus@example.com
spam         spam@exmaple.com

Сохраняем изменения и незабываем про команду postmap

postmap /usr/local/etc/postfix/virtual

Определяем маршруты доставки (transport)

mv /usr/local/etc/postfix/transport /usr/local/etc/postfix/transport.original
touch /usr/local/etc/postfix/transport

Редактируем маршруты доставки:

mcedit /usr/local/etc/postfix/transport

Прописываем для какого домена куда пересылать почту, также можно указать транспорт для конкретного почтового адреса, например:

example.com         smtp:[50.60.70.80]
example2.com        smtp:[50.60.70.80]
test@example.com    smtp:[100.100.100.100]

Незабываем сохранить изменения и выполнить команду postmap

postmap /usr/local/etc/postfix/transport

Определяем клиентов которым разрешен или запрещен доступ (client_access)

Этот файл имеет такую же структуру и формат, что и файл доступа, поставляемый с Postfix:

touch /usr/local/etc/postfix/client_access

А теперь редактируем

mcedit /usr/local/etc/postfix/client_access

Прописываем каким клиентам разрешен или запрещен доступ, например:

1.2.3.4  OK
11.22.33.44   REJECT

Незабываем сохранить изменения и выполнить команду postmap

postmap /usr/local/etc/postfix/client_access

Определяем ограничения, на приветствие отправителя (helo_access)

Этот файл также имеет такую же структуру и формат, что и файл доступа, поставляемый с Postfix:

touch /usr/local/etc/postfix/helo_access

Редактируем:

mcedit /usr/local/etc/postfix/helo_access

Запрещаем представляться нашим доменным именем, нашим IP(1.2.3.4), localhost и указываем хосты которые мы знаем и но они не могут правильно представиться.

example.com     REJECT
example2.com    REJECT
1.2.3.4         REJECT
localhost       REJECT
lamer-host1      OK
lamer-host2      OK

Традиционное напоминание: сохранить изменения и выполнить команду postmap

postmap /usr/local/etc/postfix/helo_access

Определяем хорошие и плохие почтовые адреса отправителя (sender_access)

Этот файл также имеет такую же структуру и формат, что и файл доступа, поставляемый с Postfix:

touch /usr/local/etc/postfix/sender_access

Пока оставляем этот файл пустым, сюда будем заносить адреса электронной почты «плохих» отправителей и соответственно «хороших» отправителей попавших в списки rhsbl_sender. Стоит отметить, что, если весь домен «плохой», его можно блокировать в файле client_access.
Даже если файл пустой не забываем выполнить команду postmap

postmap /usr/local/etc/postfix/sender_access

Определяем «разрешенных» и «запрещенных» получателей (recipient_access)

Этот файл также не является исключением и имеет такую же структуру и формат, что и файл доступа, поставляемый с Postfix:

touch /usr/local/etc/postfix/recipient_access

Редактируем:

mcedit /usr/local/etc/postfix/recipient_access

Как мы уже говорили, можете использовать этот файл во время бета-тестирования, так, чтобы через проходила почта только некоторых пользователей.
Во время «боевой» работы этот файл должен содержать:
Примечание: в этом файле OK означает, что все сообщения для example.com и example2.com будут проходить через SpamAssassin

example.com      OK
example2.com     OK

Если тестировать фильтрацию почты будут только три пользователя, то файл будет таким:
Примечание: в этом файле все сообщения для example.com,за исключением троих пользователей, будут проходить напрямую, без фильтрации SpamAssassin-ом на внутренний корпоративный сервер.

test1@example.com       OK
test2@example.com       OK
test3@example.com       OK
example.com            FILTER smtp:[50.60.70.80]

Традиционное напоминание: сохранить изменения и выполнить команду postmap

postmap /usr/local/etc/postfix/recipient_access

Настройка и установка Cyrus-IMAP

Для автоматического создания почтовых ящиков
необходимо пропатчить порт
забрать патч можно отсюда http://www.freebsd.org/cgi/query-pr.cgi?pr=125045

cd /usr/ports/mail/cyrus-imapd23
make install

Выбираем BDB,REPLICATION, AUTOCREATE, SYSLOG_MAIL

Добавляем в /etc/rc.conf

cyrus_imapd_enable="YES"

В /usr/local/etc/cyrus.conf
отключаем

#sieve

Редактируем imap.conf

mcedit /usr/local/etc/imapd.conf

Для входа в Cyrus по plain text

allowplaintext: yes

Задаем пользователя имеющего административные права

admins: admin

Задаем разделитель "." в e-mail адресе

unixhierarchysep: yes

Настраиваем авторизацию

sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sasldb
sasl_mech_list: plain login

У нас Postfix работает в песочнице поэтому указываем соответствующий путь к sasldb

sasl_sasldb_path: /var/spool/postfix/usr/local/etc/sasldb2

Указываем домен по умолчанию

defaultdomain: example.ru

Настраиваем автоматическое создание ящиков

autocreatequota:  500000000
createonpost: yes
autocreateinboxfolders: sent|drafts|templates

Предупреждаем о возможности переполнения ящика

quotawarn: 90

Бездействующие сессии через 30 мин обрываем

timeout: 30

Сохраняем и выходим.

Создаем админа

saslpasswd2 admin

Создаем рабочие каталоги

mkdir /var/imap
chown cyrus:cyrus /var/imap
chmod 750 /var/imap
mkdir /var/spool/imap
chown cyrus:cyrus /var/spool/imap
chmod 750 /var/spool/imap

Заходим под пользователем cyrus

su cyrus

Создаем иерархию каталогов

/usr/local/cyrus/bin/mkimap

Выходим

exit

запускаем cyrus-imap

В postfix

master.conf

cyrus     unix  -       n       n       -       -       pipe
 user=cyrus argv=/usr/local/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

Настройка Sieve

Правим файл services

mcedit  /etc/services

строки

callbook        2000/tcp
callbook        2000/udp

меняем на

sieve        2000/tcp
sieve        2000/udp

После этого правим конфигурационный файл cyrus.conf

mcedit /usr/local/etc/cyrus.conf

в разделе SERVICES добавляем строчку

sieve         cmd="timsieved" listen="sieve" prefork=0

после этого перезапускаем Cyrys-IMAP

/usr/local/etc/rc.d/imapd restart

https://blogun.ru/catastrophiccbbagag.html


Смотрите также: