Строим бюджетный сервер для малых или средних компаний::Журнал СА 11.2007
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

  Опросы

Какие курсы вы бы выбрали для себя?  

Очные
Онлайновые
Платные
Бесплатные
Я и так все знаю

 Читать далее...

1001 и 1 книга  
20.12.2019г.
Просмотров: 5466
Комментарии: 0
Dr.Web: всё под контролем

 Читать далее...

04.12.2019г.
Просмотров: 6643
Комментарии: 1
Особенности сертификаций по этичному хакингу

 Читать далее...

28.05.2019г.
Просмотров: 7926
Комментарии: 2
Анализ вредоносных программ

 Читать далее...

28.05.2019г.
Просмотров: 8216
Комментарии: 2
Микросервисы и контейнеры Docker

 Читать далее...

28.05.2019г.
Просмотров: 7210
Комментарии: 0
Django 2 в примерах

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 Строим бюджетный сервер для малых или средних компаний

Архив номеров / 2007 / Выпуск №11 (60) / Строим бюджетный сервер для малых или средних компаний

Рубрика: Администрирование /  Продукты и решения

Павел Семенец

Строим бюджетный сервер для малых или средних компаний
Часть 2

В предыдущей статье я рассказал о настройке Samba в качестве Primary Domain Controller. Сегодня мы поговорим о почтовом сервере Exim и обо всём, что связано с почтой в нашем комплексе.

Собираем антиспам-фильтр DSPAM

srv# cd /usr/posts/mail/dspam

srv# make config

[X] SYSLOG            Logs via syslog

[X] DEBUG             Enable debugging logging

[X] VERBOSE_DEBUG     Enable debug in LOGDIR/dspam.debug

[X] SQLITE3           Use SQLite v3.x as back-end

[X] HASH              Use hash driver

[X] TRUSTED_USERS     Disable trusted user security

[X] VIRT_USERS        Enable virtual users (needs SQL back-end)

[X] DOMAIN_SCALE      File structure for multiple domains

[X] EXIM_LDA          Use Exim as local delivery agent

После выставления опций компиляции требуется отредактировать Makefile. Данная операция необходима для изменения некоторых параметров компиляции, которые невозможно поменять через «make config».

Открываем Makefile в той же директории и ищем следующие строчки:

DSPAM_OWNER?=   root

DSPAM_GROUP?=   mail

DSPAM_HOME?=    ${_VAR_DIR}/db/dspam

и меняем их следующим образом:

DSPAM_OWNER?=   exim

DSPAM_GROUP?=   exim

DSPAM_HOME?=    /usr/local/dspam

Собираем DSPAM:

srv# make all install clean

Настраиваем DSPAM

srv# cat > /usr/local/etc/dspam.conf << EOF

Home /usr/local/dspam

StorageDriver /usr/local/lib/libsqlite3_drv.so

TrustedDeliveryAgent "/usr/local/sbin/exim -oMr spam-scanned" # Exim

OnFail error

Trust root

Trust exim

Trust mail

Trust mailnull

Trust smmsp

Trust daemon

Debug *

TrainingMode notrain

TestConditionalTraining on

Feature chained

Feature tb=5

Feature whitelist

Algorithm graham burton

PValue graham

Preference "spamAction=quarantine"

Preference "signatureLocation=message"

Preference "showFactors=on"

Preference "spamAction=tag"

Preference "spamSubject=SPAM"

AllowOverride trainingMode

AllowOverride spamAction spamSubject

AllowOverride statisticalSedation

AllowOverride enableBNR

AllowOverride enableWhitelist

AllowOverride signatureLocation

AllowOverride showFactors

AllowOverride optIn optOut

AllowOverride whitelistThreshold

SQLitePragma   "synchronous = ON"

HashRecMax              98317

HashAutoExtend          on 

HashMaxExtents          0

HashExtentSize          49157

HashMaxSeek             100

IgnoreHeader X-Spam-Status

IgnoreHeader X-Spam-Scanned

IgnoreHeader X-Virus-Scanner-Result

Notifications off

PurgeSignatures 14

PurgeNeutral 90

PurgeUnused 90

PurgeHapaxes 30

PurgeHits1S 15

PurgeHits1I 15

LocalMX 127.0.0.1

SystemLog on

UserLog   on

Opt out

MaxMessageSize 307200

ProcessorBias on

EOF

