Предоставил Christopher Shumway.
В FreeBSD по умолчанию программой передачи почты (Mail Transfer Agent, MTA) является
sendmail(8). Работа sendmail заключается в приеме почты от почтовых программ
пользователей (Mail User Agents, MUA) и отправке ее на
соответствующий адрес, в соответствии с имеющимися настройками. sendmail может также принимать входящие соединения по сети и
доставлять почту в локальные почтовые ящики или перенаправлять их другой программе.
sendmail использует следующие файлы настройки:
База данных доступа определяет список хостов или IP адресов, имеющих доступ к
локальному почтовому серверу, а также тип предоставляемого доступа. Хосты могут быть
перечислены как OK, REJECT, RELAY или просто переданы процедуре обработки ошибок sendmail с заданным сообщением об ошибке. Хостам, перечисленным с
параметром по умолчанию OK, разрешено отправлять почты на этот
хост, если адрес назначения почты принадлежит локальной машине. Все почтовые соединения
от хостов, перечисленных с параметром REJECT, отбрасываются.
Для хостов, перечисленных с параметром RELAY, разрешена
передача через этот сервер почты с любым адресом назначения.
Пример 22-1. Настройка базы данных доступа sendmail
cyberspammer.com 550 We don't accept mail from spammers
FREE.STEALTH.MAILER@ 550 We don't accept mail from spammers
another.source.of.spam REJECT
okay.cyberspammer.com OK
128.32 RELAY
В этом примере приведены пять записей. К отправителям, чей адрес соответствует записи
в левой части таблицы, применяется правило записанное в правой части таблицы. В первых
двух примерах код ошибки будет передан процедуре обработке ошибок sendmail. В этом случае на удаленном хосте будет получено
соответствующее сообщение. В следующем примере почта отбрасывается почта от определенного
хоста, another.source.of.spam. В четвертом примере разрешается
прием почты от хоста okay.cyberspammer.com, имя которого более
точно совпадает с этой записью, чем с cyberspammer.com в примере
выше. При более точном совпадении правила перезаписываются. В последнем примере
разрешается пересылка почты от хостов с IP адресами, начинающимися с 128.32. Эти хосты смогут отправлять почту через этот почтовый сервер
для других почтовых серверов.
После изменения этого файла для обновления базы данных вам потребуется запустить make в каталоге /etc/mail/.
База данных синонимов содержит список виртуальных почтовых ящиков, принадлежащих
другим пользователям, файлам, программам, или другим синонимам. Вот несколько примеров,
которые могут быть использованы для /etc/mail/aliases:
Пример 22-2. Mail Aliases
root: localuser
ftp-bugs: joe,eric,paul
bit.bucket: /dev/null
procmail: "|/usr/local/bin/procmail"
Формат файла прост; имя почтового ящика слева от двоеточия сопоставляется
назначению(ям) справа. В первом примере производится простое сопоставление почтового
ящика root почтовому ящику localuser,
для которого затем опять будет произведен поиск в базе данных синонимов. Если совпадений
не обнаружится, сообщение будет доставлено локальному пользователю localuser. В следующем примере приведен список рассылки. Почта на
адрес ftp-bugs рассылается на три локальных почтовых ящика: joe, eric и paul. Обратите внимание, что удаленный почтовый ящик может быть
задан в виде user@example.com. В следующем примере показана
запись почты в файл, в данном случае /dev/null. И в последнем
примере показано отправление почты программе, в данном случае почтовое сообщение
переправляется через канал UNIX® на стандартный вход
/usr/local/bin/procmail.
После обновления этого файла вам потребуется запустить make в
каталоге /etc/mail/ для обновления базы данных.
В этом файле находится список имен хостов, принимаемых программой sendmail(8) в качестве
локальных. Поместите в этот файл любые домены или хосты, для которых sendmail должен принимать почту. Например, если этот почтовый
сервер должен принимать почту для домена example.com и хоста mail.example.com, его файл local-host-names
может выглядеть примерно так:
example.com
mail.example.com
После обновления этого файла необходимо перезапустить sendmail(8), чтобы он
смог перечитать изменения.
Основной файл настройки sendmail, sendmail.cf управляет общим поведением sendmail, включая все, от перезаписи почтовых адресов до отправки
удаленным серверам сообщений об отказе от пересылки почты. Конечно, файл настройки с
таким многообразием возможностей очень сложен и подробное его описание выходит за рамки
данного раздела. К счастью, для стандартных почтовых серверов изменять этот файл придется
не часто.
Основной файл настройки sendmail может быть собран из
макроса m4(1), определяющего
возможности и поведение sendmail. Подробнее этот процесс
описан в файле /usr/src/contrib/sendmail/cf/README.
Для применения изменений после правки файла необходимо перезапустить sendmail.
Файл virtusertable сопоставляет виртуальные почтовые домены
и почтовые ящики реальным почтовым ящикам. Эти почтовые ящики могут быть локальными,
удаленными, синонимами, определенными в /etc/mail/aliases, или
файлами.
Пример 22-3. Пример таблицы виртуального домена
root@example.com root
postmaster@example.com postmaster@noc.example.net
@example.com joe
В примере выше мы видим сопоставление адресов для домена example.com. Почта обрабатывается по первому совпадению с записью в
этом файле. Первая запись сопоставляет адрес root@example.com
локальному почтовому ящику root. Вторая запись сопоставляет
postmaster@example.com локальному почтовому ящику postmaster на хосте noc.example.net.
Наконец, до этого момента адрес в домене example.com не совпал ни
с одним из предыдущих, будет применено последнее сопоставление, в которому соответствует
всякое другое почтовое сообщение, отправленное на любой адрес в example.com. Это сообщение будет доставлено в локальный почтовый ящик
joe.