LINUX-сервер пошаговые инструкции инсталляции и настройки - Бруй В. В. , Карлов С. В.
.pdfГлава 27. Exim – почтовый транспортный агент |
371 |
Часть 7
Программное
обеспечение
для организации службы электронной почты
372 |
Часть 7. Программное обеспечение для организации службы электронной почты |
Глава 27
Exim – почтовый транспортный агент
В этой главе:
1. Ограничения и допущения
2.Пакеты
3.Компиляция, оптимизация и инсталляция Exim
4.Конфигурирование Exim
5.Конфигурирование Exim в режиме центрального почтового концентратора
6.Конфигурационный файл /etc/mail/exim.conf
7.Конфигурационный файл /etc/mail/localdomains
8.Конфигурационный файл /etc/mail/relaydomains
9.Конфигурационный файл /etc/mail/aliases
10. Конфигурационный файл etc/mail/access
11. Конфигурационный файл /etc/mail/system-filter
12. Конфигурационный файл /etc/sysconfig/exim
13. Файл инициализационный /etc/init.d/exim
14. Тестирование Exim
15. Аутентификация пользователей перед отправкой сообщений
16. Запуск Exim с поддержкой SSL
17. Конфигурирование Exim в качестве локального почтового сервера
Глава 27. Exim – почтовый транспортный агент |
373 |
Exim – почтовый транспортный агент (Mail Transport Agent, MTA), разработанный в университете г. Кембридж (University of Cambridge). Данное программное обеспечение предназначено для:
•доставки (приема и отправки) почтовых сообщений;
•фильтрации нежелательных сообщений;
•управления очередью сообщений, в том числе, доставка которых в данное время невозможна.
Exim является одним из самых безопасных почтовых транспортных агентов, именно поэтому авторы
ипредлагают устанавливать его на Linux-серверах вместо штатного агента Sendmail.
Вэтой главе рассматривается установка Exim в следующих двух конфигурациях:
•центрального почтового концентратора, т. е. сервера, предназначенного для приема, отправки и перенаправления почтовых сообщений со всех систем вашей локальной сети;
•локального почтового сервера, принимающего сообщения только от собственных локальных пользователей и перенаправляющего их на центральный почтовый концентратор сети.
В последнем случае Exim должен быть установлен на всех Linux-системах вашей сети. Даже если вы не собираетесь отсылать или получать почту с Linux-системы, то установка почтового сервера все равно необходима для обеспечения возможности получения служебных сообщений, адресованных пользователю
root и другим специальным пользователям.
Exim, являясь почтовым транспортным агентом, не предназначен для чтения почты. Локальные пользователи почтового сервера могут просматривать, редактировать сообщения и выполнять другие элементарные операции по работе с почтой с помощью программы mail. Для получения почты пользователями вашей сети необходима установка дополнительного программного обеспечения, реализующего протоколы POP (Post Office Protocol) или IMAP (Internet Message Access Protocol), непосредственно взаимодействующего с клиентскими почтовыми программами (Mail User Agent, MUA). Принципиальная схема организации службы электронной почты представлена на рис. 27.1.
Ограничения и допущения
Исходные коды находятся в каталоге /var/tmp.
Все операции выполняются пользователем с учетной записью root. Используется дистрибутив ASPLinux 7.3 (Vostok).
Перекомпиляция ядра не требуется.
Процедуры, описанные в этой главе, могут оказаться применимыми для других версий ядра и дистрибутивов Linux, но авторы этого не проверяли.
Пакеты
Последующие рекомендации основаны на информации, полученной с домашней страницы проекта Exim по состоянию на 06.06.2003. Регулярно посещайте домашнюю страницу проекта http://www.exim.org/ и отслеживайте обновления.
Исходные коды Exim содержатся в архиве exim-version.tar.gz (последняя доступная на момент написания главы стабильная версия exim-4.20.tar.gz). Подробная документация в формате
HTML содержится в архиве exim-html-version.tar.gz.
Компиляция, оптимизация и инсталляция Exim
Для инсталляции Exim необходимо выполнить следующие операции.
Шаг 1 Осуществите проверку подлинности имеющегося в вашем распоряжении архива с исходными кода-
ми, используя процедуры, описанные в шаге 1 радела «Компиляция, оптимизация и инсталляция OpenSSL» главы 12.
Шаг 2
Распакуйте архивы с исходными кодами Exim и документацией в каталоге /var/tmp:
[root@test tmp]# tar xzpf exim-4.20.tar.gz [root@test tmp]# tar xzpf exim-html-4.10.tar.gz
374 |
Часть 7. Программное обеспечение для организации службы электронной почты |
Интернет |
Роутер |
Концентратор
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Шлюз, |
|
Центральный почтовый |
концентра- |
WWW-сервер, |
||||||
|
|
|
|
тор. |
или IMAP, |
|||||
локальный почтовый |
|
|
Установлены MTA,POP |
локальный почтовый |
||||||
сервер. |
|
|
антивирусное и антиспамерское |
|
сервер. |
|||||
Установлен MTA |
|
|
|
|
ПО |
|
|
Установлен MTA |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Локальная сеть |
|
|
|
|
|
|
|
|
|
|
На всех рабочих станциях уста- |
||||
|
Концентратор |
|
|
новлены |
|
клиентские |
почтовые |
|||||
|
|
|
|
|
|
|
|
программы (MUA) |
|
|||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 27.1. Принципиальная схема организации службы электронной почты.
Глава 27. Exim – почтовый транспортный агент |
375 |
Шаг 3
Создайте специального пользователя mail, от имени которого будет запускаться Exim:
[root@test tmp]# groupadd -g 12 mail > /dev/null 2>&1 || : [root@test tmp]# useradd -u 8 -g 12 -s /bin/false -M -r -d
/var/spool/mqueue mail > /dev/null 2>&1 || :
Шаг 4
Для добавления несуществующего командного интерпретатора добавьте в файл /etc/shells стро-
ку:
/bin/false/
Шаг 5
Процедура установки Exim несколько отличается от обычной процедуры установки программ с открытыми исходными кодами, в которой Makefile создается полуавтоматически с использованием команды configure. В комплект поставки входит файл src/EDITME, который может быть использован в качестве шаблона для создания собственной версии Makefile, оптимизированной под вашу операционную систему и решаемые задачи. Для создания Makefile скопируйте src/EDITME в файл
Local/Makefile:
[root@test tmp]# cd exim-4.20
[root@test exim-4.20]# cp src/EDITME Local/Makefile
Для изменения заданного по умолчанию расположения исполняемых файлов в файле
/var/tmp/exim-4.20/Local/Makefile замените строку:
BIN_DIRECTORY=/usr/exim/bin
на:
BIN_DIRECTORY=/usr/sbin
Для изменения заданного по умолчанию расположения конфигурационного файла замените строку:
CONFIGURE_FILE=/usr/exim/configure
на:
CONFIGURE_FILE=/etc/mail/exim.conf
Для определения пользователя, от имени которого будет запускаться Exim, замените строку:
# EXIM_USER=
на:
EXIM_USER=8
Для определения группы пользователей замените cтроку:
# EXIM_GROUP=
на:
EXIM_GROUP=12
Для изменения заданного по умолчанию каталога, в котором находятся пересылаемые сообщения, замените строку:
SPOOL_DIRECTORY=/var/spool/exim
на:
SPOOL_DIRECTORY=/var/spool/mqueue
Для отключения поддержки монитора, требующего наличия графического интерфейса, который не установлен из соображений безопасности, замените строку:
EXIM_MONITOR=eximon.bin
на:
# EXIM_MONITOR=eximon.bin
Для включения поддержки различных протоколов аутентификации пользователей замените строки:
#AUTH_CRAM_MD5=yes
#AUTH_PLAINTEXT=yes
на:
AUTH_CRAM_MD5=yes
AUTH_PLAINTEXT=yes
Для ведения файлов регистрации Exim с использованием службы syslog замените строку:
# LOG_FILE_PATH=syslog:/var/log/exim_%slog
376 |
Часть 7. Программное обеспечение для организации службы электронной почты |
на:
LOG_FILE_PATH=syslog
Для указания пути к программе, используемой Exim для разархивирования файлов, замените строку:
ZCAT_COMMAND=/usr/bin/zcat
на:
ZCAT_COMMAND=/usr/bin/gunzip
Для включения поддержки интерпретатора Perl замените строку:
# EXIM_PERL=perl.o
на:
EXIM_PERL=perl.o
Для изменения заданных по умолчанию путей к программам, необходимым для функционирования Exim, замените строки:
#CHOWN_COMMAND=/usr/bin/chown
#CHGRP_COMMAND=/usr/bin/chgrp
#MV_COMMAND=/bin/mv
#RM_COMMAND=/bin/rm
#PERL_COMMAND=/usr/bin/perl
на:
CHOWN_COMMAND=/bin/chown
CHGRP_COMMAND=/bin/chgrp
MV_COMMAND=/bin/mv
RM_COMMAND=/bin/rm
PERL_COMMAND=/usr/bin/perl
Для обеспечения возможности перемещения «замороженных» сообщений замените строку:
# SUPPORT_MOVE_FROZEN_MESSAGES=yes
на:
SUPPORT_MOVE_FROZEN_MESSAGES=yes
Шаг 6
Для оптимизации компиляции исходных кодов Exim применительно к архитектуре вашего процессо-
ра в файле /var/tmp/exim-4.20/OS/Makefile-Linux замените строку:
CFLAGS=-0
на:
CFLAGS=-O2 -march=i686 -funroll-loops
Шаг 7
Откомпилируйте, проинсталлируйте Exim, создайте и сохраните в надежном месте список установленных файлов:
[root@test exim-4.20]# make
[root@test exim-4.20]# find /* > /root/exim1 [root@test exim-4.20]# make install
[root@test exim-4.20]# ln -fs /usr/sbin/exim-4.20-1 /usr/lib/sendmail [root@test exim-4.20]# ln -fs /usr/sbin/exim-4.20-1 /usr/lib/sendmail [root@test exim-4.20]# ln -fs /usr/sbin/exim-4.20-1 /usr/sbin/sendmail [root@test exim-4.20]# ln -fs /usr/sbin/exim-4.20-1 /usr/bin/mailq [root@test exim-4.20]# ln -fs /usr/sbin/exim-4.20-1 /usr/bin/runq [root@test exim-4.20]# mv /etc/aliases /etc/exim-4.20
[root@test exim-4.20]# strip /usr/sbin/exim-4.20-1 [root@test exim-4.20]# chown 0.mail /var/spool/mail [root@test exim-4.20]# chmod 1777 /var/spool/mail
[root@test exim-4.20]# find /* > /root/exim2
[root@test exim-4.20]# diff /root/exim1 /root/exim2 > exim.installed [root@test exim-4.20]# mv /root/exim.installed
/very_reliable_place/exim.installed.YYYYMMDD
Шаг 8 Удалите архивы и каталоги с исходными кодами программ и документацией:
[root@test exim-4.20]# cd /var/tmp/ [root@test tmp]# rm -rf exim-4.20/
Глава 27. Exim – почтовый транспортный агент |
377 |
[root@test tmp]# rm -f exim-4.20.tar.gz [root@test tmp]# rm -rf exim-html-4.10/ [root@test tmp]# rm -f exim-html-4.10.tar.gz
Конфигурирование Еxim
Конфигурирование Exim осуществляется с использованием следующих файлов:
•главного конфигурационного файла /etc/mail/exim.conf;
•файла /etc/mail/localdomains, содержащего имена ваших доменов;
•файла /etc/mail/relaydomains, содержащего имена доменов, которым разрешена рассылка почты с использованием вашего сервера;
•файла псевдонимов /etc/mail/aliases;
•файла доступа /etc/mail/access;
•файла фильтров /etc/mail/system-filter;
•системного конфигурационного файла /etc/sysconfig/exim, необходимого для передачи опций, с которыми должен запускаться Exim;
•файла инициализации /etc/init.d/exim, необходимого для запуска Exim.
Конфигурирование Exim в режиме центрального почтового концентратора
Конфигурационный файл /etc/mail/exim.conf
Шаг 1
Создайте файл /etc/mail/exim.conf, руководствуясь приведенными ниже рекомендациями и вашими потребностями:
######################################################################
# MAIN CONFIGURATION SETTINGS #
######################################################################
primary_hostname = test.bruy.info acl_smtp_rcpt = check_recipient acl_smtp_data = check_message
domainlist local_domains = @ : lsearch;/etc/mail/localdomains hostlist relay_hosts = lsearch;/etc/mail/relaydomains hostlist auth_relay_hosts = *
log_selector = \ +all_parents \ +received_sender \
+received_recipients \ +smtp_confirmation \ +smtp_syntax_error
allow_domain_literals = false never_users = root:daemon:bin:sync:named host_lookup = *
trusted_users = mail gecos_pattern = ^([^,:]*) gecos_name = $1 freeze_tell = postmaster auto_thaw = 1h
ignore_bounce_errors_after = 30m timeout_frozen_after = 7d
received_header_text = "Received: \
${if def:sender_rcvhost {from ${sender_rcvhost}\n\t}\ {${if def:sender_ident {from ${sender_ident} }}\
${if def:sender_helo_name {(helo=${sender_helo_name})\n\t}}}}\ by ${primary_hostname} \
${if def:received_protocol {with ${received_protocol}}} \ (Exim ${version_number} #${compile_number})\n\t\
378 Часть 7. Программное обеспечение для организации службы электронной почты
id ${message_id}\
${if def:received_for {\n\tfor <$received_for>}}"
system_filter = /etc/mail/system-filter message_body_visible = 5000 message_size_limit = 10M smtp_accept_max = 2048 smtp_connect_backlog = 256
queue_only split_spool_directory queue_run_max = 1 remote_max_parallel = 1 rfc1413_hosts = * rfc1413_query_timeout = 0s
smtp_banner = "Welcome on our mail server!\n\ This system does not accept Unsolicited \ Commercial Email\nand will blacklist \
offenders via our spam processor.\nHave a \ nice day!\n\n${primary_hostname} ESMTP Exim \ ${version_number} ${tod_full}"
######################################################################
# |
ACL CONFIGURATION |
# |
# |
Specifies access control lists for incoming SMTP mail |
# |
######################################################################
begin acl |
|
|
check_recipient: |
|
|
accept |
hosts = : |
|
deny |
local_parts |
= ^.*[@%!/|] |
deny |
senders |
= *@dbm;/etc/mail/access.db : \ |
|
|
dbm;/etc/mail/access.db |
require |
verify |
= sender |
deny |
message |
= unrouteable address |
|
hosts |
= !127.0.0.1/8:0.0.0.0/0 |
|
!verify |
= recipient |
accept |
domains |
= +local_domains |
|
endpass |
|
|
message |
= unknown user |
|
verify |
= recipient |
accept |
hosts |
= +relay_hosts |
accept |
hosts |
= +auth_relay_hosts |
|
endpass |
|
|
message |
= authentication required |
|
authenticated |
= * |
deny |
message |
= relay not permitted |
check_message: accept
######################################################################
# ROUTERS CONFIGURATION #
Глава 27. Exim – почтовый транспортный агент |
379 |
|
# |
Specifies how addresses are handled |
# |
###################################################################### |
||
# |
THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT! |
# |
# An address is passed to each router in turn until it is accepted. #
######################################################################
begin routers
dnslookup:
driver = dnslookup
domains = ! +local_domains transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 no_more
system_aliases: driver = redirect allow_fail allow_defer
data = ${lookup{$local_part}lsearch{/etc/mail/aliases}} user = mail
file_transport = address_file pipe_transport = address_pipe
userforward:
driver = redirect check_local_user
file = $home/.forward no_verify
no_expn check_ancestor allow_filter modemask = 002
file_transport = address_file pipe_transport = address_pipe reply_transport = address_reply
localuser:
driver = accept check_local_user
transport = local_delivery
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
# |
ORDER DOES NOT MATTER |
# |
# |
Only one appropriate transport is called for each delivery. |
# |
######################################################################
begin transports
remote_smtp: driver = smtp
local_delivery: driver = appendfile
file = /var/mail/$local_part delivery_date_add envelope_to_add return_path_add
group = mail mode = 0600
address_pipe:
380 |
Часть 7. Программное обеспечение для организации службы электронной почты |
driver = pipe return_output
address_file:
driver = appendfile delivery_date_add envelope_to_add return_path_add
address_reply: driver = autoreply
######################################################################
# RETRY CONFIGURATION #
######################################################################
begin retry |
|
|
# Domain |
Error |
Retries |
# ------ |
----- |
------- |
* |
* |
F,2h,15m; G,16h,1h,1.5; F,4d,6h |
######################################################################
# REWRITE CONFIGURATION #
######################################################################
begin rewrite
######################################################################
# AUTHENTICATION CONFIGURATION #
######################################################################
begin authenticators
Рассмотрим более подробно настройки каждого раздела главного конфигурационного файла.
Вразделе MAIN CONFIGURATION SETTINGS определяются основные настройки Exim.
Встроке:
primary_hostname = test.bruy.info
определяется полное имя вашего сервера. Возможно, это единственный параметр, который необходимо изменить в данном файле для нормальной работы Exim.
Строки:
acl_smtp_rcpt = check_recipient
acl_smtp_data = check_message
определяют имена списков контроля доступа, используемые в дальнейшем для определения правил работы с входящей почтой.
Строки:
domainlist local_domains = @ : lsearch;/etc/mail/localdomains hostlist relay_hosts = lsearch;/etc/mail/relaydomains
hostlist auth_relay_hosts = *
определяют имена файлов, используемых для принятия решения о возможности разрешения или отмены пересылки сообщений с использованием SMTP-сервера Exim.
В первой строке определяется имя домена, который обслуживается SMTP-сервером, при этом знак @ означает домен, указанный в строке primary_hostname =…, т. е. test.bruy.info. Директива lsearch добавляет к множеству обслуживаемых доменов список из файла /etc/mail/localdomains.
Во второй строке определяются хосты, которые могут использовать ваш почтовый сервер для отправки почты на любой почтовый адрес в Интернет. Директива lsearch указывает на то, что список хостов содержится и может быть получен вашим почтовым сервером из файла /etc/mail/relaydomains.
