Установка postfix под FreeBSD


Информация из how-to postfix-avp-cyrus Константина Никоненко /redir.pl?url=http://www.kot.dp.ua

Ставить будем конечно из портов:
# cd /usr/ports/mail/postfix-current/
# make all install clean
нам будет предоставлен выбор


[ ] PCRE Perl Compatible Regular Expressions
[x] SASL Cyrus SASLv1 (Simple Authentication and Security Layer)
[ ] DB3 Berkeley DB3 (required if SASL also built with DB3)
[ ] MySQL MySQL map lookups
[ ] PgSQL PostgreSQL map lookups
[ ] OpenLDAP OpenLDAP map lookups
[ ] Test SMTP/LMTP test server and generator
[ ] TLS SSL and TLS (currently broken)
[ ] IPv6 IPv6 support (not KAME official)


в данном случае нам понадобится только SASL.
После окончания сборки вся документация в /usr/local/share/doc/postfix/, файлы конфигурации в /usr/local/etc/postfix/


В FreeBSD информация о почтовых программах находится в /etc/mail/mailer.conf


В нашем случае он должен выглядеть так
# more /etc/mail/mailer.conf
#
# Execute the Postfix sendmail program, named /usr/local/sbin/sendmail
#
sendmail /usr/local/sbin/sendmail
send-mail /usr/local/sbin/sendmail
mailq /usr/local/sbin/sendmail
newaliases /usr/local/sbin/sendmail


Кроме того, так как sendmail, как таковой, нам больше не понадобится, добавим в /etc/make.conf строку


NO_SENDMAIL=true


При пересборке и установке мира sendmail больше не участвует.


Укажем в /etc/rc.conf, что sendmail мы больше не импользуем


sendmail_enable="NONE"

Отредактируем основной файл конфигурации postfix /usr/local/etc/postfix/main.cf


Комментарии описывают каждый параметр, но для ленивых - вкратце так:

В начале проверим соответствие установленных путей существующим. Далее


mail_owner = postfix
myhostname = имя_нашего_хоста
mydomain = имя_домена
mydestination = список через запятую или пробелхостов, для которых мы принимаем почту (конечный пункт назначения) для раскладки её локально.
mynetworks_style = subnet (сети, почту от которых мы пересылаем во внешний мир. Адреса можно указать здесь же, а можно и вынести это в файл. Если Вы заметили, в файле конфигурации работают уже определенные переменные :)
mynetworks = 192.168.1.0/24, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks


далее опишем домены, для которых мы релеим почту. Если не надо, оставляем пустым.
relay_domains =


Если Вы не можете отправлять почту напрямую в мир и вам сначала перенаправить все провайдеру, то вот этот параметр


#relayhost = SMART_хост_провайдера (в терминалогии sendmail) определим, где файл aliases будет находится и в каком формате
#alias_maps = dbm:/etc/aliases
alias_maps = hash:/usr/local/etc/postfix/aliases
#alias_maps = hash:/etc/aliases, nis:mail.aliases
#alias_maps = netinfo:/aliases
#alias_database = dbm:/etc/aliases
alias_database = hash:/etc/postfix/aliases
#alias_database = hash:/etc/aliases
#alias_database = hash:/etc/aliases,
hash:/opt/majordomo/aliases
укажем Local Delivery Agent (LDA), например
mailbox_transport = cyrus


значение cyrus описано в файле конфигурации /usr/local/etc/postfix/master.cf
О установке cyrus читайте здесь. http://unixfaq.ru/index.pl?req=qs&id=395
Можно так же задать фильтр для проверки почты на вирусы. О установке AVP и avcheck читайте здесь. О прикручивании AVP к postfix здесь.


Укажем файл, содержащий недопустимые заголовки
header_checks = regexp:/usr/local/etc/postfix/bad_headers
(он у меня выглядит так:
/^Reply-To: .*@otvet.net/ REJECT We don't accept spam
/^Reply-To: .*@blabla.com/ REJECT We don't accept spam
/^Content-Type:.*X-Priority:.*X-Mailer:/ REJECT Virus Win32.Aliz
}
Далее немного баловства :)
smtpd_banner = $myhostname ESMTP service ready (Postfix Rulezzz!!!)
стандартные описания
smtpd_sender_restrictions = hash:/usr/local/etc/postfix/access
transport_maps = hash:/usr/local/etc/postfix/transport
на последок
# security reason - disable run commands from ~/.forward
allow_mail_to_commands = alias
С этим фалом всё. В нём мы определили дополнительные файлы (access, transport и aliases). После их редактирования создадим их hash-ы. Для этого postfix использует свои утилиты - postmap и postalias для файла aliases
# postmap /usr/local/etc/postfix/access
# postmap /usr/local/etc/postfix/transport
# postalias /usr/local/etc/postfix/aliases

Укажем способ локальной доставки почты для наших пользователей в файле master.cf. (В нашем примере cyrus). Вот здесь мы и расшифруем указанное нами ранее в файле main.cf значение cyrus
cyrus unix - n n - - pipe
flags=Ru user=cyrus
argv=/usr/local/cyrus/bin/deliver -e -m ${extension} ${user}
проверьте правильность пути. Флаг u указывает, что имена пользователей при передаче необходимо перевести в нижний регистр.
See man pipe for more.
Если всё верно postfix готов к работе. Если у Вас еще работает sendmail - остановим его
# cd /etc/mail
# make stop
и запустим postfix
# /usr/local/sbin/postfix start
Для того, что бы postfix запускался автоматически, напишем postfix.sh, который положим в /usr/local/etc/rc.d:
#!/bin/sh
POSTFIX=/usr/local/sbin/postfix

case "$1" in

start)

if [ -x ${POSTFIX} ]; then

${POSTFIX} start

echo -n ' postfix'

fi

;;

stop)

${POSTFIX} stop

echo -n ' postfix'

;;

*)

echo "Usage: `basename $0` {start|stop}" >&2

;;

esac

exit 0

Последний штрих. Добавим в /etc/daily.local следующее

#!/bin/sh

echo

echo Checking for troubles in mail:

start=`date -v-1d '+%b %d' | sed 's/0(.)$/ 1/'`

cat /var/log/maillog | grep "$start" |

egrep '(reject|warning|error|fatal|panic):'

http://unixfaq.ru/index.pl?req=qs&id=396
Обновлено: 12.03.2015