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








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

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

Глава 15. Серверное программное обеспечение (почтовый сервис)

Linux Sendmail сервер

Краткий обзор.

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

Здесь мы представим две различные конфигурации Sendmail: одна для центрального почтового концентратора, другая для локального или граничного клиента и сервера.

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

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

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

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам /var/tmp (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем root.
Sendmail версии 8.10.1.

Пакеты.
Домашняя страница Sendmail: http://www.sendmail.org, FTP-сервер: 204.152.184.34, Вы должны скачать: sendmail.8.10.1.tar.gz.

Архивы.

Хорошей идеей будет создать список файлов, установленных в Вашей системе до инсталляции Sendmail и после, в результате, с помощью утилиты diff, Вы сможете узнать, какие файлы были установлены. Например, до инсталляции:
find /* > Sendmail1
После инсталляции:
find /* > Sendmail2
Для получения списка установленных файлов:
diff Sendmail1 Sendmail2 > Sendmail-Installed

Раскроем архив (tar.gz).

[root@deep /]# cp sendmail.version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf sendmail.version.tar.gz

Конфигурирование
Переместитесь в новый каталог Sendmail и выполните следующее:
Редактируйте файл smrsh.c (vi +77 smrsh/smrsh.c) и измените строку:

# define CMDDIR "/usr/adm/sm.bin"
Должна читаться:
# define CMDDIR "/etc/smrsh"

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

Компиляция и оптимизация

Скрипт Build из Sendmail использует конфигурационный файл сайта, в котором определяются тип операционной системы и различные флаги компиляции. Этот файл находится в каталоге devtools/OS, и если Вы запускаетесь под Linux, то он имеет имя Linux. Мы пересоздадим этот конфигурационный файл сайта для соответствия его Вашей системе и поместим в каталог devtools/OS дерева исходных кодов Sendmail, так как скрипт Build будет в процессе компиляции искать конфигурационный файл по умолчанию именно в этом месте.

Переместитесь в новый каталог Sendmail и редактируйте файл Linux (vi devtools/OS/Linux), удалив в нем все предопределенные строки и добавив следующие новые:

define(`confENVDEF', `-DPICKY_QF_NAME_CHECK -DXDEBUG=0')
define(`confCC', `egcs')
define(`confOPTIMIZE', `-O9 -funroll-loops -mcpu=pentiumpro \
       -march=pentiumpro -fomit-frame-pointer -fno-exceptions')
define(`confLIBS', `-lnsl')
define(`confLDOPTS', `-s')
define(`confMANROOT', `/usr/man/man')
define(`confMANOWN', `root')
define(`confMANGRP', `root')
define(`confMANMODE', `644')
define(`confMAN1SRC', `1')
define(`confMAN5SRC', `5')
define(`confMAN8SRC', `8')
define(`confDEPEND_TYPE', `CC-M')
define(`confNO_HELPFILE_INSTALL')
define(`confSBINGRP', `root')
define(`confSBINMODE', `6755')
define(`confUBINOWN', `root')
define(`confUBINGRP', `root')
define(`confEBINDIR', `/usr/sbin')

Здесь опции обозначают следующее:

define(`confENVDEF', `-DPICKY_QF_NAME_CHECK -DXDEBUG=0')
Эта макроопция первично использовалась для определения кода, который должен быть включен или исключен. С -DPICKY_QF_NAME_CHECK Sendmail будет фиксировать ошибку, если файл qf сформирован некорректно и будет переименовывать файл qf в Qf. Аргумент -DXDEBUG=0 отключает шаги дополнительных внутренних проверок в течении компиляции.

define(`confCC', `egcs')
Эта макроопция определяет компилятор C, используемый при компиляции Sendmail. В нашем случае мы используем C-компилятор egcs для лучшей оптимизации.

define(`confOPTIMIZE', `-O9 -funroll-loops -mcpu=pentiumpro \ -march=pentiumpro -fomit-frame-pointer -fno-exceptions')
Эта макроопция определяет флаги, используемые для оптимизации под Вашу CPU-архитектуру.

define(`confLIBS', `-lnsl')
Эта макроопция определяет флаг -l, передаваемый ld.

define(`confLDOPTS', `-s')
Эта макроопция определяет опции компоновщика, передаваемые ld.

define(`confMANROOT', `/usr/man/man')
Эта макроопция определяет место, куда надо инсталлировать страницы руководства (man) Sendmail.

define(`confMANOWN', `root')
Эта макроопция определяет владельца всех проинсталлированных страниц руководства Sendmail.

define(`confMANGRP', `root')
Эта макроопция определяет группу для всех проинсталлированных страниц руководства Sendmail.

define(`confMANMODE', `644')
Эта макроопция определяет режим доступа для всех проинсталлированных страниц руководства Sendmail.

define(`confMAN1SRC', `1')
Эта макроопция определяет источник для страниц руководств, устанавливаемых в confMAN1.

define(`confMAN5SRC', `5')
Эта макроопция определяет источник для страниц руководств, устанавливаемых в confMAN5.

define(`confMAN8SRC', `8')
Эта макроопция определяет источник для страниц руководств, устанавливаемых в confMAN8.

define(`confDEPEND_TYPE', `CC-M')
Эта макроопция определяет, как создавать зависимости с Sendmail.

define(`confNO_HELPFILE_INSTALL')
Эта макроопция говорит, что не надо инсталлировать файл помощи Sendmail по умолчанию. Некоторые опытные администраторы рекомендуют сделать это для большей безопасности.

define(`confSBINGRP', `root')
Эта макроопция определяет группу для всех исполняемых файлов со сменой идентификатора (setuid) Sendmail.

define(`confSBINMODE', `6755')
Эта макроопция определяет режим доступа для всех исполняемых файлов со сменой идентификатора (setuid) Sendmail.

define(`confUBINOWN', `root')
Эта макроопция определяет владельца для всех исполняемых файлов Sendmail.

define(`confUBINGRP', `root')
Эта макроопция определяет группу для всех исполняемых файлов Sendmail.

define(`confEBINDIR', `/usr/sbin')
Эта макроопция определяет, куда должны быть установлены двоичные исполняемые файлы, выполняемые из других двоичных файлов. В Red Hat Linux этот путь должен быть определен именно как /usr/sbin.

Шаг 2.
Сейчас мы должны скомпилировать и проинсталлировать Sendmail на нашем сервере:

[root@deep sendmail-8.10.1]# cd sendmail
[root@deep sendmail]# sh Build
[root@deep sendmail]# sh Build install
[root@deep sendmail]# cd ..
[root@deep sendmail-8.10.1]# cd mailstats
[root@deep mailstats]# sh Build install
[root@deep mailstats]# cd ..
[root@deep sendmail-8.10.1]# cd smrsh
[root@deep smrsh]# sh Build install
[root@deep smrsh]# cd ..
[root@deep sendmail-8.10.1]# cd makemap
(Требуется только для конфигурации почтового концентратора)
[root@deep makemap]# sh Build install
(Требуется только для конфигурации почтового концентратора)
[root@deep makemap]# cd ..
[root@deep sendmail-8.10.1]# cd praliases
(Требуется только для конфигурации почтового концентратора)
[root@deep makemap]# sh Build install
(Требуется только для конфигурации почтового концентратора)
[root@deep makemap]# cd ..
[root@deep sendmail-8.10.1]# ln -fs /usr/sbin/sendmail /usr/lib/sendmail
[root@deep sendmail-8.10.1]# chmod 511 /usr/sbin/smrsh
[root@deep sendmail-8.10.1]# install -d -m 755 /var/spool/mqueue
[root@deep sendmail-8.10.1]# chown root.mail /var/spool/mqueue
[root@deep sendmail-8.10.1]# mkdir /etc/smrsh

Команда sh Build собирает и создает необходимые зависимости для различных двоичных файлов, требуемых Sendmail до инсталляции на Вашу систему.

Команда sh Build install инсталлирует исполняемые двоичные файлы sendmail, mailstats, makemap, praliases, smrsh и страницы руководства, если это было задано перед компиляцией.

Команда ln -fs создает символическую ссылку исполняемого файла sendmail в каталоге /usr/lib. Это требуется, так как некоторые программы пытаются искать sendmail в этом каталоге (/usr/lib).

Команда install создаст подкаталог mqueue с правами доступа 755 в каталоге /var/spool. Почтовые сообщения по разным причинам могут быть сразу не доставлены. Чтобы гарантировать их доставку, Sendmail запоминает их в каталоге mqueue, пока они не будут отправлены.

Команда chown устанавливает UID root и GID mail для каталога mqueue.

Команда mkdir будет создавать каталог /etc/smrsh. Здесь будут лежать все программы-почтальоны, которые мы разрешим запускать Sendmail.

ЗАМЕЧАНИЕ. Программы makemap и praliases должны быть установлены только на центральном почтовом концентраторе. makemap позволяет создавать базы данных соответствий, наподобие файлов /etc/mail/aliases.db или /etc/mail/access.db. praliases выводит системные почтовые псевдонимы (содержимое файла /etc/mail/aliases). Так как лучше иметь только одно место (подобное центральному почтовому концентратору) для обработки и управления всеми db-файлами в Вашей сети, то нет необходимости использовать программы makemap и praliases и создавать db-файлы на других компьютерах сети.

Конфигурации

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

Скопируйте файлы, связанные с Sendmail, из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями Вы можете скачать с адреса http://www.openna.com/books/floppy.tgz.

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

Копируйте файл sendmail в каталог /etc/sysconfig.
Копируйте скрипт sendmail в каталог /etc/rc.d/init.d.
Копируйте файл local-host-names в каталог /etc/mail.
Копируйте файл access в каталог /etc/mail.
Копируйте файл aliases в каталог /etc/mail.
Создайте файлы virtusertable, domaintable, mailertable и .db в каталоге /etc/mail.

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

Копируйте файл sendmail в каталог /etc/sysconfig.
Копируйте скрипт sendmail в каталог /etc/rc.d/init.d.
Копируйте файл local-host-names в каталог /etc/mail.

Файл /etc/sendmail.mc для центрального почтового концентратора

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

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

Файл sendmail.cf первым считывается Sendmail при запуске и является одним из самых важных файлов для него. В нем определяются месторасположени я остальных файлов, права доступа к файлам и каталогам нужным Sendmail. Макропрепроцессор m4 из Linux используется Sendmail V8 для создания конфигурационного файла.

Он будет создавать конфигурационный файл /etc/mail/sendmail.cf, обрабатывая файл, имя которого заканчивается на .mc.

Мы создадим файл (sendmail.mc) и внесем в него необходимые макрозначения, которые препроцессор m4 прочитает, соберет определения макросов и затем заменит эти макросы их значениями, создавая в результате своей работы файл sendmail.cf. Пожалуйста, обратитесь к документации на Sendmail и файлу README из каталога cf дерева исходных фалов Sendmail V8 для получения большей информации.

Шаг 1.

Создайте файл sendmail.mc (touch /var/tmp/sendmail-version/cf/cf/sendmail.mc) и добавьте в него следующие строки:

define(`confDEF_USER_ID',``8:12'')dnl
OSTYPE(`linux')dnl
DOMAIN(`generic')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`LOCAL_MAILER_FLAGS', `ShPfn')dnl
define(`LOCAL_MAILER_ARGS', `procmail -a $h -d $u')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl
FEATURE(`redirect')dnl
FEATURE(`always_add_domain')dnl
FEATURE(`use_cw_file')dnl
FEATURE(`local_procmail')dnl
FEATURE(`access_db')dnl
FEATURE(`blacklist_recipients')dnl
FEATURE(`dnsbl')dnl
MAILER(`local')dnl
MAILER(`smtp')dnl
MAILER(`procmail')dnl

define(`confDEF_USER_ID',``8:12'')dnl
Эта конфигурационная опция определяет id пользователя по умолчанию. В нашем случае это пользователь mail и группа mail, которые отвечают следующему идентификатору 8:12 (смотрите файлы /etc/passwd и /etc/group).

OSTYPE(`linux')dnl
Эта конфигурационная опция задает операционную систему, под которой будет запускаться Sendmail, в нашем случае это linux. Этот элемент является минимально необходимым для mc-файла.

DOMAIN(`generic')dnl
Эта конфигурационная опция будет определять и описывать домен, соответствующий Вашему окружению.

define(`confTRY_NULL_MX_LIST',true)dnl
Эта конфигурационная опция определяет, является ли принимающий сервер лучшим MX для хоста, и если это так, то соединяется ли с ним напрямую.

define(`confDONT_PROBE_INTERFACES',true)dnl
Эта конфигурационная опция, если она установлена в true, говорит Sendmail не вставлять имена и адреса любых локальных интерфейсов в класс $=w (список известных эквивалентных адресов).

define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
Эта опция определяет путь к программе procmail, инсталлированной на Вашей системе. Так как в Red Hat Linux он отличается от других версий Linux, мы должны определить новый путь в этом макросе. Важно заметить, что этот макрос также используется в FEATURE(`local_procmail'), как будет определено позже в этом файле.

define(`LOCAL_MAILER_FLAGS', `ShPfn')dnl
Эта конфигурационная опция определяет флаги, которые должны быть использованы локальным агентом доставки (procmail). Смотрите документацию на Sendmail для получения большей информации о них.

define(`LOCAL_MAILER_ARGS', `procmail -a $h -d $u')dnl
Эти конфигурационные опции определяют аргументы, которые должны быть переданы локальному агенту доставки (procmail). Смотрите документацию на Sendmail для получения информации о них.

FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
Это m4-макроопределение включает использование smrsh (ограниченная оболочка sendmail) вместо /bin/sh, используемого по умолчанию) для почтовых программ. При помощи этой опции Вы можете контролировать, какие программы могут запускаться через электронную почту, через файлы /etc/mail/aliases и ~/.forward. По умолчанию программа smrsh находится в /usr/libexec/smrsh, так как мы проинсталлировали smrsh в другое место, нам нужно добавить аргумент smrsh, указывающий новое месторасположение /usr/sbin/smrsh. Использование smrsh рекомендовано CERT, так что Вы должны поддерживать использование этой возможности так часто, как возможно.

FEATURE(`mailertable')dnl
Это макроопределение m4 включает возможность использования mailertable (базы данных выбора нового агента доставки). mailertable это база данных, которая связывает имена host.domain со специальными агентами доставки. Благодаря этой возможности, почта может доставляться специфическими агентами доставки к новым доменным именам. Обычно, эта возможность используется только на центральном почтовом концентраторе.

FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl
Это макроопределение m4 включает использование virtusertable (поддержка виртуальных доменов), которая позволяет на одной машине размещать много виртуальных доменов. virtusertable это база данных, которая связывает виртуальные домены с новыми адресами. Благодаря использованию этой возможности, почта для виртуальных почтовых доменов может быть доставлена на локальные, удаленные или единичные адреса пользователей. Обычно эта возможность используется только на центральном почтовом концентраторе.

FEATURE(`redirect')dnl
Это макроопределение m4 включает использование redirect (поддержка для address.REDIRECT). С этой возможностью почтовый адрес удаленного логина, например, wahib, будет отражаться с информацией о новом адресе. Удаленный логин должен быть определен в файле псевдонимов на почтовом сервере. Обычно эта возможность используется только на центральном почтовом концентраторе.

FEATURE(`always_add_domain')dnl
Это макроопределение m4 включает использование always_add_domain (добавлять локальный домен в локальной почте). Благодаря этой возможности, все локально доставляемые адреса будут полностью квалифицированными.

FEATURE(`use_cw_file')dnl
Это макроопределение m4 включает использование use_cw_file (использование файла /etc/mail/local-host-names для локальных имен компьютеров). Используя эту возможность, Вы можете объявить список хостов в файле /etc/mail/local-host-names для которых локальный хост выступает MX-получателем. Другими словами, файл /etc/mail/local-host-names будет содержать альтернативные имена локального компьютера.

FEATURE(`local_procmail')dnl
Это макроопределение m4 включает использование local_procmail (использовать procmail, как локальный агент доставки). Благодаря этой функции, Вы можете использовать procmail, как агент доставки для Sendmail.

FEATURE(`access_db')dnl
Это макроопределение m4 включает использование базы данных доступа. Благодаря этой функции, Вы можете в базе данных access разрешать или запрещать прием почты с определенных доменов. Обычно эта возможность используется только на центральном почтовом концентраторе.

FEATURE(`blacklist_recipients')dnl
Это макроопределение m4 включает возможность блокирования входящей почты от определенных отправителей, компьютеров и адресов. Используя эту функцию, например, Вы можете блокировать входящую почту от пользователя nobody, хоста foo.mydomain.com или guest@bar.mydomain.com.

FEATURE(`dnsbl')dnl
Это макроопределение m4 разрешает Sendmail отклонять почту от любых сайтов, входящих в базу данных Realtime Blackhole List "rbl.maps.vix.com". Базирующееся на DNS блокирование основывается на базе данных, содержащей DNS-имена спамеров. За подробной информацией обращайтесь на http://maps.vix.com/rbl.

MAILER(`local'), MAILER(`smtp') и MAILER(`procmail')dnl
Это макроопределение m4 включает использование агентов доставки local, smtp и procmail (по умолчанию, агенты доставки автоматичнски не объявляются). Используя эту возможность, Вы можете определить, какие агенты использовать, а какие игнорировать. Опции MAILER(`local'), MAILER(`smtp') и MAILER(`procmail') поддерживают агенты доставки local, smtp, esmtp, smtp8, relay и procmail. Важно отметить, что MAILER(`smtp') должен всегда предшествовать MAILER(`procmail').

ЗАМЕЧАНИЕ. Иногда домен, с которым Вы хотите продолжить общаться, может входить в список RBL. В этом случае Sendmail позволяет Вам переписать разрешение на прием их почты. Чтобы сделать это, просто отредактируйте файл /etc/mail/access и добавьте соответствующую доменную информацию. Например: blacklisted.domain OK.

Шаг 2.

Сейчас, когда файл с макроопределениями sendmail.mc создан, мы создадим конфигурационный файл sendmail (sendmail.cf). Для этого используйте следующие команды:

[root@deep /]# cd /var/tmp/sendmail-version/cf/cf
[root@deep cf]# m4 ../m4/cf.m4 sendmail.mc > /etc/mail/sendmail.cf

ЗАМЕЧАНИЕ. Здесь ../m4/cf.m4 говорит программе m4, где находится конфигурационный файл с информацией по умолчанию.

Так как локальные клиентские машины никогда не получают почту напрямую из внешнего мира и пересылают (отправляют) почту через центральный почтовый концентратор, мы создаем специальный фал, называемый null.mc, из которого позже мы получим конфигурационный файл sendmail.cf, отвечающий специальным установкам для граничных и локальных серверов. Этот файл с макроопределениями m4 легко создается и конфигурируется потому, что ему не нужно столько возможностей, как на центральном почтовом концентраторе.

Шаг 1.

Создаем фал null.mc (touch /var/tmp/sendmail-version/cf/cf/null.mc) и добавляем в него следующие строки:

OSTYPE(`linux')dnl
DOMAIN(`generic')dnl
FEATURE(`nullclient',`mail.openna.com')dnl
undefine(`ALIAS_FILE')dnl

OSTYPE(`linux')
Эта конфигурационная опция задает операционную систему, под которой будет запускаться Sendmail, в нашем случае это linux. Этот элемент является минимально необходимым для mc-файла.

DOMAIN(`generic')
Эта конфигурационная опция будет определять и описывать домен, соответствующий Вашему окружению.

FEATURE(`nullclient',`mail.openna.com')
Это макроопределение m4 говорит Вашей клиентской машине никогда не принимать почту напрямую, посылать ее через почтовый концентратор и пересылать всю почту через этот же сервер, вместо того, чтобы отправлять напрямую. Эта возможность создает небольшой конфигурационный файл, не содержащий ничего, кроме информации о пересылке всей почты на почтовый концентратор через локальную сеть, базирующуюся на SMTP. Аргумент mail.openna.com, включенный в это определение, является каноническим именем почтового концентратора. Вы должны, конечно, изменить это имя на Ваш почтовый концентратор, например: FEATURE(`nullclient',`my.mailhub.com').

undefine(`ALIAS_FILE')
Эта конфигурационная опция предотвращает доступ к файлам /etc/mail/aliases и /etc/mail/aliases.db со стороны nullclient-версии Sendmail. С этой строкой в .mc-файле, Вам не нужно создавать файл aliases на Вашем внутреннем сервере. Эти файлы необходимы только для центрального почтового севера.

ЗАМЕЧАНИЕ. Хочется отметить, что со всеми типами конфигураций, должны быть определены no mailers, no aliasing и forwarding.

Шаг 2.

Сейчас, когда у нас есть конфигурационный файл с макроопределениями null.mc, мы будем на его основе создавать конфигурационный файл Sendmail sendmail.cf для граничных серверов и клиентских машин, используя следующие команды:

[root@deep /]# cd /var/tmp/sendmail-version/cf/cf
[root@deep cf]# m4 ../m4/cf.m4 null.mc > /etc/mail/sendmail.cf
Шаг 3.

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

Для остановки демона Sendmail, редактируйте или создайте файл /etc/sysconfig/sendmail и измените/добавьте следующие строки:

DAEMON=yes
Должна читаться:
DAEMON=no
QUEUE=1h

ЗАМЕЧАНИЕ. QUEUE=1h в файле /etc/sysconfig/sendmail говорит Sendmail, что необходимо обрабатывать очередь каждый час. Мы оставим эту строку, так как Sendmail необходимо периодически выполнять эту операцию, если почтовый концентратор не работает.

Шаг 4.

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

/usr/bin/newaliases
/usr/man/man1/newaliases.1
/usr/man/man5/aliases.5

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

[root@client /]# rm -f /usr/bin/newaliases
[root@client /]# rm -f /usr/man/man1/newaliases.1
[root@client /]# rm -f /usr/man/man5/aliases.5

Шаг 5.

Удалите неиспользуемую программу Procmail с Ваших локальных серверов и с клиентских машин. Так как локальные машины отправляют всю внутреннюю и исходящую почту на центральный почтовый концентратор для дальнейшей доставки, нам нет необходимости использовать локальный агент доставки, подобный Procmail. Вместо него мы можем использовать программу /bin/mail. Для удаления Procmail с сервера используйте следующую команду:

[root@client]# rpm -e procmail

Файлы /etc/mail/access и access.db для центрального почтового концентратора

Файл базы данных access может быть создан для приема и блокирования почты с выбранных доменов. Например, Вы можете выбрать блокирование всей почты, исходящей от известных спамеров, или прием для пересылки всей почты из Вашей локальной сети, так как по умолчанию пересылки любой почты в Sendmail запрещена (это антиспамовая возможность). В файле access, приведенном ниже, мы разрешаем пересылку почты от локального компьютера и всех локальных сетевых адресов, начинающихся с IP-адреса 192.168.1. Файлы access и access.db не требуются на локальных и граничных клиентах. Они нужны только, если Вы решили установить центральный почтовый концентратор для управления всей Вашей почты. Также заметим, что использование центрального почтового концентратора будет улучшать безопасность и управление другими серверами и клиентами с запущенным Sendmail.

Шаг 1.

Создайте файл access (touch /etc/mail/access) и добавьте в него следующие строки:

# Посмотреть описание формата записей, используемого в этом файле
# можно в файле "cf/README" из пакета с исходными кодами Sendmail.
#
# В записях используются почтовые адреса, доменные имена и
# сетевые адреса как ключи. Например,
# spammer@aol.com REJECT
# cyberspammer.com REJECT
# 192.168.212 REJECT
# будет отвергать почту от spammer@aol.com, любых пользователей из
# домена cyberspammer.com (или любых хостов из домена cyberspammer.com)
# и любых хостов из сети 192.168.212.*.
#
# Ключам могут сопостовляться следующие значения:
#
# OK - принимать почту, даже если другие правила запущенного набора
# правил будут ее отвергать, например, если доменное имя неразрешенное
# (unresolvable).
# RELAY - принимать почту из указанного домена или принимать ее от них
# для дальнейшей пересылки через Ваш SMTP-сервер. Для некоторых проверок
# RELAY действует также, как и OK.
# REJECT - отклонение отправителя или получателя с универсальным
# сообщением.
# DISCARD - полное сбрасывание сообщения с использованием
# программы-почтальона $#discard. Это работает только для адресов
# отправителей (то есть, эта опция указывает, что Вы должны сбросить любые
# сообщения из указанного домена).
# ### любой текст ### - возвращаемое сообщение представляет из себя
# совместимый с RFC 821 код ошибки и "любой текст".
#
# Например:
# cyberspammer.com      550 We don't accept mail from spammers
# okay.cyberspammer.com OK
# sendmail.org          OK
# 128.32                RELAY
#
# будет приниматься почта из okay.cyberspammer.com, но будет сбрасываться
# почта с любых других хостов домена cyberspammer.com с указанным сообщением.
# Будет приниматься почта с любых хостов домена sendmail.org,
# и разрешена пересылка почты для сети 128.32.*.*.
#
# Вы можете также использовать базу данных access для блокирования по
# адресу отправителя, базируясь на части адреса, содержащей
# имя пользователя. Например:
# FREE.STEALTH.MAILER@ 550 Spam not accepted
#
# Заметим, что Вы должны указать @ после имени пользователя, чтобы указать,
# что этот элемент базы данных проверяет только имя
# пользователя в адресе отправителя.
#
# Если в Вашем файле sendmail.mc Вы используете макроопределение:
# FEATURE(`blacklist_recipients')
#
# тогда Вы можете добавить элементы, связанные с локальными пользователями,
# хостами в Вашем домене или адресов в нем, для которых Вы
# не должны получать почту:
# badlocaluser                550 Mailbox disabled for this username
# host.mydomain.com           550 That host does not accept mail
# user@otherhost.mydomain.com 550 Mailbox disabled for this recipient
#
# Вы хотите предотвратить получение почты для пользователя
# badlocaluser@mydomain.com, любых пользователей из host.mydomain.com и
# одного адреса user@otherhost.mydomain.com.
# Включение этой возможности также будет блокировать всю почту для
# получателей, для который указан флаг сообщения об ошибке или REJECT.
# spammer@aol.com        REJECT
# cyberspammer.com       REJECT
#
# Почта не может быть отправлена пользователю spammer@aol.com или
# кому-либо из cyberspammer.com.
#
# Сейчас Ваш конфигурационный файл access,
# разрешает пересылку почты из localhost.
localhost.localdomain    RELAY
localhost                RELAY
127.0.0.1                RELAY
192.168.1                RELAY

ЗАМЕЧАНИЕ. Не забудьте задать в этом файле диапазон Ваших приватных IP-адресов, для которых Вы хотите разрешить пересылку почты, или Вы не сможете отправлять почту из Вашей внутренней сети.

Шаг 2.

Создание файла access.db:
Помните, что так как /etc/mail/access является базой данных, то после создания текстового файла, описанного выше, Вы должны использовать команду makemap для создания базы данных схем. Для создания базы данных схем используйте следующую команду:

[root@deep /]# makemap hash /etc/mail/access.db < /etc/mail/access

Файлы /etc/mail/aliases и aliases.db для центрального почтового концентратора

Использование псевдонимов это процесс конвертирования одних локальных имен получателей в другие (использование псевдонимов возможно только для локальных имен). Например, используется конвертирование общих имен (таких, как root) в реальные имена, или конвертирование одних имен в список из нескольких имен (для списка рассылки). Для каждого элемента где локальный пользователь упоминается как получатель, Sendmail смотрит получателя в базе данных aliases. Так как Sendmail может производить поиск среди нескольких тысяч имен в файле aliases, копия файла хранится в независимой базе данных db для значительного увеличения скорости просмотра. Если Вы настраиваете Sendmail на использование центрального сервера (почтового концентратора) для управления всей почты, не нужно будет инсталлировать файлы aliases и aliases.db на граничных серверах и клиентских машинах.

Шаг 1,

Создайте файл aliases (touch /etc/mail/aliases) и добавьте в него следующие строки:

# @(#)aliases 8.2 (Berkeley) 3/5/94
#
# Псевдонимы в этом файле не будут расширяться в заголоке FROM: почты
# но будут видны через сеть и из /bin/mail.
#
# >>>>>>>>>> Программа "newaliases" должна быть запущена после того,
# >> NOTE >> как в этот файл будут внесены любые изменения, чтобы
# >>>>>>>>>> они стали видны sendmail.
#
# Общие системные псевдонимы всегда должны быть представлены.
MAILER-DAEMON: postmaster
postmaster: root
# Общие перенаправления для псевдопользователей.
bin: root
daemon: root
nobody: root
# Лицо, получающее почту пользователя root
#root: admin

ЗАМЕЧАНИЕ. Ваш файл псевдонимов будет, скорее всего, более сложным. Этот пример показывает минимальный вид этого файла.

Шаг 2.

Создание файла aliases.db:
Так как /etc/mail/aliases это база данных, после создания текстового файла, как описано выше, Вы должны использовать команду makemap для создания базы данных схем. Для создания базы данных схем псевдонимов используйте следующую команду:

[root@deep /]# makemap hash /etc/mail/aliases.db < /etc/mail/aliases

Файлы /etc/mail/virtusertable, domaintable, mailertable, virtusertable.db, domaintable.db и mailertable.db для центрального почтового концетратора

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

Файлы virtusertable и virtusertable.db.

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

Файлы domaintable и domaintable.db.

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

Файлы mailertable и mailertable.db.

mailertable это база данных, которая отображает имена вида host.domain на специальные агенты доставки и новые пары доменных имен. Благодаря этой возможности, почта может быть доставлена через использования специального агента доствки новым локальным или удаленным доменным именам.

Для создания файлов virtusertable, domaintable, mailertable и их соответствующих .db-версий в каталоге /etc/mail используйте команды:

[root@deep /]# for map in virtusertable domaintable mailertable
> do
> touch /etc/mail/${map}
> chmod 0644 /etc/mail/${map}
> makemap hash /etc/mail/${map}.db < /etc/mail/${map}
> chmod 0644 /etc/mail/${map}.db
> done

Файл /etc/mail/local-host-names для всех типов конфигураций

Файл /etc/mail/local-host-names считывается для получения альтернативных имен локального хоста. Один из способов, как этот файл может быть использован, это объявление списка хостов для которых локальный компьютер выступает как получатель почты через MX-записи. На такой машине нам просто нужно добавить имена (например, mail.openna.com), для которых он будет манипулировать почтой. Например:

Создайте файл local-host-names (touch /etc/mail/local-host-names) и добавьте в него следующую строку:

# local-host-names включает все псевдонимы для Вашего компьютера.
openna.com deep.openna.com www.openna.com win.openna.com mail.openna.com

С такой конфигурацией вся почта отправляемая на домен openna.com или любая почта, отправляемая на сервер www.openna.com или другой хост, будет доставляться на Ваш почтовый концентратор mail.openna.com.

Пожалуйста, запомните, что если Вы настраиваете Вашу систему для маскарадинга под другую машину, любая почта, посланная из Вашей системы, на Вашу систему будет отправлена на машину, под которую Вы маскируетесь. Например, в вышеприведенной конфигурации, системные файлы регистрации, которые периодически отправляются на адрес root@www.openna.com, будут отправлены на адрес root@mail.openna.com Вашего почтового концентратора.

Конфигурация файла /etc/sysconfig/sendmail для всех типов конфигураций

Файл /etc/sysconfig/sendmail используется для определения конфигурационной информации SENDMAIL, такой как, запускать ли sendmail как демон, нужно ли слушать порт для приема почты или нет, и как долго ждать перед отправкой предупреждающего сообщения, если сообщение из каталога очереди не может быть доставлено.

Создайте файл sendmail (touch /etc/sysconfig/sendmail) и добавьте в него следующее:

DAEMON=yes
QUEUE=1h

Опция DAEMON=yes говорит Sendmail запускаться как демон. Эта строка особо полезна, когда sendmail запускается на клиентских машинах, которые не должны принимать почту из внешнего мира, а должны пересылать все сообщения на центральный почтовый концентратор. Не запуская sendmail, Вы также улучшаете безопасность. Если Вы настраиваете sendmail подобным образом, то замените строку DAEMON=yes на DAEMON=no.

Почта обычно помещается в очередь, потому что не может быть отправлена незамедлительно. QUEUE=1h устанавливает интервал времени до отправки предупреждающего сообщения отправителю письма, что его сообщение не может быть доставлено.

Конфигурация скрипта /etc/rc.d/init.d/sendmail для всех типов конфигураций

Настройка скрипта /etc/rc.d/init.d/sendmail для запуска и остановки демона Sendmail. Создайте скрипт-файл sendmail (touch /etc/rc.d/init.d/sendmail) и добавьте в него следующее:

#!/bin/sh
#
# Это shell-скрипт, который заботится о запуске и остановке sendmail.
#
# chkconfig: 2345 80 30
# Описание: Sendmail это почтовый транспортный агент, который
# используется для перемещения почты с одной машины на другую.
# имя процесса: sendmail
# конфигурационный файл: /etc/sendmail.cf
# pidfile: /var/run/sendmail.pid
# Библиотека исходных функций.
. /etc/rc.d/init.d/functions
# Исходная сетевая конфигурация.
. /etc/sysconfig/network
# Исходная конфигурация sendmail.
if [ -f /etc/sysconfig/sendmail ] ; then
. /etc/sysconfig/sendmail
else
DAEMON=yes
QUEUE=1h
fi
# Проверка, что сеть включена.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/sbin/sendmail ] || exit 0
RETVAL=0
# Смотрим как мы вызываем скрипт.
case "$1" in
start)
# Запуск демона.
echo -n "Starting sendmail: "
/usr/bin/newaliases > /dev/null 2>&1
for i in virtusertable access domaintable mailertable ; do
if [ -f /etc/mail/$i ] ; then
makemap hash /etc/mail/$i < /etc/mail/$i
fi
done
daemon /usr/sbin/sendmail $([ "$DAEMON" = yes ] && echo -bd) \
       $([ -n "$QUEUE" ] && echo -q$QUEUE)
RETVAL=$?
echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/sendmail ;; stop) # Остановка демона. echo -n "Shutting down sendmail: " killproc sendmail RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sendmail ;; restart|reload) $0 stop $0 start RETVAL=$? ;; status) status sendmail RETVAL=$? ;; *) echo "Usage: sendmail {start|stop|restart|status}" exit 1 esac exit $RETVAL
Сейчас сделаем скрипт исполняемым и изменим права доступа по умолчанию:
[root@deep /]# chmod 700 /etc/rc.d/init.d/sendmail
Создадим символическую ссылку в rc.d для Sendmail:
[root@deep /]# chkconfig --add sendmail
Запустим сервер Sendmail вручную, используя следующую команду:
[root@deep /]# /etc/rc.d/init.d/sendmail start
Starting sendmail:              [ OK ]

Очистка после работы

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf sendmail-version/ sendmail.version.tar.gz

Команда rm будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Sendmail. Также будет удален сжатый архив Sendmail из каталога /var/tmp.

Организация защиты Sendmail

Ограниченная оболочка smrsh Sendmail

Программа smrsh предназначается для замены /bin/sh в программах почтальонах, определенных в Sendmail. Это ограниченная оболочка, которая предоставляет возможность строго определить через каталог /etc/smrsh явный список исполняемых программ, доступных Sendmail. Чтобы быть более точным, даже если нехороший человек использует Sendmail для запуска программ без файлов псевдонимов и forward, smrsh ограничит набор программ, которые он сможет выполнить. В связке с Sendmail smrsh эффективно ограничивает область выполняемых программ только теми программами, что перечислены в каталоге /etc/smrsh. Если Вы следовали по инструкциям описанным выше, то smrsh уже откомпилирован и инсталлирован в каталог /usr/sbin/smrsh.

Шаг 1.

Первое, что надо сделать, это определить список команд, которые smrsh позволит Sendmail выполнять. По умолчанию в него входят:
/bin/mail (если инсталлирована на Вашей системе)
/usr/bin/procmail (если инсталлирована на Вашей системе)

ЗАМЕЧАНИЕ. Вы не должны включать интерпретирующие программы, такие как sh(1), csh(1), perl(1), uudecode(1) или потоковый редактор sed(1) в список разрешенных программ.

Шаг 2.

Следующее, что надо сделать, это заполнить каталог /etc/smrsh программами, которые разрешено запускать Sendmail. Для предотвращения дублирования программ мы будем создавать символические ссылки. Для разрешения использования программы /bin/mail используйте следующие команды:

[root@deep /]# cd /etc/smrsh
[root@deep smrsh]# ln -s /bin/mail mail

Для разрешения использования программы /usr/bin/procmail используйте следующие команды:

[root@deep /]# cd /etc/smrsh
[root@deep smrsh]# ln -s /usr/bin/procmail procmail

Вышеприведенные команды позволят запускать программы mail и procmail из пользовательских файлов .forward или файла aliases, которые используют "program" синтаксис.

ЗАМЕЧАНИЕ. Procmail требуется только на почтовом концентраторе и не требуется на клиентской машине. Если Вы настраиваете систему как центральный почтовый сервер, то создайте ссылку на procmail как описано выше, иначе пропустите его.

Шаг 3.

Сейчас мы можем настроить Sendmail на использование защищенного shell. Программа-почтальон определяется в одиночной строке конфигурационного файла /etc/mail/sendmail.cf. Вы должны модифицировать линию Mprog, заменив в ней /bin/sh на /usr/sbin/smrsh.

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и измените строку. Например:

Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh
-c $u
Должна быть изменена на:
Mprog, P=/usr/sbin/smrsh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix,
A=sh -c $u

Сейчас перезапустите вручную процесс sendmail следующей командой:

[root@deep /]# /etc/rc.d/init.d/sendmail restart

ЗАМЕЧАНИЕ. В нашем конфигурационном файле sendmail.mc, написанном выше, мы уже настроили строку Mprog на использование защищенного shell /usr/sbin/smrsh при помощи макроопределения FEATURE(`smrsh',`/usr/sbin/smrsh'), так что не удивляйтесь, если /usr/sbin/smrsh уже установлен в /etc/mail/sendmail.cf для почтового концентратора. Используйте технику непосредственного редактирования файла /etc/mail/sendmail.cf для тех машин, где Вы использовали файл с макроопределениями null.mc (граничные сервера и клиентские машины).

Файл /etc/mail/aliases

Несовершенное или небрежное администрирование файла aliases может привести к легкому получению привилегированного статуса. Например, многие разработчики поставляют системы с псевдонимом decode в файле /etc/mail/aliases. Его основное назначение: облегчение для пользователей пересылки двоичных файлов по почте. Отправляющий пользователь конвертирует двоичный файл в ASCII, используя uuencode, затем отправляет полученное сообщение псевдониму decode на принимающий сервер. Затем псевдоним через канал (pipe) отправляет сообщение программе /usr/bin/uuencode, которая конвертирует ASCII назад в двоичный файл. Удалите псевдоним decode из файла /etc/mail/aliases. Аналогично, каждый псевдоним, который запускает программу, и который Вы сами не создавали, должен быть проверен и, скорее всего, удален.

Редактируйте файл aliases (vi /etc/mail/aliases) и удалите следующие строки:

# Базовые псевдонимы системы ДОЛЖНЫ быть представлены.
MAILER-DAEMON: postmaster
postmaster: root
# Обычная переадресация для псевдопользователей.
bin: root
daemon: root
games: root - удалите эту строку.
ingres: root - удалите эту строку.
nobody: root
system: root - удалите эту строку.
toor: root - удалите эту строку.
uucp: root - удалите эту строку.
# Хорошо известные псевдонимы.
manager: root - удалите эту строку.
dumper: root - удалите эту строку.
operator: root - удалите эту строку.
# ловушка decode для захвата атаки
decode: root - удалите эту строку.
# Человек, получающий почту для пользователя root
#root: marc

Чтобы изменения вступили в силу выполните команду:

[root@deep /]# /usr/bin/newaliases

Предотвращение неправильного обращения к Вашему Sendmail неавторизированными пользователями

Sendmail сейчас включает значительные антиспамовские возможности, которые могут помочь предотвратить неправильное использование почтового сервера неавторизированными пользователями. Для этого редактируйте файл /etc/mail/sendmail.cf и внесите в него изменения, блокирующие спамеров.

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и измените строку:

O PrivacyOptions=authwarnings
Должна быть:
O PrivacyOptions=authwarnings,goaway

Установка goaway говорит Sendmail отвергать все SMTP EXPN команды, отбрасывать все SMTP VERB команды и игнорировать все SMTP VRFY команды. Эти изменения не дадут спамеру использовать команды EXPN и VRFY.

Ограничение числа людей, которые могут просмотреть содержимое очереди

Обычно кто угодно может просмотреть почтовую очередь при помощи команды mailq. Для ограничения тех, кто имеет возможность ее просмотреть, используйте опцию restrictmailq в файле /etc/mail/sendmail.cf. С ней Sendmail позволяет просматривать очередь только тем пользователям, кто входит в группу, владеющую ею (root). Это позволяет полностью защитить каталог очереди, используя режим доступа 0700.

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и внесите в него следующее изменение:

O PrivacyOptions=authwarnings,goaway
Измените на:
O*-PrivacyOptions=authwarnings,goaway,restrictmailq
Сейчас измените режим доступа к Вашему каталогу очереди:
[root@deep /]# chmod 0700 /var/spool/mqueue
Перезапустите процесс sendmail, чтобы изменения вступили в силу:
[root@deep /]# /etc/rc.d/init.d/sendmail restart
Shutting down sendmail:         [ OK ]
Starting sendmail:              [ OK ]

ЗАМЕЧАНИЕ. Мы уже добавили опцию goaway в строке PrivacyOptions=, а сейчас добавили туда же опцию restrictmailq. Любой непривелигированный пользователь, который попытается изучить почтовую очередь, получит следующее собщение:

[user@deep /]$ /usr/bin/mailq
You are not permitted to see the queue

Ограничение пользователей имеющих возможность вызвать обработку очереди пользователем root

Обычно кто угодно может вызвать обработку очереди при помощи ключа -q. Чтобы только пользователь root и владелец каталога очереди могли сделать это используйте опцию restrictqrun в файле /etc/mail/sendmail.cf.

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и внесите в него следующее изменение:
O PrivacyOptions=authwarnings,goaway,restrictmailq
Изменить на:
O PrivacyOptions=authwarnings,goaway,restrictmailq,restrictqrun

Перезапустите процесс sendmail, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/sendmail restart
Shutting down sendmail:   [ OK ]
Starting sendmail:        [ OK ]

Любой непривилегированный пользователь, попытавшийся запустить обработку очереди, получит следующее сообщение:

[user@deep /]$ /usr/sbin/sendmail -q
You do not have permission to process the queue

Приветственное сообщение SMTP

Когда Sendmail принимает входящие SMTP-соединения, он посылает на другой хост приветственное сообщение. Оно идентифицирует локальную машину и говорит о том, что sendmail готов к приему.

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и измените строку:
O SmtpGreetingMessage=$j Sendmail $v/$Z; $b
Должна быть:
O SmtpGreetingMessage=$j

Перезапустите процесс sendmail, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/sendmail restart
Shutting down sendmail:   [ OK ]
Starting sendmail:        [ OK ]

Это изменение фактически ничего не меняет, но рекомендуется в группе новостей news.admin.net-abuse.email как законная предосторожность. Оно изменяет заголовок, который Sendmail выводит при приеме соединений.

Установка бита постоянства на важнейшие файлы Sendmail

На важные файлы Sendmail может быть установлен бит постоянства для лучшей безопасности при помощи команды chattr. Файл с установленным атрибутом +i не может быть модифицирован, удален или переименован, на него нельзя создавать ссылки, и никакие данные не могут быть дописаны в такие файлы. Только суперпользователь может снять этот атрибут.

Установите бит постоянства на файл sendmail.cf:
[root@deep /]# chattr +i /etc/mail/sendmail.cf
Установите бит постоянства на файл local-host-names:
[root@deep /]# chattr +i /etc/mail/local-host-names
Установите бит постоянства на файл aliases:
[root@deep /] chattr +i /etc/mail/aliases
Установите бит постоянства на файл access:
[root@deep /]# chattr +i /etc/mail/access

Дополнительная документация

Для получения большей информации читайте следующие страницы руководства:

$ man aliases (5) файл псевдонимов для sendmail
$ man makemap (8) создание базы данных отображений для sendmail
$ man sendmail (8) почтовый агент электронной почты
$ man mailq (1) вывод информации о почтовой очереди
$ man newaliases (1) пересоздание данных, базирующихся на почтовом файле псевдонимов
$ man mailstats (8) вывод статистики работы sendmail
$ man praliases (8) вывод системных почтовых псевдонимов

Утилиты администратора Sendmail

Команды, описанные ниже, мы будем часто использовать, но на самом деле их много больше, и Вы должны изучить страницы руководства (man) и документацию, чтобы получить более подробную информацию.

newaliases

Назначение утилиты newaliases: пересоздание и обновление базы данных произвольного доступа для файла почтовых псевдонимов /etc/mail/aliases. Она должна запускаться каждый раз, когда Вы изменяете содержимое этого файла, чтобы изменения вступили в силу. Обновите файл базы данных псевдонимов с помощью утилиты newaliases, используя следующую команду:

[root@deep /]# /usr/bin/newaliases

makemap

Назначение утилиты makemap это создание базы данных соответствий для Sendmail. Она должна использоваться только, когда Вам надо создать новую базу данных для файлов подобных aliases, access, domaintable, mailertable и virtusertable.

Запустите команду makemap, чтобы создать новую базу данных access:

[root@deep /]# makemap hash /etc/mail/access.db < /etc/mail/access

Здесь hash это формат базы данных, makemap может манипулировать тремя различными форматами баз данных: hash, btree или dbm. /etc/mail/access.db месторасположение и имя новой базы данных, которую мы создаем. /etc/mail/access месторасположение файла, из которого мы получаем базу. В нашем примере мы создаем новый файл access.db, используя команду makemap. Для создания баз данных из других файлов (aliases, domaintable, mailertable и virtusertable) Вы должны определить месторасположение и имена соответствующих файлов в команде makemap.

mailq

Назначение утилиты mailq: печать краткой информации о почтовых сообщениях, хранящихся в очереди для дальнейшей доставки. Для вывода краткой информации о почтовой очереди используйте команду:

[root@deep /]# mailq
Mail queue is empty

Утилиты пользователя Sendmail

Команды, описанные ниже, мы будем часто использовать, но на самом деле их много больше, и Вы должны изучить страницы руководства (man) и документацию, чтобы получить более подробную информацию.

mailstats

Назначение утилиты mailstats: вывод текущей статистики работы почтового сервера. Для получения текущей почтовой статистики используйте команду:

[root@deep /]# mailstats
Statistics from Tue Dec 14 20:31:48 1999
M   msgsfr   bytes_from   msgsto   bytes_to   msgsrej   msgsdis   Mailer
5     0         0K           1        3K         0         0       esmtp
8    1259      19618K       1259     19278K      0         0       local
=========================================================================
T    1259      19618K       1260     19281K      0         0

praliases

Назначение утилиты praliases: вывод текущих почтовых псевдонимов. Для вывода почтовых псевдонимов используйте команду:

[root@deep /]# praliases
postmaster:root
daemon:root
root:admin
@:@
mailer-daemon:postmaster
bin:root
nobody:root
webadmin:admin
www:root

Файлы инсталлированные для Sendmail на центральном почтовом концентраторе

> /etc/rc.d/init.d/sendmail
> /etc/rc.d/rc0.d/K30sendmail
> /etc/rc.d/rc1.d/K30sendmail
> /etc/rc.d/rc2.d/S80sendmail
> /etc/rc.d/rc3.d/S80sendmail
> /etc/rc.d/rc4.d/S80sendmail
> /etc/rc.d/rc5.d/S80sendmail
> /etc/rc.d/rc6.d/K30sendmail
> /etc/sysconfig/sendmail
> /etc/mail
> /etc/mail/statistics
> /etc/mail/sendmail.cf
> /etc/mail/access
> /etc/mail/access.db
> /etc/mail/aliases
> /etc/mail/aliases.db
> /etc/mail/virtusertable
> /etc/mail/virtusertable.db
> /etc/mail/domaintable
> /etc/mail/domaintable.db
> /etc/mail/mailertable
> /etc/mail/mailertable.db
> /etc/mail/local-host-names
> /etc/smrsh
> /usr/bin/newaliases
> /usr/bin/mailq
> /usr/bin/hoststat
> /usr/bin/purgestat
> /usr/lib/sendmail
> /usr/man/man1/mailq.1
> /usr/man/man1/newaliases.1
> /usr/man/man5/aliases.5
> /usr/man/man8/sendmail.8
> /usr/man/man8/mailstats.8
> /usr/man/man8/makemap.8
> /usr/man/man8/praliases.8
> /usr/man/man8/smrsh.8
> /usr/sbin/sendmail
> /usr/sbin/mailstats
> /usr/sbin/makemap
> /usr/sbin/praliases
> /usr/sbin/smrsh
> /var/spool/mqueue

Файлы инсталлированные для Sendmail на локальном сервере или клиенте

> /etc/rc.d/init.d/sendmail
> /etc/rc.d/rc0.d/K30sendmail
> /etc/rc.d/rc1.d/K30sendmail
> /etc/rc.d/rc2.d/S80sendmail
> /etc/rc.d/rc3.d/S80sendmail
> /etc/rc.d/rc4.d/S80sendmail
> /etc/rc.d/rc5.d/S80sendmail
> /etc/rc.d/rc6.d/K30sendmail
> /etc/sysconfig/sendmail
> /etc/mail
> /etc/mail/statistics
> /etc/mail/sendmail.cf
> /etc/mail/local-host-names
> /etc/smrsh
> /usr/bin/mailq
> /usr/bin/hoststat
> /usr/bin/purgestat
> /usr/lib/sendmail
> /usr/man/man1/mailq.1
> /usr/man/man8/sendmail.8
> /usr/man/man8/mailstats.8
> /usr/man/man8/smrsh.8
> /usr/sbin/sendmail
> /usr/sbin/mailstats
> /usr/sbin/smrsh
> /var/spool/mqueue

Linux Imap и Pop сервер

Краткий обзор

Если Вы настроили Sendmail как центральный почтовый концентратор, Вы должны инсталлировать IMAP/POP программное обеспечение, или Вы не сможете воспользоваться преимуществами Вашего почтового Linux-сервера, так как Sendmail занимается только пересылкой почты с одной на другую машину. Почтовый сервер это сервер, на котором запущено одно или более из следующего: IMAP-сервер, POP3-сервер, POP2-сервер или SMTP-сервер.

Примером SMTP-сервера может служить Sendmail, который мы уже проинсталлировали на нашем Linux-сервере, как центральный почтовый концентратор. Далее мы попытаемся охватить инсталляцию IMAP4, POP3 и POP2, которые входят в один пакет.

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

POP сокращение для Post Office Protocol и просто позволяет Вам просматривать список сообщений, принимать и удалять их. IMAP это POP на стероидах. Он позволяет легко манипулировать логинами, разрешать доступ нескольких людей к одному логину, оставлять сообщения на сервере, скачивая только их заголовки, тела, без присоединенных файлов или с ними. IMAP идеален для всех, кому серьезно нужна почта. По умолчанию POP и IMAP серверы, которые поставляются с большинством дистрибутивов, делают больше, чем нужно.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам /var/tmp (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем root.
IMAP версии 4.7c.

Пакеты.
Домашняя страница IMAP/POP: http://www.washington.edu/imap,
FTP-сервер IMAP/POP: 140.142.3.227 или 140.142.4.227,
Вы должны скачать: imap.tar.Z.

Предварительные условия.
Sendmail сервер должен быть уже установлен на Вашей системе.

Архивы.
Хорошей идеей будет создать список файлов, установленных в Вашей системе до инсталляции Sendmail и после, в результате, с помощью утилиты diff, Вы сможете узнать, какие файлы были установлены. Например, до инсталляции:
find /* > Imap1
После инсталляции:
find /* > Imap2
Для получения списка установленных файлов:
diff Imap1 Imap2 > Imap-Installed

Раскроем архив (tar.Z).

[root@deep /]# cp imap.tar.Z /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf imap.tar.Z

Компиляция и оптимизация

Перейдите в новый каталог IMAP/POP и введите следующие команды на Вашем терминале:

Шаг 1.

Редактируйте файл Makefile (vi +719 src/osdep/unix/Makefile) и измените следующую строку:

sh -c '(test -f /usr/include/sys/statvfs.h -a $(OS) != sc5 -a $(OS) \
   != sco) && $(LN) flocksun.c flockbsd.c || $(LN) flocksv4.c flockbsd.c'
Должна быть:
sh -c '(test -f /usr/include/sys/statvfs.h -a $(OS) != sc5 -a $(OS) != \
   sco -a $(OS) != lnx) && $(LN) flocksun.c flockbsd.c || $(LN) flocksv4.c \
   flockbsd.c'

Эта модификация изменит файл sys/stavfs. Этот файл с новой glibc 2.1 из Linux отличается от доступной в Sun.

Редактируйте файл Makefile (vi +354 src/osdep/unix/Makefile) и измените следующую строку:

BASECFLAGS="-g -fno-omit-frame-pointer -O6 -DNFSKLUDGE" \
Должна быть:
BASECFLAGS="-g -fno-omit-frame-pointer -O9 -funroll-loops -ffast-math \
            -malign-double -mcpu= pentiumpro -march=pentiumpro \
            -fomit-frame-pointer -fno-exceptions -DNFSKLUDGE" \

Это наши оптимизационные флаги для компиляции программ IMAP/POP на сервере.

Редактируйте файл Makefile (vi +61 src/osdep/unix/Makefile) и измените следующие строки:

ACTIVEFILE=/usr/lib/news/active
Должна быть:
ACTIVEFILE=/var/lib/news/active
SPOOLDIR=/usr/spool
Должна быть:
SPOOLDIR=/var/spool
RSHPATH=/usr/ucb/rsh
Должна быть:
RSHPATH=/usr/bin/rsh
LOCKPGM=/etc/mlock
Должна быть:
#LOCKPGM=/etc/mlock

ACTIVEFILE= определяет путь активного каталога для IMAP/POP, SPOOLDIR= задает, где Вы разместите spool-каталог Linux IMAP/POP, RSHPATH= определяет путь каталога rsh на Вашей системе. Важно заметить, что мы не используем сервис rsh на нашем сервере, но даже в этом случае, мы должны определить правильный путь к rsh.

Редактируйте файл Makefile (vi +89 src/osdep/unix/Makefile) и измените строку:

CC=cc
Должна быть:
CC=egcs

Эта строка определяет имя нашего GCC-компилятора, который мы будем использовать при компиляции программ IMAP/POP (в нашем случае egcs).

Шаг 2.

Сейчас мы должны компилировать и инсталлировать IMAP и POP на почтовом сервере:

[root@deep imap-4.7c]# make lnp
[root@deep imap-4.7c]# install -m 644 ./src/ipopd/ipopd.8c \
                               /usr/man/man8/ipopd.8c
[root@deep imap-4.7c]# install -m 644 ./src/imapd/imapd.8c \
                               /usr/man/man8/imapd.8c
[root@deep imap-4.7c]# install -s -m 755 ./ipopd/ipop2d /usr/sbin
[root@deep imap-4.7c]# install -s -m 755 ./ipopd/ipop3d /usr/sbin
[root@deep imap-4.7c]# install -s -m 755 ./imapd/imapd /usr/sbin
[root@deep imap-4.7c]# install -m 644 ./c-client/c-client.a /usr/lib
[root@deep imap-4.7c]# ln -fs /usr/lib/c-client.a /usr/lib/libimap.a
[root@deep imap-4.7c]# mkdir -p /usr/include/imap
[root@deep imap-4.7c]# install -m 644 ./c-client/*.h /usr/include/imap
[root@deep imap-4.7c]# install -m 644 ./src/osdep/tops-20/shortsym.h \
                               /usr/include/imap
[root@deep imap-4.7c]# chown root.mail /usr/sbin/ipop2d
[root@deep imap-4.7c]# chown root.mail /usr/sbin/ipop3d
[root@deep imap-4.7c]# chown root.mail /usr/sbin/imapd

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

Заметим, что команда make lnp будет настраивать программу под Вашу Linux-систему с поддержкой Pluggable Authentication Modules (PAM) для лучшей безопасности.

Команда mkdir создаст новый каталог с именем imap в /usr/include. Этот новый каталог imap будет содержать все заголовочные файлы, связанные с программой imapd, файлы c-client/* и shortsym.h.

Команда chown изменит владельца исполняемых программ ipop2d, ipop3d и imapd на пользователя root и группу mail.

Команда ln -fs создаст символическую ссылку libimap.a к файлу c-client.a, которая может потребоваться для некоторых других программ, которые мы будем инсталлировать в будущем.

ЗАМЕЧАНИЕ. Из соображений безопасности, если Вы используете только сервис imapd, удалите двоичные файлы ipop2d и ipop3d. Тоже верно и для ipopd: если Вы используете только сервис ipopd, удалите исполняемый файл imapd. Если же Вы используете оба сервиса (imapd и ipopd), то оставьте оба двоичных файла.

Очистка после работы

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf imap-version/ imap.tar.Z

Команды rm будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции IMAP/POP. Также будет удален и сжатый архив IMAP/POP из каталога /var/tmp.

Конфигурации

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве floppy.tgz, включающем все конфигурационные файлы для всех программ. Если Вы скачаете этот файл, то Вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы, связанные с IMAP/POP из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями Вы можете скачать с адреса http://www.openna.com/books/floppy.tgz.

Для запуска IMAP/POP-сервера следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте файл imap в каталог /etc/pam.d, если Вы планируете использовать сервис imapd. Копируйте файл pop в каталог /etc/pam.d, если Вы планируете использовать сервис popd.

Вы можете взять эти файлы из архива floppy.tgz.

Конфигурация файла /etc/pam.d/imap

Сконфигурируем файл /etc/pam.d/imap для использования pam-аутентификации.

Создайте файл imap (touch /etc/pam.d/imap) и добавьте в него:

#%PAM-1.0
auth     required   /lib/security/pam_pwdb.so   shadow nullok
account  required   /lib/security/pam_pwdb.so

ЗАМЕЧАНИЕ. Этот файл нужен, если Вы хотите использовать IMAP-сервис.

Конфигурация файла /etc/pam.d/pop

Сконфигурируем файл /etc/pam.d/pop для использования pam-аутентификации.

Создайте файл pop (touch /etc/pam.d/pop) и добавьте в него:

#%PAM-1.0
auth     required   /lib/security/pam_pwdb.so   shadow nullok
account  required   /lib/security/pam_pwdb.so

ЗАМЕЧАНИЕ. Этот файл нужен, если Вы хотите использовать POP-сервис.

Настройка Imap и POP для использования с TCP-Wrappers inetd суперсервером

Tcp-wrappers берет на себя заботу о запуске и остановке серверов IMAP или POP. При запуске inetd читает конфигурационную информацию из файла /etc/inetd.conf. Этот файл содержит поля, разделяемые символами табуляции или пробелами.

Шаг 1.

Редактируйте файл inetd.conf (vi /etc/inetd.conf) и добавьте или раскомментируйте строки, связанные с сервисами, которые Вы хотите включить. Если хотите использовать IMAP, то раскомментируйте строку, связанную с ним, если же хотите использовать POP, тогда раскомментируйте его вместо IMAP. В нашем примере мы используем сервис IMAP.

#pop-2  stream  tcp  nowait  root  /usr/sbin/tcpd  ipop2d
#pop-3  stream  tcp  nowait  root  /usr/sbin/tcpd  ipop3d
imap    stream  tcp  nowait  root  /usr/sbin/tcpd  imapd

Не забудьте после обновления Вашего файла inetd.conf послать процессу inetd сигнал SIGHUP (kill -HUP inetd). Чтобы изменения вступили в силу, перезапустите процесс inetd, используя следующую команду:

[root@deep /root]# killall -HUP inetd

Шаг 2.

Если Вы хотите инсталлировать IMAP/POP сервер обслуживания ограниченного числа известных реальных IP-адресов клиентов, то можно использовать возможности tcp-wrapper. Если Вы планируете обслуживать dial-up клиентов или сервис Webmail, тогда Вы не сможете использовать эти возможности.

Редактируйте файл hosts.deny (vi /etc/hosts.deny) и добавьте следующую строку:

ALL: ALL@ALL, PARANOID

Которая говорит, что все сервисы и все месторасположения клиентов будут заблокированы, пока не будет непосредственного разрешения в файле hosts.allow.

Редактируйте файл hosts.allow (vi /etc/hosts.allow) и добавьте следующую строку:

imapd: 216.209.228.34 my.domain.com

Которая говорит, что только клиентам с IP-адресом 216.209.228.34 и именем хоста my.domain.com будет разрешен доступ к IMAP-сервису на сервере.

Организация защиты IMAP/POP

Действительно ли Вам нужен IMAP/POP-сервис?

Знайте, что IMAP/POP программы используют по умолчанию пароли в текстовом формате. Любой, кто запустит сниффер в Вашей сети, сможет перехватить имя и пароль и использовать их для подключения к серверу. Проверьте Вашу конфигурацию, и если Вы используете внешний/удаленный IMAP/POP-сервер, то деинсталлируйте IMAP/POP с Вашей системы.

Использование SSL с IMAP/POP

К сожалению, из-за экспортных ограничений правительства США, IMAP с поддержкой SSL сейчас недоступен. Существуют пакеты, предоставляемые третьими производителями, которые позволяют использовать сессии IMAP и POP3 через SSL. Одним из них является WebMail IMP, веб-интерфейс которого позволяет читать почту через Интернет, используя веб-браузер. WebMail IMP использует протокол SSL для шифрования трафика с IMAP/POP сервером. Смотрите главу 20 Опциональные компоненты устанавливаемые с веб-сервером Apache для получения большей информации по этой теме.

Дополнительная документация.

Для получения более подробной информации Вы можете прочитать следующие страницы руководства:

$ man imapd (8C) сервер Internet Message Access Protocol (IMAP)
$ man ipopd (8C) сервер Post Office Protocol (POP)

Инсталлированные файлы

> /etc/pam.d/imap
> /etc/pam.d/pop
> /usr/include/imap
> /usr/include/imap/dummy.h
> /usr/include/imap/env.h
> /usr/include/imap/env_unix.h
> /usr/include/imap/fdstring.h
> /usr/include/imap/flstring.h
> /usr/include/imap/fs.h
> /usr/include/imap/ftl.h
> /usr/include/imap/imap4r1.h
> /usr/include/imap/linkage.h
> /usr/include/imap/lockfix.h
> /usr/include/imap/mail.h
> /usr/include/imap/mbox.h
> /usr/include/imap/mbx.h
> /usr/include/imap/mh.h
> /usr/include/imap/misc.h
> /usr/include/imap/mmdf.h
> /usr/include/imap/mtx.h
> /usr/include/imap/mx.h
> /usr/include/imap/netmsg.h
> /usr/include/imap/news.h
> /usr/include/imap/newsrc.h
> /usr/include/imap/nl.h
> /usr/include/imap/nntp.h
> /usr/include/imap/os_a32.h
> /usr/include/imap/os_a41.h
> /usr/include/imap/os_aix.h
> /usr/include/imap/os_aos.h
> /usr/include/imap/os_art.h
> /usr/include/imap/os_asv.h
> /usr/include/imap/os_aux.h
> /usr/include/imap/os_bsd.h
> /usr/include/imap/os_bsi.h
> /usr/include/imap/os_cvx.h
> /usr/include/imap/os_d-g.h
> /usr/include/imap/os_do4.h
> /usr/include/imap/os_drs.h
> /usr/include/imap/os_dyn.h
> /usr/include/imap/os_hpp.h
> /usr/include/imap/os_isc.h
> /usr/include/imap/os_lnx.h
> /usr/include/imap/os_lyn.h
> /usr/include/imap/os_mct.h
> /usr/include/imap/os_mnt.h
> /usr/include/imap/os_nxt.h
> /usr/include/imap/os_os4.h
> /usr/include/imap/os_osf.h
> /usr/include/imap/os_ptx.h
> /usr/include/imap/os_pyr.h
> /usr/include/imap/os_qnx.h
> /usr/include/imap/os_s40.h
> /usr/include/imap/os_sc5.h
> /usr/include/imap/os_sco.h
> /usr/include/imap/os_sgi.h
> /usr/include/imap/os_shp.h
> /usr/include/imap/os_slx.h
> /usr/include/imap/os_sol.h
> /usr/include/imap/os_sos.h
> /usr/include/imap/os_sun.h
> /usr/include/imap/os_sv2.h
> /usr/include/imap/os_sv4.h
> /usr/include/imap/os_ult.h
> /usr/include/imap/os_vu2.h
> /usr/include/imap/osdep.h
> /usr/include/imap/phile.h
> /usr/include/imap/pop3.h
> /usr/include/imap/pseudo.h
> /usr/include/imap/rfc822.h
> /usr/include/imap/smtp.h
> /usr/include/imap/tcp.h
> /usr/include/imap/tcp_unix.h
> /usr/include/imap/tenex.h
> /usr/include/imap/unix.h
> /usr/include/imap/utf8.h
> /usr/include/imap/shortsym.h
> /usr/lib/c-client.a
> /usr/lib/libimap.a
> /usr/man/man8/ipopd.8c
> /usr/man/man8/imapd.8c
> /usr/sbin/ipop2d
> /usr/sbin/ipop3d
> /usr/sbin/imapd