Установка и настройка 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 совместимая (я все устанавливал на Debian’e и матюкался очень сильно)
И так, приступаем.
Алгоритм (порядок) установки почтового сервера Exim:
- Установка Dbmail
а) сборка dbmail
б) создание БД и таблиц для авторизации
в) настройка Dbmail
г) старт dbmail
- Установка Exim
a. сборка exim
b. настрока exim
c. старт exim
d. тест exim
- Установка 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