Директивы всех последующих файлов настройки были описаны мной в статье «Строим мультидоменный почтовый сервер с защитой от вирусов и спама» опубликованной в журнале «Системный Администратор» №1 за 2006 год (он-лайн версия доступна по ссылке: http://www.samag.ru/cgi-bin/go.pl?q=articles;n=01.2006;a=03). Обращу ваше внимание лишь на вопросы, имеющие отношение к OpenLDAP.

Собираем и конфигурируем Exim

Для того чтобы правильно настроить рассматриваемый MTA, нам понадобятся некоторые дополнительные опции в /etc/make.conf:

srv# pw groupadd exim

srv# pw useradd exim -g exim -d /dev/null -s /usr/sbin/nologin

Выясняем uid и gid созданного нами пользователя:

srv# id exim

uid=1001(exim) gid=1001(exim) groups=1001(exim)

Далее редактируем файл /etc/make.conf, вставляя в конец следующие строки:

PORTSDIR? = /usr/ports

.if ${.CURDIR} == {$PORTSDIR}/mail/exim

# Включаем поддержку OpenLDAP

WITH_OPENLDAP = yes

# Включаем автоматическое определение установленной версии OpenLDAP

WITH_OPENLDAP_VER = auto

# Включаем логирование через Syslog

LOG_FILE_PATH?= syslog

# Включаем поддежку сканирования сообщений через content_scan

WITH_CONTENT_SCAN = yes

# Включаем поддержку перекодировки

WITH_ICONV = yes

# Включаем поддержку по методу AUTH PLAIN и AUTH LOGIN

WITH_AUTH_PLAINTEXT = yes

# Устанавливаем кодировку по умолчанию для заголовков письма

WITH_DEFAULT_CHARSET?= koi8-r

# Отключаем поддержку IPV6

WITHOUT_IPV6 = yes

# Указываем, какую версию Berkley DB используем

WITH_DBD_VER? = 4

# Включаем поддержку Perl для внешних скриптов

WITH_PERL = yes

.endif

Собираем Exim:

srv# cd /usr/ports/mail/exim

srv# make all install clean

А теперь начинается самое сложное во всем этом комплексе – это настройка почтового MTA-агента на нормальную работу с OpenLDAP.

Первое, что нужно сделать, – это создать сертификат SSL для шифрования передаваемой информации между клиентом и сервером:

srv# cd /usr/local/etc/exim

srv# mkdir ssl

srv# cd ssl

srv# openssl req -x509 -newkey rsa:1024 -keyout mail.pem -out mail.pem -days 3650 -nodes

Отвечаем на вопросы, после чего меняем права доступа на сертификат:

srv# chmod 0400 mail.pem

srv# chown exim:exim mail.pem

Следующим этапом настройки будет создание собственной схемы в OpenLDAP для MTA Exim. Так как стандартной схемы не существует и Exim можно настроить как вздумается (в гибкости настройки разработчики MTA Exim нас не ограничивают) создаем схему следующего вида:

srv# cat > /usr/local/etc/openldap/schema/exim.schema << EOF

#$Id: exim.schema, v 0,2 2007/09/25

#(C) Created by Darkman

# Attributes

# Тут мы описываем атрибуты, куда будем записывать информацию

# о пользователях, перенаправлениях и всему прочему

# Имя домена.

attributetype ( 1.3.6.1.4.1.100058.1.1.1 NAME 'DName'

 DESC 'Mail Domain Name'

 EQUALITY caseIgnoreIA5Match

 SUBSTR caseIgnoreIA5SubstringsMatch

 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# Тип домена (virtual,relay)

attributetype ( 1.3.6.1.4.1.100058.1.1.2 NAME 'DType'

 DESC 'Mail Domain Type'

 EQUALITY caseIgnoreIA5Match

 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# MX-запись для доменов с типом relay

attributetype ( 1.3.6.1.4.1.100058.1.1.3 NAME 'MXHost'

 DESC 'Forward Host Name'

 EQUALITY caseIgnoreIA5Match

 SUBSTR caseIgnoreIA5SubstringsMatch

 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# ID-аккаунт

attributetype ( 1.3.6.1.4.1.100058.1.1.4 NAME 'EUid'

 DESC 'Exim user id default 1001'

 EQUALITY caseIgnoreIA5Match

 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# GID-акаунт

attributetype ( 1.3.6.1.4.1.100058.1.1.5 NAME 'EGid'

 DESC 'Exim group id default 1001'

 EQUALITY caseIgnoreIA5Match

 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# Пароль акаунта

attributetype ( 1.3.6.1.4.1.100058.1.1.6 NAME 'Pass'

 DESC 'User Clear Password'

 EQUALITY octetStringMatch

 SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{128} )

# Имя акаунта

attributetype ( 1.3.6.1.4.1.100058.1.1.7 NAME 'UName'

 DESC 'Mail username'

 EQUALITY caseIgnoreIA5Match

 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{50} )

# Домашняя директория аккаунта

attributetype ( 1.3.6.1.4.1.100058.1.1.8 NAME 'HomeDir'

 DESC 'MailStore Home Dir'

 EQUALITY caseExactIA5Match

 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Статус акаунта (active,disable)

attributetype ( 1.3.6.1.4.1.100058.1.1.9 NAME 'AcStatus'

 DESC 'User Account Status (active,disable)'

 EQUALITY caseExactIA5Match

 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)

# Размер почтового ящика значения, заносится в Мб

attributetype ( 1.3.6.1.4.1.100058.1.1.10 NAME 'QuotaSize'

 DESC 'User Quota Size Megabytes'

 EQUALITY caseExactIA5Match

 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )

# Запись о перенаправлениях почты (используется в таблице aliases)

attributetype ( 1.3.6.1.4.1.100058.1.1.11 NAME 'Rcpt'

 DESC 'Aliases To'

 EQUALITY caseIgnoreIA5Match

 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# Описание записи

attributetype ( 1.3.6.1.4.1.100058.1.1.12 NAME 'Descr'

 DESC 'Description Message'

 EQUALITY caseIgnoreIA5Match

 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# Запись об антиспам-фильтре (active,disable)

attributetype ( 1.3.6.1.4.1.100058.1.1.12 NAME 'AntiSpam'

 DESC 'Active AntiSpam Service'

 EQUALITY caseIgnoreIA5Match

 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# Object class

# В этой секции файла мы описываем 4 объекта

# (EximVirtualForward, EximVirtualDomain, EximVirtualUser, EximVirtualAliases)

# и группируем атрибуты, описанные выше к каждому создаваемому объекту.

# Атрибуты, указанные в секции MUST (), обязательны к заполнению,

# атрибуты указанные в секции MAY (), не обязательны.

# Объект хранения виртуальных перенаправлений, обслуживаемых сервером

objectclass (1.3.6.1.4.1.100058.1.2.1 NAME 'EximVirtualForward'

 SUP top STRUCTURAL

 DESC ''

 MUST ( Uname $ DName $ MXHost )

 MAY ( Descr ))

# Объект хранения виртуальных доменов

# обслуживаемых сервером

objectclass (1.3.6.1.4.1.100058.1.2.2 NAME 'EximVirtualDomain'

 SUP top STRUCTURAL

 DESC ''

 MUST ( DName $ DType )

 MAY ( Descr ))

# Объект хранения виртуальных пользователей почтовой системы

objectclass (1.3.6.1.4.1.100058.1.2.3 NAME 'EximVirtualUser'

 SUP top STRUCTURAL

 DESC ''

 MUST ( EUid $ EGid $ Pass $ UName $ HomeDir $ DName $ AcStatus $ QuotaSize $ AntiSpam)

 MAY ( Descr ))

# Объект хранения алиасов пользователей почтовой системы

objectclass (1.3.6.1.4.1.100058.1.2.4 NAME 'EximVirtualAliases'

 SUP top STRUCTURAL

 DESC ''

 MUST ( UName $ Rcpt $ DName )

 MAY ( Descr ))

EOF

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

Добавляем схему к OpenLDAP-серверу

srv# cd /usr/local/etc/openldap

Окрываем файл slapd.conf на редактирование и добавляем после строчки:

include /usr/local/etc/openldap/schema/dnsdomain2.schema

еще одну строку:

include /usr/local/etc/openldap/schema/exim.schema

сохраняем файл и перезапускаем сервисы:

srv# cd /usr/local/etc/rc.d/

srv# ./010.slapd.sh restart

srv# ./020.pdns.sh restart

srv# ./015.pdnsr.sh restart

srv# ./025.samba.sh restart

Создаем файл для заполнения хранилища почтового сервера

srv# cat > /usr/local/etc/ldapfiles/mail_base.ldiff << EOF

# Ветка для хранения записей почтового сервера

dn: ou=mail,dc=example,dc=com

objectClass: top

objectClass: organizationalUnit

ou: mail

# Ветка для хранения записей о доменах, обслуживаемых MTA

dn: ou=domains,ou=mail,dc=example,dc=com

objectClass: top

objectClass: organizationalUnit

ou: domains

# Ветка для хранения записей о виртуальных аккаунтах почтового сервера

dn: ou=users,ou=mail,dc=example,dc=com

objectClass: top

objectClass: organizationalUnit

ou: users

# Ветка для хранения записей о алиасах почтового сервера

dn: ou=aliases,ou=mail,dc=example,dc=com

objectClass: top

objectClass: organizationalUnit

ou: aliases

# Ветка для хранения записей о перенаправлениях почтового сервера

dn: ou=forward,ou=mail,dc=example,dc=com

objectClass: top

objectClass: organizationalUnit

ou: forward

# Виртуальный домен example.com

dn: DName=example.com,ou=domains,ou=mail,dc=example,dc=com

objectClass: top

objectClass: EximVirtualDomain

DName: example.com

DType: virtual

Descr: Example Mail Domain

# alias перенаправления почты (postmaster@exampl.com to root@exampl.com)

dn: UName=postmaster,ou=aliases,ou=mail,dc=example,dc=com

objectClass: top

objectClass: EximVirtualAliases

UName: postmaster

Rcpt: root

Dname: example.com

# alias перенаправления почты (abuse@exampl.com to postmaster@exampl.com)

dn: UName=abuse,ou=aliases,ou=mail,dc=example,dc=com

objectClass: top

objectClass: EximVirtualAliases

UName: abuse

Rcpt: postmaster

DName: example.com

# alias перенаправления почты (info@example.com to postmaster@exampl.com)

dn: UName=info,ou=aliases,ou=mail,dc=example,dc=com

objectClass: top

objectClass: EximVirtualAliases

UName: info

Rcpt: postmaster

Dname: example.com

# Виртуальный пользователь root@example.com

dn: UName=root,ou=users,ou=mail,dc=example,dc=com

objectClass: top

objectClass: EximVirtualUser

UName: root

DName: example.com

EUid: 1001

EGid: 1001

Pass: passwd

HomeDir: /usr/local/vmail/example.com/root

AcStatus: active

AntiSpam: active

QuotaSize: 300

# Виртуальный пользователь test@example.com

dn: UName=test,ou=users,ou=mail,dc=example,dc=com

objectClass: top

objectClass: EximVirtualUser

UName: test

DName: example.com

EUid: 1001

EGid: 1001

Pass: passwd1

HomeDir: /usr/local/vmail/example.com/test

AcStatus: active

AntiSpam: active

QuotaSize: 300

EOF

Добавляем записи в OpenLDAP:

srv# ldapadd -x -D "cn=root,dc=example,dc=com" -w password -f mail_base.ldiff

add new entry "ou=mail,dc=example,dc=com"

...........

После этого мы получили в базе OpenLDAP данные, взаимосвязанные следующим образом:

dc=exmaple,dc=com

  |--ou=mail,dc=example,dc=com

       |--ou=domain,ou=mail,dc=example,dc=com

       |    |--Dname=example,ou=domain,ou=mail,dc=example,dc=com

       |

       |--ou=aliases,ou=mail,dc=example,dc=com

       |    |--Uname=postmaster,ou=aliases,ou=mail,dc=example,dc=com

       |    |--Uname=abuse,ou=aliases,ou=mail,dc=example,dc=com

       |    |--Uname=info,ou=aliases,ou=mail,dc=example,dc=com

       |

       |--ou=foreward,ou=mail,dc=example,dc=com

       |

       |--ou=users,ou=mail,dc=example,dc=com

            |--Uname=root,ou=users,ou=mail,dc=example,dc=com

            |--Uname=test,ou=users,ou=mail,dc=example,dc=com

Далее нам надо настроить MTA Exim для поиска учетной информации в этой структуре.

Создаем файл конфигурации MTA:

srv# cat > /usr/local/etc/exim/configure << EOF

Листинг файла вы найдете в разделе «Исходный код» на сайте www.samag.ru.

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

Существует три типа поиска LDAP в MTA Exim. Они ведут себя по-разному, когда обрабатывают результаты запроса:

  • ldap – результат поиска должен возвращать только один элемент, иначе выдается ошибка;
  • ldapdn – результат запроса содержит только один элемент, но при этом запрос должен вернуть dn, а не любые атрибуты со значением;
  • ldapm – результат может содержать множество элементов, запрос возвращает все найденные элементы.

С запросами немножко сложнее. Для понимания приведу аналогию с SQL-запросом выборки из моей статьи.

Выборка обслуживаемых доменов:

SQL:

# Начало поиска

${

     # Указываем, какой драйвер использовать для поиска

     lookup mysql{

     # Запрос в MySQL проверяет, существует ли запись

     # в таблице domains о домене подключившегося

     # пользователя с типом virtual

     SELECT domain FROM domains WHERE domain='${domain}' AND type='virtual'

    }

}

# Конец поиска

LDAP:

# Начало поиска

${\

   # Указываем серверу о дополнительной обработке

   # полученных результатов

   sg{\

        ${\

           # Указываем, какой драйвер использовать для поиска

           lookup ldapm{\

           # Макрос подключения

           LDAP_AUTH \

           # Указываем, в какой ветке OpenLDAP ищем

           ldap:///ou=domains,ou=mail,dc=example,dc=com?\

           # Указываем серверу, какой атрибут искать

           DName?\

           # Указываем серверу дополнительные критерии поиска

           sub?\

           # Описываем фильтр поиска в атрибутах записи

           (&(objectClass=EximVirtualDomain)(DType=virtual))\

           }\

        }\

    }\

    # Выполняем обработку полученных результатов в данном случае

    # заменяем символы конца строки «\n» на двоеточие « : »

    {\n}{ : }\

}

# Конец запроса

Дополнительная обработка результатов требуется для приведения возвращаемых данных в надлежащий формат: ou=domains,ou=mail,dc=example,dc=com.

Будет содержаться 2 и более записей о доменах к примеру:

DName=example.com,ou=domains,ou=mail,dc=example,dc=com

DName=test.com,ou=domains,ou=mail,dc=example,dc=com

Отсюда тип поиска ldapm вернет их в следующем виде:

example.com

test.com

что в свою очередь не приемлемо для MTA Exim в директиве «domainlist local_domains». Для этого мы и производим замену конца cтроки на двоеточие, в конечном итоге получая:

domainlist local_domains = example.com : test.com

Собираем ClamAV

srv# cd /usr/ports/secutiry/clamav

srv# make all install clean

[X] ARC Enable Arch arcvihe support

[X] ARJ Enable Arj arcvihe support

[X] LHA Enable LHA arcvihe support

Кофигурируем CamAV:

srv# cat > /usr/local/etc/clamd.conf << EOF

LogFile /var/log/clamav/clamd.log

PidFile /var/run/clamav/clamd.pid

DatabaseDirectory /var/db/clamav

FixStaleSocket yes

TCPSocket 3310

TCPAddr 127.0.0.1

User clamav

AllowSupplementaryGroups yes

ScanOLE2 yes

ScanMail yes

ScanHTML yes

ScanArchive yes

ArchiveMaxFileSize 15M

ArchiveMaxRecursion 10

ArchiveMaxFiles 1500

EOF

 

srv#cat > /usr/local/etc/freshclam.conf << EOF

DatabaseDirectory /var/db/clamav

UpdateLogFile /var/log/clamav/freshclam.log

LogVerbose yes

PidFile /var/run/clamav/freshclam.pid

DatabaseOwner clamav

AllowSupplementaryGroups yes

DatabaseMirror database.clamav.net

NotifyClamd /usr/local/etc/clamd.conf

Debug yes

EOF

Запускаем ClamAV и Exim:

srv# cd /usr/local/etc/rc.d

srv# mv clamav_freshclam.sh 030.freshclam.sh

srv# mv clamav-clamd.sh 035.clamd.sh

srv# mv exim 040.exim.sh

Добавляем в файл /etc/rc.conf строчки для запуска антивирусного фильтра и почтового сервера:

clamav_freshclam_enable="YES"

clamav_clamd_enable="YES"

exim_enable="YES"

Запускаем сервисы:

srv# /usr/local/etc/rc.d/030.freshclam.sh start

srv# /usr/local/etc/rc.d/035.clamd.sh start

srv# /usr/local/etc/rc.d/040.exim.sh start

Cоздаем директорию, в которой будем хранить почту наших пользователей:

srv# mkdir /usr/local/vmail

srv# chown exim:exim /usr/local/vmail /var/spool/clientmqueue /var/spool/mqueue

Прверяем правильность настройки MTA. Для этого отправим письмо сами себе:

srv# telnet localhost 25

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

220 mail.test.com ESMTP Exim 4.53 Wed, 19 Oct 2005 16:49:58 +0400

ehlo mail.example.com

250-mail.example.com Hello localhost.example.com [127.0.0.1]

250-SIZE 10485760

250-PIPELINING

250-AUTH PLAIN LOGIN

250 HELP

mail from:user@example.com

250 OK

rcpt to:user@example.com

250 Accepted

data

354 Enter message, ending with "." on a line by itself

test

.

250 OK

quit

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

Метод AUTH PLAIN:

srv# perl -MMIME::Base64 -e 'print encode_base64 ("root\@example.com\0root\@example.com\0passwd");'

DXNlckB0ZXN0LmNvbQB1c2VyQHRlc3QuY29tAHBhc3N3b3Jk==

Полученная строка и является нашей строкой аутентификации. Проверим это:

srv# telnet localhost 25

Trying localhost...

Connected to localhost.

Escape character is '^]'.

220 mail.example.com ESMTP Exim 4.53 Wed, 19 Oct 2005 16:49:58 +0400

ehlo mail.example.com

..................

..................

AUTH PLAIN DXNlckB0ZXN0LmNvbQB1c2VyQHRlc3QuY29tAHBhc3N3b3Jk==

235 Authentication succeeded

quit

Метод AUTH LOGIN:

# perl -MMIME::Base64 -e 'print encode_base64("root\@example.com");'

dXNlckB0ZXN0LmNvbQ==

# perl -MMIME::Base64 -e 'print encode_base64("passwd");'

dXNlckB0ZXN0LmNvbQ==

Проверяем:

srv# telnet localhost 25

Trying localhost...

Connected to localhost.

Escape character is '^]'.

220 mail.example.ru ESMTP Exim 4.68 Fri, 28 Sep 2007 18:12:15 +0400

ehlo mail.example.com

..................

..................

AUTH LOGIN

334 VXNlcm5hbWU6

dXNlckB0ZXN0LmNvbQ==

334 UGFzc3dvcmQ6

cGFzc3dvcmQ=

235 Authentication succeeded

quit

Проверяем SSL:

srv# openssl

srv# OpenSSL > s_client -host localhost -port 465

Если SSL-соединение прошло упешно, то мы с вами увиди приглашение Exim:

220 mail.example.ru ESMTP Exim 4.68 Fri, 28 Sep 2007 18:12:15 +0400

Собираем и конфигурируем Courier-IMAP

srv# cd /usr/ports/mail/courier-imap

srv# make all install clean

[X] OPENSSL      Build with OpenSSL support

[X] TRASHQUOTA   Include deleted mails in the quota

[X] AUTH_LDAP    LDAP support

srv# cat > /usr/local/etc/auth-lib/authdaemonrc << EOF

authmodulelist="authldap"

authmodulelistorig="authldap"

daemons=5

authdaemonvar=/var/run/authdaemond

subsystem=mail

DEBUG_LOGIN=2

DEFAULTOPTIONS="wbnodsn=1"

LOGGEROPTS=""

EOF

 

srv# cat > /usr/local/etc/auth-lib/authldaprc << EOF

# Указываем, где находится OpenLDAP

LDAP_URI   ldap://localhost

# Указываем, какую версию протокола используем

LDAP_PROTOCOL_VERSION   3

# Указываем, где искать информацию об акаунтах

# пользователей почтового сервера

LDAP_BASEDN      ou=users,ou=mail,dc=example,dc=com

# Указываем, под каким пользователем подключаемся к OpenLDAP

LDAP_BINDDN      cn=root,dc=example,dc=com

# Указываем, какой пароль у вышеуказанного пользователя

LDAP_BINDPW      password

LDAP_TIMEOUT     5

# Так как пользователи виртуальные, отключаем

# авторизацию всех остальных пользователей на сервере

LDAP_AUTHBIND    0

# Указываем, в каком атрибуте находится логин пользователя

LDAP_MAIL  UName

# Указываем фильтр для поиска

LDAP_FILTER      (objectClass=EximVirtualUser)(AcStatus=active)

# Указываем uid и gid пользователей глобально

# для всего сервера

LDAP_GLOB_UID    exim

LDAP_GLOB_GID    exim

# Указываем  атрибут домашней директории пользователя

LDAP_HOMEDIR     HomeDir

# Указываем атрибут почтовой директории пользователя

LDAP_MAILDIR     HomeDir

# Указываем атрибут, где хранится Квота на использование почтового ящика

LDAP_MAILDIRQUOTA QuotaSize

# Указываем атрибут хранения пароля

LDAP_CLEARPW     Pass

LDAP_DEREF never

# Отключаем SSL-соединение с сервером

LDAP_TLS   0

# Разбиваем логин пользователя на составляющие,

# к примеру root@example.com будет разбит

# на #Uname=root,DNAme=example.com

LDAP_EMAILMAP    (&(UName=@user@)(DName=@realm@))

# Указываем где и как искать информацию о почтовом

# ящике пользователя

LDAP_EMAILMAP_BASEDN    ou=users,ou=mail,dc=example,dc=com

LDAP_EMAILMAP_ATTRIBUTE        UName

LDAP_EMAILMAP_MAIL      Uname

EOF

Добавляем строки в rc.conf для запуска Courier-IMAP:

courier_authdaemond_enable="YES"

courier_imap_pop3d_enable="YES"

courier_imap_imapd_ssl_enable="YES"

courier_imap_imapd_enable="YES"

courier_imap_pop3d_ssl_enable="YES"

Конфигурируем сервисы pop3 и imap:

srv# cd /usr/local/etc/courier-imap

Настраиваем imap:

srv# cat > imapd << EOF

# Вписываем в файл следующее содержимое

ADDRESS=0

PORT=143

MAXDAEMONS=40

MAXPERIP=4

PIDFILE=/var/run/imapd.pid

TCPDOPTS="-nodnslookup -noidentlookup"

LOGGEROPTS="-name=imapd"

IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE"

IMAP_KEYWORDS=1

IMAP_ACL=1

IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE"

IMAP_PROXY=0

IMAP_PROXY_FOREIGN=0

IMAP_IDLE_TIMEOUT=60

IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN"

IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN"

IMAP_DISABLETHREADSORT=0

IMAP_CHECK_ALL_FOLDERS=0

IMAP_OBSOLETE_CLIENT=0

IMAP_UMASK=022

IMAP_ULIMITD=65536

IMAP_USELOCKS=1

IMAP_SHAREDINDEXFILE=/usr/local/etc/courier-imap/shared/index

IMAP_ENHANCEDIDLE=0

IMAP_TRASHFOLDERNAME=Trash

IMAP_EMPTYTRASH=Trash:7

IMAP_MOVE_EXPUNGE_TO_TRASH=0

SENDMAIL=/usr/sbin/sendmail

HEADERFROM=X-IMAP-Sender

IMAPDSTART=YES

MAILDIRPATH=Maildir

EOF

Настраиваем imap-ssl:

srv#cat > imapd-ssl << EOF

SSLPORT=993

SSLADDRESS=0

SSLPIDFILE=/var/run/imapd-ssl.pid

SSLLOGGEROPTS="-name=imapd-ssl"

IMAPDSSLSTART=YES

IMAPDSTARTTLS=YES

IMAP_TLS_REQUIRED=0

COURIERTLS=/usr/local/bin/couriertls

TLS_PROTOCOL=SSL3

TLS_STARTTLS_PROTOCOL=TLS1

TLS_CERTFILE=/usr/local/etc/courier-imap/shared/imapd.pem

TLS_VERIFYPEER=NONE

TLS_CACHEFILE=/usr/local/var/couriersslcache

TLS_CACHESIZE=524288

MAILDIRPATH=Maildir

EOF

Настраиваем pop3:

srv#cat > pop3d << EOF

PIDFILE=/var/run/pop3d.pid

MAXDAEMONS=40

MAXPERIP=4

POP3AUTH=""

POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256"

POP3AUTH_TLS=""

POP3AUTH_TLS_ORIG="LOGIN PLAIN"

POP3_PROXY=0

PORT=110

ADDRESS=0

TCPDOPTS="-nodnslookup -noidentlookup"

LOGGEROPTS="-name=pop3d"

POP3DSTART=YES

MAILDIRPATH=Maildir

EOF

Конфигурируем pop3-ssl:

srv#cat > pop3d-ssl << EOF

SSLPORT=995

SSLADDRESS=0

SSLPIDFILE=/var/run/pop3d-ssl.pid

SSLLOGGEROPTS="-name=pop3d-ssl"

POP3DSSLSTART=YES

POP3_STARTTLS=YES

POP3_TLS_REQUIRED=0

COURIERTLS=/usr/local/bin/couriertls

TLS_PROTOCOL=SSL3

TLS_STARTTLS_PROTOCOL=TLS1

TLS_CERTFILE=/usr/local/etc/courier-imap/shared/pop3d.pem

TLS_VERIFYPEER=NONE

TLS_CACHEFILE=/usr/local/var/couriersslcache

TLS_CACHESIZE=524288

MAILDIRPATH=Maildir

EOF

Настраиваем сертификаты ssl:

srv# cat > imapd.cnf << EOF

RANDFILE = /usr/local/share/courier-imap/imapd.rand

[ req ]

default_bits = 1024

encrypt_key = yes

distinguished_name = req_dn

x509_extensions = cert_type

prompt = no

[ req_dn ]

C=RU

ST=RU

L=Moscow

O=Exim Super Secure Server

OU= IMAP SSL Key

CN=mail.baby-country.ru

emailAddress=postmaster@example.com

[ cert_type ]

nsCertType = server

EOF

 

srv#cat > pop3d.cnf << EOF

RANDFILE = /usr/local/share/courier-imap/pop3d.rand

[ req ]

default_bits = 1024

encrypt_key = yes

distinguished_name = req_dn

x509_extensions = cert_type

prompt = no

[ req_dn ]

C=RU

ST=RU

L=Moscow

O=Exim Super Secure Server

OU= POP3 SSL Key

CN=mail.baby-country.ru

emailAddress=postmaster@example.ru

[ cert_type ]

nsCertType = server

EOF

Создаем сетрификаты:

srv# cd /usr/local/share/courier-imap

srv# ./mkimapdcert

srv# ./mkpop3dcert

Копируем созданные сертификаты:

srv# cp imapd.pem /usr/local/etc/courier-imap/shared

srv# cp pop3d.pem /usr/local/etc/courier-imap/shared

Меняем права доступа:

srv# cd /usr/local/etc/courier-imap/shared

srv# chmod 0600 *

Запускаем Courier-IMAP

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

srv# cd /usr/local/etc/rc.d

srv# mv courier_authdaemond.sh 045.courier-auth.sh

srv# mv courier_imap_imapd.sh 050.courier-imap.sh

srv# mv courier_imap_pop3d.sh 055.courier-pop3d.sh

srv# mv courier_imap_imapd_ssl 060.courier-imaps.sh

srv# mv courier_imap_pop3d_ssl 065.courier_pop3ds.sh

Запускаем сервисы:

srv# ./045.courier-auth.sh start

srv# ./050.courier-imap.sh start

srv# ./055.courier-pop3d.sh start

srv# ./060.courier-imaps.sh start

srv# ./065.courier_pop3ds.sh start

Проверяем конфигурацию Courier-IMAP

Проверяем работу Courier-IMAP по протоколу POP3:

srv# telnet 127.0.0.1 110

Trying 127.0.0.1...

Connected to mail.example.com.

Escape character is '^]'.

+OK Hello there.

user root@example.com

+OK Password required.

pass password

+OK logged in.

list

quit

Проверяем работу Courier-IMAP по протоколу IMAP:

srv# telnet 127.0.0.1 143

Trying 127.0.0.1...

Connected to mail.example.com.

* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA

IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready.

Copyright 1998-2005 Double Precision, Inc. 

See COPYING for distribution information.

a001 login user@example.com passwd

a001 OK LOGIN Ok. # ответ сервера

a001 logout

* BYE Courier-IMAP server shutting down

a001 OK LOGOUT completed

Connection closed by foreign host.

Проверяем работу Courier-IMAP по протоколу POP3 через SSL-соединение:

srv# openssl

OpenSSL> s_client -host localhost -port 995

.....

.....

.....

Connected to mail.example.com.

+OK Hello there.

quit

Проверяем работу Courier-IMAP по протоколу IMAP через SSL-соединение:

OpenSSL> s_client -host localhost -port 993

......

* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA

IDLE AUTH=PLAIN ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc.

See COPYING for distribution information.

a001 login root@example.com passwd

a001 OK LOGIN Ok. // ответ сервера

a001 logout

* BYE Courier-IMAP server shutting down

a001 OK LOGOUT completed

closed

Ну вот и все, теперь можно создавать учетные записи пользователей почтовой системы.

Предупреждение! В данной конфигурации у антиспама отключена возможность автоматического обучения. Это сделано потому, что наблюдение за работой антиспам-фильтра в режиме автоматического обучения привело к выводу, что пользователи забывают следить за своим антиспам-фильтром или себя этим не утруждают, а настраивать фильтр глобально на весь сервер некорректно, поскольку у каждого пользователя разные понятия что такое спам, а что не спам. В связи с этим следует предупредить ваших пользователей, что все письма, которые являются спамом для них, требуется пересылать на почтовый ящик spam@example.com, а ошибочно помеченные как спам – на ящик nospam@example.com (в соответствие с настройками данной конфигурации).

Заключение

Итак, давайте разберем, что же мы получили в результате наших действий:

  • гибкий в настройке и управлении почтовый сервер;
  • защиту от вирусов;
  • защиту от спама.

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


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru