Parent Category: главный раздел
Category: Freebsd
Hits: 8572

В данной статье мы рассмотрим установку почтового сервера на базе Exim с поддержкой виртуальных аккаунтов (MySQL).

Exim - свободно распространяемый Mail Transport Agent (MTA), обладающий возможностью очень гибкой и тонкой настройки, включая поиск конфигурационной информации в различных базах данных. Кроме того, Exim поддерживает Maildir (quota), SMTP-аутентификацию и TLS/SSL без применения патчей.

 

 


 

Исходные данные:

FreeBSD 4.6
MySQL 3.23.49
OpenSSL 0.9.7a
Все действия выполняются от супер-пользователя root.

 

Сначала скачиваем дистрибутив Exim с сайта производителя: www.exim.org.

bash-2.05a# cd /var/tmp
bash-2.05a# wget ftp://ftp.exim.org/pub/exim/exim4/exim-4.20.tar.gz
bash-2.05a# md5 exim-4.20.tar.gz
MD5 (exim-4.20.tar.gz) = a1f06f1de1ab602a25d78ad2a20819f2

 

 

Создаем пользователя, необходимого для работы Exim.

bash-2.05a# pw useradd mail -c "Mail Server" -d /var/spool/mqueue -g mail -s /sbin/nologin

su-2.05a# cat /etc/passwd |grep mail
mail:*:1005:6:Mail Server:/var/spool/mqueue:/sbin/nologin

su-2.05a# cat /etc/group |grep mail
mail:*:6:

su-2.05a#cd exim-4.20
su-2.05a# cp src/EDITME Local/Makefile

 

Отредактируем Local/Makefile, изменив следующее:

BIN_DIRECTORY=/usr/exim/bin
на:

BIN_DIRECTORY=/usr/sbin

Здесь мы указываем путь установки исполняемых файлов Exim'а.

CONFIGURE_FILE=/usr/exim/configure
на:

CONFIGURE_FILE=/etc/mail/exim.conf

 

Здесь мы указываем имя и путь к файлу конфигурации Exim'а.

EXIM_USER=
на:

EXIM_USER=1005

 

Здесь мы указываем числовой идентификатор пользователя, от имени которого будет работать Exim. В нашем случае это пользователь с именем mail.

# EXIM_GROUP=
на:

EXIM_GROUP=6

 

Указываем числовой идентификатор группы, от имени которой будет работать Exim. В нашем случае это группа с именем mail.

SPOOL_DIRECTORY=/var/spool/exim
на:

SPOOL_DIRECTORY=/var/spool/mqueue

 

Указываем имя spool-директории.

# SUPPORT_MAILDIR=yes
на:

SUPPORT_MAILDIR=yes

Этим мы включаем поддержку Maildir.

# LOOKUP_MYSQL=yes
на:

LOOKUP_MYSQL=yes

 

Этим мы включаем поддержку MySQL.

 
Для того, чтобы узнать путь к файлам библиотек и заголовков MySQL, выполним:

 

su-2.05a# mysql_config
Usage: /usr/local/bin/mysql_config [OPTIONS]
Options:

--cflags [-I'/usr/local/include/mysql']
--libs [-L'/usr/local/lib/mysql' -lmysqlclient -lz -lcrypt -lm]
--socket [/tmp/mysql.sock]
--port [3306]
--version [3.23.49]

Полученные значения подставляем в строках ниже.

# LOOKUP_INCLUDE=-I /usr/local/ldap/include -I /usr/local/mysql/include -I/usr/local/pgsql/include
# LOOKUP_LIBS=-L/usr/local/lib -lldap -llber -lmysqlclient -lpq

на:

LOOKUP_INCLUDE=-I /usr/local/include/mysql
LOOKUP_LIBS=-L/usr/local/lib/mysql -lmysqlclient -lz -lcrypt -lm

 

EXIM_MONITOR=eximon.bin
на:

#EXIM_MONITOR=eximon.bin

 

Здесь мы выключаем поддержку Exim Monitor.
Для работы Exim Monitor требуется наличие X11, нами это не используется.

# AUTH_CRAM_MD5=yes
# AUTH_PLAINTEXT=yes
на:

