Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » FAQ по Exim MTA

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

ShriEkeR (16-05-2011 18:50): FAQ по Exim MTA #2  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

ginger



Рыжик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
[/b]  
Исходные данные:
 
FreeBSD 4.6
MySQL 3.23.49
OpenSSL 0.9.7a
Все действия выполняются от супер-пользователя root
 
Домашняя страничка Exim MTA:
http://www.exim.org
 
su-2.05a# cd /var/tmp
su-2.05a# wget ftp://ftp.exim.org/pub/exim/exim4/exim-4.20.tar.gz
su-2.05a# md5 exim-4.20.tar.gz
MD5 (exim-4.20.tar.gz) = a1f06f1de1ab602a25d78ad2a20819f2
 
Создаем пользователя необходимого для работы Exim.
 
su-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, что бы обеспечить использование перл-совместимых регулярных выражений и т.д...
 
 
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 4 to server version: 3.23.49-log
 
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 

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

Код:
 
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, со следующей структурой:

Код:
 
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, со следующей структурой:

Код:
 
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, со следующей структурой:

Код:
 
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');
 

 
Перейдем в каталог, где находится 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       = HELO/EHLO required by SMTP RFC
          condition     = ${if eq{$sender_helo_name}{}{yes}{no}}
 
  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       = 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

Код:
postmaster@example.ru
  router = mysqluser, transport = mysql_delivery
 

Если ошибок не обнаружено, идем дальше... теперь требуется проверить будет ли осуществляться распознование сообщений для внешних пользователей, для этого выполним:
 
su-2.05a# exim -bt someuser@msn.com

Код:
someuser@msn.com
  router = dnslookup, transport = remote_smtp
 

Если ошибок не обнаружено, идем дальше... теперь требуется проверить будет ли осуществляться доставка сообщений локальным пользователям, для этого выполним:
 
su-2.05a# exim -v postmaster@example.ru

Код:
From: ginger@example.ru
To: postmaster@example.ru
Subject: Testing Exim
 
This is a test message.
^D
LOG: MAIN
  <= root@example.ru U=root P=local S=303
su-2.05a# LOG: MAIN
  => ginger <postmaster@example.ru> R=mysqluser T=mysql_delivery
LOG: MAIN
  Completed
^C
 

Если ошибок не обнаружено, идем дальше... теперь требуется проверить будет ли осуществляться доставка сообщений внешним пользователям, для этого выполним:
 
su-2.05a# exim -v someuser@msn.com

Код:
From: ginger@example.ru
To: someuser@msn.com
Subject: Testing Exim
 
This is a test message.
^D
LOG: MAIN
  <= root@example.ru U=root P=local S=303
su-2.05a# LOG: MAIN
  => someuser <someuser@msn.com> 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 'ginger@example.ru\0ginger@example.ru\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 ginger@example.ru | 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==
 

Код:
<26402.1056611555@smtp.example.ru>

 
Затем выполним:
 
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]))' \
'ginger@example.ru' 'my-secret-pass' '<26402.1056611555@smtp.example.ru>'

 

Код:
Z2luZ2VyQGV4YW1wbGUucnUgYjllN2Q1OTUxMGMxNjE0YzIwYjU4N2JkNmFkODk2MDI=

 
Полученный результат и есть интересующая нас строка.
 
На этом установку и настройку Exim, можно считать полностью завершенной.
 
 
Установка Tpop3d с поддержкой виртуальных аккаунтов (MySQL).
 
Исходные данные:  
 
FreeBSD 4.6  
MySQL 3.23.49  
Exim 4.20
Все действия выполняются от супер-пользователя root  
 
Домашняя страничка Tpop3d:
http://www.ex-parrot.com/~chris/tpop3d/
 
su-2.05a# cd /var/tmp  
su-2.05a# wget http://www.ex-parrot.com/~chris/tpop3d/tpop3d-1.5.2.tar.gz
su-2.05a# md5 tpop3d-1.5.2.tar.gz
MD5 (tpop3d-1.5.2.tar.gz) = 1bd2fa0a8a0da9d7ee0f4c5723006631
 
su-2.05a# tar xzpf tpop3d-1.5.2.tar.gz
su-2.05a# cd tpop3d-1.5.2
 
Указываем параметры которые нас интересуют:

Код:
 
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
--mandir=/usr/local/man --disable-mbox-bsd --enable-mbox-maildir \
--enable-auth-mysql --disable-auth-pam --with-mysql-include-dir=/usr/local/include/mysql \
--with-mysql-lib-dir=/usr/local/lib/mysql --enable-tls
 

После этого выполним:
 
su-2.05a# make
 
Для того чтобы понять, какие файлы будут установлены при установке Tpop3d, выполним следующее...
 
su-2.05a# cd
su-2.05a# find /* >tpop3d1
 
Возвращаемся в рабочий каталог и произведем установку, для этого выполним:
 
