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