Добавить в избранное | Сделать стартовой страницей

Большая Linux библиотека для пользователей OS Linux и ПО для нее
Есть что сказать? Нужен совет? Посети наш форум.


-


Установка и настройка Exim. Почтовый сервер на базе Exim с использованием DbMail для аккаунтов пользователей.

Автор : Королев Артем

Установка и настройка Exim. Почтовый сервер на базе Exim с использованием DbMail для аккаунтов пользователей.

Бредисловие. Данная статья поможет Вам разобраться с некоторыми тонкостями почтового сервера Exim.

Приступая к установке и настройке почтового сервера Exim обидитесь что вы действительно обладаете навыками администрирования, чуствуете себя «как рыба в воде» пользуясь поисковой машиной http://google.com ибо этот поисковик поможет разобраться вам с многими трудностями в ходу компиляции и настройки постового сервера exim.

Установку начнем с мониторинга предустановленного ПО на сервера. Для правильной работы почтового сервера нам необходимо :

            ? MySQL >4.0.x (желательно иметь MySQL 5.0.33)

            ? Apache 2.0 или другой вебсервер

            ? PHP 5.2

            ? OpenSSL

            ? OS любая Unix совместимая (я все устанавливал на Debiane и матюкался очень сильно)

И так, приступаем.

Алгоритм (порядок) установки почтового сервера Exim:

  1. Установка Dbmail

а) сборка dbmail

б) создание БД и таблиц для авторизации

в) настройка Dbmail

г) старт dbmail

  1. Установка Exim

a. сборка exim

b.  настрока exim

c.  старт exim

d.  тест exim

  1. Установка DBMail Administrator

1. Установка Dbmail.

С веб-ресурса http://www.dbmail.org/ скачиваем последнюю стабильную версию dbmail.

root:~# cd /usr/src

root:~# wget –c http://www.dbmail.org/download/2.0/dbmail-2.0.11.tgz

root:~# tar zxf dbmail-2.0.11.tgz

root:~# cd dbmail-2.0.11


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

root:~# useradd dbmail -c "DBMail Server" -d /var/spool/dbmail -g mail -s /bin/false

root:~# mkdir /var/spool/dbmail

root:~# chown dbmail.mail /var/spool/dbmail

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

root:~# mysql_config

Usage: /usr/bin/mysql_config [OPTIONS]

Options:

        --cflags         [-I/usr/local/mysql/include]

        --include        [-I/usr/local/mysql/include]

        --libs           [-L/usr/local/mysql/lib -lmysqlclient -lz -lcrypt -lnsl -lm]

        --libs_r         [-L/usr/local/mysql/lib -lmysqlclient_r -lz -lpthread -lcrypt -lnsl -lm -lpthread]

        --socket         [/tmp/mysql.sock]

        --port           [3306]

        --version        [5.0.27]

        --libmysqld-libs [-L/usr/local/mysql/lib -lmysqld -lz -lpthread -lcrypt -lnsl -lm -lpthread -lrt]

Примечание: если на Вашем сервере при установке ОС была установлена БД mysql ,а позже вы ее обновили не изпакетов и установили в папку /usr/local/mysql советую вам сделать следующее:

root:~# mv /usr/bin/mysql_config /usr/bin/mysql_config.def

root:~# ln –s /usr/local/mysql/bin/mysql_config /usr/bin/mysql_config     

Если этого не сделать, то dbmail, exim будут использовать при компиляции старую версию mysql. Лично у меня возникли проблему с компиляцией из-за этой тупой ошибки.

root:~# ./configure – with-mysql

root:~# make

root:~# make check

root:~# make install

root:~# strip /usr/local/sbin/dbmail*

После чего создаем базу данных, пользователя и соответствующие таблицы, для этого выполним:

root:~# mysql -u root –p

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 4813 to server version: 5.0.27-standard-log

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

mysql> create database dbmail;

Query OK, 0 rows affected (0.00 sec)