su-2.05a# cd /var/tmp/tpop3d-1.5.2  
su-2.05a# make install
 
После этого требуется удалить из объектных файлов Tpop3d таблицы имен и информацию о номерах строк, для этого выполним:  
 
su-2.05a# strip /usr/sbin/tpop3d  
 
Повторим операцию проделанную ранее до установки Tpop3d, что бы понять, какие файлы были установлены, для этого выполним следующее:  
 
su-2.05a# cd
su-2.05a# find /* >tpop3d2
su-2.05a# diff tpop3d1 tpop3d2 >tpop3d-inst
 
После этого создаем файл конфигурации tpop3d.conf, для этого проделаем следующие:
 
su-2.05a# cat > /etc/tpop3d.conf

Код:
 
listen-address:         0.0.0.0
max-children:           1024
log-facility:          mail
auth-mysql-enable:      yes
auth-mysql-mail-group:  mail
auth-mysql-hostname:    localhost
auth-mysql-database:    exim
auth-mysql-username:    sqlmail
auth-mysql-password:    my_password
auth-mysql-pass-query:  SELECT CONCAT(home, '/Maildir'), \
                        CONCAT('{crypt}',crypt),'mail','maildir' \
                        FROM users WHERE id = '$(local_part)' \
                        AND mbox_host = '$(domain)' \
                        AND active = 'Y'
^D
 

Затем создаем файл запуска, для этого проделаем следующее:
 
su-2.05a# cat > /usr/local/etc/rc.d/tpop3d.sh

Код:
 
#!/bin/sh
#
prog=/usr/sbin/tpop3d
conf=/etc/tpop3d.conf
pid=/var/run/tpop3d.pid
 
# Check config
[ -f ${conf} ] || exit 0
 
# See how we were called.
case "$1" in
  start)
        # Start daemons.
        [ -x ${prog} ] && ${prog} -f ${conf} -p ${pid}
        echo -n " tpop3d"
        ;;
  stop)
        # Stop daemons.
        [ -f ${pid} ] && kill `cat ${pid}`
        echo -n " tpop3d"
        #killall tpop3d
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  reload)
        kill -HUP `cat ${pid}`
        ;;
  *)
        echo "Usage: `basename $0` {start|stop|restart|reload}" >&2
        exit 1
esac
exit 0
^D
 

su-2.05a# chmod +x /usr/local/etc/rc.d/tpop3d.sh
 
Проверим работу Tpop3d, выполнив следующее:
 
su-2.05a# /usr/local/etc/rc.d/tpop3d.sh start
 
su-2.05a# telnet localhost 110

Код:
 
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK <f53285e7712ad98f1b27f9c554c4fec5@smtp.example.ru>
user ginger@example.ru
+OK Tell me your password.
pass my-secret-pass
+OK Welcome aboard! You have exactly one message.
list
+OK Scan list follows:
1 1327
.
quit
+OK Done
Connection closed by foreign host.
 

Из приведенного примера видно, что все прошло успешно, если у Вас иной результат, то тогда еще раз внимательно читаем и ищем ошибку...
 
Для того чтобы обеспечить защищенное соединение при помощи TLS/SSL, выполним следующее:
 
su-2.05a# cd /etc/ssl
su-2.05a# openssl req -new -x509 -nodes -days 365 -out tmp.pem

Код:
 
Generating a 1024 bit RSA private key
.............................................++++++
.....................................................++++++
writing new private key to 'privkey.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [RU]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Example, Inc.]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [smtp.example.ru]:
Email Address [noc@example.ru]:
 

После этого проделаем следующее:
 
su-2.05a# cat tmp.pem >> privkey.pem
su-2.05a# mv privkey.pem certs/pop3s.pem
su-2.05a# chmod 400 certs/pop3s.pem
su-2.05a# rm -f tmp.pem
 
После этого отредактируем файл конфигурации tpop3.conf.

Код:
 
listen-address: 0.0.0.0:110(smtp.example.ru);tls=stls,/etc/ssl/certs/pop3s.pem \
                        0.0.0.0:995(smtp.example.ru);tls=immediate,/etc/ssl/certs/pop3s.pem
max-children:           1024
log-facility:          mail
auth-mysql-enable:      yes
auth-mysql-mail-group:  mail
auth-mysql-hostname:    localhost
auth-mysql-database:    exim
auth-mysql-username:    sqlmail
auth-mysql-password:    my_password
auth-mysql-pass-query:  SELECT CONCAT(home, '/Maildir'), \
                        CONCAT('{crypt}',crypt),'mail','maildir' \
                        FROM users WHERE id = '$(local_part)' \
                        AND mbox_host = '$(domain)' \
                        AND active = 'Y'
 
 

Проверим работу Tpop3d в режиме постоянного защищенного соединения TLS/SSL, выполнив следующее:
 
su-2.05a# /usr/local/etc/rc.d/tpop3d.sh restart
su-2.05a# openssl s_client -host localhost -port 995

