Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Next Previous Contents

4. Настройка sendmail V8

Если sendmail установлен, вы должны установить набор конфигурационных файлов, которые в дистрибутиве Slackware спрятаны в архиве smailcnf.tgz. Вы найдете их в /usr/src/sendmail/cf. В этом каталоге должен быть README размером примерно 50KB, коотрый описывает новый метод настройки.

sendmail управляется через настроечный файл (размером примерно 20KB) (/etc/sendmail.cf), который вы не должны переписывать под себя (как думают многие, кто боится sendmail). Вам также нужен макропроцессор M4, и маленький конфигурационный файл (mc-File) в /usr/src/sendmail/cf/cf. M4 создаст ваш /etc/sendmail.cf из этого файла и несколько других настроечных файлов, которые вам не нужно изменять.

Вот объяснение, что означает "F=8mDMFhuSC, S=51/31, R=21" в вашем файле sendmail.cf в определении агента отправки в fidonet:

F секция содержит флаги, которые описывают поведение агентов доставки. Ниже расписаны флаги:

        8 = использовать 8 бит
        m = позволить отправку нескольким адресатам
        D = форсировать вставку даты в заголовок сообщения
        M = форсировать вставку идентификационной информации в заголовок 
            сообщения
        F = форсировать вставку информации об отправителе в заголовок сообщения
        h = сохранить раегистр букв имени хоста
        u = сохранить раегистр букв имени пользователя
Флаг C указывает sendmail добавить домен адресата без one (домен отправителя. Полезно для отправки кому-либо на вашей собственной BBS); и флаг S указывает sendmail выполнить агента доставки (в случае ifmail) с использованием его собственных UID и GID, указанных выражением U= . Если U= выражение пропущено или 0, sendmail запускает агента доставки от root (заметьте: в версиях sendmail выше v8.7, нет выражения U= , так что флаг S указывает sendmail всегда запускать агента доставки от root). У меня не указано выражение U= , так что ifmail запускается от root, что меня вполне устраивает.

Секция S указывает набор правил записи отправителя; правило 51 для "конверта" и правило 31, используемое для заголовка. Наконец, секция R указывает набор правил записи адресата. В этом случае набор правил 21 используется для записи и заголовка, и "конверта". Посмотрите ваш файл sendmail.cf, чтобы найти правила и узнать, что они делают.

Между прочим, эта информация почерпнута из книги "sendmail, 2nd edition" Bryan Costales и Eric Allman (автора sendmail), выпущенной O'Reilly & Associates (ISBN 1-56592-222-0). Я настойчиво рекомендую ее каждому, кто работает с sendmail. Она очень понятно и доходчиво написана, с большим количеством примеров.