mysql> \q

Bye

root:~# mysql -u root -p < sql/mysql/create_tables.mysql

root:~# mysql -u root –p

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 4813 to server version: 5.0.27-standard-log

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

mysql> GRANT ALL PRIVILEGES ON dbmail.* TO dbmail@localhost IDENTIFIED BY 'your_password' WITH GRANT OPTION;

Query OK, 0 rows affected (0.00 sec)

mysql> \q

Bye

root:~# install -m 640 /usr/src/dbmail-2.0.11/dbmail.conf /etc/

root:~# chown root.root /etc/dbmail.conf

После этого отредактируем конфигурационный /etc/dbmail.conf файл:

root:~# vi /etc/dbmail.conf

host=localhost

sqlport=3306 

sqlsocket=/tmp/mysql.sock

user=dbmail

pass=your_password

db=dbmail

POSTMASTER=postmaster

TRACE_LEVEL=2

[SMTP]

SENDMAIL=/usr/sbin/sendmail

AUTO_NOTIFY=no

AUTO_REPLY=no

TRACE_LEVEL=2

[POP]

EFFECTIVE_USER=dbmail

EFFECTIVE_GROUP=mail

BINDIP=*

PORT=110

NCHILDREN=10

MAXCHILDREN=20

MINSPARECHILDREN=2

MAXSPARECHILDREN=4

MAXCONNECTS=100

TIMEOUT=300

RESOLVE_IP=yes

POP_BEFORE_SMTP=no

TRACE_LEVEL=2

[IMAP]

EFFECTIVE_USER=nobody

EFFECTIVE_GROUP=nogroup

BINDIP=*

PORT=143

NCHILDREN=50

MAXCHILDREN=200

MINSPARECHILDREN=2

MAXSPARECHILDREN=4

MAXCONNECTS=10000

TIMEOUT=4000

RESOLVE_IP=yes

IMAP_BEFORE_SMTP=no

TRACE_LEVEL=2

# end of configuration file

После этого, создаем файлы запуска dbmail pop3/imap.

root:~# cp /usr/src/exim/dbmail-2.0.11/contrib/startup-scripts/debian/dbmail /etc/init.d/dbmail

root:~# update-rc.d dbmail defaults

root:~# /etc/init.d/dbmail start

На этом этапе установка и настройка Dbmail окончена.

2. Установка Exim.

С веб-ресурса http://www.exim.org/ скачиваем последнюю стабильную версию exim.

root:~# wget -c http://mirrors.fourbatons.com/exim/ftp/exim/exim4/exim-4.66.tar.gz

root:~# tar zxf exim-4.66.tar.gz

root:~# cd exim-4.66

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

root:~# useradd mail -c "Mail Server" -d /var/spool/mqueue -g mail -s /bin/false

root:~# cat /etc/passwd |grep mail

mail:x:8:8:mail:/var/spool/mqueue:/bin/false

root:~# cp src/EDITME Local/Makefile

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

root:~# vi Local/Makefile

BIN_DIRECTORY=/usr/exim/bin

на:

BIN_DIRECTORY=/usr/sbin

CONFIGURE_FILE=/usr/exim/configure

на:

CONFIGURE_FILE=/etc/mail/exim.conf

EXIM_USER=

на:

EXIM_USER=1005

# EXIM_GROUP=

на:

EXIM_GROUP=6

# SUPPORT_MAILDIR=yes

на:

SUPPORT_MAILDIR=yes

# LOOKUP_MYSQL=yes

на:

LOOKUP_MYSQL=yes

# 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

# AUTH_CRAM_MD5=yes

# AUTH_PLAINTEXT=yes

на:

AUTH_CRAM_MD5=yes

AUTH_PLAINTEXT=yes

# SUPPORT_TLS=yes

на:

SUPPORT_TLS=yes

# TLS_LIBS=-lssl -lcrypto

на:

TLS_LIBS=-lssl -lcrypto

# LOG_FILE_PATH=syslog

на:

LOG_FILE_PATH=syslog

# EXIM_PERL=perl.o

на:

EXIM_PERL=perl.o

SYSTEM_ALIASES_FILE=/etc/aliases

на:

SYSTEM_ALIASES_FILE=/etc/mail/aliases

# CHOWN_COMMAND=/usr/bin/chown

на:

CHOWN_COMMAND=/usr/sbin/chown

# SUPPORT_MOVE_FROZEN_MESSAGES=yes

на:

SUPPORT_MOVE_FROZEN_MESSAGES=yes

root:~# make

Примечание: во время компиляции у Вас может все остановиться на какой нибуть ошибке, возможно в вашей системе нет необходимых библиотек. Вам придеться их установить.

root:~# make install

root:~# ln -fs /usr/sbin/exim /usr/lib/sendmail

root:~# ln -fs /usr/sbin/exim /usr/sbin/sendmail

root:~# ln -fs /usr/sbin/exim /usr/bin/mailq

root:~# ln -fs /usr/sbin/exim /usr/bin/runq

root:~# strip /usr/sbin/exim*

root:~# cd /etc/mail

root:~# cp exim.conf exim.conf-default

root:~# grep -v ^# exim.conf-default > exim.conf

Для правильной работы Exim, требуется добавить в созданную

ранее базу данных dbmail, таблицу с именем domains, для этого выполним:

root:~# mysql -u root –p dbmail

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 4813 to server version: 5.0.27-standard-log

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

mysql> CREATE TABLE domains ( did int(10) unsigned NOT NULL auto_increment, domainname varchar(128) NOT NULL default '', type enum('LOCAL','RELAY','VIRTUAL') NOT NULL default 'LOCAL', PRIMARY KEY  (did) );

mysql> INSERT INTO domains (domainname, type) VALUES ('domain.com','LOCAL');

mysql> INSERT INTO domains (domainname, type) VALUES ('virtual-domain.com','VIRTUAL');

mysql> INSERT INTO domains (domainname, type) VALUES ('relay-domain.com','RELAY');

mysql> \q

Bye

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

root:~# cd /etc/mail

root:~# vi exim.conf

######################################################################

#                    MAIN CONFIGURATION SETTINGS                     #

######################################################################

hide mysql_servers = "localhost/dbmail/dbmail/your-password"

primary_hostname = domain.com

domainlist local_domains = ${lookup mysql{SELECT domainname FROM domains \

                           WHERE domainname='$domain' AND type='LOCAL'}}

domainlist relay_to_domains = ${lookup mysql{SELECT domainname FROM domains \

                              WHERE domainname='$domain' AND type='RELAY'}}

hostlist   relay_from_hosts = 127.0.0.1

acl_smtp_rcpt = acl_check_rcpt

log_selector =  \

        +all_parents \

        +lost_incoming_connection \

        +received_sender \

        +received_recipients \

        +smtp_confirmation \

        +smtp_syntax_error \

        +smtp_protocol_error

allow_domain_literals = false

never_users = root

host_lookup = *

rfc1413_hosts = *

rfc1413_query_timeout = 0s

ignore_bounce_errors_after = 30m

timeout_frozen_after = 3d

freeze_tell = postmaster

auto_thaw = 1h

message_size_limit = 5M

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

smtp_banner = "Welcome on our mail server!\n\

        This system does not accept Unsolicited \

        Commercial Email\nand will blacklist \

        offenders via our spam processor.\nHave a \

        nice day!\n\n${primary_hostname} ESMTP"

######################################################################

#                       ACL CONFIGURATION                            #

#         Specifies access control lists for incoming SMTP mail      #

######################################################################

begin acl

acl_check_rcpt:

  accept  hosts = :

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

  accept  local_parts   = postmaster

          domains       = +local_domains

  require verify        = sender

  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

  accept

