CentOS 6.6, exim 4.80.1-49. Есть чёрный список хостов (/etc/exim/exim4.blacklist.hosts) и чёрный список адресов(/etc/exim/blackMAIL). Точно не работает чёрный список хостов. В чём может быть дело? Адреса вроде бы блокируются, но всё равно прошу проверить взглядом со стороны. Конфиг exim'а с комментариями:
#######################
#MAIN CONFIGURATION SETTINGS#
#######################
# Основное имя хоста
primary_hostname = мойдомен.ru
# Параметры подключения к БД в формате "хост/имя_базы/пользователь/пароль"
hide mysql_servers = localhost/vmail/vmail/vmail
# Список локальных доменов
domainlist local_domains = ${lookup mysql{SELECT `domain` \
FROM `domain` WHERE \
`domain`='${quote_mysql:$domain}' AND \
`active`='1'}}
# Список доменов/хостов, для которых хост является входящим релеем
domainlist relay_to_domains = ${lookup mysql{SELECT `domain` \
FROM `domain` WHERE \
`domain`='${quote_mysql:$domain}' AND \
`active`='1'}}
hostlist relay_from_hosts = localhost:127.0.0.0/8:192.168.1.0/24:192.168.0.0/24:10.8.200.0/24 #add the hosts from which you allow relaying here
# Включаем ограничения - будут объявлены ниже, в секции ACL
acl_not_smtp = acl_not_smtp
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
acl_smtp_mime = acl_check_mime
#acl_smtp_mail = acl_check_mail
# Пусть к сокету clamd - clamd уже установлен и настроен
av_scanner = clamd:/var/run/clamav/clamd.socket
spamd_address = 127.0.0.1 783
# Имя домена, добавляемое ко всем адресам, идущим без "@" и имени домена. Например, для системных пользователей.
qualify_domain = мойдомен.ru
qualify_recipient = мойдомен.ru
# Запрещаем принимать почту с адресов типа user@[10.11.12.13]
allow_domain_literals = false
# Пользователь и группа, от которой работает Exim
exim_user = exim
exim_group = exim
never_users = root
# Эта опция заставляет делать обратный DNS-запрос для каждого входящего IP-адреса. Могут быть проблемы с некоторыми почтовыми серверами.
# host_lookup = *
rfc1413_query_timeout = 0s
sender_unqualified_hosts = +relay_from_hosts
recipient_unqualified_hosts = +relay_from_hosts
# На сколько задерживаем сообщение о доставке, если его не удалось доставить
ignore_bounce_errors_after = 12h
# Сколько хранить "замороженные" сообщения
timeout_frozen_after = 3d
# Почта с этих хостов/доменов будет приниматься несмотря на ошибки в HELO/EHLO
helo_accept_junk_hosts = 192.168.1.0/24 : 127.0.0.1/8 : 192.168.0.0/24 : 10.100.0.0/24 : 10.8.200.0/24
# Через какое время повторять отправку "замороженных" сообщений
auto_thaw = 1h
smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"
# Максимальное число одновременных соединений
smtp_accept_max = 50
# Максимальное число сообщений, принимаемых за одну tcp-сессию
smtp_accept_max_per_connection = 25
smtp_connect_backlog = 30
# Максимальное число соединений с одного хоста/домена
smtp_accept_max_per_host = 20
smtp_receive_timeout = 10m
split_spool_directory = true
# Максимальное число параллельных процессов доставки
remote_max_parallel = 15
# Ограничение на размер части письма, вкладываемого в сообщение об ошибке
return_size_limit = 70k
# Максимальный размер сообщения
message_size_limit = 64M
helo_allow_chars = _
smtp_enforce_sync = true
daemon_smtp_ports = 25 : 465
tls_on_connect_ports = 465
# Разрешаем всем клиентам использовать TLS
tls_advertise_hosts = *
# Пути к TLS-сертификату и приватному ключу
tls_verify_certificates = /etc/ssl/cetrs/ca-bundle.crt
tls_certificate = /etc/ssl/certs/mail.pem
tls_privatekey = /etc/ssl/certs/mail.key
log_selector = \
+all_parents \
+connection_reject \
+incoming_interface \
+lost_incoming_connection \
+received_sender \
+received_recipients \
+smtp_confirmation \
+smtp_syntax_error \
+smtp_protocol_error \
-queue_run
syslog_timestamp = no
system_filter = /etc/exim/systemfilter
system_filter_directory_transport = local_copy_outgoing
#######################################
# ACL CONFIGURATION
# Specifies access control lists for incoming SMTP mail
#######################################
begin acl
acl_not_smtp:
deny message = Sender rate overlimit - $sender_rate / $sender_rate_period
ratelimit = 50 / 1h / strict
accept
####################################Проверка вложений zip-rar##########################
acl_check_mime:
deny message = Dannoy soobschenie soderjit opasnoe vlojenie
condition = ${if match{$mime_filename}{\N(?i)\.zip$\N}}
decode = default
condition = ${if match{${run{/usr/bin/unzip -l $mime_decoded_filename}}}{\N(?i)\.(exe|com|vbs|bat|pif|scr|hta|js|cmd|chm|cpl|jsp|reg|vbe|lnk|dll|sys)\n\N}}
log_message = forbidden attachment: filename=$mime_filename, content-type=$mime_content_type, recipients=$recipients
deny message = Dannoy soobschenie soderjit opasnoe vlojenie
condition = ${if match{$mime_filename}{\N(?i)\.rar$\N}}
decode = default
condition = ${if match{${run{/usr/bin/unrar lb $mime_decoded_filename}}}{\N(?i)\.(exe|com|vbs|bat|pif|scr|hta|js|cmd|chm|cpl|jsp|reg|vbe|lnk|dll|sys)\n\N}}
log_message = forbidden attachment: filename=$mime_filename, content-type=$mime_content_type, recipients=$recipients
accept
####################################Проверка вложений zip-rar##########################
acl_check_rcpt:
deny message = "Lookup failed"
####################################OpenVPN Исключение#################################
!hosts = 10.8.200.0/24
####################################OpenVPN Исключение#################################
condition = ${if eq{$host_lookup_failed}{1}}
# deny sender_domains = !+local_domains
# ratelimit = 5/1h/leaky/$authenticated_id
# message = Bite my shiny metal shaper!
# Разрешаем сообщения с локалхоста не по TCP/IP
accept hosts = :
# Запрещаю хосты из чёрного списка
deny hosts = /etc/exim/exim4.blacklist.hosts
message = blackhost
log_message = blackhost $hostname
# Запрещаем использование нестандартных символов в адресах локальных получателей
deny message = "incorrect symbol in address"
domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]
# Запрещаем использование нестандартных символов в адресах удаленных получателей
deny message = "incorrect symbol in address"
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
# Разрешаем почту на postmaster без проверок
accept local_parts = postmaster
domains = +local_domains
######################!!!!######################### Включаем проверку отправителя########################################
#require verify = sender
# Запрещаем соединения с теми, кто не предоставляет приветствие по RFC -HELO/EHLO
deny message = "HELO/EHLO required by SMTP RFC"
condition = ${if eq{$sender_helo_name}{}{yes}{no}}
# Разрешаем аутентифицированные соединения
accept authenticated = *
# Запрещаем соединения с теми, кто подставляет в приветствие IP-адрес вместо имени
deny message = "Your IP in HELO - access denied!"
hosts = * : !+relay_from_hosts
condition = ${if eq{$sender_helo_name}\
{$sender_host_address}{true}{false}}
# Запрещаем соединения с теми, кто подставляет IP-адрес нашего сервера в приветствии
deny condition = ${if eq{$sender_helo_name}\
{$interface_address}{yes}{no}}
hosts = !127.0.0.1 : !localhost : *
message = "My IP in your HELO! Access denied!"
# Запрещаем соединения с теми, у кого в приветствии только цифры
deny condition = ${if match{$sender_helo_name}\
{\N^\d+$\N}{yes}{no}}
hosts = !127.0.0.1 : !localhost : *
message = "There is only numbers in HELO!"
# Запрещаю e-mail адреса из чёрного списка
deny senders = wildlsearch;/etc/exim/blackMAIL
message = "Ваш адрес: $sender_address в черном списке"
logwrite = Rejected from $sender_address to $local_part@$domain by blacklist.
# Запрещаем соединения с теми, у кого в имени хоста присутствуют adsl, dialup и т.д
deny message = "your hostname is bad (adsl, poll, ppp & etc)."
condition = ${if match{$sender_host_name} \
{adsl|dialup|pool|peer|dhcp} \
{yes}{no}}
# Задержка установления соединения. Как один из методов борьбы со спамом.
warn
set acl_m0 = 30s
# Убираем задержку для "своих" доменов/хостов
warn
hosts = +relay_from_hosts:192.168.0.0/24:192.168.1.0/24 #disable waits for 'friendly' hosts
set acl_m0 = 0s
warn
.include_if_exists /etc/exim/whitelistForDelay #БЕЛЫЙ СПИСОК для отключения DELAY
set acl_m0 = 0s
warn
logwrite = Delay $acl_m0 for $sender_host_name \
[$sender_host_address] with HELO=$sender_helo_name. Mail \
from $sender_address to $local_part@$domain.
delay = $acl_m0
# Проверка на существование пользователей в локальных доменах
accept domains = +local_domains
endpass
message = "No such user"
verify = recipient
# Проверка на существование пользователей в релейных доменах
accept domains = +relay_to_domains
endpass
message = "i don't know how to relay to this address"
verify = recipient
# Если не подошло ни под одно правило - скорее всего ищут открытый релей
# deny message = "you in blacklist - $dnslist_domain \n $dnslist_text"
dnslists = bl.spamcop.net : \
cbl.abuseat.org
#bl.csma.biz
accept hosts = +relay_from_hosts
deny message = "Homo hominus lupus est"
####################################OpenVPN Исключение#################################
!hosts = 10.8.200.0/24
accept hosts = 10.8.200.0/24
####################################OpenVPN Исключение#################################
acl_check_data:
####################################АНТИВИРУС##########################################
# Запрещаем сообщения содержащие вирусы
deny malware = *
message = "В вашем сообщение обнаружен вирус: $malware_name"
log_message = Malware found: $malware_name
demime = *
####################################АНТИВИРУС##########################################
####################################ЗАПРЕТЫ############################################
# if needed - add spam filtering here
deny condition = ${if eq{$h_Subject:}{}{yes}{no}}
message = Сервер не отправляет и не принимает письма с пустым полем "Тема"
deny message = Ошибка вложенных файлов ($demime_reason)
demime = *
condition = ${if >{$demime_errorlevel}{2}{1}{0}}
deny message = Сервер не отправляет и не принимает пустые письма
log_message = NUL characters!
condition = ${if >{$body_zerocount}{0}{1}{0}}
deny message = Запрещенные вложения .$found_extension файл в списке(blacklisted).
demime = com:vbs:bat:pif:scr:exe:js:cmd:reg:hta:chm:cpl:jsp:vbe:lnk:dll:sys
####################################ЗАПРЕТЫ############################################
####################################СПАМ ФИЛЬТРЫ#######################################
#Метки спам проверок
warn message = X-SA-Score: $spam_score ($spam_bar)
spam = nobody:true
#Метки спам проверок
warn message = X-SA-Status: Yes
spam = nobody:true
condition = ${if >{$spam_score_int}{70}{1}{0}}
#Метки спам проверок
warn message = X-SA-Report: $spam_report
spam = nobody:true
condition = ${if >{$spam_score_int}{0}{1}{0}}
#Метки спам проверок
warn message = Subject: ***SPAM*** $h_Subject:
hosts = !+relay_from_hosts
spam = nobody
log_message = Subject: ***SPAM*** $h_Subject:
#Не отправлять письма из локалки с высоким СПАМ балом
deny message = Это сообщение будет расценено как СПАМ другим сервером, т.к. сообщение набрало $spam_score СПАМ балов. Удалите рекламную инфорацию из письма
hosts = +relay_from_hosts
spam = nobody:true
condition = ${if >{$spam_score_int}{40}{true}{false}}
log_message = Это сообщение набрало $spam_score СПАМ балов.
#Не принимать письма с высоким СПАМ балом
deny message = Это сообщение набрало $spam_score СПАМ балов.
spam = nobody:true
condition = ${if >{$spam_score_int}{100}{true}{false}}
log_message = Это сообщение набрало $spam_score СПАМ балов.
accept set acl_m1 = $spam_score_int
#acl_check_mail:
####################################СПАМ ФИЛЬТРЫ#######################################
#########################
# ROUTERS CONFIGURATION
# 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
# Поиск маршрута к хосту в DNS
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 mysql{SELECT `goto` FROM `alias` WHERE \
`address`='${quote_mysql:$local_part@$domain}' OR \
`address`='${quote_mysql:@$domain}'}}
dovecot_user:
driver = accept
condition = ${lookup mysql{SELECT `goto` FROM \
`alias` WHERE \
`address`='${quote_mysql:$local_part@$domain}' OR \
`address`='${quote_mysql:@$domain}'}{yes}{no}}
transport = dovecot_delivery
##############################
# TRANSPORTS CONFIGURATION
##############################
# ORDER DOES NOT MATTER
# Only one appropriate transport is called for each delivery.
#######################################
begin transports
# Включаем доставку по SMTP на удаленные хосты
remote_smtp:
driver = smtp
# interface = 4.3.2.1 #your public ip address, if it's the main server ip - you could skip this parameter. if it's an alias- it must be specified in clear
# Доставка до локальных получателей
dovecot_delivery:
driver = pipe
command = /usr/libexec/dovecot/deliver -d $local_part@$domain
message_prefix =
message_suffix =
delivery_date_add
envelope_to_add
return_path_add
shadow_transport = local_copy_incoming
shadow_condition = ${if eq {$domain}{мойдомен.ru}{yes}{no}}
log_output
user = exim
address_pipe:
driver = pipe
return_output
address_reply:
driver = autoreply
local_copy_incoming:
driver = appendfile
directory = /var/vmail/мойдомен.ru/float_copy@мойдомен.ru/.${tr {$local_part}{.}{_}}@${tr {$domain}{.}{_}}.inbox/
delivery_date_add
envelope_to_add
return_path_add
group = exim
user = exim
mode = 0660
maildir_format = true
create_directory = true
local_copy_outgoing:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
group = exim
user = exim
mode = 0660
maildir_format = true
create_directory = true
###########################
# Когда делать очередную попытку отправки недоставленных писем
###########################
begin retry
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
############################
# REWRITE CONFIGURATION
############################
begin rewrite
################################
# AUTHENTICATION CONFIGURATION
################################
begin authenticators
# Описание типа аутентификации plain
auth_plain:
driver = dovecot
public_name = PLAIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
auth_login:
driver = dovecot
public_name = LOGIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
auth_cram_md5:
driver = dovecot
public_name = CRAM-MD5
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
З.Ы. Спойлер не смог влепить...