Настройка Sendmail

Файл конфигурации sendmail /etc/mail/sendmail.cf большой по размеру и конфигурировать его неудобно. Для его настройки используют микропроцессор m4. Он является штатным компонентом исходного кода sendmail и позволяет упростить его настройку. Подробное описание настройки sendmail при помощи m4 находится здесь: /usr/share/sendmail/cf/README. Примеры готовых конфигурационных файлов находятся здесь: /usr/share/sendmail/cf/cf, на их основе создадим свой файл. При установке системы sendmail конфигурируется файлом по умолчанию /etc/mail/freebsd.mc. Итак необходимо для небольшой локальной сети организовать отправку почты через SMTP-сервер провайдера, имеем файл конфигурации:

divert(-1)dnl
………….
divert(0)dnl

Директива divert служит для переключения режимов макропроцессора.Сама конфигурация начинается с divert(), поэтому между указанными строками помещают комментарии к файлу. Буквы dnl означают конец строки.

include(`../m4/cf.m4′)dnl

Встроенный макрос include подключает другие m4 файлы.

VERSIONID(`icc.mc create by orfei@orfei.net.ua Okt 1 2005′)dnl

VERSIONID – строка информационная, ее можно и не писать, но в ней обычно указывают, когда
редактировался файл конфигурации.

OSTYPE(freebsd5)dnl

OSTYPE – обязательный макрос, определяет тип оперционной системы. В скобках указано имя (без m4) подключаемого файла /usr/share/sendmail/cf/ostype.

DOMAIN(generic)dnl

Этот параметр подключает шаблон /usr/share/sendmail/cf/domain. В большинстве случаев подходит generic.

FEATURE(`use_cw_file’, `/etc/mail/local-host-names’)dnl
или
FEATURE(use_cw_file)dnl
 define(‘confCW_FILE’,’-o /etc/mail/local-host-names’)dnl

Строка указывает использование файла local-host-names. В этом файле перечислены домены, которые будет обрабатывать sendmail. Опция -o говорит о том, что не выдавать сообщение об ошибке, если этого файла нет.

FEATURE(`access_db’)dnl

Строка описывает путь к файлу конфигурации access, по умолчанию /etc/mail/access. В нем записаны сети, с которых разрен доступ к серверу.

FEATURE(`nocanonify’)dnl

Отключение канонизации адреса. Канонизация есть выполнение соответствия RFC1123, в котором говорится, что домен в доменной части не может быть алиасом(CNAME-записью в DNS).

MASQUERADE_AS(`your_domain’)dnl
 FEATURE(`allmasquerade’)dnl
 FEATURE(`masquerade_envelope’)dnl

Директива MASQUERADE_AS позволяет sendmail менять поле hostname на значение, указанное в скобках распространяется и на поле from:).

FEATURE(`local_procmail’, `/usr/local/bin/procmail’)dnl

Указывает sendmail использовать procmail в качестве локальной почтовой программы доставки.

MAILER(`smtp’)dnl
 MAILER(`procmail’)dnl

Объявление почтовых программ, первой должна быть SMTP.

define(`SMART_HOST’, `smtp:smtp_isp’)dnl

Определение SMTP-сервера провайдера.

Полученный файл ложим в /etc/mail/server.m4 и из него собираем sendmail.cf, предварительно сделав резервную копию:

#cd /etc/mail
 #cp sendmail.cf sendmail_old.cf.
 #m4 server.m4 > sendmail.cf

Далее создаем файл /etc/mail/local-host-names, в котором пишем название доменов, которые будет обслуживать наш Sendmail.
Далее редактируем файл /etc/mail/access, в котором, укажем кто имеет право доступа к Sendmail. В нашем случае укажем доступ всех локальных пользователей:
192.168 ok
Можно также настроить virtusertable и mailertable, но нам этого не нужно, при необходимости можно позже ввести изменения. Все настройки сделаны, делаем make:

#cd /etc/mail
 #make
 #make restart

Далее включаем Sendmail в автозагрузку, добавляем в /etc/rc.conf:

sendmail_enable=”YES”
 sendmail_flags=”-L sm-mta -bd -q30m”

Делаем рестарт и проверяем работу. При необходимости внести новые изменения, редактируем m4 файл, делаем из него sendmail.cf и рестартуем сендамейл.

PS. Есть /etc/mail/Makefile, тут описано правило каким должны быть файлы и где лежать, если все рекомендации здесь выполнить одной командой make all можно переконфигурировать Sendmail. Наш файл конфигурации должен иметь название <HOSTNAME>.mc, иначе при команде make создастся cf файл из темплейта /etc/mail/freebsd.mc. Также файл <HOSTNAME>.submit.mc должен лежать в /etc/mail(зачем он применяется – не знаю), иначе будет использован /etc/mail/freebsd.submit.mc. Если не охота иметь такие длинные названия файлов, можно в /etc/make.conf прописать строку на использование файлов конфигурации другого названия:

SENDMAIL_MC=/etc/mail/myconfig.mc
 SENDMAIL_SUBMIT_MC=/etc/mail/mysubmit.mc

Далее командой make all создаются cf-файл, мапы и алиасы. Можно это делать по отдельности: make cf, make maps, make aliases. Ниже приведен пример выполнения команды make all:

/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 /etc/mail/myconfig.mc.mc > /etc/mail/myconfig.mc.cf
 cp freebsd.submit.mc hostname.submit.mc
 /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 hostname.submit.mc > hostname.submit.cf

После выполняем make install, тем самым создаем /etc/mail/sendmail.cf.

install -m 444 /etc/mail/backup.cf /etc/mail/sendmail.cf
install -m 444 backup.icc-ukraine.com.ua.submit.cf /etc/mail/submit.cf

Ну и напоследок make restart. Должно работать, для проверки прослушивания 25 порта в консоли запускаем:

#sockstat -4|grep 25
 root sendmail 636 4 tcp4 *:25 *:*

Источник информации:
1. http://www.mgul.ac.ru/~t-alex/Linux/kn/orel/chap11.htm
2. http://www.samag.ru/cgi-bin/go.pl?q=articles;n=06.2006;a=02
3. http://www.samag.ru/cgi-bin/go.pl?q=articles;n=05.2006;a=01

© mick, 2007.