Затем надо рассказать о IFMAIL. Поэтому вам следует создать файл /usr/src/sendmail/cf/mailer/ftn.m4 со следующим содержимым:

 
 # /usr/src/sendmail/cf/mailer/ftn.m4
 #
 # IFMAIL FTN mailer for sendmail V8
 #
 # MAILER(smtp) и MAILER(uucp) must be included!
 #
 PUSHDIVERT(-1)
 ifdef(`FTN_MAILER_PATH',, `define(`FTN_MAILER_PATH', /usr/lib/ifmail/ifmail)')
 ifdef(`FTN_MAILER_USER',, `define(`FTN_MAILER_USER', `fnet:uucp')')
 ifdef(`FTN_MAILER_ARGS',, `define(`FTN_MAILER_ARGS', `ifmail -r $h $u')')
 ifdef(`FTN_MAILER_FLAGS',, `define(`FTN_MAILER_FLAGS', `8mDFMuSC')')
 ifdef(`FTN_MAX_SIZE',, `define(`FTN_MAX_SIZE', 100000)')
 
 POPDIVERT
 #####################################
 ###    FTN Mailer specification   ###
 #####################################
 
 VERSIONID(`ftn.m4 V1.5')
 
 ifdef(`_MAILER_smtp_',
 '# ifmail mailer
 Mftn,   P=FTN_MAILER_PATH, F=FTN_MAILER_FLAGS, S=11, R=21,
        _OPTIONS(`UUCP_MAILER_CHARSET',`C=', `, ')U=FTN_MAILER_USER,
         ifdef(`_FTN_MAILER_MAX', `M=FTN_MAILER_MAX, ')A=FTN_MAILER_ARGS')
Как видите настройка ifmail не так сложна, и мы не совершаем чего-то из ряда вон выходящего, мы просто используем определение мейлера "ftn" так же, как и предопределенные мейлеры "smtp", "uucp" и т.д.

Сейчас давайте займемся настройкой mc-файла. Я назвал его /mymachine.mc, но имя не так важно, главное, чтобы он располагался в /usr/src/sendmail/cf/cf. mymachine.mc выглядит примерно так:

 
 # /usr/src/sendmail/cf/cf/mymachine.mc
 #
 # sendmail V8 configuration for mymachine.mc
 # using UUCP и IFMAIL
 #
 include(`../m4/cf.m4')
 VERSIONID(`mymachine.mc V1.15')
 
 OSTYPE(linux)dnl
 
 define(`confUSE_ERRORS_TO', `True')dnl
 define(`confCOPY_ERRORS_TO', `postmaster')dnl
 define(`confMIME_FORMAT_ERRORS', `False')dnl
 
 FEATURE(notsticky)dnl
 FEATURE(mailertable,hash -o /etc/sendmail/mailertable)dnl
 FEATURE(always_add_domain)dnl
 FEATURE(nodns)dnl
 FEATURE(nocanonify)dnl
 
 MAILER(local)dnl
 MAILER(ftn)dnl
 MAILER(smtp)dnl
 MAILER(uucp)dnl
 
 #Cwsome-uucp-host-name 
 Cwf4.n211.z21.prognet
 Cwf64.n9996.z69.surfnet
 Cwf710.n125.z1.fidonet.org
 
 # define(`SMART_HOST', uucp-dom:some-uucp-host-name)
 define(`SMART_HOST', ftn:f710.n125.z1.fidonet.org)
 
 LOCAL_RULE_3
 # Route fidonet.org, prognet и surfnet via FTN!
 R$* < $* z1.fidonet.org > $*                $1 < $2 f33.n125.z1.fidonet.org > $3
 R$* < $* z2.fidonet.org > $*                $1 < $2 f33.n125.z1.fidonet.org > $3
 R$* < $* z3.fidonet.org > $*                $1 < $2 f33.n125.z1.fidonet.org > $3
 R$* < $* z4.fidonet.org > $*                $1 < $2 f33.n125.z1.fidonet.org > $3
 R$* < $* z5.fidonet.org > $*                $1 < $2 f33.n125.z1.fidonet.org > $3
 R$* < $* z6.fidonet.org > $*                $1 < $2 f33.n125.z1.fidonet.org > $3
 R$* < $* prognet > $*               $1 < $2 f1.n211.z21.prognet > $3
 R$* < $* surfnet > $*               $1 < $2 f60.n9991.z96.surfnet > $3
В начале определяется операционная система (linux), затем мы определяем, что вся MAILERDAEMON-почта также должна отправляться postmaster`у, т.о. он сможет найти ошибки быстрее и исправить их. Затем даны некоторые опции для моей настройки, но вы можете переделать их под ваши нужды. Кроме того определены мейлеры "local" (для пользователей на той же машине, которые отправляются deliver, mail.local или procmail), "ftn" (Fido-соместимые сети через ifmail), "smtp" (отправка через online-mail-protocol SMTP) и "uucp" (отправка через UUCP). Последние два не нужны для системы, подключенной к Интернет только через ifmail, но мейлер "ftn" основан на них (вот почему ftn.m4 такой короткий). В строках, начинающихся с Cw определены различные имена моего компьютера:
 
 define(`SMART_HOST', ftn:f33.n125.z1.fidonet.org)
вся почта которая не ущла другими путями будет отправлена через ifmail моему fido-аплинку. если у вас есть UUCP-аплинк, то вы можете заместить эти строки:
 
 define(`SMART_HOST', uucp-dom:some-uucp-host-name)
которые отправляют такую почту моему UUCP-аплинку с именем some-uucp-host-name.

В конце mymachine.mc я поместил специальные конструкции:

 
 LOCAL_RULE_3
 # Route fidonet.org и prognet via FTN!
 R$* < $* z1.fidonet.org > $*                $1 < $2 f33.n125.z1.fidonet.org > $3
 R$* < $* z2.fidonet.org > $*                $1 < $2 f33.n125.z1.fidonet.org > $3
 R$* < $* z3.fidonet.org > $*                $1 < $2 f33.n125.z1.fidonet.org > $3
 R$* < $* z4.fidonet.org > $*                $1 < $2 f33.n125.z1.fidonet.org > $3
 R$* < $* z5.fidonet.org > $*                $1 < $2 f33.n125.z1.fidonet.org > $3
 R$* < $* z6.fidonet.org > $*                $1 < $2 f33.n125.z1.fidonet.org > $3
 R$* < $* prognet > $*               $1 < $2 f1.n211.z21.prognet > $3
 R$* < $* surfnet > $*               $1 < $2 f60.n9991.z96.surfnet > $3
Здесь z1.fidonet.org,..,z6.fidonet.org отображаются в f33.n125.z1.fidonet.org и все *.prognet в f1.n221.z21.prognet, т.о. вся Fido-почта, адресованная в различные Fidonet-зоны будет отправлена моим аплинкам, которые отправят их через FTP (вметсо UUCP). Пожалуйста заметьте: Должен быть как минимум один символ табуляции между $* и $1 (не только пробелы).

Поэтому мы выше определили файл /etc/sendmail/mailertable. В этом файле определены "исключения" из маршрута по умолчанию, например маршрут через фидо.

 
 .prognet       ftn:f1.n211.z21.prognet
 .surfnet        ftn:f60.n9991.z96.surfnet
Как видно вся фидопочта идет через фидо. Эта mailertable должна быть скомпилирована в базу данных после любых изменений. Используйте следующие команды в каталоге /etc/sendmail:
 
 makemap hash mailertable.db < mailertable
Если вы получили ошибку "makemap: Type hash not supported in this version", то кажется вы установили Slackware 3.0, который не поддерживает hash-типы (не спрашивайте меня почему). Тогда вы должны использовать такую команду:
 
 makemap dbm mailertable < mailertable
в том же каталоге. Но сейчас в должны изменить строку mailertable в файле mymachine.mc с hash на dbm. Измените строку так:
 
 FEATURE(mailertable,dbm -o /etc/sendmail/mailertable)dnl
Проблемы исчезнут.

После редактирования mymachine.mc, мы можем создать из него sendmail.cf . Перейдите в каталог /usr/src/sendmail/cf/cf и выполните здесь pmake mymachine.cf . Этим вы создадите /usr/src/sendmail/cf/cf/obj/mymachine.cf Переименуйте этот файл в /etc/sendmail.cf и настройа готова. Если pmake не установлен, то сделайте так:

 
 m4 mymachine.mc > obj/mymachine.cf
Есть несколько других вещей, нужных вам для ручного редактирования sendmail.cf . Во-первых, посморите опцию O MatchGECOS и раскомментируйте ее. Это позволит использовать полные имена типа Greg Frydenlund вместо логинов типа gfryde01. Во-вторых, посмотрите секцию доверенных (trusted) пользователей и добавьте "Tfnet uucp". Это позволит sendmail применять SUID для fnet.uucp при выполнении ifmail.

Проделав все это вы готовы создать ваш почтовый alias-файл. Mine looks something like this. Применение почтовых алиасов - только одна из мощных возможностей sendmail, которая позволяет перенаправлять почту другим сайтам и пользователям. Его не тяжело администрировать. Почта для пользователя слева перенаправляется пользователю справа. Мой файл alias:

 
 #
 # /etc/aliases
 #
 # compile this file by issueing the command: newaliases
 #
 nobody: /dev/null
 root: gfryde01
 support: gfryde01
 admin: gfryde01
 operator: gfryde01
 postmaster: gfryde01
 faxadmin: gfryde01 
 usenet: gfryde01
 sysop: gfryde01
 uucp: gfryde01
 news: gfryde01
 mail: gfryde01
 fnet: gfryde01
 fido: gfryde01
 greg_frydenlund: gfryde01
 greg.frydenlund: gfryde01
 gregfrydenlund: gfryde01
Этот файл должен быть скомпилирован командой newaliases после каждого изменения.

Сейчас запустим sendmail как демон:

 
 /usr/sbin/sendmail -bd -q 15m
Добавьте вышеприведенную команду в /etc/rc.d/rc.local. На большинстве систем она уже определена в /etc/rc.d/rc.M . Кроме того можно запускать sendmail по cron, и заставить inetd слушать порт. Для этого вставляем в crontab пользователя root:
 
 */20  * * * *   /usr/sbin/sendmail -q
а /etc/inetd.conf вставляем:
 
 smtp  stream  tcp   nowait  root  /usr/sbin/tcpd  /usr/sbin/sendmail -bs
Не забудьте выполнить kill -HUP inetd после изменения inetd.conf, чтобы информировать inetd об изменениях.

sendmail будет писать свои журнальные сообщения через syslogd. Я рекомендцю следующую запись в /etc/syslog.conf:

 
 mail.*                      /var/log/mail
Не забывайтеперезапустить syslogd после этих изменений через killall -1 как уже описано в главе Настройка ifcico.

Чтобы проверить записывающие правила sendmail для fidonet-адресов, запустите sendmail командой

 
 sendmail -bt
Введите эту команду в строке приглашения, и вы должны увидеть примерно вот это.
 
 > 3,0 me@f10.n125.z1.fidonet.org
Последняя строка в этом спискее ниже представляет интерес для нас.
 
 rewrite: ruleset   3     input: me @ f10 . n125 . z1 . fidonet . org
 rewrite: ruleset  96     input: < me @ f10 . n125 . z1 . fidonet . org . >
 rewrite: ruleset  96   returns: < me @ f10 . n125 . z1 . fidonet . org . >
 rewrite: ruleset   3   returns: < me @ f10 . n125 . z1 . fidonet . org . >
 rewrite: ruleset   0     input: < me @ f10 . n125 . z1 . fidonet . org . >
 rewrite: ruleset  98     input: < me @ f10 . n125 . z1 . fidonet . org . >
 rewrite: ruleset  98   returns: < me @ f10 . n125 . z1 . fidonet . org . >
 rewrite: ruleset   0   returns: $# ftn $@ f33 . n125 . z1 $: me < @ f33 . n125 . z1 . fidonet . org >
Вы можете видеть внизу этого списка, что мейлер ftn - это как раз то, что мы хотим. Я предлагаю вам испытать другой адрес (me@localhost), чтобы удостовериться, что sendmail обрабатвает все правила соответственно для вашей собственной системы.


Next Previous Contents