Linux Sendmail сервер
Краткий обзор.
Sendmail - это один из наиболее широко используемых Почтовых Транспортных Агентов (MTA) в мире. Основное назначение MTA – это пересылка почтовых сообщений с одной машины на другую. Sendmail не клиентская программа, которую вы можете использовать для чтения вашей почты. Она перемещает вашу почту через сети или Интернет туда, куда вы хотите ее отправить. Sendmail в прошлом была легкой целью для хакеров, но с появлением Sendmail версии 8, использовать ее для взлома стало значительно труднее.
Здесь мы представим вам две различные конфигурации Sendmail; одна для центрального почтового концентратора, другая для локального или граничного клиента и сервера.
Конфигурация центрального почтового концентратора будет использована для серверов, в задачу которых входит отправка, получение и перенаправление всех почтовых сообщений со всех локальных и граничных клиентов и серверов вашей сети. Конфигурация для локальных или граничных клиентов и серверов относится ко всем другим локальным серверам и клиентам вашей сети на которых запущен Sendmail и которые отправляют исходящую почту на центральных почтовых концентратор для ее дальнейшей доставки. Этот тип внутренних клиентов никогда не посылают почту напрямую через Интернет; вместо этого вся почта из Интернета для этих компьютеров хранится на центральном почтовом концентраторе. Запуск одного центрального почтового концентратора для всех компьютеров вашей сети является хорошей идеей; эта архитектура будет ограничивать задачу управления на сервере и клиентских машинах и улучшит безопасность вашего сайта.
Вы можете настроить граничный Sendmail так, чтобы он принимал почту созданную только локально, такая изоляция граничной машины нужна для удобства защиты. Шлюз (вне межсетевого защитного экрана или как часть его) выступает как прокси и принимает внешние почтовые сообщения (через файл правил защитного экрана), которые предназначены для внутренней доставки и перенаправляет их на центральный почтовый концентратор. Также заметим, что Шлюз настроен как граничный Sendmail сервер, чтобы никогда не принимать входящую почту снаружи (из Интернет).
Это графическое представление конфигурации Sendmail, которую мы используем в этой книге. Мы попытаемся показать вам различные установки (Центральный почтовый концентратор и локальный или граничный клиенты и сервера) на различных серверах. Существует много возможных решений в зависимости от ваших нужд и сетевой архитектуры.
Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам “/var/tmp” (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем “root”.
Sendmail версии 8.10.1
Пакеты.
Домашняя страница Sendmail:
FTP сервер:
Вы должны скачать: 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 файлы на других компьютерах сети.