AUTH_CRAM_MD5=yes
AUTH_PLAINTEXT=yes

Здесь мы включаем поддержку SMTP-аутентификации PLAIN и CRAM-MD5.

# SUPPORT_TLS=yes
на:

SUPPORT_TLS=yes

 

Этим мы включаем поддержку TLS/SSL для обеспечения защищенного соединения.

# TLS_LIBS=-lssl -lcrypto
на:

TLS_LIBS=-lssl -lcrypto

Указываем имена используемых библиотек для TLS/SSL.

# LOG_FILE_PATH=syslog
на:

LOG_FILE_PATH=syslog

 

Указываем, что журнальная информация должна фиксироваться в syslog.

# EXIM_PERL=perl.o
на:

EXIM_PERL=perl.o

 

Включаем поддержку perl, чтобы обеспечить использование perl-совместимых регулярных выражений и т.д.

SYSTEM_ALIASES_FILE=/etc/aliases
на:

SYSTEM_ALIASES_FILE=/etc/mail/aliases

 

Здесь мы указываем путь к файлу псевдонимов.

# CHOWN_COMMAND=/usr/bin/chown
на:

CHOWN_COMMAND=/usr/sbin/chown

 

Указываем правильный путь к команде chown.

# SUPPORT_MOVE_FROZEN_MESSAGES=yes
на:

SUPPORT_MOVE_FROZEN_MESSAGES=yes

 

Здесь мы включаем поддержку автоматического перемещения "frozen" сообщений из каталогов input и msglog в каталоги Finput и Fmsglog основного спула.

 

После редактирования выполним:

 

su-2.05a# make

 

Для того чтобы понять, какие файлы будут установлены при установке Exim, выполним следующее.

 

su-2.05a# cd
su-2.05a# find /* >exim1

 
Возвращаемся в рабочий каталог и произведем установку. Для этого выполним:

su-2.05a# cd /var/tmp/exim-4.20
su-2.05a# make install

 
После того, как установка завершена, нужно создать символические ссылки. Для этого проделаем следующее:

 

su-2.05a# ln -fs /usr/sbin/exim /usr/lib/sendmail
su-2.05a# ln -fs /usr/sbin/exim /usr/sbin/sendmail
su-2.05a# ln -fs /usr/sbin/exim /usr/bin/mailq
su-2.05a# ln -fs /usr/sbin/exim /usr/bin/runq

 

 
Теперь необходимо удалить из объектных файлов Exim'а таблицы имен и информацию о номерах строк. Для этого выполним:

 

su-2.05a# strip /usr/sbin/exim*

 

 
Повторим операцию, проделанную ранее до установки Exim'а, чтобы понять, какие файлы были установлены. Для этого выполним следующее:

 

su-2.05a# cd
su-2.05a# find /* >exim2
su-2.05a# diff exim1 exim2 >exim-inst

 

 
Прежде чем приступить к конфигурированию Exim'а, нужно создасть базу данных, пользователя и соответсвующие таблицы. Для этого выполним:

su-2.05a# mysql -u root mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 3.23.49-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE DATABASE exim;
Query OK, 0 rows affected (0.00 sec)

mysql> \q
Bye

 
Создаем пользователя sqlmail и присваиваем ему полные права на базу exim:

 

su-2.05a# mysql -u root mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 3.23.49-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> GRANT ALL PRIVILEGES ON exim.* TO sqlmail@localhost
    -> IDENTIFIED BY 'my_password' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

mysql> \q
Bye

 

 
Когда база данных и пользователь созданы, нужно создать структуру таблиц и ввести данные о пользователях Для этого выполним:

 

su-2.05a#mysql -u sqlmail exim -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 3.23.49-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 

Создаем таблицу aliases со следующей структурой:

 

mysql> CREATE TABLE aliases (
    -> local_part varchar(64) NOT NULL default '',
    -> domain varchar(128) NOT NULL default '',
    -> recipients text,
    -> PRIMARY KEY (local_part,domain));

Добавляем данные в таблицу aliases:

 

INSERT INTO aliases VALUES ('postmaster','example.ru','ginger');
INSERT INTO aliases VALUES ('mailer-daemon','example.ru','postmaster');
INSERT INTO aliases VALUES ('root','example.ru','postmaster');
INSERT INTO aliases VALUES ('bin','example.ru','root');
INSERT INTO aliases VALUES ('daemon','example.ru','root');
INSERT INTO aliases VALUES ('sync','example.ru','root');
INSERT INTO aliases VALUES ('mail','example.ru','root');
INSERT INTO aliases VALUES ('pop','example.ru','root');
INSERT INTO aliases VALUES ('uucp','example.ru','root');
INSERT INTO aliases VALUES ('ftp','example.ru','root');
INSERT INTO aliases VALUES ('nobody','example.ru','root');
INSERT INTO aliases VALUES ('www','example.ru','root');
INSERT INTO aliases VALUES ('named','example.ru','root');
INSERT INTO aliases VALUES ('postgres','example.ru','root');
INSERT INTO aliases VALUES ('mysql','example.ru','root');
INSERT INTO aliases VALUES ('squid','example.ru','root');
INSERT INTO aliases VALUES ('drweb','example.ru','root');
INSERT INTO aliases VALUES ('operator','example.ru','root');
INSERT INTO aliases VALUES ('abuse','example.ru','root');
INSERT INTO aliases VALUES ('hostmaster','example.ru','root');
INSERT INTO aliases VALUES ('webmaster','example.ru','root');

Создаем таблицу domains со следующей структурой:

mysql> CREATE TABLE domains (
    -> domain varchar(128) NOT NULL default '',
    -> type enum('LOCAL','RELAY','VIRTUAL') default 'LOCAL',
    -> PRIMARY KEY (domain));

 

Добавляем данные в таблицу domains:

INSERT INTO domains VALUES ('example.ru','LOCAL');

 

Создаем таблицу userforward, со следующей структурой:

 

mysql> CREATE TABLE userforward (
    -> local_part varchar(64) NOT NULL default '',
    -> domain varchar(128) NOT NULL default '',
    -> recipients text,
    -> PRIMARY KEY (local_part,domain));

 

Добавляем данные в таблицу userforward:

 

INSERT INTO userforward VALUES ('noc','example.ru','ginger');
INSERT INTO userforward VALUES ('sysadmin','example.ru','ginger');
INSERT INTO userforward VALUES ('security','example.ru','ginger, victor');

 

Создаем таблицу users, со следующей структурой:

 

mysql> CREATE TABLE users (
    -> id varchar(64) NOT NULL default '',
    -> crypt varchar(64) NOT NULL default '',
    -> passwd varchar(64) NOT NULL default '',
    -> uid int(10) unsigned default '8',
    -> gid int(10) unsigned default '12',
    -> mbox_host varchar(128) NOT NULL default 'example.ru',
    -> shell varchar(32) binary default '/sbin/nologin',
    -> home varchar(128) binary default '/home/vmail/domains',
    -> quota tinyint(4) default '15',
    -> active enum('Y','N') default 'Y',
    -> PRIMARY KEY (id,mbox_host));

Добавляем пользователей в таблицу users:

 

INSERT INTO users VALUES ('ginger',ENCRYPT('my-secret-pass'),'my-secret-pass',8,12, \ 'example.ru','/sbin/nologin','/home/vmail/domains/example.ru/ginger',15,'Y');
INSERT INTO users VALUES ('victor',ENCRYPT('12345'),'12345',8,12,'example.ru', \ '/sbin/nologin','/home/vmail/domains/example.ru/victor',15,'Y');

mysql> \q
Bye

 

 
Перейдем в каталог, где находится exim.conf, и проделаем следующее:

su-2.05a# cd /etc/mail/
su-2.05a# cp exim.conf exim.conf-default
su-2.05a# grep -v ^# exim.conf-default > exim.conf

 

После этого приступим к редактированию файла конфигурации exim.conf.

### /etc/mail/exim.conf ###

 

