Sendmail


Много лет UNIX-подобные операционные системы традиционно включают Sendmail — агент передачи почты (Mail Transfer Agent, MTA), или просто почтовый сервер. Это огромная, малопонятная и бестолковая программа, наводящая ужас на начинающих администраторов. Да и многие опытные администраторы UNIX находят ее огромной, малопонятной, бестолковой и ужасной. Программа Sendmail даже нарушает один из важнейших принципов UNIX, утверждающий, что множество небольших инструментов можно объединять по своему усмотрению. Sendmail — огромная монолитная программа, способная решать множество задач. В то время, когда создавалась программа Sendmail, даже сама идея возможности конфигурирования программы без полной ее перекомпиляции была революционной. И тогда было неважно, что сам конфигурационный файл напоминал результат мышиной возни на клавиатуре. Взгляните на /etc/mail/sendmail.cf — и вы получите представление о базовом конфигурационном файле sendmail(8).

Сегодня уже нет необходимости редактировать файл sendmail.cf вручную. Процедура конфигурирования sendmail стала более простой и управляемой, в результате программа sendmail(8) была интегрирована в систему FreeBSD таким способом, чтобы сделать настройку электронной почты настолько несложной и безболезненной, насколько это возможно.

В течение тех лет, когда управление сервером Sendmail было не таким простым делом, были разработаны альтернативные программные продукты, более удобные в использовании и имевшие более высокий уровень безопасности. Наиболее популярными из этих продуктов стали Postfix (/usr/ports/mail/postfix) и Qmail (http://cr.yp.to/qmail.html). Оба — замечательные инструменты. Проект FreeBSD использует Postfix для обработки массивных списков почтовой рассылки, самых больших в мире. FreeBSD позволяет легко заменить интегрированный в систему сервер Sendmail любым из этих пакетов или другим почтовым сервером по вашему выбору.

mailwrapper(8)

В течение многих лет программа Sendmail была единственным почтовым сервером, доступным в UNIX-подобных операционных системах. Вот и в каталоге /usr/sbin/sendmail присутствует масса дополнительного программного обеспечения, от которого можно было бы ожидать, что оно поведет себя так же, как Sendmail. Хуже всего, что Sendmail ведет себя по-разному, запускаясь под разными именами. Например, программа mailq(1) в действительности — тот же самый файл, что и программа sendmail(8), но, поскольку у него другое имя, программа ведет себя совершенно иначе. Многие другие программы должны точно эмулировать Sendmail, вплоть до различий в поведении при запуске под разными именами, а это не так же просто, как стереть двоичный файл Sendmail и заменить его другим.

В результате администратор, не знакомый с UNIX-подобными системами, может просто не понимать, что собой представляет /usr/sbin/sendmail в действительности. Если кому-то раньше приходилось ради эксперимента устанавливать различные почтовые серверы, ему придется заняться исследованиями и обладать известной долей удачи, чтобы идентифицировать так называемый Sendmail.

Во FreeBSD эту проблему обходят с помощью отдельной программы mailwrapper(8). Эта программа направляет почтовые запросы требуемой программе почтового сервера. Вы можете найти файл /usr/bin/sendmail, который в действительности является программой mailwrapper(8), маскирующейся под Sendmail. Эта программа переадресует запросы, отправляемые Sendmail, другим выбранным программам, установленным в другом каталоге.

Файл /etc/mail/mailer.conf содержит список имен программ с полными именами файлов этих программ. Например, ниже приводится содержимое файла /etc/mail/mailer.conf по умолчанию для перенаправления всех запросов программе sendmail(8):

sendmail    /usr/libexec/sendmail/sendmail
send-mail 
 /usr/libexec/sendmail/sendmail
mailq       /usr/libexec/sendmail/sendmail
newaliases  /usr/libexec/sendmail/sendmail
hoststat 
  /usr/libexec/sendmail/sendmail
purgestat 
 /usr/libexec/sendmail/Sendmail

Каждая из шести «программ», перечисленных в левой колонке, — это фактически имена других программ, которые могли бы быть использованы вместо Sendmail. У альтернативных почтовых серверов, таких как Postfix и Qmail, в действительности имеются отдельные программы под этими именами. Если вы собираетесь использовать альтернативный почтовый сервер, отредактируйте файл mailer.conf, чтобы определить правильные пути к файлам соответствующих программ. Если устанавливать альтернативный почтовый сервер из коллекции «портов», «порт» выведет точные инструкции по обновлению файла mailer.conf. Следуйте этим инструкциям, чтобы обеспечить работу своего нового МТА. Если альтернативный почтовый сервер устанавливается не из коллекции «портов», вы должны самостоятельно определить, какие изменения следует внести в mailer.conf.

Прием и передача

В системе FreeBSD (как и во всех других UNIX-подобных операционных системах) Sendmail служит для решения самых разных задач. Одни машины принимают почту из Интернета и либо отправляют ее дальше на другие машины, либо доставляют локальным пользователям. Другие машины не принимают электронную почту, а только генерируют ее. Каждую из этих задач программа Sendmail решает немного по-своему.

Демон передачи Sendmail обслуживает отправку электронной почты с локальной машины. В большинстве случаев такая электронная почта просто направляется почтовому ретранслятору. Например, все серверы в моей сети отправляют ежедневные отчеты о состоянии на фактический сервер электронной почты, откуда я их получаю. Сервер гораздо больше доверяет сообщениям локального происхождения, чем сообщениям, прибывающим из Интернета, поэтому процесс Sendmail обслуживает эти сообщения по гораздо менее строгим правилам и выполняет намного меньше проверок. Это процесс Sendmail прослушивает только локальный IP-адрес 127.0.0.1, поэтому другие хосты в сети не могут воспользоваться им.

Демон приема Sendmail принимает электронную почту с других хостов в сети. Этот процесс Sendmail требует особой заботы и внимания. Именно этот процесс стараются скомпрометировать злоумышленники, и именно он является потенциальным звеном в цепи передачи макулатурной почты. Большую часть своей энергии мы потратим на настройку демона, выполняющего прием почты.

Эти две конфигурации являются взаимоисключающими. Развернув в системе полноценный почтовый интернет-сервер, вы откажетесь от более слабого представителя Sendmail, занимающегося обработкой локальной почты, как большинство из нас не пойдет спать из дома в сарай. Система FreeBSD автоматически запрещает запуск демона передачи Sendmail, если активизирован демон приема почты.

Активизация демонов передачи и приема почты производится в файле /etc/rc.conf по отдельности. Полное описание всех конфигурационных параметров Sendmail вы найдете в странице руководства rc.sendmail(8), а здесь я приведу четыре основных:

sendmail_enable="NO"
sendmail_submit_enable="YES"
sendmail_outbound_enable="YES"
sendmail_msp_queue_enable="YES"

Параметр sendmail_enable активизирует демон приема почты. Если вам нужно только отправлять почту с локального хоста и не нужно принимать ее, включите параметр sendmail_submit_enable. Параметры sendmail_outbound_enable и sendmail_msp_queue_enable отвечают за активизацию функций передачи и ретрансляции электронной почты, отправляемой с локального хоста.

Большая часть конфигурационных параметров Sendmail, о которых рассказано ниже, относится к демону приема. Процесс передачи Sendmail требует незначительного числа настроек. При описании конфигурационных параметров, применяемых к демону передачи Sendmail, это будет подчеркнуто особо. В противном случае будет подразумеваться, что конфигурационные параметры предназначены для настройки демона приема. Не то чтобы эти параметры препятствовали работе демона передачи, скорее, они просто не будут иметь смысла для него. Например, зачем нужна функция управления доступом на базе имен хостов или IP-адресов или функция защиты от спама демону, к которому можно обратиться только с локального хоста?

Протоколирование сообщений Sendmail

Все свои действия, ошибки и повторные запуски sendmail(8) протоколирует в файле /var/log/maillog. Проверяйте его, чтобы иметь представление о деятельности сервера электронной почты, особенно после внесения изменений в его конфигурацию. Когда мне приходится работать с системой электронной почты, я предпочитаю открывать файл протокола в отдельном окне терминала и просматривать записи по мере их поступления с помощью команды tail -F:

# tail -F /var/log/maillog

Всякий раз, когда Sendmail отправляет, принимает или отвергает сообщение электронной почты, он записывает соответствующее сообщение в файл протокола. Команда tail -F показывает изменение этого файла в реальном масштабе времени. Чтобы остановить отображение содержимого файла протокола и вернуться в командную строку, нужно нажать комбинацию клавиш Ctrl-C.

 

Комментарии запрещены.