Дополнительные примитивы конфигурации программы sendmail
Категория: Электронная почта | Автор: admin | 28-05-2010, 03:15 | Просмотров: 4637

В этом параграфе мы продолжим описание макросов и, кроме того, рассмотрим некоторые средства, используемые для изменения стандартного поведения программы sendmail. Будет также показано, как на уровне конфигурационных настроек решать ряд административных задач, в частности маскировать адреса, создавать виртуальные домены, управлять безопасностью и бороться со спамом.

 

Макрос FEATURE

 

Макрос feature позволяет активизировать некоторые распространенные опции (называемые средствами) путем подключения m4-файлов из каталога feature. Мы поместили вместе описание средств макроса feature и ряда других макросов программы sendmail, поскольку они тесно связаны друг с другом. Даже в то время, когда возможность конфигурировать программу sendmail при помощи препроцессора m4 была нова, описание макроса feature занимало значительную часть главы об электронной почте. На сегодняшний день список средств макроса feature так велик, что для их рассмотрения потребовалась бы целая глава. Синтаксис макроса имеет вид:

FEATURE (ключевое_слово,  арг,  арг,   ...)

 

где ключево_слово указывает на файл ключевое_слово.m4 в каталоге cf/feature, а арг — это аргументы, записываемые в файл. Полный перечень средств макроса feature можно найти в файле cf/README. Ниже описаны наиболее часто используемые средства.

 

Средство use_cw_file

 

Внутренний класс w программы sendmail содержит имена всех компьютеров, для которых данный узел принимает и доставляет почту. Если речь идет о клиентском компьютере, то в этот класс можно включить имя компьютера, его псевдонимы и номер интерфейса localhost. Если же конфигурируемая машина является концентратором почты, ее класс w должен также включать имена всех локальных узлов и виртуальных доменов, для которых он принимает почту.

Средство use_cw_file определяет класс w на основании содержимого файла /etc/mail/local-host-names (который раньше назывался sendmail.cw; точное имя файла можно задать с помощью опции confCW_FILE). Без этого средства программа sendmail принимает только почту, адресованную компьютеру, на котором она работает. Поскольку программа sendmail читает cw-файл только в процессе своего запуска, нужно послать ей сигнал HUP, если cw-файл был изменен и необходимо, чтобы изменения вступили в силу. Команда

FEATURE('use_cw_file')

 

активизирует описываемое средство и подключает файл local-host-names. Команда