primary_hostname = smtp.example.ru
domainlist local_domains = ${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

acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data

qualify_domain = example.ru

log_selector = \
+all_parents \
+lost_incoming_connection \
+received_sender \
+received_recipients \
+smtp_confirmation \
+smtp_syntax_error \
+smtp_protocol_error \
-queue_run

allow_domain_literals = false
never_users = root:daemon:bin:sync:named
host_lookup = *
#trusted_users = mail:drweb
rfc1413_hosts = *
rfc1413_query_timeout = 0s
ignore_bounce_errors_after = 30m
timeout_frozen_after = 3d
freeze_tell = postmaster
auto_thaw = 1h
#system_filter = /etc/mail/system-filter
#message_body_visible = 5000
message_size_limit = 10M
smtp_accept_max = 50
smtp_accept_max_per_connection = 50
smtp_connect_backlog = 50
smtp_accept_max_per_host = 25
split_spool_directory = true
remote_max_parallel = 15

hide mysql_servers = localhost/exim/sqlmail/my_password

begin acl

acl_check_rcpt:

accept hosts = :

deny local_parts = ^.*[@%!/|] : ^\\.

accept local_parts = postmaster
domains = +local_domains

require verify = sender

deny message = host is listed in
$dnslist_domain
dnslists = sbl.spamhaus.org : \
relays.ordb.org : \
opm.blitzed.org : \
proxies.blackholes.easynet.nl

accept domains = +local_domains
endpass
message = unknown user
verify = recipient

accept domains = +relay_to_domains
endpass
message = unrouteable address
verify = recipient

accept hosts = +relay_from_hosts

accept authenticated = *

deny message = relay not permitted

acl_check_data:

deny message = Go Away! Eat Your Spam Self!
condition = ${if match{$message_body} \
{105[-_]*51[-_]*86|778[-_]*98[-_]*94} \
{yes}{no}}

accept


begin routers

#drweb_router:
# driver = accept
# condition = ${if
eq{$received_protocol}{drweb-scanned}{0}{1}}
# transport = drweb
# no_verify

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}'}}

mysqluser:
driver = accept
condition = ${if eq{} {${lookup mysql{SELECT home FROM users \
WHERE id='${local_part}' AND
mbox_host='${domain}' \
AND active='Y'}}}{no}{yes}}
transport = mysql_delivery


begin transports

remote_smtp:
driver = smtp

mysql_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
group = mail
maildir_format
maildir_tag = ,S=$message_size
message_prefix = ""
message_suffix = ""
mode = 0600
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%
return_path_add

address_pipe:
driver = pipe
return_output

address_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add

address_reply:
driver = autoreply

#drweb:
# driver = pipe
# command = /opt/drweb/drweb-exim -f <${sender_address}> -- ${pipe_addresses}
# current_directory = /var/drweb/spool
# escape_string =
# group = mail
# headers_add = X-Virus-Scanned: by DrWeb for Unix
# message_prefix =
# message_suffix =
# path = /bin:/sbin:/usr/bin:/usr/sbin:/opt/drweb
# no_return_output
# no_return_path_add
# user = drweb


begin retry

* quota
* * F,2h,15m; G,16h,1h,1.5;
F,4d,6h


begin rewrite



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

### /etc/mail/exim.conf ###

где,

primary_hostname - полное имя хоста (FQDN);
domainlist local_domains
- список доменов, для которых принимаем почту как для локальных;
domainlist relay_to_domains
- список доменов, для которых разрешено принимать почту;
hostlist relay_from_hosts
- список адресов (IP) с которых разрешено принимать почту;
acl_smtp_rcpt = acl_check_rcpt
- вызов правил доступа при проверке адреса получателя;
acl_smtp_data = acl_check_data
- вызов правил доступа при проверке пересылаемых данных;
qualify_domain
- определение имени домена из FQDN сетевого узла или из адреса отправителя;
log_selector
- указываем события, которые необходимо протоколировать;
host_lookup
- поиск имени по адресу или наоборот;
auto_thaw
- указываем время, по истечению которого будет возобновлена попытка доставить frozen сообщение(я);
message_size_limit
- указываем максимальный размер сообщения;
smtp_accept_max
- указываем максимально возможное число одновременных smtp сессий.

 
После этого создаем файл запуска. Для этого проделаем следующее:

 

