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 Код: 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 Код: su-2.05a# echo -n my-secret-pass | mimencode -b Код: 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 |
|