On the road again

Sendmail – один из старейших MTA (Mail Transfer Agent) для *nix-систем. В FreeBSD он является программой передачи почты (MTA) по умолчанию. Работа sendmail заключается в приеме почты от почтовых программ пользователей (Mail User Agents, MUA) и отправке ее на соответствующий адрес, в соответствии с имеющимися настройками. sendmail может также принимать входящие соединения по сети и доставлять почту в локальные почтовые ящики или перенаправлять их другой программе.

Посмотреть версию sendmail:

#cat /usr/src/contrib/sendmail/src/version.c

sendmail использует следующие файлы настройки:

Имя файла

Назначение

/etc/mail/access

Файл базы данных доступа sendmail

/etc/mail/aliases

Синонимы почтовых ящиков

/etc/mail/local-host-names

Список хостов, для которых sendmail принимает почту

/etc/mail/mailer.conf

Настройки почтовой программы

/etc/mail/mailertable

Таблица доставки почтовой программы

/etc/mail/sendmail.cf

Основной файл настройки sendmail

/etc/mail/virtusertable

Таблицы виртуальных пользователей и доменов

С помощью базы доступа можно ограничить ретрансляцию почты через свой сервер. Она должна содержать список почтовых адресов, доменов и ip-адресов узлов которым разрешено или, наоборот, запрещено отправлять почту, используя данный сервер. При установке sendmail вместе с операционной системой конфигурационный файл sendmail.cf обычно уже содержит необходимые команды для использования базы доступа, но иногда приходится включать эту опцию вручную:

Добавляем следующую строку в sendmail.mc:

FEATURE(`access_db', `hash –o –T<TMPF> /etc/mail/access')

Сразу же добавляем строку для возможности использования таблицы доставки почтовой корреспонденции, если таковой нет:

FEATURE(`mailertable', `hash /etc/mail/mailertable')

Создаем новый конфигурационный файл sendmail.cf с помощью препроцессора m4:

#cd /etc/mail

#m4 ./sendmail.mc > ./sendmail.cf

Структура файла /etc/mail/access (обычно сразу после установки ОС присутствует только файл access.sample. Создаем файл access с помощью команды touch и копируем в него по желанию содержимое файла access.sample):

cyberspammer.com                550 We do not accept mail from spammers
FREE.STEALTH.MAILER@            DISCARD
another.source.of.spam          REJECT
okay.cyberspammer.com           OK
128.32                          RELAY

Итак, к отправителям, чей адрес соответствует записи в левой части таблицы, применяется правило записанное в правой части таблицы. Рассмотрим подробнее правила:

· REJECT - соединение с передающим узлом немедленно разрывается.

· DISCARD - сервер примет сообщение, и "проглотит" его, сообщив об успешной доставке отправителю, но не доставит письмо.)

· OK - разрешает доступ (обычно используется для переопределения других условий)

· RELAY - разрешает пересылку почты

· Код ошибки и ее описание: аналогично REJECT, но позволяет создавать собственные сообщения об ошибках.

Добавляем, к примеру, такие строки вместо стандартных:

127.0.0.1 RELAY

localhost RELAY

192.168.0 RELAY

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

Для ускорения обработки писем sendmail использует хеширование базы доступа в формате BerkeleyDB, которое производится с помошью утилиты makemap:

#cd /etc/mail

#makemap hash ./access < ./access

Перезапускаем sendmail:

#killall –HUP sendmail

 

Организовываем пересылку почту для определенных адресов через определенный релей. Для этого существует файл /etc/mail/mailertable. Опять-таки, сразу после установки существует только файл /etc/mail/mailertable.sample. Создаем этот файл. Добавляем такую строку:

domain.com.ua esmtp:relay.domain.ru

 

Поясним вышенаписанное: письма для домена domain.com.ua пересылаются для отправки на релей relay.domain.ru. Стоит отметить, что доменное имя Релея должно либо резолвиться силами DNS либо быть указано в файле /etc/hosts.

Хешируем базу доставки, перезапускаем sendmail:

#cd /etc/mail

#makemap hash ./mailertable < ./mailertable

#killall –HUP sendmail

Add comment