Добро Пожаловать  Ru.Board
 

Навигация
  • Главная
  • Форум
  • Темы
  • Топ лист
  • Файловый архив

  • Реклама





    Проголосуй!
    Статьи на какие темы вы бы желали видеть на нашем сайте?

    Системное администрирование Windows
    Администрирование *nix систем
    Обзоры пользовательского программного обеспечения
    Вебмастеринг: тонкости сайтостроения
    Вебмастеринг: юзабилити сайтов
    Вебпрограмминг: полезные решения
    Linux-системы: вопросы по работе
    Вопросы по аппаратной части компьютеров
    Обзоры программ для администраторов
    Компьютерная безопасность (для пользователей)
    Компьютерная безопасность (для администраторов)
    Другое


    Результаты
    Другие Опросы

    голосов: 16198

    Избранное
  • Установка Php-Nuke
  • Установка IkonBoard на локалхосте



    Форум по движку IkonBoard V.2

    Файловый архив для вебмастеров: полезные скрипты

    Форум по операционным системам: Linux, Windows, Mac

  • Поиск по сайту




    В помощь сисадмину: Установка почтового сервера на базе Exim
    Опубликовал ginger 15.09.2003 03:08

    В помощь сисадмину
    В данной статье мы рассмотрим установку почтового сервера на базе 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
    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  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  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, можно считать полностью завершенной.

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


    КомментироватьВерсия для печати

     
    Категории
  • В помощь сисадмину
  • Все о софте
  • Вебмастеру
  • Игры
  • Hardware
  • О сайте
  • Программирование
  • Операционные системы
  • IkonBoard
  • InvisionBoard
  • Скрипты в примерах
  • Php-Nuke
  • Цифровое изображение
  • Юмор

  • Ссылки по теме
  • Ещё о В помощь сисадмину
  • Новости от ginger


    Популярная статья в категории В помощь сисадмину:

    Групповые политики Active Directory



  • This web site was made with PHP-Nuke