Собрано по статьям интернет добрых людей (в т.ч. opennet.ru) с небольшими изменениями и дополнением собственного опыта. Может кому полезно будет. Тестовая версия (Делал для внутреннего сайта).Почтовый сервер exim && Active Directory
groupware.domain.ru
Аппаратная платформа: HP Proliant ML350
Операционная система: Linux Slackware 12.1
На текущий момент использованы программные пакеты:
MIT krb5-1.6.3
cirus-sasl-2.1.22
exim-4.69
samba-3.0.29 (Пока только для ввода в домен)
Сборка пакетов:
MIT krb5-1.6.3
Опции сборки:
./configure \
--prefix=/usr \
--build=$ARCH-slackware-linux
cirus-sasl-2.1.22
Опции сборки:
./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--disable-static \
--enable-login \
--enable-digest \
--enable-cram \
--enable-gssapi=/usr \
--enable-gss-mutexes \
--enable-krb4 \
--enable-plain \TMPDIR="/tmp"
--enable-ntlm \
--enable-anon \
--with-openssl=/usr \
--with-gss_impl=mit\
--with-ldap=/usr \
--with-saslauthd \
--with-gdbm \
--with-dblib=gdbm
exim-4.69
Makefile:
BIN_DIRECTORY=/usr/bin
CONFIGURE_FILE=/etc/mail/exim4.conf
EXIM_USER=exim
SPOOL_DIRECTORY=/var/spool/mail
ROUTER_ACCEPT=yes
ROUTER_DNSLOOKUP=yes
ROUTER_IPLITERAL=yes
ROUTER_MANUALROUTE=yes
ROUTER_QUERYPROGRAM=yes
ROUTER_REDIRECT=yes
ROUTER_IPLOOKUP=yes
TRANSPORT_APPENDFILE=yes
TRANSPORT_AUTOREPLY=yes
TRANSPORT_PIPE=yes
TRANSPORT_SMTP=yes
SUPPORT_MAILDIR=yes
SUPPORT_MAILSTORE=yes
SUPPORT_MBX=yes
LOOKUP_DBM=yes
LOOKUP_LSEARCH=yes
LOOKUP_DNSDB=yes
LOOKUP_LDAP=yes
LDAP_LIB_TYPE=OPENLDAP2
LOOKUP_INCLUDE=-I /usr/local/ldap/include -I /usr/local/mysql/include
LOOKUP_LIBS=-L/usr/local/lib -lldap -llber -lmysqlclient
WITH_CONTENT_SCAN=yes
FIXED_NEVER_USERS=root
AUTH_CRAM_MD5=yes
AUTH_CYRUS_SASL=yes
AUTH_DOVECOT=yes
AUTH_PLAINTEXT=yes
AUTH_SPA=yes
AUTH_NTLM=yes
AUTH_GSSAPI=yes
AUTH_LIBS=-lsasl2
HEADERS_CHARSET="ISO-8859-1"
HAVE_ICONV=yes
SUPPORT_TLS=yes
TLS_LIBS=-lssl -lcrypto
TLS_LIBS=-L/usr/local/openssl/lib -lssl -lcrypto
TLS_INCLUDE=-I/usr/local/openssl/include/
INFO_DIRECTORY=/usr/share/info
LOG_FILE_PATH=syslog:/var/log/exim_%slog
SYSLOG_LONG_LINES=yes
SYSLOG_LOG_PID=yes
EXICYCLOG_MAX=10
COMPRESS_COMMAND=/usr/bin/gzip
COMPRESS_SUFFIX=gz
ZCAT_COMMAND=/usr/bin/zcat
CYRUS_SASLAUTHD_SOCKET=/var/state/saslauthd/mux
SYSTEM_ALIASES_FILE=/etc/aliases
TMPDIR="/tmp"
samba-3.0.29
Опции сборки:
CFLAGS="-g $SLKCFLAGS" ./configure \
--enable-cups \
--enable-static=no \
--enable-shared=yes \
--with-fhs \
--with-acl-support=yes \
--with-automount \
--prefix=/usr \
--localstatedir=/var \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--with-lockdir=/var/cache/samba \
--sysconfdir=/etc \
--with-configdir=/etc/samba \
--with-privatedir=/etc/samba/private \
--with-swatdir=/usr/share/swat \
--with-smbmount \
--with-quotas \
--with-syslog \
--with-utmp \
--with-libsmbclient \
--with-winbind \
--with-ldap \
--with-ads \
--with-krb5 \
--build=$ARCH-slackware-linux
Первоначальная настройка настройка:
1) less /etc/krb5.conf
[libdefaults]
default_realm = DOMAIN.RU
no-addresses = TRUE
[realms]
DOMAIN.RU = {
kdc = DC.DOMAIN.RU
}
2) less /etc/samba/smb.conf
[global]
dos charset = 866
unix charset = KOI8-T
display charset = KOI8-T
workgroup = DOMAIN2
realm = DOMAIN.RU
server string = Тестовый сервер
interfaces = 10.0.0.122/24
bind interfaces only = yes
security = ADS
auth methods = winbind
update encrypted = yes
client schannel = yes
allow trusted domains = no
map to guest = Bad User
passdb backend = tdbsam
lanman auth = yes
client NTLMv2 auth = yes
client lanman auth = no
client plaintext auth = no
log level = 0
syslog = 0
syslog only = yes
log file = /var/log/samba-log
debug pid = yes
debug uid = yes
name resolve order = wins host bcast
time server = yes
deadtime = 120
dos filetimes = yes
getwd cache = no
stat cache = no
os level = 32
preferred master = no
local master = no
domain master = no
wins server = 10.0.0.253, 192.168.1.247
wins support = yes
oplocks = yes
fake oplocks = false
#kernel oplocks = false
oplock break wait time = 250
locking = yes
posix locking = no
strict locking = no
strict sync = no
sync always = no
ldap ssl = no
lock directory = /var/lock/samba
utmp directory = /var/run
utmp = yes
remote announce = 192.168.1.255 10.0.255.255
remote browse sync = 192.168.1.255 10.0.255.255
socket address = 10.0.0.250
idmap domains = DOMAIN2
idmap alloc backend = tdb
idmap config DOMAIN2:default = yes
idmap config DOMAIN2:backend = tdb
idmap config DOMAIN2:range = 10000 - 50000
idmap alloc config:range = 10000 - 1000000
invalid users = root, news, ftp, work, mail, daemon, @root
create mask = 0660
directory mask = 2770
force directory mode = 2770
hide special files = yes
map archive = no
csc policy = disable
posix locking = no
strict locking = no
dont descend = /proc,/dev,/tmp,/var/tmp,/sys
printing = cups
load printers = yes
nt acl support = yes
acl check permissions = yes
acl compatibility = Auto
acl group control = yes
acl map full control = no
inherit permissions = yes
inherit acls = yes
inherit owner = yes
map acl inherit = yes
hide unreadable = yes
less less /etc/nsswitch.conf
passwd: files winbind
shadow: files winbind
group: files winbind
hosts: files dns
networks: files
services: files
protocols: files
rpc: files
ethers: files
netmasks: files
netgroup: files
bootparams: files
automount: files
aliases: files
3) Вводим host в домен:
net time
net ads join -U Administrator
Получаем в домене учётную запись компьютера groupware$. Эта учётная запись уже связана с двумя принципалами HOST/groupware.domain.ru и HOST/GROUPWARE (они указаны в свойстве "servicePrincipalName" см. оснасткой ADSI Edit). Нам нужны два принципала host/groupware.domain.ru@DOMAIN.RU и smtp/groupware.domain.ru@DOMAIN.RU (соблюдая регистр букв). Ключ первого используется saslauthd, ключ второго используется exim. Принципал smtp/groupware.domain.ru@DOMAIN.RU делаем как пользователя c NetBIOS наименованием smtp_groupware и задаём ему пароль. Принципал host/groupware.domain.ru@DOMAIN.RU уже как бы есть у учётной записи компьютера. Далее выполняем две команды на контроллере домена (учитывая регистр) :
ktutil -out smtp.keytab -princ smtp/groupware.domain.ru@DOMAIN.RU -pass * -mapuser smtp_groupware -crypto DES-CBC-MD5
Вводим пароль, заданный пользователю smtp/groupware.domain.ru@DOMAIN.RU
ktutil -out host.keytab -princ host/groupware.domain.ru@DOMAIN.RU -pass * -mapuser groupware$ -crypto DES-CBC-MD5
Вводим произвольный пароль.
Поскольку мы переназначили пароь groupware$, вдальнейшем для Samba в smb.conf возможно придётся указать параметр keytab =
Переносим полученные файлы ключей smtp.keytab и host.keytab на groupware.domain.ru и объединяем их утилитой ktutil (из пакета MIT Kerberos) (man ktutil) в файл /etc/krb5.keytab.
Проверяем klist -5 -k
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
1 host/groupware.domain.ru@DOMAIN.RU
2 smtp/groupware.domain.ru@DOMAIN.RU
Я сделал группу "kerberos" и включил в неё пользователя "exim".
ls -l /etc/krb5.keytab
-rw-rw---- 1 root kerberos 132 2008-07-04 12:13 /etc/krb5.keytab
Таким образом сервер exim имеет доступ к файлу /etc/krb5.keytab через cyrus-sasl API (когда не используется явно saslauthd)
4) Запускаем saslauthd -a kerberos5 (Изменяем для этого /etc/rc.d/rc.saslauthd)
5) Делаем файл
cat /usr/lib/sasl2/exim.conf
ntlm_server: dc.domain.ru
^D
Этот файл служит для настройки NTLM авторизации в exim
Основные настройки подсистем произведены, настраиваем exim
/etc/mail/exim4.conf
Изменёния конфигурации по умолчанию:
Главная конфигурация (начало файла секция main):
ldap_default_servers = <; dc.domain.ru:389
LDAP_AD_BINDDN = "CN=exim,CN=Users,DC=domain,DC=ru"
LDAP_AD_PASS = some password
smtp_banner = "$primary_hostname, ESMTP EXIM"
helo_allow_chars = _
primary_hostname = groupware.domain.ru
domainlist local_domains = domain.ru
hostlist relay_from_hosts = 127.0.0.1
qualify_domain = domain.ru
Секция аутентификации:
begin authenticators
PLAIN:
driver = plaintext
public_name = PLAIN
server_condition = ${if saslauthd{{$2}{$3}}{1}{0}}
server_set_id = $2
LOGIN:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
server_condition = ${if saslauthd{{$1}{$2}}{1}{0}}
server_set_id = $1
NTLM:
driver = cyrus_sasl
public_name = NTLM
server_set_id = $1
GSSAPI:
driver = cyrus_sasl
public_name = GSSAPI
server_set_id = $1
Примечание: в секциях NTLM и GSSAPI намеренно убраны строки server_realm = DOMAIN.RU. Для GSSAPI этот параметр берётся как параметр по умолчанию /etc/krb5.conf. Для NTLM сервер аутентификации указан в /usr/lib/sasl2/exim.conf. Причина - иногда адрес отправителя из user@domain.ru преобразовывлся в user@domain.ru@DOMAIN.RU. Вообщем без этих параметров нормально работает и адрес отправителя корректный.
Секция acl:
acl_check_data:
deny condition = ${if and{{ eq{$tls_peerdn}{} }{ eq{$authenticated_id}{} }}{yes}{no}}
message = Must be authenticated
accept authenticated = *
log_message = Client authenticated: $authenticated_id, Sender: $sender_address
Это включение авиторизации отправителя.
Секция маршрутизаторов (порядок важен).
begin routers
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{$local_part}lsearch{/etc/aliases}}
file_transport = address_file
pipe_transport = address_pipe
adsi_check:
driver = redirect
domains = +local_domains
allow_fail
allow_defer
data = ${lookup ldap {LDAP_AD_MAIL_RCPT} {${local_part}} {:fail: User unknown}}
redirect_router = local_adsi_user
local_adsi_user:
driver = accept
transport = local_delivery
cannot_route_message = Unknown user
Секцию транспортов не меняли, но возможно требуется добавить в транспорт локальной доставки флаги задания chmod и chown почтовых ящиков.
Проверяем поддерживаемые механизмы exim:
exim -d -v
trusted user
admin user
changed uid/gid: privilege not needed
uid=1000 gid=100 pid=3201
auxiliary group list: 12 100 102
Cyrus SASL knows about: NTLM
Cyrus SASL driver NTLM: NTLM initialised
Cyrus SASL knows about: GSSAPI
Cyrus SASL driver GSSAPI: GSSAPI initialised
originator: uid=0 gid=0 login=root name=
sender address = root@domain.ru
Exim is a Mail Transfer Agent. It is normally called by Mail User Agents,
not directly from a shell command line. Options and/or arguments control
what it does when called. For a list of options, see the Exim documentation
Запускаем exim -bd -qq10m
telnet groupware 25
Trying 10.0.0.122...
Connected to groupware.domain.ru (10.0.0.122).
Escape character is '^]'.
220 groupware.domain.ru, ESMTP EXIM
ehlo wks1198.domain.ru
250-groupware.domain.ru Hello wks1198.domain.ru 10.0.201.26external link
250-SIZE 52428800
250-PIPELINING
250-AUTH PLAIN LOGIN NTLM GSSAPI
250 HELP