BASH Programming - Введение


Если sendmail установлен, вы должны


Если 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 обрабатвает все правила соответственно для вашей собственной системы.


Содержание раздела