Сразу оговорюсь опыта в настройке и использования почтовых серверов не очень много потому прежде всего хотелось бы получить советы по оптимизации. Статей по настройке связки Exim+dovecot+mysql+postfixadmin+... в интернете очень много потому, чтобы не дублировать информацию, приведу только свои конфиги и ссылки на статьи. Конфиг собирал по материалу из статей.
ОС SLES 11. Установлен Exim, mysql, dovecot, clamav, postfixadmin По ниже приведенному конфигу:
1) данные о пользователях хранятся в mysql
2) как IMAP- и POP3-сервер используется dovecot
3) антиспам настроен средствами exim
4) для отправки писем используется open relay smtp сервер провайдера (т.к. пров не прописал ptr запись)
5) для перенаправления почты с одних ящиков на другие и как групповые аккаунты используются алиасы
6) для управления доменами и виртуальными почтовыми аккаунтами используется postfixadmin
Вопрос: чего не хватает, что нужно было бы добавить? Сервер пока не введен в действие, потому хотелось бы нормально настроить, особенно антиспам.
/etc/exim/main.conf
# Полное имя сервера.
primary_hostname = linux1.domain.in.ua # Данные для подключения к MySQL серверу.
hide mysql_servers = 127.0.0.1/postfix/postfix/mypass
# Cписок локальных доменов.
domainlist local_domains = domain.in.ua
# список хостов с которых разрешён релей.
hostlist relay_from_hosts = localhost : 127.0.0.0/8 : 192.168.0.0/16
# Cписки контроля доступа - ACLs
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
acl_smtp_mail = acl_smtp_mail
acl_smtp_mime = check_mime
# Интерфейс к сканеру вирусов
av_scanner = clamd:/var/lib/clamav/clamd-socket
#spamd_address = 127.0.0.1 783
# Имя домена котрое будет добавляться для локальных отправителей, локальных получателей.
qualify_domain = domain.in.ua
qualify_recipient = domain.in.ua
# Никакая доставка не должна осуществляться от имени пользователя “root”..
never_users = root
#--host_lookup = *
#--sender_unqualified_hosts = +relay_from_hosts
#--freeze_tell = postmaster@domain.in.ua
# Делать вызовы “ident” для всех входящих SMTP подключений.
rfc1413_hosts = *
rfc1413_query_timeout = 5s
# Период повторных попыток доставки сообщений об ошибке.
ignore_bounce_errors_after = 2d
# Период через который exim удалит то, что так и не смог доставить.
timeout_frozen_after = 7d
#smtp_accept_max = 50
# максимальное число сообщений принимаемое за одно соединение
# от удалённого сервера (или пользователя)..
smtp_accept_max_per_connection = 25
# чё-то про логи и борьбу с флудом - я так понимаю -
# максимальное число сообщений записываемых в логи
smtp_connect_backlog = 30
# Максимальное число коннектов с одного хоста
smtp_accept_max_per_host = 20
# размер сообщения.
message_size_limit = 35M
#recipients_max = 2
#helo_allow_chars = _
#smtp_enforce_sync = true
# ---Списки контроля доступа---
begin acl
acl_check_rcpt:
accept hosts = :
control = dkim_disable_verify
deny message = Restricted characters in address
domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]
deny message = Restricted characters in address
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
deny message = HELO/EHLO require by SMTP RFC
!senders = :
condition = ${if eq{$sender_helo_name}{}{yes}{no}}
delay = 30s
deny message = We don't allow domain literals, sorry - many spam...
hosts = !+relay_from_hosts:*
!senders = :
condition = ${if isip{$sender_helo_name}{yes}{no}}
accept local_parts = postmaster
domains = +local_domains
require verify = sender
accept hosts = +relay_from_hosts
control = submission
control = dkim_disable_verify
accept authenticated = *
control = submission
control = dkim_disable_verify
require message = relay not permitted
domains = +local_domains : +relay_to_domains
require verify = recipient
#accept domains = +relay_to_domains
#endpass
#message = unrouteable address2
#verify = recipient
accept
acl_smtp_mail:
deny message = Sender e-mail blacklisted locally (contact postmaster@domain.in.ua )
log_message = Sender address $sender_address in /etc/exim/blacklist_senders
!senders = /etc/exim/whitelist_senders
#!hosts =
senders = /etc/exim/blacklist_senders
deny message = Host is listed in $dnslist_domain
log_message = Host is listed in $dnslist_domain \
If you think that the system is mistaken, please report details to postmaster@domain.in.ua
!senders = /etc/exim/whitelist_senders
#!hosts =
dnslists = sbl.spamhaus.org : \
xbl.spamhaus.org : \
pbl.spamhaus.org : \
sbl-xbl.spamhaus.org : \
zen.spamhaus.org
accept
# Проверка вложений
check_mime:
warn decode = default
deny message = Blacklisted file extension detected ($mime_filename)
condition = ${if match \
{${lc:$mime_filename}} \
{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.com|\.exe|\.cls)$\N}
\
{1}{0}}
accept
# Проверка на вирусы
acl_check_data:
deny message = This message contains a virus or other harmful content ($malware_name)
demime = *
malware = *
accept
# ---Конфигурация роутеров---
begin routers
# Копирование всех исходящих сообщений
message_all_out_copy:
driver = redirect
unseen
senders = *@domain.in.ua
data = audit@domain.in.ua
# Копирование всех входящих сообщений
message_all_in_copy:
driver = redirect
unseen
senders = !*@domain.in.ua
data = audit@domain.in.ua
#dnslookup:
#driver = dnslookup
#domains = ! +local_domains
#transport = rmail
rmail_router:
driver = manualroute
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
# OR address='${quote_mysql:@$domain}'}{yes}{no}}
rmail_router:
driver = manualroute
transport = rmail
route_list = * relay.prov.net
# ---Конфигурация транспортов---
begin transports
remote_smtp:
driver = smtp
rmail:
driver = smtp
hosts = relay.prov.net
dovecot_delivery:
driver = appendfile
user = postfix
group = postfix
mode = 0660
mode_fail_narrower = false
envelope_to_add = true
return_path_add = true
/etc/exim/exim.conf lines 115-170/231 78%
directory = /usr/vmail/$local_part@$domain
maildir_format
address_pipe:
driver = pipe
return_output
address_reply:
driver = autoreply
# Повторная доставка
begin retry
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
begin rewrite
# Аутентификация
begin authenticators
plain_login:
driver = plaintext
public_name = PLAIN
server_condition = ${lookup mysql{SELECT '1' FROM mailbox WHERE username = '${quote_my
sql:$2}' AND password = '${quote_mysql:$3}'} {yes}{no}}
server_set_id = $2
fixed_login:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
server_condition = ${lookup mysql{SELECT '1' FROM mailbox WHERE username = '${quote_my
sql:$1}' AND password = '${quote_mysql:$2}'} {yes}{no}}
server_set_id = $1
fixed_cram:
/etc/exim/exim.conf lines 171-227/231 97%
driver = cram_md5
public_name = CRAM-MD5
server_secret = ${lookup mysql{SELECT password FROM mailbox WHERE username = '${quote_
mysql:$1}'}{$value}fail}
server_set_id = $1
/etc/dovecot/dovecot.conf
base_dir = /var/run/dovecot/
protocols = pop3 imap imaps
listen = *
disable_plaintext_auth = no
ssl = no
login_dir = /var/run/dovecot/login
login_user = dovecot
login_trusted_networks = 192.168.0.0/16
mail_location = maildir:/usr/vmail/%n@%d
first_valid_uid = 21
first_valid_gid = 1
protocol imap {
mail_plugin_dir = /usr/lib/dovecot/modules/imap
}
protocol pop3 {
mail_plugin_dir = /usr/lib/dovecot/modules/pop3
}
protocol managesieve {
}
protocol lda {
mail_plugin_dir = /usr/lib/dovecot/modules/lda
}
auth_username_format = %Ln@domain.in.ua
auth_debug = yes
auth default {
mechanisms = plain
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
user = root
}
dict {
}
plugin {
}
/etc/dovecot/dovecot-sql.conf
driver = mysql
default_pass_scheme = MD5-CRYPT
#PLAIN
connect = host=127.0.01 dbname=postfix user=postfix password=mypass
password_query = SELECT username as user, password FROM mailbox WHERE username = '%n@domain.in.ua' AND active='1'
user_query = SELECT maildir AS home, 51 AS uid, 51 AS gid FROM mailbox WHERE username
= '%n@%d' AND active ='1'
Ссылки:
http://ss.lg.ua/node/1816
http://sadmin.pp.ua/pochtov....in.html
http://www.lissyara.su/article....ixadmin
http://trac.ungrund.org/system/browser/exim4/psu/exim4.conf