FEATURE('use_cw_file',   ‘имя_файла')

 

позволяет выбрать другой файл.

 

Средство redirect

 

Если кто-то из сотрудников покинул организацию, его почту нужно либо пересылать по новому адресу, либо возвращать отправителю с сообщением об ошибке. Средство переадресации redirect обеспечивает более элегантный способ возврата почты. Пусть, к примеру, некто Джо Смит (Joe Smith) закончил учебу в университете (oldsite.edu) и поступил на работу в компанию (newsite.com). Включение средства redirect командой

FEATURE(‘redirect')

 

и добавление строки

smithj:  joe@newsite.com.REDIRECT

 

в файл псевдонимов обеспечат возврат почты, приходящей на имя пользователя smithj, отправителю вместе с сообщением об ошибке, в котором предлагается посылать почту по адресу joe@newsite.com. Сами почтовые сообщения пересылаться не будут.

 

Средство always_add_domain

 

Когда средство always_add_domain включено, программа sendmail добавляет имя локального узла к адресу получателя, если адрес не является полностью определенным. Предположим, что копия сообщения (от пользователя lynda@cs.colorado.edu), направленного по адресу barb@netrack.net. посылается локальному пользователю evi. Если средство always_add_domain не включено, пользователь barb увидит в заголовке "Сс:" просто имя evi. Предположим, пользователь barb хочет ответить всем указанным в заголовках данного письма адресатам. В их число попадет и пользователь evi, однако такое регистрационное имя на машине netrack.net может либо отсутствовать, либо принадлежать совсем другому пользователю. При включенном средстве always_add_domain имя evi будет преобразовано в evi@cs.colorado.edu до того, как сообщение покинет компьютер пользователя linda.

Данное средство эффективно также в том случае, когда буферные каталоги совместно используются компьютерами, не имеющими единого файла alias или не содержащими одинаковые файлы passwd (в этой ситуации, очевидно, не следовало бы совместно использовать почтовые буферы). Поскольку адресат (псевдоним или пользователь) будет известен не на каждом компьютере, то необходимо на исходном компьютере полностью определить адрес, чтобы по нему можно было послать ответное сообщение.

Еще один аргумент в пользу средства always_add_domain состоит в том, что сообщения с неполными именами часто отбрасываются как спам. Поэтому мы рекомендуем всегда активизировать это средство.

Если используется макрос MASQUERADE_AS, средство always_add_domain добавляет имя узла, которое было выбрано для маскирования, а не имя локального узла. Это может вызвать проблемы, если файл aliases или passwd на локальном компьютере не является подмножеством одноименного файла на узле, указанном в качестве маскирующего.

 

Средство nocanonify

 

Это средство отменяет процесс поиска адресов в DNS, который необходим для отправки сообщения. Например, при наличии главного концентратора почты, через который посылают свою почту все клиентские компьютеры, на последних можно задать команду

FEATURE(‘nocanonifу’)

 

и тем самым отменить поиск в DNS на локальном уровне. Такой прием продемонстрирован в нашем втором примере (см. далее). Данное средство также может быть использовано на очень больших почтовых узлах, где функционируют агенты подачи и транспортировки почты. В этом случае поиск в DNS осуществляет агент подачи, а главный компьютер, на котором запущен агент транспортировки, работает в режиме nocanonify.

 

Таблицы и базы данных

 

В программе sendmail имеется несколько средств, использующих конструкцию, условно называемую таблицей. Она указывает, как маршрутизировать почту. Таблица представляет собой текстовый файл с информацией о маршрутах, псевдонимах и методах доступа, который конвертируется при помощи команды makemap в формат базы данных и затем используется программой sendmail в качестве внутренней поисковой базы данных. Однако наличие централизованного IMAP- или POP-сервера избавляет программу от рутинных операций по поиску пользователей и делает ненужными некоторые из описанных ниже таблиц.

Поддерживаются две библиотеки функций, предназначенных для работы с базами данных: dbm/ndbm (является стандартом в большинстве версий UNIX) и Berkeley DB (расширяемая библиотека, поддерживающая несколько схем хранения). Выбор библиотеки необходимо сделать на этапе компиляции. Мы рекомендуем библиотеку Berkeley DB, так как она работает быстрее и создает меньшие по объему файлы.

Имеются три типа поисковых таблиц:

  • dbm — использует расширяемый алгоритм хэширования (dbm/ndbm);
  • hash — использует стандартную схему хэширования (Berkeley DB);
  • btree — использует структуру данных типа двоичного дерева (Berkeley DB).

Для большинства задач, связанных с применением таблиц, наиболее приемлемым оказывается тип hash, который предлагается по умолчанию. Используйте команду makemap для построения базы данных из текстового файла. При этом нужно указать тип базы данных и имя ее файла. Текстовая версия базы данных должна подаваться на стандартный вход команды makemap:

# makemap hash /etc/mail/access < /etc/mail/access

 

На первый взгляд данная команда выглядит неправильной, так как кажется, что в результате произойдет замена входного файла пустым выходным. Однако команда makemap присоединяет к имени файла суффикс, и потому выходной файл в действительности называется /etc/mail/access.db. При каждом изменении текстового файла необходимо с помощью команды makemap перестраивать файл базы данных (останавливать программу sendmail сигналом HUP нет необходимости).

Поскольку для базы данных строятся ключи и при поиске ключа выбирается самое длинное из возможных совпадений, порядок размещения элементов в текстовом файле не имеет значения. Если какое-то средство ожидает файл базы данных в качестве параметра, то по умолчанию принимается тип hash и файл /etc/mail/имя_таблицы.db. Чтобы изменить эту установку, укажите требуемый тип при вызове команды makemap и в макросе FEATURE либо поменяйте стандартные значения, переопределив переменную DATABASE_MAP_TYPE:

define ('DATABASE_MAP_TYPE',   'dbm’)

 

Для подключения новой базы данных access.db необходимо добавить в mc-файл следующую команду:

FEATURE  ('access_db’,   ‘hash /etc/mail/access')

 

Поскольку в данной строке активизируются установки по умолчанию, ее можно упростить:

FEATURE  (‘access_db')

 

Имя файла базы данных разрешается указывать как с суффиксом (.db), так и без него.

Не забывайте перестраивать базу данных при помощи команды makemap всякий раз, когда изменяется текстовый файл. В противном случае эти изменения не будут учитываться.

В следующих разделах мы опишем средства mailertable, generictable и virtusertable. Средство access_db рассмотрено в параграфе посвященном спаму. Средство user_db мы не рассматриваем вовсе, так как в настоящее время оно используется редко.

 

Средство mailertable

 

Средство mailertable перенаправляет почту, адресованную конкретному узлу или домену, по альтернативному адресу с помощью заданного агента доставки. Оно применяется для отправки почты и принимает во внимание только доменную часть адреса, а имя пользователя не рассматривает. Адрес конверта при этом не переписывается, поэтому почта предназначается тому же самому пользователю, но посыпается на другой узел другим агентом доставки. Средство mailertable было создано для взаимодействия с иными почтовыми системами, такими как UUCP, DECnet и BITNET, но, поскольку они в настоящее время почти не применяются, потребность в средстве mailertable в основном отпала.

Запись для средства mailertable имеет следующий вид:

старый_домен       агент_доставки: пользователь@новый_домен

 

Если перед левым ключевым словом указана точка, то это означает "любой узел домена". В качестве ключа для средства mailertable можно применять только имя компьютера или домена; имена пользователей недопустимы. Элемент пользователь@новый_домен может быть опущен. В этом случае заголовки сообщения не изменяются. В качестве параметра агент_доставки может быть задан только агент, определенный с помощью макроса MAILER.

Чтобы включить средство mailertable, в mc-файл необходимо вставить следующую строку:

FEATURE('mailertable')

 

Средство genericstable

 

Применение средства genericstable ("generics table" — общая таблица) аналогично созданию псевдонимов для исходящей почты. Например, можно заменить имя trent@xor.com в исходящем сообщении именем trent.hein@xor.com. При этом переписываются заголовки сообщения, а не его конверт. Данное средство не влияет на то, куда будет доставлена почта. Оно определяет, кто получит ответ.

Существует несколько методов переписывания имени компьютера, однако только средство genericstable позволяет помещать в ключ замены как имя пользователя, так и имя компьютера. К адресам, заданным в средстве genericstable, могут также применяться описанные ниже средства masquerade_envelope и allmasquerade.

Перед использованием средства genericstable убедитесь, что требуемый домен является доменом класса generics. Чтобы поместить домен в класс generics, укажите его в макросе generic_DOMAIN или включите в файл, заданный в макросе GENERIC_DOMAIN_FILE.

Следующие команды активизируют средство genericstable со стандартными установками:

 

GENERIC_DOMAIN_FILE('/etc/mail/local-host-names')

FEATURE (‘genericstable')

 

 

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

 

Средство virtusertable

 

Таблица виртуальных пользователей содержит доменные псевдонимы для входящей почты. Средство virtusertable позволяет работать на одном компьютере с несколькими виртуальными доменами. Оно часто используется в организациях, занимающихся Web-хостингом.

Поле ключа таблицы содержит адрес электронной почты (пользователь@компьютер.домен) или спецификацию домена (@домен). Поле значения представляет собой локальный почтовый адрес, внешний почтовый адрес или спецификацию типа агент_доставки:адрес. Если ключ — это имя домена, то имя пользователя в поле значения может задаваться в виде переменной %1 либо указываться явно.

Рассмотрим следующий пример:

 

info@foo.com    foo-info      # маршрут к локальному пользователю

info@bar.com    bar-info      # другой локальный пользователь

joe@bar.com     error:No such user    # возврат ошибки

@baz.org        jane@elsewhere.com    # вся почта направляется

                                      # пользователю jane

sbaz.org       %l@elsewhere.com       # вся почта направляется тому же

                                      # пользователю

 

 

Все узлы, перечисленные в левой части, должны быть указаны в cw-файле (или в новом классе VirtHost). В противном случае программа sendmail попытается найти узел в Internet и доставить почту туда. Если DNS направит программу sendmail назад на данный сервер, будет получено сообщение об ошибке локальной конфигурации. К сожалению, программа sendmail не может сказать, что в действительности сообщение об ошибке должно выглядеть так: "В файле cw отсутствует ключ для средства virtusertable".

Чтобы описанный механизм работал, необходимо соблюдение следующих условий:

  • должны существовать такие DNS-записи MX, чтобы почта доставлялась правильному узлу;
  • в cw-файле должны быть такие записи, чтобы локальный компьютер мог принять почту; с этой же целью может быть задан макрос VIRTUSER_DOMAIN (или эквивалентный ему макрос VIRTUSER_DOMAIN_FILE);
  • таблица виртуальных пользователей должна указывать программе sendmail, что делать с почтой.

Данное средство активизируется при помощи следующей команды:

FEATURE ('virtusertable')

 

Средство ldap_routing

 

Рассказывая о псевдонимах и перенаправлении почты, нельзя не упомянуть еще раз протокол LDAP. Этот протокол может быть использован вместо средства virtusertable для маршрутизации и приема почты в виртуальных доменах. Он также позволяет управлять псевдонимами, за исключением списков рассылки.

Чтобы использовать протокол LDAP для решения указанных задач, необходимо ввести в конфигурационный файл несколько команд, а затем скомпилировать программу sendmail с поддержкой LDAP. В mc-файл требуется включить следующие строки:

 

FEATURE(‘ldap_routing’)

LDAPROUTE_DOMAIN ('домен')

define ('confLDAP_DEFAULT_SPEC',   '-h сервер -b база_поиска')

 

 

Благодаря им программа sendmail узнает о том, что нужно использовать базу данных LDAP для маршрутизации входящей почты, адресованной указанному домену. Опция LDAP_DEFAULT_SPEC определяет сервер LDAP и имя базы данных, в которой осуществляется поиск.

В следующем примере база, в которой надо осуществлять поиск, определяется так: o=sendmail.com, c=US. Если протокол LDAP применяется не на стандартном порте 389, добавьте выражение -р порт# в спецификацию опции LDAP_DEFAULT_SPEC.

Программа sendmail использует два тега в базе данных LDAP:

  • mailLocalAddress — для получателей входящей почты;
  • mailRoutingAddress — для псевдонимов адресатов.

Программа sendmail также поддерживает тег mailHost. При его наличии почта для узла, указанного в теге mailRoutingAddress, посылается компьютеру, на который ссылается наиболее приоритетная запись MX узла, указанного в теге mailHost.

Например, присутствие LDAP-записи (для сервера, сконфигурированного с уникальным именем корневого каталога, равным cn=root, o=sendmail.com, c=US)

 

dn: uid=eric,  o=senmail.com,  c=US

objectClass:  inetLocalMailRecipient

mailLocalAddress: eric@sendmail.org

mailRoutingAddress: eric@eng.sendmail.com

 

 

приведет к тому, что почта, адресованная пользователю eric@sendmail.org (записи MX предписывают посылать ее на узел sendmail.com), будет доставляться по адресу eric@eng.sendmail.com. Если же LDAP-запись будет включать еще строку

mailHost: mailserver.sendmail.com

 

то почта для пользователя eric@sendmail.org будет адресоваться пользователю eric@eng.sendmail.com и направляться узлу, на который ссылается наиболее приоритетная запись MX компьютера mailserver.

Формат базы данных LDAP допускает использование неполных записей типа @домен, которые перенаправляют почту на указанный домен вне зависимости от того, кому конкретно она адресована (как в средстве virtusertable).

 

Маскирование адресов и макрос MASQUERADE_AS

 

Макрос masquerade_as позволяет задать единый адрес, за которым будут "скрываться" все компьютеры. При этом создается видимость, что вся почта поступает с одного компьютера или из одного домена. Адрес отправителя пользователь@исходный_узел.домен меняется на пользователь@маскированное_имя. Конечно, адреса-маски должны быть легитимными, чтобы можно было получить ответ на свою почту.

Такая конфигурация позволяет всем пользователям организации иметь одинаковые электронные адреса. Если, например, все узлы домена xor.com маскируются под именем xor.com, то почта, направленная с адреса пользователь@компьютер.xor.com, будет содержать адрес отправителя пользовалель@xor.com. Компьютер, который управляет доменом xor.com, должен знать, как доставлять почту всем пользователям, даже тем, кто не имеют регистрационного имени на сервере входящей почты. Естественно, регистрационные имена должны быть уникальными во всем домене.

Некоторые пользователи и адреса (например, root, postmaster, hostmaster, trouble, operations, Mailer-Daemon и др.) должны быть исключены из системы маскирования. Это можно сделать явно с помощью макроса exposed_user. В частности, последовательность команд

 

MASQUERADE_AS (‘xor.com')

EXPOSED_USER(‘root')

EXPOSED_USER(‘Mail-Daemon')

 

 

идентифицирует всю почту как поступающую от имени пользователь@xor.com, если только она не послана пользователями root и postmaster. Почта этих пользователей будет снабжена адресом реальной машины-отправителя.

Существует несколько расширений базового макроса MASQUERADE_AS. Они реализованы как в виде макросов, так и в виде средств:

  • макрос MASQUERADE_DOMAIN,
  • макрос MASQUERADE_DOMAIN_FILE,
  • макрос MASQUERADE_EXCEPTION,
  • средство limited_masquerade,
  • средство allmasquerade,
  • средство masquerade_envelope,
  • средство masquerade_entire_domain.

Мы рекомендуем использовать макрос MASQUERADE_AS вместе со средствами allmasquerade и masquerade_envelope. Средство limited_masquerade модифицирует поведение макроса MASQUERADE_DOMAIN. Оно полезно для организации среды виртуального хостинга. Макрос MASQUERADE_DOMAIN позволяет перечислить домены, подлежащие маскированию. Этот список предварительно загружается из класса w, который обычно определяется с помощью средства use_cw_file и содержит перечень узлов домена. Средство limited_masquerade не инициализирует список на основе информации из класса w. Все эти домены будут скрыты за доменным именем, указанным в качестве маскирующего.

Средство allmasquerade расширяет маскирование на получателей сообщения, а средство masquerade_envelope маскирует адреса конверта и адреса в заголовках. Этих двух средств достаточно, чтобы все адреса обрабатывались одинаково. Средство limited_masquerade маскирует адреса указанных доменов.

 

Макроконстанты MAILHUB и SMARTHOST

 

Используя средства маскирования, можно сделать так, что почта будет выглядеть как отправленная из одного компьютера или домена. Достигается это путем переписывания заголовков или, иногда, конвертов. Однако в некоторых случаях требуется, чтобы отправкой (или приемом) почты действительно занимался один компьютер. Для входящей почты это реализуется при помощи макроконстанты MAIL_HUB, а для исходящей — посредством макроконстанты SMART_HOST.

Если необходимо пересыпать всю входящую почту на центральный сервер для последующей ее доставки, присвойте макроконстанте MAIL_HUB значение агент_доставки:компьютер, где агент_доставки — это агент, который должен использоваться для достижения указанного компьютера. Если данный аргумент не задан, используется агент relay. Например:

define('MAIL_HUB',   'smtp:mailhub.cs.colorado.edu')

 

Макроконстанта SMART_HOST заставляет компьютер доставлять локальную почту, а внешнюю почту отправлять по указанному адресу. Эта константа может применяться компьютерами, которые скрыты за брандмауэром и не могут непосредственно посылать запросы в службу DNS. Синтаксис определения этой константы такой же, как у константы MAIL_HUB. Агентом доставки, установленным по умолчанию, является агент relay. Например:

define('SMART_HOST',   'smtp:mailhub.cs.colorado.edu’)

 

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

 

Маскирование и маршрутизация

 

Итак, мы уже описали много средств и макросов, которые тем или иным способом воздействуют на адреса электронной почты. Сейчас, вероятно, самое время провести их анализ. В частности, следует рассмотреть, что именно они делают: изменяют заголовки, адреса конверта или адрес доставки сообщения, применяются к входящей или исходящей почте, к адресам получателя или отправителя и т.д. Конечно, если бы страница книги была раза в два шире, мы могли бы проиллюстрировать все различия. А поскольку это не так, приведем только общую информацию. За более полными сведениями читателям придется обратиться к документации по программе sendmail.

Элементы, указанные в табл. 19.12 прописными буквами, являются макросами препроцессора m4. Строчными буквами записаны средства, которые активизируются посредством макроса FEATURE. Отступами слева иллюстрируется зависимость средств и макросов. Например, средства, которые связаны с макросом MASQUERADE_AS, не работают, пока этот макрос не включен. Средства маскирования воздействуют на адреса в заголовках исходящих сообщений и определяют, можно ли будет получить на них ответ. Средства маршрутизации влияют на доставку сообщений.

Таблица 19.12. Сравнение средств маскирования и маршрутизации

Конструкция

Почта

Влияние1

Часть адреса

MASQUERADE_AS

исх.

ОЗ

узел.домен

allmasquerade

исх.

ПЗ

узел.домен

MASQUERADE_DOMAIN[_FILE]

исх.

ОЗ

узел.домен

masquerade_entire_domain

исх.

ОЗ

пользователь.поддомен.домен

limited_masquerade

исх.

ОЗ

узел.домен

masquerade_envelope

исх.

ОК2

узел.домен

genericstable

исх.

ОЗ

полъзователь@узел.домен

mailertable

исх.

АгАД

узел.домен

virtusertable

вход.

ПД

пользователь®узел.домен

ldap

вход.

ПД

пользователь@узел.домен

mailhub

вход.

ПД

узел.домен

smarthost

исх.

ПД

узел.домен

1 О — отправитель, П — получатель. Д — доставка, 3 — заголовок, К — конверт, Аг — агент, А — адрес.

2 Если при помощи средства masquerade_envelope задано переписывание адреса конверта, все другие маскирующие конструкции будут переписывать не только заголовок, но и конверт.

 

Средство nullclient

 

Средство nullclient предназначено для компьютера, который не должен получать почту непосредственно, а всю исходящую почту должен посылать на центральный сервер. Для такого компьютера mc-файл включает всего две строки:

 

OSTYPE (‘Тип ОС’)

FEATURE (‘nullclient',    ‘почтовый_сервер')

 

Средство nullclient отменяет назначения, выполненные при помощи других средств. Вся почта без исключения будет доставляться на компьютер почтовый_сервер для обработки. Учтите, что сервер должен обеспечивать дальнейшую ретрансляцию почты, исходящей от клиента. В последних версиях программы sendmail эта возможность отключена по умолчанию. Об управлении ретрансляцией будет подробнее рассказываться в параграфе, посвященном спаму. Так как все "нуль-клиенты" будут выглядеть как почтовый_сервер, возможно, понадобится ввести конструкцию EXPOSED_USER для пользователя root.

Клиент, на котором активизировано средство nullclient, должен иметь соответствующую запись MX, указывающую на сервер. Он также должен быть упомянут в cw-файле сервера (обычно это файл /etc/mail/local-host-names). Все эти установки позволят серверу принимать почту для данного клиента.

"Нуль-клиент" не должен принимать входящую почту. Если бы он это делал, ему все равно пришлось бы перенаправлять почту на сервер. Запустите программу sendmail без флагов -bd, чтобы она не ожидала SMTP-соединений на порту 25. Флаг -q30m не удаляйте, чтобы в случае останова почтового сервера клиент мог помещать исходящие сообщения в очередь и отправлять их позднее.

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

 

Средства local_lmtp и smrsh

 

Программа /bin/mail все хуже справляется с ролью локального агента доставки в UNIX. Если средство local_lmtp определено, то его аргументом является имя локального агента, который понимает протокол LMTP (Local Mail Transport Protocol — протокол доставки локальной почты), определенный в документе RFC2033. По умолчанию таковым является программа mail.local, включенная в дистрибутив sendmail. Эта программа инсталлируется в каталог /usr/libexec/mail.local, но посредством опции confEBINDIR можно задать другой каталог.

Программа smrsh — это усеченный интерпретатор команд, входящий в дистрибутив sendmail. Он служит заменой традиционному агенту программной доставки, /bin/sh. Программа smrsh облегчает администратору локальной системы контроль над тем, какие команды вызываются для обслуживания электронной почты. Запускать можно только те программы, которые находятся в каталоге двоичных файлов программы smrsh. Обычно это каталог /usr/adm/sm.bin (задается в процессе компиляции программы). Программа smrsh также отслеживает в командах "подозрительные" символы (например, операторы перенаправления стандартного выходного потока) и при их обнаружении прерывает доставку почты.

Мы рекомендуем инсталлировать и программу smrsh, и программу mail.local, а также включить средства, которые их используют:

 

FEATURE('local_smtp',   '/usr/libexec/raail. local')

FEATURE ('smrsh’,   '/usr/libexec/smrsh')

 

 

Средство local_procmail

 

При включении средства local_procmail появится возможность применять в качестве локального агента доставки программу procmail (автор — Стефан ван ден Берг). Данное средство требует указания только одного аргумента. Таковым является путь к двоичному файлу procmail.

Программа procmail может делать гораздо больше, чем простые программы /bin/mail или mail.local. Кроме доставки сообщений в почтовые ящики пользователей программа способна сортировать сообщения по папкам, сохранять их в файлах, вызывать программы и фильтровать спам. Программа procmail не входит в дистрибутив sendmail. Ее можно получить на Web-узле www.procmail.org. При помощи средства local_procmail можно задать использование другой, отличной от procmail, программы. Для этого обманите программу sendmail, сделав вид, что задаете локальную копию программы procmail:

FEATURE ('local procmail',   '/usr/local/bin/mymailer')

 

Макросы LOCAL_*

 

Если требуется написать несколько новых экзотических правил для каких-либо особых ситуаций, используйте набор макросов с префиксом LOCAL.

 

Конфигурационные опции

 

Конфигурационные опции и макросы (команды о и D языка конфигурирования программы sendmail) могут быть установлены при помощи команды define препроцессора m4. Полный список опций, доступных в виде переменных препроцессора, а также их значения по умолчанию приведены в файле cf/README. Для большинства систем подходят стандартные значения.

Вот несколько примеров:

 

define('confTO_QUEUERETURN' ,   '7d')

define('confTO_QUEUEWARN',   '4h')

define('confPRIVACY_FLAGS',   'noexpn')

 

 

Опция confTO_QUEUERETURN определяет, как долго разрешено находиться в очереди сообщению, которое не может быть доставлено. Опция confTO_QUEUEWARN задает, сколько времени сообщение должно стоять в очереди, чтобы его отправитель получил уведомление о том, что с сообщением не все в порядке. В первых двух строках для данных опций задаются значения 7 дней и 4 часа соответственно.

В следующей строке устанавливаются флаги безопасности, которые запрещают SMTP-команду EXPN (раскрытие адреса). Опция confPRIVACY_FLAGS принимает разделенный запятыми список флагов. Некоторые версии препроцессора m4 требуют в этом случае ставить две пары кавычек:

define('confPRIVACY_FLAGS',   '’noexpn,  novrfy'’)

 

 

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

Опции, которые может понадобиться настраивать, перечислены в табл. 19.13 (это лишь около пятнадцати процентов из 150 опций конфигурации). Тут же указаны и их значения по умолчанию. В целях экономии места опции приведены без префикса conf. Например, опция FALLBACK_MX в действительности называется confFALLBACK_MX. Таблица разделена на части в соответствии с тем, для каких целей применяется опция: общих, связанных с ресурсами, производительностью и безопасностью/спамом и прочих. Некоторые опции правильнее было бы разместить в нескольких частях, однако мы указали их только в одном месте.

Таблица 19.13. Базовые опции конфигурации

Опция

Описание и значение по умолчанию

CW_FILE

Узлы, для которых принимается почта и которые считаются локальными (/etc/mail/local-host-names)

COPY_ERRORS_TO

Адрес в заголовке "Сс" сообщения об ошибке (отсутствует)

DUBLE_BOUNCE_ADDRESS

Перехват спама; в некоторых системах спам направляется в файл /dev/null, но это чревато тем, что серьезные проблемы останутся незамеченными (postmaster)

 

MIN_FREE_BLOCKS

Минимальное пространство в файловой системе для получения почты (100)

MAX_MESSAGE_SIZE

Максимальный размер в байтах одного сообщения (неограничен)

ТО_имя

Время тайм-аута для разных ситуаций (варьируется)

TO_IDENT

Время ожидания запросов на аутентификацию отправителя; если задано значение 0, проверка не выполняется (5s)

MAX_DAEMON_CHILDREN

Максимальное количество порожденных процессов1 (не ограничено)

MCI_CACHE_SIZE

Количество открытых кэшированных ТСР-соединений (2)

MCI_CACHE_TIMEOUT

Время, в течение которого кэшированные соединения остаются открытыми (5ш)

HOST_STATUS_DIRECTORY

Описание приведено в основном тексте (значение по умолчанию отсутствует)

FALLBACK_MX

Локальный узел для пересылки сообщений, отправка которых завершилась неудачно; позволяет централизовано обрабатывать "проблемную" почту (значение по умолчанию отсутствует)

QUEUE_LA

Показатель средней загруженности, при котором сообщения помещаются в очередь, а не отправляются немедленно (8*число_процессоров)

REFUSE_LA

Показатель средней загруженности, при котором происходит отказ от почты (12*число_процессоров)

 

MIN_QUEUE_AGE

Минимальный период времени, в течение которого задание должно находиться в очереди; позволяет улучшить обработку очереди на перегруженной машине (0)

DONT_IMT_GROUPS

Рекомендуется включать, если почтовый сервер имеет файл группы большого объема, управляемый службой NIS (false)

TRUSTED_USERS

Позволяет владельцам программ, связанных с управлением списками рассылки, подделывать сроку "From" (root, daemon)

PRIVACY_FLAGS

Задает ограничения на информацию, выдаваемую по протоколу SMTP (authwarnings)

MAX_HEADERS_LENGTH

Максимальный размер (в байтах) заголовка письма; позволяет защитить буфер пользовательского агента от атаки по принципу переполнения (не ограничен)

MAX_MIME_HEADERS_LENGTH

Также защищает буфер пользовательского агента от переполнения (размер буфера не ограничен)

CONNECTION_RATE_THROTTLE

Предотвращает атаки вида "отказ от обслуживания" за счет ограничения  скорости, при которой разрешается устанавливать почтовое соединение (не ограничена)

MAX_RCPTS_PER_MESSAGE

Задерживает отправку спама; приостанавливает обработку избыточного числа получателей и генерирует временное сообщение об ошибке (число получателей не ограничено)

DONT_BLAME_SENDMAIL

Отменяет такие функции программы sendmail, как контроль безопасности и проверка файлов; не изменяйте значение этой опции без особой необходимости (safe)

AUTH_MECHANISMS

Список механизмов аутентификации по протоколу SMTP для библиотеки Cyrus SASL (пуст)

DEF_AUTH_INFO

Файл с аутентификационной информацией для исходящей почты (не определен)

LDAP_DEFAULT_SPEC

Спецификация базы данных LDAP, включая имя компьютера, на котором запущен сервер, и номер порта (не определена)

1 Если быть более точным, то это максимальное количество порожденных процессов, запускаемых одновременно. При достижении предельного значения программа sendmail отказывается принимать запросы. Эта опция позволяет предотвратить атаки вида "отказ от обслуживания".

 

Используйте опцию HOST_STATUS_DIRECTORY на загруженных узлах, которые вынуждены обрабатывать большой объем отвергнутой почты. Эта опция предписывает программе sendmail хранить в статусном каталоге файл для каждого компьютера, на который не удается выполнить доставку. На основании данной информации определяются приоритеты просмотра узлов при повторной обработке очереди. Это позволяет реализовать схему отрицательного кэширования (см. главу 16) и обмениваться статусной информацией при обработке разных почтовых очередей. Ниже приведена команда, в которой каталог /etc/mail/.hoststat выделяется для хранения статусной информации (этот каталог сначала нужно создать):

define('confHOST_STATUS_DIRECTORY',   '.hoststat')

 

Опция FALLBACK_MX также позволяет повысить производительность. Она задает пересылку всей неотправленной почты на локальный сервер, освобождая тем самым основной почтовый сервер для доставки почты с правильными адресами. Это средство очень удобно для узлов с большими списками рассылки, где постоянно попадаются адреса, по которым невозможно доставить почту. Например, команда

define('confFALLBACK_MX',  ‘mailbackup.xor.com')

 

задает пересылку всех сообщений, которые не удалось доставить с первого раза, на центральный сервер mailbackup.xor.com для последующей обработки.

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

 

DAEMON_OPTIONS('Port=25,Name=MTA')

DAEMON_OPTIONS('Port=587,Name=MSA,M=E')

 



 (голосов: 0)
Версия для печати | Комментариев: 0
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.


 
Логин
Пароль
 

 
Locations of visitors to this page