su-2.05a# cat > /usr/local/etc/rc.d/exim.sh

 
#!/bin/sh
case "$1" in
start)
echo "starting Exim..."
/usr/sbin/exim -bd -q15m
;;
restart)
echo "restarting Exim..."
kill -HUP `cat /var/spool/mqueue/exim-daemon.pid`
;;
stop)
echo "stopping Exim..."
kill -TERM `cat /var/spool/mqueue/exim-daemon.pid`
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
^D
 

su-2.05a# chmod +x /usr/local/etc/rc.d/exim.sh

 
Теперь необходимо проверить правильность синтаксиса файла конфигурации /etc/mail/exim.conf. Для этого выполним:

su-2.05a# exim -bV
Exim version 4.20 #1 built 22-May-2003 14:22:20
Copyright (c) University of Cambridge 2003
Probably Berkeley DB version 1.8x (native mode)
Support for: Perl OpenSSL
Authenticators: cram_md5 plaintext
Routers: accept dnslookup ipliteral manualroute
queryprogram redirect
Transports: appendfile/maildir/mbx autoreply pipe smtp
Configuration file is /etc/mail/exim.conf

 

Если ошибок не обнаружено, идем дальше.
Теперь требуется проверить, будет ли осуществляться распознование сообщений для локальных пользователей. Для этого выполним:

su-2.05a# exim -bt postmaster
This email address is being protected from spambots. You need JavaScript enabled to view it.
    router = mysqluser, transport = mysql_delivery

Если ошибок не обнаружено, переходим к следующему шагу. Проверим, будет ли осуществляться распознование сообщений для внешних пользователей:

su-2.05a# exim -bt This email address is being protected from spambots. You need JavaScript enabled to view it.
This email address is being protected from spambots. You need JavaScript enabled to view it.
    router = dnslookup, transport = remote_smtp

 

Если ошибок не обнаружено, идем дальше. Необходимо проверить, будет ли осуществляться доставка сообщений локальным пользователям, для этого выполним:

 

su-2.05a# exim -v This email address is being protected from spambots. You need JavaScript enabled to view it.
From: This email address is being protected from spambots. You need JavaScript enabled to view it.
To: This email address is being protected from spambots. You need JavaScript enabled to view it.
Subject: Testing Exim

This is a test message.
^D
LOG: MAIN
<= This email address is being protected from spambots. You need JavaScript enabled to view it. U=root P=local S=303
su-2.05a# LOG: MAIN
=> ginger R=mysqluser
T=mysql_delivery
LOG: MAIN
Completed
^C
Если ошибок не обнаружено, идем дальше - проверим, будет ли осуществляться доставка сообщений внешним пользователям:

 

su-2.05a# exim -v This email address is being protected from spambots. You need JavaScript enabled to view it.
From: This email address is being protected from spambots. You need JavaScript enabled to view it.
To: This email address is being protected from spambots. You need JavaScript enabled to view it.
Subject: Testing Exim

This is a test message.
^D
LOG: MAIN
<= This email address is being protected from spambots. You need JavaScript enabled to view it. U=root P=local S=303
su-2.05a# LOG: MAIN
=> someuser R=dnslookup
T=remote_smtp
LOG: MAIN
Completed
^C
На данном этапе мы убедились, что Exim правильно настроен и работает. Осталось проверить SMTP аутентификацию. Для этого сделаем следующее.

Запускаем Exim:

su-2.05a# /usr/local/etc/rc.d/exim.sh start

 

Формируем строку PLAIN аутентификации (Netscape):

 

su-2.05a# printf This email address is being protected from spambots. You need JavaScript enabled to view it.\This email address is being protected from spambots. You need JavaScript enabled to view it.\0my-secret-pass' | mmencode

Z2luZ2VyQGV4YW1wbGUucnUAZ2luZ2VyQGV4YW1wbGUucnUAbXktc2VjcmV0LXBhc3M=

su-2.05a# telnet localhost 25 Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 smtp.example.ru ESMTP Exim 4.20 Fri, 05 Sep 2003 13:59:25 +0400
ehlo localhost
250-smtp.example.ru Hello localhost.localdomain [127.0.0.1]
250-SIZE 10485760
250-PIPELINING
250-AUTH PLAIN LOGIN CRAM-MD5
250 HELP
auth plain
334
Z2luZ2VyQGV4YW1wbGUucnUAZ2luZ2VyQGV4YW1wbGUucnUAbXktc2VjcmV0LXBhc3M=
235 Authentication succeeded
quit
221 smtp.example.ru closing connection
Connection closed by foreign host.

