Цитата: Выложите пожалуйста кому не жалко рабочие конфигурации Exim, который работает в связке с MySQL...
Хочется сравнить, посмотреть... А то много недоделок в конфигурации от Ginger...
за основу взял конфиг от Вомбата. обнавленный от Джинджер я пока не ставил - не разобрался с ним
[more]
########################28.11.2006####################################
# Runtime configuration file for Exim #
######################################################################
######################################################################
# MAIN CONFIGURATION SETTINGS #
######################################################################
#имя нашего хоста
primary_hostname =
#данные для подключения к MySQL серваку
hide mysql_servers = localhost/exim/sqlmail/my_pass
#Список локальных и виртуальных доменов
domainlist local_domains = @ : @[] : localhost : \
${lookup mysql{SELECT domain FROM domains \
WHERE domain='${domain}' AND \
(type='LOCAL' OR type='VIRTUAL')}}
#Список доменов, для которых разрешено принимать почту
domainlist relay_to_domains = ${lookup mysql{SELECT domain FROM domains \
WHERE domain='${domain}' AND type='RELAY'}}
#Список доменов, с которых разрешено принимать почту
hostlist relay_from_hosts = 127.0.0.1 : 192.168.0.0/24
auth_advertise_hosts = *
daemon_smtp_ports = 25 : 465
tls_on_connect_ports = 465
tls_advertise_hosts = *
tls_certificate = /etc/ssl/certs/mail.pem
tls_privatekey = /etc/ssl/certs/mail.pem
#Что будем протоколировать в лог
log_selector = \
+address_rewrite \
+all_parents \
+arguments \
+connection_reject \
+delay_delivery \
+delivery_size \
+dnslist_defer \
+incoming_interface \
+incoming_port \
+lost_incoming_connection \
+queue_run \
+received_sender \
+received_recipients \
+sender_on_delivery \
+size_reject \
+skip_delivery \
+smtp_confirmation \
+smtp_syntax_error \
+smtp_protocol_error \
+subject \
+tls_cipher \
+tls_peerdn \
-queue_run
#вызов правил доступа при проверке адреса получателя
acl_smtp_rcpt = acl_check_rcpt
#вызов правил проверки писем
acl_smtp_mime = acl_check_mime
acl_smtp_data = acl_check_virus
#прикручиваем антивирус
av_scanner = clamd:/var/run/clamav/clamd.sock
#имя домена, добавляемое для локальных отправителей
#т.е. user@имя_домена
qualify_domain = мой домен
#не принимать почту вида user@111.111.111.111
allow_domain_literals = false
#список пользователей, которым запрещено получать почту
#для доставки им почты используется база aliases
never_users = root:daemon:bin:sync:named
#преобразование всех IP-адресов, содержащихся в заголовках почты, в имена хостов.
#снижает производительность. при сильной нагрузке - заремить
host_lookup = *
#повышают производительность сервера за счет запрета идентификационных
#соединений, описанных в RFC 1413
rfc1413_hosts = *
rfc1413_query_timeout = 0s
#if пиьмо было недоставлено, генерируется сообщение об ошибке. if оно не доставлено,
#то оно замараживается на указаный срок. потом еще попытка. при неудаче - удаляется.
ignore_bounce_errors_after = 30m
#замароженные сообщения, находящиеся в очереди больше указанного времени удаляются
#и генерируется сообщение об ошибке(если это не недост. сообщ. об ошибке)
timeout_frozen_after = 3d
#кому слать сообщения о замороженных письмах
freeze_tell = postmaster
#максимальный допустимый размер обрабатываемых сообщений
message_size_limit = 10M
#максимальное число обрабатываемых подключений к SMTP-серверу
smtp_accept_max = 50
#максимальное число сообщений, принимаемое за одно соединение от одного
#пользователя или удаленного сервера.
smtp_accept_max_per_connection = 35
#максимальное число коннектов с одного хоста
smtp_accept_max_per_host = 2
#для увеличения производительности директория 'spool' внутри разделяется на директории
split_spool_directory = true
#если у сообщения много адресатов, то запускается до указанного числа
#паралельных процессов доставки
remote_max_parallel = 15
#содержание сообщения, получаемое удаленной системой при установке соединения
#с SMTP-сервером
smtp_banner = "Welcome on our mail server!\n\
This system does not accept Unsolicited \
Commercial Email\nand will blacklist \
offenders via our spam processor.\nHave a \
nice day!\n\n${primary_hostname} ESMTP Exim"
######################################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
######################################################################
begin acl
#эти правила срабатывают для каждого получателя
acl_check_rcpt:
#принимать сообщения с локалхоста
accept hosts = :
#запрещаем письма, содержащие в локальной части @, %, !, \, |
#проверяются локальные домены
deny message = "incorrect symbol in address"
domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]
#тоже самое для нелокальных доменов
deny message = "incorrect symbol in address"
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
#принимаем почту для постмастеров локальных доменов без проверки отправителя
accept local_parts = postmaster
domains = +local_domains
#запрещаем принимать почту, если адрес не определен
require verify = sender
#запрещаем тех, кто обменивается приветственными сообщениями (HELO/EHLO)
deny message = HELO/EHLO required by SMTP RFC
condition = ${if eq{$sender_helo_name}{}{yes}{no}}
#принимаем сообщения от тех, кто аутентифицировался
accept authenticated = *
#запрещаем хосты типа *adsl*, *pool* и т.п. Нормальные люди с таких не пишут
#если будут проблемы убираем проблемный пункт (например dialup)
deny message = Go Away! You are spammer.
condition = ${if match{$sender_host_name} \
{bezeqint\\.net|net\\.il|dialup|dsl|pool|peer|dhcp} \
{yes}{no}}
#запрещаем тех, кто в блэк-литсах. Серваки перебираются сверху вниз. если не
#найден в списках - то пропускается
# deny message = rejected because \
# $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text
# log_message = found in $dnslist_domain
# dnslists = relays.ordb.org : dnsbl.njabl.org : \
# ipwhois.rfc-ignorant.org : dialups.mail-abuse.org : \
# list.dsbl.org : bl.spamcop.net : dnsbl.void.ru
#разрешает прием сообщений только для локального хоста если получатель существует
accept domains = +local_domains
endpass
message = "unknown user in my mailserver"
verify = recipient
#проверяем получателя в релейных доменах
accept domains = +relay_to_domains
endpass
message = "unrouteable address in relay host"
verify = recipient
#разрешаем почту от доменов в списке relay_from_hosts
accept hosts = +relay_from_hosts
#принимаем сообщения от тех, кто аутентифицировался
# accept authenticated = *
deny message = "Spamer go to home!!!"
acl_check_mime:
warn decode = default
deny message = Blacklisted file extension detected ($mime_filename)
condition = ${if match \
{${lc:$mime_filename}} \
{\N(\.exe|\.pif|\.bat|\.scr|\.lnk|\.com|\.vbs|\.cpl)$\N} \
{1}{0}}
deny message = Sorry, noone speaks chinese here
condition = ${if eq{$mime_charset}{gb2312}{1}{0}}
accept
acl_check_virus:
#Проверяем письмо на вирусы
deny message = "In e-mail found VIRUS - $malware_name"
malware = *
accept
######################################################################
# 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. Если маршрут не найден в DNS - то это
#"unroteable address". Локальные домены, 0.0.0.0 и 127.0.0.0/8 не проверяются
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 recipients FROM aliases \
WHERE local_part='${local_part}' AND domain='${domain}'}}
#смотрим форвардинг
userforward:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT recipients FROM userforward \
WHERE local_part='${local_part}' AND domain='${domain}'}}
#локальная доставка
virtual_localuser:
driver = accept
domains = ${lookup mysql{SELECT domain from domains WHERE domain='${domain}'}}
local_parts = ${lookup mysql{SELECT id from users \
WHERE id='${local_part}' AND mbox_host='${domain}'}}
transport = local_delivery
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
# ORDER DOES NOT MATTER #
# Only one appropriate transport is called for each delivery. #
######################################################################
#доставка почты
begin transports
#Доставка на удаленные хосты по SMTP
remote_smtp:
driver = smtp
#локальная доставка
local_delivery:
driver = appendfile
check_string = ""
create_directory
delivery_date_add
directory = ${lookup mysql{SELECT CONCAT(home, "/Maildir") FROM users \
WHERE id='${local_part}' AND mbox_host='${domain}'}}
directory_mode = 770
envelope_to_add
headers_remove = "Lines"
headers_add = "Lines: $body_linecount\n"
group = mail
maildir_format
maildir_tag = ,S=$message_size
message_prefix = ""
message_suffix = ""
mode = 0660
no_mode_fail_narrower
quota = ${lookup mysql{SELECT quota FROM users \
WHERE id='${local_part}' AND mbox_host='${domain}'}{${value}M}}
quota_size_regex = S=(\d+)$
quota_warn_threshold = 75%
quota_warn_message = "\
To: $local_part@domain\n\
From: postmaster@domain\n\
# Subject: Your maildir is going full\n\
Subject: Ваш почтовый ящик переполнен\n\
Это сообщение автоматически сгенерировано Вашим почтовым сервером.\n\
Сообщаем, что Ваш ящик заполнен на 75%! Необходимо принять почту!\n\
Иначе Вы не сможете получать новые письма!\n"
return_path_add
#доставка в pipe
address_pipe:
driver = pipe
log_defer_output
log_fail_output
path = "/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin/:/usr/bin:/bin"
return_output
user = mail
group = mail
headers_remove = "Lines"
headers_add = "Lines: $body_linecount\n"
#доставка прямо в файл
address_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
#транспорт для автоответов
address_reply:
driver = autoreply
######################################################################
# RETRY CONFIGURATION #
######################################################################
#повтор недоставленный писем
begin retry
* quota
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
######################################################################
# REWRITE CONFIGURATION #
######################################################################
begin rewrite
######################################################################
# AUTHENTICATION CONFIGURATION #
######################################################################
#секция авторизации
begin authenticators
#для Нетскапе
auth_plain:
driver = plaintext
public_name = PLAIN
server_condition = ${lookup mysql{SELECT id FROM users \
WHERE id = '${quote_mysql:${local_part:$2}}' \
AND mbox_host = '${quote_mysql:${domain:$2}}' \
AND passwd = '${quote_mysql:$3}' \
AND active = 'Y'}{yes}{no}}
server_prompts = :
server_set_id = $2
#для Оутглюка
auth_login:
driver = plaintext
public_name = LOGIN
server_condition = ${lookup mysql{SELECT id FROM users \
WHERE id = '${quote_mysql:${local_part:$1}}' \
AND mbox_host = '${quote_mysql:${domain:$1}}' \
AND passwd = '${quote_mysql:$2}' \
AND active = 'Y'}{yes}{no}}
server_prompts = Username:: : Password::
server_set_id = $1
#для Летучей Мыши
auth_cram_md5:
driver = cram_md5
public_name = CRAM-MD5
server_secret = ${lookup mysql{SELECT passwd FROM users \
WHERE id = '${quote_mysql:${local_part:$1}}' \
#если отремить ниже то не работает аунтефикация как я писал(пока не поборол)
# AND mbox_host = '${quote_mysql:${domain:$1}}' \
AND active = 'Y'}{$value}fail}
server_set_id = $1
# End of Exim configuration file
[/more]