Установка Postfix

Ноябрь 2nd, 2012

Введение

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

  • smtp сервер - postfix (с авторизацией)
  • pop3 сервер - popa3d
  • Почтовые пользователи - системные.

Документ создавался в качестве “шпаргалки” для быстрой настройки с "нуля".

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

Установка Berkeley DB

Для работы Postfix-a необходима Berkeley DB (можно, конечно, при сборке Postfix-a автоматически, но IHMO лучше самому выбрать версию Berkeley, на данный момент наиболее стабильная версия 4.3)

Устанавливаем выбранную версию

cd /usr/ports/databases/db43
make install

Установка SASL2

cd /usr/ports/security/cyrus-sasl2-saslauthd
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

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

mail_owner = postfix

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

myhostname = mail1.example.com

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

mydomain = example.com

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

myorigin = $mydomain

#Для почтового шлюза прописываем

#mydestination =

#Если на почтовом шлюзе не будет проверки существования почтового адресата прописываем

#local_recipient_maps =

Для локальной доставки прописываем

 mydestination = $mydomain

#Указываем откуда можно будет пересылать почту через наш сервер, предварительно меняем 10.20.30.40 на вашу IP сеть. Можно разделить несколько значений #через запятую, а можно использовать маску сети 10.20.30.0/24
# mynetworks = 10.20.30.40
Указываем для каких доменов принимаем и пересылаем почту, предварительно меняем example2.com на домены отличные от домена вашего сервера

relay_domains = $mydomain, example2.com

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

message_size_limit = 10485760

#Прописываем где искать маршруты доставки.
Каждый раз, когда изменяется (создается) хешируемый файл, необходимо запустить команду postmap <имя хешируемого файла>, после выполнения команды появляется файл с расширением .db. Это позволит ”понять” Postfix-у соответствующий хешируемый файл.
# transport_maps = hash:/usr/local/etc/postfix/transport
Требуем отправителя представиться.
Примечание: Это связано с параметром 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
#Задаем символ разделителя получателей письма.
#recipient_delimiter = +
Пропускаем авторизованных клиентов, указываем, каким клиентам разрешен или запрещен доступ к почтовому серверу и определяем сайты с которых будем брать “черные” списки доменов, IP-адреса, и т.д.

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

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

smtpd_helo_restrictions = 
  permit_sasl_authenticated,
  check_helo_access hash:/usr/local/etc/postfix/helo_access,
  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,
  reject_unauth_destination,
  permit_sasl_authenticated,
  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

Руководство по установке popa3d

Устанавливаем из портов

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

Правим /etc/inetd.conf добавляем:

pop3    stream  tcp     nowait  root    /usr/local/libexec/popa3d   popa3d

Перезапускаем inetd
killall -HUP inetd

в main.cf Postfix-a для локальной доставки через popa3d необходимо указать

настраиваем Postfix

В main.cf добавляем

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

в секцию smtpd_recipient_restrictions
после permit_mynetworks и перед reject_unauth_destination добавляем

permit_sasl_authenticated

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