Из примера видно, что все прошло успешно. Если у вас иной результат - еще раз внимательно прочитайте и ищите ошибку.

 
Идем дальше - формируем строку LOGIN аутентификации (Outlook):

 

su-2.05a# echo -n This email address is being protected from spambots. You need JavaScript enabled to view it. | mimencode -b

Z2luZ2VyQGV4YW1wbGUucnU=

su-2.05a# echo -n my-secret-pass | mimencode -b

bXktc2VjcmV0LXBhc3M=

su-2.05a# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 smtp.example.ru ESMTP Exim 4.20 Fri, 05 Sep 2003 14:01:25 +0400
ehlo localhost
250-smtp.example.ru Hello localhost.localdomain [127.0.0.1]
250-SIZE 10485760
250-PIPELINING
250-AUTH PLAIN LOGIN CRAM-MD5
250 HELP
auth login
334 VXNlcm5hbWU6
Z2luZ2VyQGV4YW1wbGUucnU=
334 UGFzc3dvcmQ6
bXktc2VjcmV0LXBhc3M=
235 Authentication succeeded
quit
221 smtp.example.ru closing connection
Connection closed by foreign host.

 

Опять-таки видно, что все прошло успешно. Если вы получили иной результат - ищите ошибку.

 
Далее проверяем CRAM-MD5 аутентификацию (The Bat!), для этого выполним:

 

su-2.05a# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 smtp.example.ru ESMTP Exim 4.20 Fri, 05 Sep 2003 14:09:15 +0400
ehlo localhost
250-smtp.example.ru Hello localhost.localdomain [127.0.0.1]
250-SIZE 10485760
250-PIPELINING
250-AUTH PLAIN LOGIN CRAM-MD5
250 HELP
auth cram-md5
334 PDI2NDAyLjEwNTY2MTE1NTVAc210cC5leGFtcGxlLnJ1Pg==
Z2luZ2VyQGV4YW1wbGUucnUgYjllN2Q1OTUxMGMxNjE0YzIwYjU4N2JkNmFkODk2MDI=
235 Authentication succeeded
quit
221 smtp.example.ru closing connection
Connection closed by foreign host.
Как видите, и это прошло успешно, ищите ошибку, если получили иной результат.

 
Теперь я опишу свои действия. После того, как была выполнена команда auth cram-md5, появилась строка вида:

 

334 PDI2NDAyLjEwNTY2MTE1NTVAc210cC5leGFtcGxlLnJ1Pg==

 

После этого мы должны выполнить следующее:

 

su-2.05a# perl -MMIME::Base64 -e 'print MIME::Base64::decode_base64(shift), "\n"' \
PDI2NDAyLjEwNTY2MTE1NTVAc210cC5leGFtcGxlLnJ1Pg==

<This email address is being protected from spambots. You need JavaScript enabled to view it.>

Затем выполним:

 

su-2.05a# perl -MMIME::Base64 -MDigest::HMAC_MD5 -e \
'print MIME::Base64::encode_base64($ARGV[0] . " " . \
Digest::HMAC_MD5::hmac_md5_hex($ARGV[2], $ARGV[1]))' \
This email address is being protected from spambots. You need JavaScript enabled to view it.' 'my-secret-pass' '<This email address is being protected from spambots. You need JavaScript enabled to view it.>'

Z2luZ2VyQGV4YW1wbGUucnUgYjllN2Q1OTUxMGMxNjE0YzIwYjU4N2JkNmFkODk2MDI=

 

Полученный результат и есть интересующая нас строка.

На этом установку и настройку Exim, можно считать полностью завершенной.

 

Настоятельно рекомендуем ознакомиться с темой FAQ по Exim MTA. Установка почтового сервера на базе Exim с поддержкой виртуальный аккаунтов (MySQL), являющейся логическим продолжением данной статьи.

http://ru-board.com