Код:
 
CONNECTED(00000003)
depth=0 /C=RU/ST=RU/L=Moscow/O=Example, Inc./CN=smtp.example.ru/emailAddress=noc@example.ru
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=RU/ST=RU/L=Moscow/O=Example, Inc./CN=smtp.example.ru/emailAddress=noc@example.ru
verify return:1
---
Certificate chain
 0 s:/C=RU/ST=RU/L=Moscow/O=Example, Inc./CN=smtp.example.ru/emailAddress=noc@example.ru
   i:/C=RU/ST=RU/L=Moscow/O=Example, Inc./CN=smtp.example.ru/emailAddress=noc@example.ru
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDSTCCArKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJSVTEL
MAkGA1UECBMCUlUxDzANBgNVBAcTBk1vc2NvdzEWMBQGA1UEChMNRXhhbXBsZSwg
SW5jLjEYMBYGA1UEAxMPc210cC5leGFtcGxlLnJ1MR0wGwYJKoZIhvcNAQkBFg5u
b2NAZXhhbXBsZS5ydTAeFw0wMzA5MTEwNjQyNTBaFw0wNDA5MTAwNjQyNTBaMHwx
CzAJBgNVBAYTAlJVMQswCQYDVQQIEwJSVTEPMA0GA1UEBxMGTW9zY293MRYwFAYD
VQQKEw1FeGFtcGxlLCBJbmMuMRgwFgYDVQQDEw9zbXRwLmV4YW1wbGUucnUxHTAb
BgkqhkiG9w0BCQEWDm5vY0BleGFtcGxlLnJ1MIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQC4NK0/gD2UuYs9FjEdDhivLQ+Wiri8cNMT5Ju045KxU7GAjCMQ/az7
bciJjClRmBXxNUOxDTR5vVu0TxQvqZAWH/VnGYYWVDqzY+7Iph8vXUIwnH2vFBVv
mKsEjqmWoWflzDPs9eHljMEi33wqr9Vr6B9fvBjSArZAnvmAJd2ErQIDAQABo4Ha
MIHXMB0GA1UdDgQWBBRA/QnCIfOrAErfhUg1EYCkDGICYjCBpwYDVR0jBIGfMIGc
gBRA/QnCIfOrAErfhUg1EYCkDGICYqGBgKR+MHwxCzAJBgNVBAYTAlJVMQswCQYD
VQQIEwJSVTEPMA0GA1UEBxMGTW9zY293MRYwFAYDVQQKEw1FeGFtcGxlLCBJbmMu
MRgwFgYDVQQDEw9zbXRwLmV4YW1wbGUucnUxHTAbBgkqhkiG9w0BCQEWDm5vY0Bl
eGFtcGxlLnJ1ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAPJoJ
lmeiko3SoOI0AaTqunHR87RJsU9H51Zq1thZDNO+1iUkWWLxzO5HYdZqNdUDll2Y
2P2o0BdUdYmCUOzcySAS71gGAAZlo+nazYvWmXiv/t+LsZGoYNiMLxadjVkkOyan
PNuqSWfDd5HuhlAoxH5Hz6mRt3O/RYshT7p3Dxs=
-----END CERTIFICATE-----
subject=/C=RU/ST=RU/L=Moscow/O=Example, Inc./CN=smtp.example.ru/emailAddress=noc@example.ru
issuer=/C=RU/ST=RU/L=Moscow/O=Example, Inc./CN=smtp.example.ru/emailAddress=noc@example.ru
---
No client certificate CA names sent
---
SSL handshake has read 1007 bytes and written 340 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: 15B477E7DC7B22791963766616D6FA104F36527A91FA8F2436628D97F60F3D0E
    Session-ID-ctx:
    Master-Key: 46FF5267A6D6BC98CEA8ECE6B641AE26B4C1B7BF5632761F903B88692627EFB538CB6E0E41A148A0E0751A553342A00C
    Key-Arg   : None
    Krb5 Principal: None
    Start Time: 1063267813
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
+OK <a84a1ef1f961a90e74747b4ff014392d@smtp.example.ru>
user ginger@example.ru
+OK Tell me your password.
pass my-secret-pass
+OK Welcome aboard! You have exactly one message.
list
+OK Scan list follows:
1 1327
.
quit
+OK Done
closed
 

 
Из приведенного примера видно, что все прошло успешно, если у Вас иной результат, то тогда еще раз внимательно читаем и ищем ошибку...
 
На этом установку Tpop3d можно считать полностью завершенной.
 
Продолжение следует...
[b]

Всего записей: 854 | Зарегистр. 03-09-2001 | Отправлено: 10:58 29-08-2003 | Исправлено: hoochie, 22:55 16-12-2010
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » FAQ по Exim MTA
ShriEkeR (16-05-2011 18:50): FAQ по Exim MTA #2


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru