|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> почтовые системы
—> Exim + AD (корпоративная почта)
Exim + AD (корпоративная почта)
Автор: atrium.
Сделаем небольшое введение: данная статья предназначена для тех, кто хоть немного ориентируется в Exim и операционной системе Unix(в нашем варианте FreeBSD).
Exim - MTA (mail transfer agent) для хостов, которые работают на ОС Unix или Unix-like и иимеют постоянное подключение к интернету. Он так же может работать и на хостах, которые имеют периодическое подключение к интернет. Этот MTA является довольно гибким, имеет встроенный Perl, поддерживает в качестве хранилищ данных MySQL, LDAP, PgSQL, NIS, DB, файлы. Для обеспечения безопасности передачи данных имеется поддержка OpenSSL.
Перейдём к делу, сегодня будем настраивать корпоративный почтовый сервер, в качестве хранилища данных будет выступать LDAP (AD на Windows 2003 R2). Наш сервер будет уметь рассылать почту пользователям, которые находятся в AD, также будут групповые рассылки, в качестве mail листов будут выступать группы в AD. Различные ограничения по хостам, адресам, которые будут храниться в отдельных файлах в формате DB. Вся почта будет проверяться антивирусом и спам фильтром. Необходимо сделать уточнение, что посылка почты будет работать только для пользователей, которые не заблокированы в AD.
Все настройки производятся на ОС FreeBSD 7.2
unix# uname -a
FreeBSD unix 7.2-RELEASE FreeBSD 7.2-RELEASE #1: Thu May 7 17:28:50 MSD 2009
atrium@unix:/usr/obj/usr/src/sys/kernel i386
|
Для организации данной конфигурации нам понадобятся следующие пакеты:
Port: exim-4.69
Path: /usr/ports/mail/exim
Info: High performance MTA for Unix systems on the Internet
Maint: krion@FreeBSD.org
WWW: http://www.exim.org/
Port: clamav-0.92.5
Path: /usr/ports/security/clamav
Info: Command line virus scanner written entirely in C
Maint: garga@FreeBSD.org
WWW: http://www.clamav.net/
Port: dspam-3.6.8_2
Path: /usr/ports/mail/dspam
Info: Bayesian spam filter - stable maintenance version
Maint: itetcu@FreeBSD.org
WWW: http://dspam.nuclearelephant.com
Port: p5-perl-ldap-0.36
Path: /usr/ports/net/p5-perl-ldap
Info: A Client interface to LDAP servers
Maint: perl@FreeBSD.org
Port: dovecot-1.1.16
Path: /usr/ports/mail/dovecot
Info: Secure and compact IMAP and POP3 servers
Maint: yds@CoolRat.org
|
Создадим пользователя, от которого будет производиться доставка и соответственно он будет владельцем папки с доменом и почтовыми ящиками.
grep 1006 /etc/passwd
vmail:*:1006:1006:User &:/home/vmail:/sbin/nologin
|
Далее создадим каталог virtual, назначим ему соответствующие права доступа, сделаем владельцем пользователя vmail и группу mail:
unix# mkdir -m 750 /var/mail/virtual
unix# chown 1006:mail /var/mail/virtual
|
В этом каталоге будет храниться следующая структура папок:
domain_name -> user_name@domain_name
| В катечстве domain_name имя домена, user_name@domain_name - имя почтового ящика пользователя.
Для возможности рассылки почты на группы в AD, которые будут выступать в качестве списков рассылки напишем небольшой скриптик на Perl. В этом скрипте необходимо изменить параметры IP адрес сервера PDC и пользователя от имени которого будет происходить подключение:
#!/usr/bin/perl
use strict;
use warnings;
use Net::LDAP;
my %ldap_connect=(
HOST=>"192.168.0.100",
PORT=>"389",
# Timeout search
TIMEOUT=>"120",
# База поиска
BASE_DN=>"CN=Users,DC=oskol,DC=impexbank,DC=ru",
# Юзер для доступа к LDAP
BIND_DN=>"CN=exim,CN=Users,DC=oskol,DC=impexbank,DC=ru",
# Пароль юзера
BIND_PASS=>"exim",
# Версия LDAP
VERSION=>"3"
);
sub get_mail_lists
{
my $address=shift;
my ($user_mail, $dn, $mesg, $entry, $mail_lists);
my (@array_of_ldap_search, @entries);
$mail_lists=" ";
# Подключение к хосту
my $ldap = Net::LDAP->new($ldap_connect{'HOST'}, version=>$ldap_connect{'VERSION'}, \
port=>$ldap_connect{'PORT'}, timeout=>$ldap_connect{'TIMEOUT'}) or die exit 0;
# Подключение к дереву
$mesg=$ldap->bind($ldap_connect{'BIND_DN'}, password => $ldap_connect{'BIND_PASS'}) or die exit 0;
# Поиск e-mail дя группы
$mesg = $ldap->search(
base => $ldap_connect{'BASE_DN'},
scope => 'sub',
filter => "(&(objectClass=top)(objectClass=group)(mail=$address))",
attrs => ['member']
);
# Получение записей dn участников группы
foreach $entry ($mesg->entries) {
@array_of_ldap_search = $entry->get_value("member");
}
# Поиск в соответствии с dn почтового адреса
foreach $dn (@array_of_ldap_search) {
$mesg = $ldap->search(
filter=>"(&(objectClass=top)(objectClass=user)(objectClass=person)\
(distinguishedName=$dn))",
base=>$ldap_connect{'BASE_DN'},
scope =>'sub',
attrs=>['mail']
);
# Получение найденных записей e-mail'ов
# И формирование списка
@entries = $mesg->entries;
foreach $entry (@entries) {
$user_mail = $entry->get_value("mail");
$mail_lists = $mail_lists.",".$user_mail;
}
}
$mail_lists = substr($mail_lists,1);
$ldap->unbind;
return $mail_lists;
}
# Для теста раскоментируйте
#print get_mail_lists('adm@oskol.impexbank.ru')
|
Так как наша система поддерживает безопасное соединение для SMTP, POP3 и IMAP4, то необходимо сгенерировать сертификаты для работы через SSL. Для этого заходим в каталог /usr/src/crypto/openssl/apps и выставляем право исполнения (x) на файл CA.sh или CA.pl, как Вам будет удобнее и генерируем корневой сертификат:
cd /usr/src/crypto/openssl/apps
rm -r ./demoCA/*
./CA.pl -newca
|
Отвечаете на все необходимые вопросы и в результате у Вас в каталоге ./demoCA должна появиться следующая структура:
total 22
-rw-r--r-- 1 root wheel 3350 23 июн 14:17 cacert.pem
-rw-r--r-- 1 root wheel 651 23 июн 14:17 careq.pem
drwxr-xr-x 2 root wheel 512 23 июн 14:16 certs
drwxr-xr-x 2 root wheel 512 23 июн 14:16 crl
-rw-r--r-- 1 root wheel 3 23 июн 14:16 crlnumber
-rw-r--r-- 1 root wheel 114 23 июн 14:17 index.txt
-rw-r--r-- 1 root wheel 21 23 июн 14:17 index.txt.attr
-rw-r--r-- 1 root wheel 0 23 июн 14:16 index.txt.old
drwxr-xr-x 2 root wheel 512 23 июн 14:17 newcerts
drwxr-xr-x 2 root wheel 512 23 июн 14:16 private
-rw-r--r-- 1 root wheel 17 23 июн 14:17 serial
|
После того как с генерировали корневой сертификат, конвертируем его в другой формат и добавим каждому пользователю на Windows машину, его можно установить через групповые политики (конфигурация компьютера -> конфигурация Windows -> параметры безопасности -> политики открытого ключа -> доверенные корневые центры сертификации):
openssl x509 -inform PEM -outform DER -in cacert.pem -out cacert.cer
|
Т.е Мы, полученный сертификат cacert.cer копируем по FTP на наш PDC (Primary Controller Domain) и через групповые политики устанавливаем всем пользователям домена.
Создадим запрос на сертификат, не забываем правильно указывать имя машины на которой работает Exim, параметр Common Name (eg, YOUR name []):
openssl req -new -newkey rsa:2048 -keyout eximkey.pem -keyform PEM -days 365 -nodes -out certreq.pem
|
Подпишем корневым сертификатом наш запрос на сертификацию:
openssl x509 -req -inform PEM -outform PEM -in certreq.pem -out eximcert.pem -days 365 \
-CAkey ./private/cakey.pem -CAcreateserial -CA cacert.pem
Signature ok
subject=/C=RU/ST=Some-State/O=Raiffeisen/CN=mail2.oskol.impexbank.ru/\
emailAddress=adm@mail.ru
Getting CA Private Key
Enter pass phrase for ./private/cakey.pem:
|
Создадим каталог /usr/local/etc/exim/ssl в котором будем хранить наши сертификаты для работы сервера:
mkdir -m 550 /usr/local/etc/exim/ssl
chown mailnull:wheel /usr/local/etc/exim/ssl
|
Далее необходимо выставить права на сертификаты и сделать владельцем пользователя mailnuxll:
chown mailnull:wheel ./*
chmod 440 ./*
|
Перед тем как приступить к настройке приложений необходимо внести небольшие изменения в файле /etc/mail/mailer.conf и привести его к виду:
sendmail /usr/local/sbin/exim
send-mail /usr/local/sbin/exim
mailq /usr/local/sbin/exim -bp
newaliases /usr/local/sbin/exim -bi
|
И так, приступим к настройке всех необходимых нам приложений, прежде всего начнём с установки и настройки антивируса, который будет проверять всю почту. В качестве антивируса был выбран Clamav, поэтому ищем его в портах и устанавливаем в зависимости от Ваших предпочтений, т.е опции выбирайте сами (какие форматы файлов он будет проверять). Начнём настройку антивируса, отредактируем файл /usr/local/etc/clamd.conf. Конфигурационный файл предназначен исключительно для использования с MTA. Данная конфигурация позволяет использовать антивирус локально для проверки почты, а так же как сервер антивируса для подключения к нему и сканирования почты по сети при нескольких почтовых серверах:
#-------------------------------
# Необходимо изменить |
#-------------------------------
# Размер должен соответстовать максимальному размеру
# файла который может быть приаттачен в MTA
StreamMaxLength 10M
MaxScanSize 10M
MaxFileSize 10M
# Период проверки базы антиивруса в s(seconds)
SelfCheck 1800
LogFile /var/log/clamav/clamd.log
LogFileUnlock yes
LogFileMaxSize 5M
LogTime yes
LogClean no
LogSyslog no
LogFacility LOG_MAIL
LogVerbose no
Debug no
PidFile /var/run/clamav/clamd.pid
TemporaryDirectory /var/tmp
DatabaseDirectory /var/db/clamav
LocalSocket /var/run/clamav/clamd.sock
FixStaleSocket yes
VirusEvent /bin/echo "Virus found %v" >> /var/log/clamav/virus.log
MaxThreads 20
ReadTimeout 120
CommandReadTimeout 5
SendBufTimeout 400
IdleTimeout 30
User clamav
LeaveTemporaryFiles no
AlgorithmicDetection yes
DetectBrokenExecutables yes
ScanPE yes
ScanELF yes
ScanOLE2 yes
ScanPDF yes
ScanMail yes
ScanPartialMessages no
ScanHTML yes
ScanArchive yes
ArchiveBlockEncrypted yes
MaxRecursion 10
MaxFiles 1000
AllowSupplementaryGroups yes
# использование в качестве сервера
#
TCPAddr 192.168.0.101
TCPSocket 3310
|
Далее необходимо настроить программу обновления баз антивирса, для этого отредактируйте файл /usr/local/etc/freshclam.conf, там всё довольно просто, поэтому я думаю Вы справитесь сами.
После редактирования не забываем добавить в /etc/rc.conf две строчки, а также стартануть антивирус и программу обновления баз:
в rc.conf
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
cтартуем
/usr/local/etc/rc.d/clamav-clamd start
/usr/local/etc/rc.d/clamav-freshclam start
|
После того как установили и настроили антивирус необходимо будет настроить POP3 и IMAP4 сервер. В качестве ПО был выбран Dovecot. Dovecot - это open source IMAP и POP3 сервер для Linux/Unix систем, основным приоритетом в работе данного ПО является безопасность. Поддерживает как mbox, так и maildir форматы почтовых ящиков, позволяет проводить авторизацию в различных базах данных (LDAP, PgSQL, MySQL, passwd ...) и поддерживает различные механизмы авторизации. Более подробную информацию о Dovecot можно прочитать на официальном сайте. Ищем Dovecot в портах и устанавливаем со следующими опциями:
[X] KQUEUE kqueue(2) support
[X] SSL SSL support
[X] POP3 POP3 support
[X] LDA LDA support
[X] LDAP OpenLDAP support
|
После установки приступим к конфигурированию, для этого отредактируем два файла - /usr/local/etc/dovecot.conf и /usr/local/etc/dovecot-ldap.conf:
#---------------------------------------
# Изменяемые параметры |
#---------------------------------------
#-----------------------------------------------------------------
# Путь к почтовому ящику
#
mail_location=maildir:/var/mail/virtual/oskol.impexbank.ru/%h/
# UID/GID владельца каталога с почтовыми ящиками
#
first_valid_uid = 1006
last_valid_uid = 1006
first_valid_gid = 1006
last_valid_gid = 1006
mail_uid=1006
mail_gid=1006
mail_privileged_group = mail
# Поддерживаемые протоколы
#
protocols = imap pop3 pop3s imaps
protocol imap {
listen=192.168.0.2:143
ssl_listen=192.168.0.2:993
}
protocol pop3 {
listen=192.168.0.2:110
ssl_listen=192.168.0.2:995
}
# Путь к сертификатам и пароль на key файл
# Возможно использование сертификатов отдельно для каждого протокола
#
ssl_cert_file=/usr/local/etc/postfix/cert/postfix_public_cert.pem
ssl_key_file=/usr/local/etc/postfix/cert/postfix_private_key.pem
#ssl_ca_file = /usr/local/etc/postfix/cert/cakey.pem
ssl_key_password=
# Разрешить использовать SSL
#
ssl_disable=no
# Mail процессы
#
valid_chroot_dirs=/var/mail/virtual
# Запретить использовать использовать авторизацию LOGIN, т.е
# открытый пароль, если не используется SSL/TLS
#
disable_plaintext_auth=yes
# Отрубать процессы IMAP/POP3, если master процесс умер
#
shutdown_clients = yes
# Максимальное количество mail процессов. Когда процессы исчерпаются
# не смогут авторизоваться
#
max_mail_processes = 512
# Максимальный размер процесса в Mb
mail_process_size = 25
#-----------------------------------------------------------------------
# Отладка
#
mail_debug = yes
# Показывать подробную информацию о процессе при команде 'ps'
# ip, login_name ...
verbose_proctitle = yes
auth_debug = yes
auth_debug_passwords = yes
auth_verbose = yes
verbose_ssl = no
# Базовая дирректория
base_dir = /var/run/dovecot/
# Ведение логов
#
log_path=/var/log/dovecot.log
info_log_path=/var/log/dovecot-info.log
syslog_facility=mail
mail_log_prefix="%Us(%u):"
mail_log_max_lines_per_sec=10
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
login_log_format = %$: %s
# SSL
#
ssl_verify_client_cert = no
ssl_parameters_regenerate = 0
# Управление процессами авторизации
#
login_dir = /var/run/dovecot/login
login_user = dovecot
#Максимальный размер процесса в Mb
login_process_size = 30
#Обрабатывать каждое соединение своим процессом
login_process_per_connection = yes
#Количество процессов ждущих нового соеднинения
#Один процесс занимает около 4 метров, поэтому ориентируйтесь на ОЗУ
login_processes_count = 10
login_max_processes_count = 90
#Максимально количество соединений для каждого login процесса
#используется, если login_process_per_connection=no
login_max_connections = 180
#Приветствие
login_greeting = Hello users
login_chroot = yes
#Пространство default, не трогать!
#
namespace private {
separator=/
prefix=
inbox=yes
}
# Создание общих папок
#
namespace public {
separator = /
prefix = Folders/
location = maildir:/var/mail/virtual/oskol.impexbank.ru/%h/Folders
hidden = no
inbox = no
}
# Mailbox
#
mail_full_filesystem_access = no
mmap_disable = yes
fsync_disable = yes
lock_method = fcntl
mail_drop_priv_before_exec = yes
#Уменьшает стоимость использования диска
mail_cache_min_mail_count = 0
#Период проверки изменений в ящике
mailbox_idle_check_interval = 60
mail_save_crlf = no
#Команда LIST по умолчанию возвращает все каталоги начинающиеся с .
#если yes, то возвращаются все дирректории
maildir_stat_dirs = no
#YES если параметр maildir_copy_with_hradlinks=yes
dotlock_use_excl=yes
maildir_copy_with_hardlinks = yes
maildir_copy_preserve_filename = yes
# Настройка протоколов
#
protocol imap {
login_executable = /usr/local/libexec/dovecot/imap-login
imap_max_line_length = 65536
mail_max_userip_connections = 3
login_greeting_capability = yes
imap_logout_format = bytes=%i/%o
mail_executable = /usr/local/libexec/dovecot/imap
mail_plugin_dir = /usr/local/lib/dovecot/imap
imap_client_workarounds = delay-newmail outlook-idle netscape-eoh tb-extra-mailbox-sep
}
protocol pop3 {
login_executable = /usr/local/libexec/dovecot/pop3-login
mail_executable = /usr/local/libexec/dovecot/pop3
pop3_no_flag_updates = no
pop3_enable_last = no
pop3_reuse_xuidl = no
pop3_lock_session = no
pop3_uidl_format = %08Xu%08Xv
mail_max_userip_connections = 3
pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s, in/out=%i/%o
mail_plugin_dir = /usr/local/lib/dovecot/pop3
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
# Локальный агент доставки. LDA
#
protocol lda {
postmaster_address = postmaster@oskol.impexbank.ru
hostname = mail.oskol.impexbank.ru
mail_plugin_dir = /usr/local/lib/dovecot/lda
sendmail_path = /usr/local/sbin/sendmail
auth_socket_path = /var/run/dovecot/auth-master
quota_full_tempfail = yes
deliver_log_format = msgid=%m, from=%f, status=%$
sendmail_path = /usr/local/sbin/exim
rejection_subject = Automatically rejected mail
rejection_reason = Your message to <%t> was automatically rejected:%n%r
}
# Процессы авторизации
#
auth_executable = /usr/local/libexec/dovecot/dovecot-auth
#Размер процесса в Mb
auth_process_size = 50
#Кэширование процесса авторизации в Kb. 0 - выключить
#Если авторизация через AD, лучше выключить.
auth_cache_size = 0
auth_cache_ttl = 3600
auth_cache_negative_ttl = 0
#Разрешённые символы в имени
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
#Формат имени (в нижнем регистре, имя)
auth_username_format =%Lu
auth_worker_max_count = 30
#Количество запросов, после которых процесс авторизации уничтожается
auth_worker_max_request_count = 1000
#Задержка, при неправильно авторизации
auth_failure_delay = 10
#---------Авторизация для pop, imap и smtp
auth default {
#Механизмы
mechanisms = plain login
#Извлечение пароля
passdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
#Извлечение пользовательских данных
userdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
#Сокет для авторизации в postfix
socket listen {
client {
path=/var/run/dovecot/auth-client
mode=0666
user=mailnull
group=mail
}
master {
path=/var/run/dovecot/auth-master
mode=0600
user=mailnull
group=mail
}
}
}
|
Обязательно проверьте все пути. Данная конфигурация имеет namespace, который создаёт каждому пользователю в его почтовом ящике папку Folders, внутри которой пользователь по средствам MUA (mail user agent) создаст необходимую структуру папок для своих нужд, актуально для IMAP:
Параметр
namespace public {
separator = /
prefix = Folders/
location = maildir:/var/mail/vhost/oskol.impexbank.ru/%h/Folders
hidden = no
inbox = no
}
|
И отключите отладку в /usr/local/etc/dovecot.conf.
Для тех кто установил новую версию Dovecot (1.2):
Settings:
* Renamed 'ssl_disable=yes' to 'ssl=no'.
* Renamed 'auth_ntlm_use_winbind' to 'auth_use_winbind', which also determines
if GSS-SPNEGO is handled by GSSAPI or winbind.
* Removed 'login_greeting_capability'. The capabilities are now always sent
(Lemonade requires this and it's not that much extra traffic).
* Removed 'auth_worker_max_request_count'. It was useful only with PAM, so it
can now be specified in 'passdb pam { args = max_requests=n } '. The default
is 100.
|
Отредактируем файл /usr/local/etc/dovecot-ldap.conf и приведём его к следующему виду:
# IP ADC (контроллер домена)
#
hosts= 192.168.0.100
ldap_version = 3
# Авторизоваться
#
auth_bind= yes
# Login
#
dn= CN=users,CN=Users,DC=oskol,DC=impexbank,DC=ru
# Password
#
dnpass= users
# Дерево в котором будет производиться поиск
#
base= CN=Users,DC=oskol,DC=impexbank,DC=ru
# Поиск в поддеревьях
#
deref=searching
scope=subtree
# Параметры пользователя
# Домашний каталог пользователя равен его e-mail адресу
# Получить домашний каталог можно через %h в dovecot.conf
#
user_attrs=mail=home
user_filter= (&(objectClass=user)(objectClass=person)(sAMAccountName=%u)(badPasswordTime=*))
# Параметры пароля
#
pass_attrs=sAMAccountName=user
pass_filter = (&(objectClass=user)(objectClass=person)(sAMAccountName=%u)(badPasswordTime=*))
|
После установки сервера IMAP, POP3 необходимо установить и настроить DSPAM, который будет фильтровать спам. DSPAM - открытое программное обеспечение, представляющее собой статический спам фильтр. По заявлению разработчика Jonathan A. Zdziarski DSPAM обладает высокой степенью фильтрации спама. DSPAM можно настроить в двух режимах - демон, вызов бинарного файла из MTA. В нашей конфигурации будем настраивать DSPAM с вызовом его бинарного файла из MTA. Установим DSPAM со следующими опциями:
[X] SYSLOG Logs via syslog
[X] DEBUG Enable debugging logging
[X] VERBOSE_DEBUG Enable debug in LOGDIR/dspam.debug
[X] BNR_DEBUG Enable debug for BNR
[X] DAEMON Daemonize dspam; speaks LMTP or DLMTP
[X] MYSQL50 Use MySQL 5.0.x as back-end
[X] MYSQL_COMPRESS Compress dspam <--> MySQL
[X] LDAP Enable recipient verification via LDAP
[X] VIRT_USERS Enable virtual users (needs SQL back-end)
[X] LONG_USERNAMES Usernames longer that OS supports
[X] EXIM_LDA Use Exim as local delivery agent
|
В качестве back-end'a была выбрана MySQL 5-ой версии, поэтому в зависимости от Вашей версии MySQL выберите соответствующую опцию.
В DSPAM будет использоваться единая база для всех пользователей, поэтому создадим файл /var/db/dspam/group и запишем в него следующую информацию:
После этого создадим два алиаса в файле /etc/mail/aliases:
spam:"|/usr/local/bin/dspam --user atrium --class=spam --source=error"
notspam:"|/usr/local/bin/dspam --user atrium --class=innocent --source=error"
|
На адрес spam@example.ru будет отсылаться спам, а на адрес notspam@example.ru будут отсылаться письма ошибочно помеченные фильтром как спам. После того как добавите информацию в файл /etc/mail/aliases не забудте выполнить команду:
exim_dbmbuild /etc/mail/aliases /etc/mail/aliases.db
|
Далее необходимо создать базу в MySQL для DSPAM и залить в неё следующие два файла:
/usr/local/share/examples/dspam/mysql/mysql_objects-speed.sql
/usr/local/share/examples/dspam/mysql/virtual_users.sql
|
После того как вы создадите базу для DSPAM у Вас в ней должны быть следующие таблицы:
mysql> show tables;
+----------------------+
| Tables_in_dspam |
+----------------------+
| dspam_preferences |
| dspam_signature_data |
| dspam_stats |
| dspam_token_data |
| dspam_virtual_uids |
+----------------------+
5 rows in set (0.00 sec)
|
Если у Вас те же самые таблицы (если нет то проверьте загрузили ли Вы два файла указанных выше), то приступим к редактированию файла dspam.conf и приведём его к виду:
Home /var/db/dspam
StorageDriver /usr/local/lib/libmysql_drv.so
TrustedDeliveryAgent "/usr/local/sbin/exim -oMr spam-scanned"
OnFail error
Trust root
Trust mail
Trust mailnull
Trust vmail
Trust atrium
Debug *
TrainingMode teft
TestConditionalTraining on
Feature chained
Feature whitelist
Algorithm graham burton
PValue graham
ImprobabilityDrive on
SupressWebStats on
Preference "signatureLocation=headers"
Preference "showFactors=on"
Preference "spamAction=tag"
Preference "spamSubject=SPAM"
Preference "enableBNR=off"
Preference "enableWhilelist=on"
Preference "statisticalSedation=7"
Preference "whitelistThreshold=8"
AllowOverride trainingMode
AllowOverride spamAction spamSubject
AllowOverride statisticalSedation
AllowOverride enableBNR
AllowOverride enableWhitelist
AllowOverride signatureLocation
AllowOverride showFactors
AllowOverride optIn optOut
AllowOverride whitelistThreshold
MySQLServer /tmp/mysql.sock
MySQLUser dspam
MySQLPass dspam
MySQLDb dspam
MySQLCompress true
MySQLConnectionCache 10
MySQLUIDInSignature on
HashRecMax 98317
HashAutoExtend on
HashMaxExtents 0
HashExtentSize 49157
HashMaxSeek 100
HashConnectionCache 10
IgnoreHeader X-Spam-Status
IgnoreHeader X-Spam-Score
IgnoreHeader X-Spam-Scanned
IgnoreHeader X-Virus-Scanner-Result
IgnoreHeader Date
IgnoreHeader Envelope-to
IgnoreHeader Delivery-date
IgnoreHeader Received
IgnoreHeader User-Agent
IgnoreHeader Content-Type
IgnoreHeader Content-Transfer-Encoding
IgnoreHeader To
Notifications off
LocalMX 127.0.0.1
SystemLog on
Opt out
MaxMessageSize 307200
ProcessorBias on
TrainPristine off
ParseToHeaders on
ChangeModeOnParse on
ChangeUserOnParse on
|
Приступим к настройке самой главной части, нашему MTA(mail transfer agent). Все опции находятся в /usr/local/etc/exim/configure, но для удобства я предлагаю разбить стандартный конфигурационный файл на следующие подфайлы, которые через .include будут включаться в главный конфигурационный файл:
acl.conf - ACL списки
transport.conf - транспорты для доставки почты
router.conf - роутеры для маршрутизации почты
macros.conf - макросы, которые будут использоваться
ldap.conf - запросы и параметры для подключения к LDAP(AD)
Приводим главный конфигурационный файл /usr/local/etc/exim/confiure Exim к следующему виду:
#----------------------------------------------
# Name: Exim and AD
# Author: atrium (sysatrium)
# Modify: 16.09.2009
# Copyright (c) atrium (sysatrium), 07.07.2009
# Comment: Спам-фильтр DSPAM.
#----------------------------------------------
#---------------------------------------
# Требующие изменения
#---------------------------------------
# Файл извлекающий e-mail адреса из группового адреса в AD
#
perl_startup=do '/usr/local/etc/exim/MailList_AD.pl'
# Моя подсеть. Можно через (:) указывать узлы отдельно
#
hostlist my_lan = 192.168.0.0/24 : 127.0.0.1
# Полное имя машины на которой работает MTA
# Если опция не задана, то используется специальный вызов uname()
#
primary_hostname = mail.oskol.impexbank.ru
# На каком интерфейсе работает сервер
#
local_interfaces = 192.168.0.101 : 127.0.0.1
daemon_smtp_ports = 25 : 465
# Максимальный размер сообщения
#
message_size_limit=100M
# SMTP баннер
#
smtp_banner="Sendmail version 1.0"
# Управление кэшем обратных вызовов (callout)
#
callout_negative_expire = 1h
callout_positive_expire = 5d
callout_domain_negative_expire = 1h
callout_domain_positive_expire = 7d
# Параметры создают список доменов и список хостов
# Если у Вас есть почтовый шлюз от которого сервер принимает почту
# его необходимо добавить в параметр: 'relay_from_hosts'
#
domainlist local_domains = localhost : oskol.impexbank.ru
hostlist relay_from_hosts = localhost : 127.0.0.0/8
# Внешние домены для которых можно принимать почту, т.е MTA будет релеем для этих доменов
#
domainlist relay_domains =
# Группа администраторов. Могут просматривать очереди сообщений.
# Просмотр очреди доступен, если опция 'queue_list_requires_admin=true'
# Доступны опции -M -q -R -S
#
admin_groups=exim_admin
# Разрешить просмотр очереди юзерам, которые состоят в группе определённой опцией
# admin_groups
#
queue_list_requires_admin=true
# Разрешить управление принудителной доставкой юзерам, которые состоят
# в группе определённой опцией admin_groups
#
prod_requires_admin = true
# Обработка логов
# Для записи сообщений в syslog в параметре 'log_file_path' необходимо указать syslog
#
log_file_path=/var/log/exim/exim-%s.log
syslog_duplication = false
syslog_timestamp = false
log_selector= \
+deliver_time \
+delay_delivery \
+all_parents \
+received_recipients \
+received_sender \
+smtp_protocol_error \
+smtp_syntax_error \
+smtp_connection \
+connection_reject \
+sender_verify_fail \
+size_reject
# Ведение логов для отдельного сообщения
# Для уменшения нагрузки стоит отключить
#
message_logs = false
# Вести лог откланённых сообшений
#
write_rejectlog = true
# ACL списки
#
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
acl_smtp_mail = acl_check_mail
acl_smtp_mime = acl_smtp_mime
# Проверка антивирусом
#
av_scanner = clamd:/var/run/clamav/clamd.sock
# Включения
#
.include /usr/local/etc/exim/macros.conf
.include /usr/local/etc/exim/ldap.conf
#--------------------------------
# TLS |
#--------------------------------
# Определяет список хостов для которых доступна команда STARTTLS
#
tls_advertise_hosts = *
# Сертификаты
#
tls_certificate = /usr/local/etc/exim/ssl/mail.pem
tls_privatekey = /usr/local/etc/exim/ssl/mailkey.pem
# Порт для TLS
#
tls_on_connect_ports = 465
#-------------------------------
# Другие общие опции |
#-------------------------------
# Домен добавляемый к адресу, если в нёт отсутствует доменная часть
#
qualify_domain = oskol.impexbank.ru
#qualify_recipient = oskol.impexbank.ru
# Список хостов, которым разрешено отправлять сообщения без доменной части
# доменная часть добавляется из оций qualify_domain и qualify_recipient
#
sender_unqualified_hosts = 127.0.0.1
recipient_unqualified_hosts = 127.0.0.1
# Разрешать принимать почту в виде name@[192.168.0.1]
# Т.е ручная маршрутизаци почты. Используется спамерами
#
allow_domain_literals = false
# Группа и пользователь от которого работает Exim
#
exim_user = mailnull
exim_group = mail
# Юзер от которого запрещена работа доставки
#
never_users = root
# Отключить поддержку ipv6
#
disable_ipv6 = true
# Количество символов, которые сохраняются в переменной $message_body
#
message_body_visible = 200
# Отсылает 8BITMIME в ответ на EHLO
#
accept_8bitmime = true
# Кодировка заголовков
#
headers_charset=KOI8-R
# Максимально количество получателей, максимально количество команд RCPT TO
#
recipients_max = 200
recipients_max_reject = true
# Количество неправильных SMTP команд, после чего соединение разрывается
#
smtp_max_unknown_commands = 3
# Более детальные ответы на ошибки
#
smtp_return_error_details = true
# RFC1413
#
rfc1413_hosts = *
rfc1413_query_timeout = 5s
#--------------------------------------------------------
# Управление сообщениями с пометкой frozen |
#--------------------------------------------------------
# Через какой период повторять отправку сообщений с пометкой frozen
#
auto_thaw = 0s
# Отправлять уведомление отправителю, если его сообщение заморожено
#
freeze_tell = false
# Сколько хранить замороженные отлупы сообщений
timeout_frozen_after = 2d
# Определяет время через которое будет повторная отправка рикошета, если его не возможно доставить
# После попытки отправки рикошета и если она неудачна он удаляется
#
ignore_bounce_errors_after = 5h
# Время хранения сообщения в очереди чьи spool записи повреждены, если оно не может быть доставлено
# После чего удаляется и инцидент логируется
#
keep_malformed = 2d
#-------------------------------------------
# Пути к каталогам и файлам |
#-------------------------------------------
spool_directory = /var/spool/exim
split_spool_directory = false
pid_file_path = /var/run/exim.pid
#----------------------------------------------------------------
# Демон отправки уведомлений в случае ошибок доставки |
#----------------------------------------------------------------
#bounce_message_file = /usr/local/etc/exim/bounce.cf
bounce_return_body = true
bounce_return_message = true
bounce_return_size_limit = 100K
#-------------------------------------
# Управление соединениями |
#-------------------------------------
# Максимально число соединений с 1 компьютера
#
smtp_accept_max_per_host=5
# Максимальное количество одновременных соединений по smtp
#
smtp_accept_max = 50
# Резервирует соединения для указанных хостов
#
smtp_accept_reserve = 5
smtp_reserve_hosts = 10.178.1.79
#-----------------------------
# ACL |
#-----------------------------
.include /usr/local/etc/exim/acl.conf
#--------------------------------
# Обработка роутеров |
#--------------------------------
# Порядок обработки роутеров имеет значение
begin routers
.include /usr/local/etc/exim/router.conf
#--------------------------------
# ТРАНСПОРТ |
#--------------------------------
begin transports
.include /usr/local/etc/exim/transport.conf
#----------------------------------------
# Конфигурация повторов |
#----------------------------------------
begin retry
# Address or Domain Error Retries
# ----------------- ----- -------
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
#---------------------------------
# Авторизация |
#---------------------------------
begin authenticators
dovecot_login:
driver = dovecot
public_name = LOGIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
dovecot_plain:
driver = dovecot
public_name = PLAIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
|
Так как у нас в конфигурации установлен следующий параметр:
# Группа администраторов. Могут просматривать очереди сообщений.
# Просмотр очреди доступен, если опция 'queue_list_requires_admin=true'
# Доступны опции -M -q -R -S
#
admin_groups=exim_admin
|
то соответственно необходимо создать соответствующую группу exim_admin в которой будут состоять пользователи имеющие возможность выполнять административные действия связанные с опциями -M -q -R -S. Конфигурационный файл содержит достаточное количество комментариев, поэтому несложно будет разобраться.
Далее создадим файл macros.conf следующего содержания, который будет располагаться в том же каталоге, что и главный конфигурационный файл:
#---------------------------------------------
# Author: atrium (sysatrium)
# Modify: 15.10.2009
# Copyright (c) atrium (sysatrium), 17.09.2009
# Description: Macros for exim.conf
#---------------------------------------------
# Путь к внешним скриптам
#
PATH_SCRIPT=/usr/local/etc/exim
# Путь к почтовым ящикам. Владельцем должен быть пользователь
# такой же, который установлен в транспорте для доставки сообщений
#
PATH_MAILBOX=/var/mail/virtual/oskol.impexbank.ru
# Включение проверки расширений файлов вложений. Если включить данную
# опцию, то будут запрещаться определённые расширения файлов для отправки
# Для включения и выключения проверки использовать: yes/no
#
CHECK_EXTENSION_FILE=yes
# Максимальный размер сообщения для локальной сети
# Для включения и выключения проверки использовать: yes/no
#
CHECK_MESSAGE_SIZE_LAN = yes #Включить проверку на ограничение размера
MSL_LAN = 20M
# Максимальный размер сообщения для интернета
# Для включения и выключения проверки использовать: yes/no
#
CHECK_MESSAGE_SIZE_INTRANET = yes #Включить проверку на ограничение размера
MSL_INTERNET = 10M
# Ограничение количества отправленных сообщений для клиента
#
RATE_LIMIT_COUNT = 100
RATE_LIMIT_TIME = 1m
RATE_LIMIT = yes #Разрешает использовать лимиты на отправку
#---------Используются в зависимости от бэкэнда (mysql, ad, pgsql, ldap)
#---------Можно отключить, если не используются или игнорировать
#
# Содержит e-mail адреса и домены, которым запрещено отправлять почту
# После внесения изменений в файл deny_sender не забываем выполнять команду
# exim_dbmbuild deny_sender deny_sender.db
#
DENY_SENDER=/etc/exim/deny_sender.db
# Содержит e-mail адреса и домены, которым запрещено получать почту
# После внесения изменений в файл deny_recipient не забываем выполнять команду
# exim_dbmbuild deny_recipient deny_recipient.db
#
DENY_RECIPIENT=/etc/exim/deny_recipient.db
# Содержит IP адреса машин или подсети, которым запрещён доступ к отправке почты
# Посик в файле линейный, поэтому после внесения данных они сразу станут доступны
#
DENY_HOST=/etc/exim/deny_host
|
Создаём ещё один файл - ldap.conf в том же каталоге, что и главный конфигурационный файл. Этот файл будет содержать параметры подключения к LDAP (AD) и соответствующие запросы для извлечения информации.
#--------------------------------------------
# Author: atrium (sysatrium)
# Name: work witch the ldap server
# Modify: 16.09.2009
# Copyright (c) atrium (sysatrium), 16.09.2009
# Description: Connection for LDAP server
# - AD (Active Directory)
# - OL(OpenLDAP)
#---------------------------------------------
# Сервер LDAP
#
hide ldap_default_servers = 192.168.0.100
# Версия LDAP
#
hide ldap_version = 3
# Пользователь для доступа в LDAP
# Права только на чтение
#
LDAP_BIND_USER="CN=users,CN=Users,DC=oskol,DC=impexbank,DC=ru"
# Пароль для пользователя LDAP_BIND_USER
#
LDAP_BIND_PASS="users"
# Количество возвращаемых записей
#
LDAP_SIZE=100
# База в которой будет происходить поиск
#
LDAP_BASE_SEARCH=CN=Users,DC=oskol,DC=impexbank,DC=ru
# Выбрать все E-Mail
# Запрос в AD
#
AD_LDAP_MAIL_RCPT= \
user=LDAP_BIND_USER \
pass=LDAP_BIND_PASS \
ldap:///LDAP_BASE_SEARCH?mail?sub?(&(objectCLass=top)(objectClass=person) \
(objectClass=organizationalPerson)(objectClass=user) \
(mail=${quote_ldap:${local_part}@${domain}}) (badPasswordTime=*))
# Получение группового адреса
# Запрос в AD
#
AD_LDAP_MAIL_GROUP= \
user=LDAP_BIND_USER \
pass=LDAP_BIND_PASS \
ldap:///LDAP_BASE_SEARCH?mail?sub?(&(objectClass=top)(objectClass=group) \
(mail=${quote_ldap:${local_part}@${domain}}))
# Получение группововго адреса. Если отправитель группа рассылки то запрещать отправку через ACL
# Запрос в AD
#
AD_LDAP_MAIL_AUTH_GROUP= \
user=LDAP_BIND_USER \
pass=LDAP_BIND_PASS \
ldap:///LDAP_BASE_SEARCH?mail?sub?(&(objectClass=top)(objectClass=group) \
(mail=${quote_ldap:${sender_address}}))
# Получение пользователей, которым разрешено отправлять письма через сервер
# Запрос в AD
#
AD_LDAP_MAIL_AUTH_SENDER= \
user=LDAP_BIND_USER \
pass=LDAP_BIND_PASS \
ldap:///LDAP_BASE_SEARCH?mail?sub?(&(objectClass=top)(objectClass=person) \
(objectClass=organizationalPerson)(objectClass=user) \
(mail=${quote_ldap:${sender_address}}) (badPasswordTime=*))
|
Единственное, что необходимо изменить в этом файле это указать IP сервера PDC и пользователя которым будем подключаться к серверу.
Следующие два очень важных файла: транспорты, роутеры.
transport.conf
#---------------------------------------------
# Author: atrium (sysatrium)
# Modify: 06.10.2009
# Copyright (c) atrium (sysatrium), 06.10.2009
# Description: Transport for the Exim
#---------------------------------------------
# Виртуальные пользователи. Необходимо создать пользователя
# 'vmail' от имени которого будет производиться процесс доставки.
# Необходимо выставить необходимую квоту на ящик
#
virtual_user:
driver = appendfile
delivery_date_add = true
envelope_to_add = true
return_path_add = true
directory = PATH_MAILBOX/${local_part}@${domain}
user=vmail
group=mail
check_owner = true
create_directory = true
directory_mode = 0750
mode = 0600
maildir_format = true
mailbox_size = 100M
maildir_use_size_file = true
maildir_retries = 5
maildir_tag = ,S=${message_size}
allow_symlink = false
# Доставка по smtp
#
remote_smtp:
driver = smtp
command_timeout = 3m
connect_timeout = 5m
connection_max_messages = 500
data_timeout =5m
# Локальные пользователи
#
local_user:
driver = appendfile
file = /var/mail/$local_part
delivery_date_add
envelope_to_add
return_path_add
group = mail
user = $local_part
mode = 0660
mbx_format = true
no_mode_fail_narrower
notify_comsat = true
# Передача сообщений в канал
#
address_pipe:
driver = pipe
return_output
# Добавление почты в файл
#
address_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
# Транспорт автоответов
#
address_reply:
driver = autoreply
# DSPAM
#----------------------------------------------------------------------
# Сканирование на спам, если DSPAM вызывается как бинарник.
# Важное значение имеет количество подключений к MySQL и режим обучения.
#
spam_scan:
driver = pipe
command = /usr/local/bin/dspam --deliver=innocent --user "$local_part@$domain" -- %u
user = mailnull
group = mail
return_path_add = false
log_output = true
return_fail_output = true
# Внесение письма в категорию спам
#
spam:
driver = pipe
command = /usr/local/bin/dspam --user "$local_part@$domain" --class=spam --source=error
return_path_add = false
return_fail_output = false
log_output = true
home_directory = /var/db/dspam
current_directory = /var/db/dspam
user = mailnull
group = mail
# Удаление письма из категории спам
#
notspam:
driver = pipe
command = /usr/local/bin/dspam --user "notspam@$domain" --class=innocent --source=error \
--deliver=innocent %u
return_path_add = false
return_fail_output = false
log_output = true
home_directory = /var/db/dspam
current_directory = /var/db/dspam
user = mailnull
group = mail
# Добавление писем с пометкой спам в папку SPAM
#
spam_filter:
driver = appendfile
user = 1006
group = mail
create_directory = true
directory = PATH_MAILBOX/$local_part@$domain/.SPAM
maildir_format = true
delivery_date_add = false
envelope_to_add = false
return_path_add = false
check_owner = true
directory_mode = 0700
maildir_retries = 3
mode = 0600
#--------------
#-----End DSPAM
|
Порядок следования транспортов не имеет никакого значения, поэтому в этот файл Вы можете добавлять транспорт в любое место. Транспорты отвечают непосредственно за доставку писем в ящики.
router.conf
#---------------------------------------------
# Author: atrium (sysatrium)
# Modify: 29.09.2009
# Copyright (c) atrium (sysatrium), 29.09.2009
# Description: Router for Exim
#---------------------------------------------
# Сканирование на спам - DSPAM. Работает, если DSPAM вызывается
# как бинарный файл.
#
spam_scan:
driver=accept
verify = false
address_test = false
condition = "${if and {{!eq {$received_protocol}{spam-scanned}} \
{!eq {$received_protocol}{local}} }{1}{0}}"
transport = spam_scan
require_files = /usr/local/bin/dspam
local_parts = !spam : !notspam
# Внешние адреса. Если имеется шлюз, то этот транспорт
# необходимо убрать, так как все внешние адреса будут обрабатываться
# шлюзом
#
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : +my_lan
no_more
# Пометка письма как спам. Исползуется в случае, если установлен DSPAM
#
spam:
driver = accept
local_part_prefix = spam
transport = spam
address_test = false
# Отмена пометки письма как спам. Используется в случае, если установлен DSPAM
#
notspam:
driver = accept
local_part_prefix = notspam
transport = notspam
address_test = false
# Обработка локальных алиасов. Отправлять могут только пользователи домена.
#
local_aliases:
driver=redirect
condition = ${if match_domain{$sender_address_domain}{+local_domains}}
data=${lookup{$local_part}lsearch{/etc/mail/aliases}}
file_transport=address_file
pipe_transport=address_pipe
address_test = false
# Обработка виртуальных алиасов. Адреса в базе указываются через (,)
# Отправка разрешена только внутренним пользователям, т.к они авторизованы
# Если нужна рассылка на определённые группы, то лучше создайте отдельный роутер для них
#
virtual_aliases:
driver = redirect
condition = ${if match_domain{$sender_address_domain}{+local_domains}}
data = ${perl{get_mail_lists}{${lookup ldap{AD_LDAP_MAIL_GROUP}}}}
forbid_file = true
# Обработка локальных пользователей
#
local_user:
driver = accept
check_local_user = true
transport = local_user
address_test = false
# Отправка писем с пометкой SPAM в папку SPAM. Можно использовать для различных
# сканеров на спам.
#
spam_filter:
driver = accept
condition = ${if match{$h_X-DSPAM-Result:}{Spam}}
transport = spam_filter
no_more
# Обработка виртуальных пользователей
#
virtual_user:
driver = accept
condition = ${lookup ldap{AD_LDAP_MAIL_RCPT}{true}{false}}
transport = virtual_user
cannot_route_message = Relay access denied
|
Порядок следования роутеров очень важен, поэтому при добавлении нового будте внимательны.
Создадим файл ACL, который будет обеспечивать защиту от спама средствами MTA (Exim). Конфигурационный файл содержит достаточное количество комментариев для того что бы разобраться.
#---------------------------------------------------
# Author: atrium (sysatrium)
# Name: ACL for Exim
# Comment: Необходимо изменить некоторые
# ACL при изменении back-end'a (sql, ldap)
# Modify: 23.10.2009
# Copyright (c) atrium (sysatrium) 08.07.2009
#---------------------------------------------------
#------version_1.0----------------------------------
#
# В ACL необходимо добавить проверку в rbl листах (dnslists)
#-----------------------------------------------------------
# deny dnlists = rbl.example.ru
# sender_domains = !+local_domains
#-----------------------------
# ACL |
#-----------------------------
begin acl
# Ограничения применяемые после использования команды 'MAIL FROM'
#
acl_check_mail:
# Делает небольшую задержку для отправителя не из
# своей сети и не из списка релеев
#
warn set acl_m0 = 20s
warn hosts = +my_lan : +relay_from_hosts
set acl_m0 = 0s
warn delay = $acl_m0
accept
# Ограничения применяемые после ипользования команды 'RCPT TO'
#
acl_check_rcpt:
# Используется для вычисления количества получателей при отправке письма для postmaster или abuse
#
warn set acl_m1 = 1
sender_domains = !+local_domains
local_parts = postmaster : abuse
# Задаёт переменные для организации разделения размера сообщения для локальной сети
# и интернета
#
warn set acl_c0 = unlocal
warn domains=+local_domains
set acl_c0= local
# Ограничение количества посылаемых сообщений одним клиентом за период времени
# Данное ограничение действует только для внешних клиентов.
# Параметры RATE_LIMIT_COUNT и RATE_LIMIT_TIME задаются в файле macros.conf
# Для включения лимитов используется параметр RATE_LIMIT: yes/no
#
defer ratelimit = RATE_LIMIT_COUNT / RATE_LIMIT_TIME / per_mail
hosts = !+my_lan : !+relay_from_hosts
condition = ${if eq{RATE_LIMIT}{yes}}
message = "Ratelimit to send message $sender_rate_limit/$sender_rate_period \
for hosts $sender_host_address from $sender_address"
# Авторизация и TLS обязательно должна использоваться для пользователей домена
#
deny message = "Not authenticated users ${sender_address} (hosts: $sender_host_address)"
!authenticated = *
hosts = !+relay_from_hosts
senders = ${lookup ldap{AD_LDAP_MAIL_AUTH_SENDER}}
deny message = "Need use TLS (hosts: $sender_host_address}"
!encrypted = *
hosts = !+relay_from_hosts
senders = ${lookup ldap{AD_LDAP_MAIL_AUTH_SENDER}}
# При отправке от postmaster@*, abuse@* количество получателей не должно быть больше 1
# При условии, что postmaster и abuse с другого домена. Для локального postmaster
# количество получателей не ограниченно, так как при отправке от его имени
# требуется авторизация. Подсчёт начинается с 0.
#
deny message = "Message from $sender_address are never sent to more than \
one recipient (host: $sender_host_address)"
sender_domains = !+local_domains
senders = postmaster@* : abuse@*
condition = ${if >{$recipients_count}{0}}
# Запрет приёма сообщения с <> отправителем, если количество получателей больше 1
# Спамеры довольно часто используют <> адрес отправителя, а по RFC MTA
# должен принимать письма с пустым <>. Подсчёт начинается с 0.
#
deny message = "Message from <$sender_address> are never sent to more that \
one recipient (host: $sender_host_address)"
senders = :
condition = ${if >{$recipients_count}{0}}
# Ограничение на приём сообщений для postmaster и abuse.
# Если получателей больше 1, то сообщение блокируется.
#
deny message = "Message from <$sender_address> to <postmaster or abuse> are never \
contain to more that on recipient (host: $sender_host_address)"
sender_domains = !+local_domains
condition = ${if >{${eval: ($acl_m1+$recipients_count)-1}}{0}}
# Обработка приветствия HELO/EHLO. Избавляет MTA от ненужных запросов к DNS
#
deny message = "HELO/EHLO command must be in accordance with (See RFC2821)"
hosts = !+relay_from_hosts : !+my_lan : *
condition = ${if eq{$sender_helo_name}{}{true}{false}}
deny message = "HELO/EHLO IP $interface_address access denied"
hosts = !+relay_from_hosts : !+my_lan : *
condition = ${if match{$sender_helo_name}{\N^\[?\N$interface_address\N\]?$\N}{true}{false}}
deny message = "HELO/EHLO hostname $primary_hostname access denied (See RFC2821)"
hosts = !+relay_from_hosts : !+my_lan : *
condition = ${if eq{$sender_helo_name}{$primary_hostname}{true}{false}}
deny message = "HELO/EHLO domain $sender_helo_name access denied"
hosts = !+relay_from_hosts : !+my_lan : *
condition = ${if match_domain{$sender_helo_name}{+local_domains}{true}{false}}
deny message = "HELO/EHLO format ip address access denied (See RFC2821)"
hosts = !+relay_from_hosts : !+my_lan : *
condition = ${if isip{$sender_helo_name}}
deny message = "HELO/EHLO format access denied (See RFC2821)"
hosts = !+relay_from_hosts : !+my_lan : *
condition = ${if match{$sender_helo_name}{\N\.\N}{no}{yes}}
deny message = "HELO/EHLO format access denied (See RFC2821)"
hosts = !+relay_from_hosts: !+my_lan : *
condition = ${if match{$sender_helo_name}{\N\.$\N}{yes}{no}}
deny message = "HELO/EHLO format access denied (See RFC2821)"
hosts = !+relay_from_hosts : !+my_lan : *
condition = ${if match{$sender_helo_name}{\N\.\.\N}{true}{false}}
# Запрет использования IP адреса в local_part отправителя
#
deny message = "Not use IP in name senders"
condition = ${if match{$sender_address}{\N\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} \
\@\N$sender_address_domain\N\N}{true}{false}}
# Запрет отправления от самого себя и самому себе
#
deny message = "${sender_address}=${local_part}@${domain} (host: $sender_host_address)"
hosts = !127.0.0.1
condition = ${if eq{${sender_address}}{$local_part@$domain}{true}{false}}
# Запрещать определённые символы в локльной части адреса (т.е имя)
#
deny message = Restricted characters in address
domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]
deny message = Restricted characters in address
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
# Чёрные списки, блокируют отправителей, получателей, домены, IP, сети
# Раскомментировать
#
deny message = "Hosts ${sender_host_address} access denied" # IP отправителя
hosts = ${lookup{$sender_host_address}iplsearch{DENY_HOST}}
deny message = "Sender ${sender_address} access denied" # Адрес отправителя
hosts = *
senders = ${lookup{$sender_address}dbm{DENY_SENDER}}
deny message = "Domain ${sender_address_domain} access denied" # Домен отправителя
hosts = *
sender_domains = ${lookup{$sender_address_domain}dbm{DENY_SENDER}}
deny message = "Access denied recipients ${local_part}@${domain}" # Адрес получателя
hosts = *
recipients =${lookup{$local_part@$domain}dbm{DENY_RECIPIENT}}
deny message = "Access denied recipient domain ${domain}" # Домен получателя
hosts = *
domains = ${lookup{$domain}dbm{DENY_RECIPIENT}}
# Проверка HELO/EHLO
#
deny message = "HELO/EHLO are with RFC2821"
hosts = !+my_lan : !+relay_from_hosts
!verify = helo
# Проверка получателя
#
require verify = recipient
# Проверка отправителя с помощью обратного вызова
# Раскоментировать
#
# deny message = "Not sender $sender_address (host: $sender_host_address)"
# sender_domains = !+local_domains
# !verify = sender/callout=40s
# Блокировка получателей, которых нет в базе пользователей.
# Если письмо предназначено для получателя домена
#
deny !recipients= ${lookup ldap{AD_LDAP_MAIL_RCPT}} : ${lookup ldap{AD_LDAP_MAIL_GROUP}} : \
spam@oskol.impexbank.ru : notspam@oskol.impexbank.ru
hosts = !127.0.0.1
domains = +local_domains
message= "Not found recipient $local_part@$domain (host: $sender_host_address)"
# Блокировка хостов, которые пытаются отправить почту от адреса группы рассылки нашего домена
#
deny message = "Access denied sender address <$sender_address> (host: $sender_host_address)"
senders = ${lookup ldap{AD_LDAP_MAIL_AUTH_GROUP}}
# Запрет посылки письма на группы рассылки из вне. Рассылка разрешена только
# пользователям домена.
#
deny message = "Mailing an the address <$local_part@$domain> access denied"
sender_domains = !+local_domains
recipients = ${lookup ldap{AD_LDAP_MAIL_GROUP}}
# Защита от открытого релея
#
accept hosts = +relay_from_hosts
control = submission
accept authenticated = *
control = submission
require message = relay not permitted
domains = +local_domains
accept
# Ограничения на команду 'DATA'
#
acl_check_data:
# Ограничение размера сообщения для локальной сети. Размер сообщения задаётся
# макросом 'MSL_LAN' в файле macros.conf. Для того чтобы работал данный запрет
# необходимо в файле macros.conf значение
# CHECK_MESSAGE_SIZE_LAN выставить в 'yes'
#
deny message = "Size message limit for lan MSL_LAN"
condition = ${if and { \
{ \
eq{CHECK_MESSAGE_SIZE_LAN}{yes} \
} \
{ \
eq{$acl_c0}{local} \
} \
{ \
>{$message_size}{MSL_LAN} \
} \
}}
# Ограничения размера сообщения для интернета. Размер сообщения задаётся
# макросом 'MSL_INTERNET' в файле macros.conf.
# Для того чтобы работал данный запрет
# в файле macros.conf значение
#CHECK_MESSAGE_SIZE_INTRANET выставить в 'yes'
#
deny message = "Size message limit for internet MSL_INTERNET"
condition = ${if and { \
{ \
eq{CHECK_MESSAGE_SIZE_INTRANET}{yes} \
} \
{ \
eq{$acl_c0}{unlocal} \
} \
{ \
>{$message_size}{MSL_INTERNET} \
} \
}}
# Проверка сиснтаксиcа заголовков в отправляемом сообщении
#
deny message = "Incorrect syntax header in message"
sender_domains = !+local_domains
!verify = header_syntax
# Запрет сообщений содержищих вирус. Если возникнут проблемы с антивирусом,
# то доставка будет произведена.
#
deny demime = *
malware = */defer_ok
hosts = !+relay_from_hosts : *
message = This message contains a virus ($malware_name).
# Включение в сообщения заголовка о том, что письмо проверено антивирусом
# и спам фильтром
#
warn add_header = X-Virus-Scaned: ClamAV
accept
acl_smtp_mime:
# Запрет отправки определённого типа файлов.
# Все расширения можно хранить в базе
# и извлекать соответствующим запросом. Первое ACL извлекает расширение файла,
# которое сравнивается с набором расширений извлечённых из базы данных,
# файла или перечисленных в условии. Второе ACL используется,
# если вдруг пользователь
# переименовал файл и добавил к существующему
# расширению новое например: 'test.exe.doc'
# это ACL будет извлекать второе расширение.
# Для включения данной ACL используется
# опция CHECK_EXTENSION_FILE, если 'yes' - проверять,
# если 'no' - то не проверять.
#
warn hosts = !+relay_from_hosts : *
condition = ${if eq{CHECK_EXTENSION_FILE}{yes}}
set acl_m0 = ${extract{-1}{.}{${lc:$mime_filename}}}
warn hosts = !+relay_from_hosts : *
condition = ${if eq{CHECK_EXTENSION_FILE}{yes}}
set acl_m1 = ${extract{-2}{.}{${lc:$mime_filename}}}
# Запрет отправки файлов с определёнными расширениями файлов
#
deny message = "Access denied extension - [$acl_m0] file (phase: 1)"
condition = ${if eq{$acl_m0}{exe}}
deny message = "Access denied extension - [$acl_m0] file (phase: 2)"
condition = ${if eq{$acl_m1}{exe}}
accept
|
размещено: 2009-06-19,
последнее обновление: 2010-11-17,
автор: atrium
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
|
Комментарии пользователей [13 шт.]