acl_check_data:

  accept

######################################################################

#                      ROUTERS CONFIGURATION                         #

#               Specifies how addresses are handled                  #

######################################################################

#     THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT!       #

# An address is passed to each router in turn until it is accepted.  #

######################################################################

begin routers

dnslookup:

  driver = dnslookup

  domains = ! +local_domains

  transport = remote_smtp

  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8

  no_more

dbmailuser:

  driver = accept

  condition = ${lookup mysql{SELECT alias_idnr FROM dbmail_aliases WHERE \

                alias='${quote_mysql:$local_part@$domain}' OR \

                alias='${quote_mysql:@$domain}'}{yes}{no}}

  transport = dbmail_delivery

######################################################################

#                      TRANSPORTS CONFIGURATION                      #

######################################################################

#                       ORDER DOES NOT MATTER                        #

#     Only one appropriate transport is called for each delivery.    #

######################################################################

begin transports

remote_smtp:

  driver = smtp

dbmail_delivery:

  driver = pipe

  check_string =

  command = /usr/local/sbin/dbmail-smtp -d ${pipe_addresses}

  current_directory = "/var/spool/dbmail"

  escape_string =

  group = mail

  message_prefix =

  message_suffix =

  path = "/bin:/sbin:/usr/local/bin:/usr/local/sbin"

  user = dbmail

address_pipe:

  driver = pipe

  return_output

address_file:

  driver = appendfile

  delivery_date_add

  envelope_to_add

  return_path_add

address_reply:

  driver = autoreply

######################################################################

#                      RETRY CONFIGURATION                           #

######################################################################

begin retry

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

######################################################################

#                      REWRITE CONFIGURATION                         #

######################################################################

begin rewrite

######################################################################

#                   AUTHENTICATION CONFIGURATION                     #

######################################################################

begin authenticators

# AUTH PLAIN authentication method with MySQL used by Netscape Messenger.

auth_plain:

  driver = plaintext

  public_name = PLAIN

  server_condition = ${lookup mysql{SELECT user_idnr FROM dbmail_users \

        WHERE userid = '${quote_mysql:$2}' AND passwd = '${quote_mysql:$3}'}}

  server_set_id = $2

# AUTH LOGIN authentication method with MySQL support used by Outlook Express.

auth_login:

  driver = plaintext

  public_name = LOGIN

  server_condition = ${lookup mysql{SELECT user_idnr FROM dbmail_users \

        WHERE userid = '${quote_mysql:$1}' AND passwd = '${quote_mysql:$2}'}}

  server_prompts = "Username:: : Password::"

  server_set_id = $1

# AUTH CRAM-MD5 authentication method with MySQL used by The Bat!.

auth_cram_md5:

  driver = cram_md5

  public_name = CRAM-MD5

  server_secret = ${lookup mysql{SELECT passwd FROM dbmail_users \

        WHERE userid = '${quote_mysql:$1}'}{$value}fail}

  server_set_id = $1

######################################################################

#                   CONFIGURATION FOR local_scan()                   #

######################################################################

# If you have built Exim to include a local_scan() function that contains

# tables for private options, you can define those options here. Remember to

# uncomment the "begin" line. It is commented by default because it provokes

# an error with Exim binaries that are not built with LOCAL_SCAN_HAS_OPTIONS

# set in the Local/Makefile.

# begin local_scan

# End of Exim configuration file

После этого, создаем файл запуска Exim.

root:~# cat > /etc/init.d/exim.sh

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

root:~# chmod +x /etc/init.d/exim.sh


Теперь проверим работу Exim'а.


root:~# /etc/init.d/exim.sh start

root:~# telnet localhost 25

Trying 127.0.0.1...

Connected to localhost.localdomain.

Escape character is '^]'.

220-Welcome on our mail server!

220-This system does not accept Unsolicited Commercial Email

220-and will blacklist offenders via our spam processor.

220-Have a nice day!

220-

220 domain.com ESMTP

ehlo test.ru

250- domain.com Hello localhost [127.0.0.1]

250-SIZE 5242880

250-PIPELINING

250-AUTH PLAIN LOGIN CRAM-MD5

250 HELP

mail from:[email protected]
250 OK
rcpt to:[email protected]
250 Accepted
data
354 Enter message, ending with "." on a line by itself
Hello!
.
250 OK id=19NuQl-000NZA-47
quit
221 domain.com closing connection
Connection closed by foreign host.

root:~# tail /var/log/mail.log

Jan 22 04:56:16 cs954 exim[27304]: 2007-01-22 04:56:16 1H8oPq-00076O-PZ <= [email protected] H=localhost [127.0.0.1] P=smtp S=208 from for [email protected]

Jan 22 04:56:16 cs954 exim[27436]: 2007-01-22 04:56:16 1H8oPq-00076O-PZ ** [email protected] R=dnslookup T=remote_smtp: SMTP error from remote mail server after RCPT TO:: host mail.seo.kharkov.ua [81.177.8.120]: 550-Verification failed for \n550 Sender verify failed

Jan 22 04:56:16 cs954 exim[27438]: 2007-01-22 04:56:16 1H8oPw-00078Y-EY <= <> R=1H8oPq-00076O-PZ U=mail P=local S=1198 from <> for [email protected]

Jan 22 04:56:16 cs954 exim[27436]: 2007-01-22 04:56:16 1H8oPq-00076O-PZ Completed

На первый взгляд все работает, идем дальше, теперь проверим dbmail-pop3d.

root:~# telnet localhost 110

Trying 127.0.0.1...

Connected to localhost.localdomain.

Escape character is '^]'.

+OK DBMAIL pop3 server ready to rock <36cca269d40e4405b2afa9cb785fc23e@cs954>

user sysadmin

+OK Password required for sysadmin

pass password

+OK sysadmin has 2228 messages (1156332 octets)

list

+OK 2228 messages (1156332 octets)

1 481

2 557

3 481

4 557

.

quit

+OK see ya later

Connection closed by foreign host.

3. Установка DBMail Administrator

Скачиваем с http://library.mobrien.com/dbmailadministrator/index.htm последнюю версию

root:~# wget -с http://dbma.ca/cgi-bin/tracker/ax.cgi?http://library.mobrien.com/dbmailadministrator/DBMA_SQL_V2.tar.gz

root:~# cd /usr/local/www

root:~# tar xvf DBMA_SQL_V2.tar

root:~# chown -R www:www /usr/local/www/mailadministrator

root:~# chmod 777 /usr/local/www/dbmailadministrator

root:~# chmod 755 /usr/local/www/dbmailadministrator/*.cgi

Обновим PERL Модули

root:~# perl -MCPAN -e shell

CPAN> install Digest::MD5

CPAN> install Bundle::libnet

CPAN> install DBI

 CPAN> install DBD::Pg or DBD::mysql # whichever you are using, MySQL or PostGreSQL

Конфигурируем Apache сервер

root:~# vi /etc/httpd/conf/httpd.conf

Alias /mail /usr/local/www/dbmailadministrator
 # change for your system

 AllowOverride None

 Options ExecCGI MultiViews

 Order allow,deny

 Allow from all

 AuthUserFile /usr/local/www/dbmailadministrator/.htpasswd # change for your system

 AuthGroupFile "www"

 AuthType Basic

 AuthName "Administration Only.  Enter username and password."

 require valid-user

 order allow,deny

root:~# apachectl graceful

На этом наша установка закончена. Зайдя по ссылке http://your-domain.com/mail Вы будите иметь возможность управлять всеми почтовыми ящиками на Вашем сервере.

Свои вопросы, пожелания, благодарность пишите на  ,компания Admin-sys ,наш веб ресурс http://admin-sys.net.ru


полипропилен купить | аренда манипулятора