Установка и настройка почтового сервера Exim на CentOS 6.2 x32

В этом коротком посте описан процесс установки почтового сервера на базе MTA Exim 4.77 с MDA Dovecot v2, MySQL, Clamav и Postfixadmin.

Альтернативный почтовый сервер на Postfix:
Установка и настройка почтового сервера Postfix на CentOS 6.2 x32

PS: Решил выложить настройку Exim.

Домен:

point.local

Имя почтового сервера:

mx.point.local

IP адрес почтового сервера:

192.168.1.2

Краткое содержание:

1. Подключение необходимых репозитариев

2. Установка СУБД MySQL, создание базы данных VEXIM

3. Установка Postfixadmin

4. Установка ClamAV

5. Установка и настройка Dovecot

6. Установка и настройка Exim

7. Отключаем Postfix

8. Добавление сервисов в автозагрузку

9. Настройка DNS сервера для тестирования

10. Установка и настройка RoundCube Web Mail

Приступим….

1. Подключим необходимые репозитарии:

# rpm -Uvh http://dl.atrpms.net/el6-i386/atrpms/st … 6.i686.rpm

2. Установка СУБД MySQL, создание базы данных VEXIM
Установим СУБД MySQL:

# yum -y install mysql-server mysql
# service mysqld start

Создадим базу данных Vexim:

# mysql

mysql> CREATE DATABASE vexim;
mysql> GRANT ALL ON vexim.* to vexim@localhost identified by 'password';
mysql>quit

3. Установка Postfixadmin
Установим зависимости для Postfixadmin:

# yum -y install httpd php php-imap php-mbstring php-common php-pdo php-mysql php-cli gedit mc

Скачаем Postfixadmin и настроим его:

# cd /var/www/html
# wget http://sourceforge.net/projects/postfix … z/download
# tar -xvzf postfixadmin-2.3.5.tar.gz
# mv postfixadmin-2.3.5/ postfixadmin
# cd  postfixadmin

# gedit config.inc.php

$CONF['configured'] = true;
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'vexim';
$CONF['database_password'] = 'password';
$CONF['database_name'] = 'vexim';

4. Установка ClamAV
Установим Clamav:

# yum -y install clamav

# freshclam -v

5. Установка и настройка Dovecot
Установим Dovecot:

# yum install dovecot dovecot-mysql -y

# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-orig

Настроим Dovecot, создайте файл /etc/dovecot/dovecot.conf:

# gedit /etc/dovecot/dovecot.conf

# 2.0.14: dovecot.conf
# OS: Linux 2.6.32-71.29.1.el6.i686 i686 CentOS Linux release 6.0 (Final) 
base_dir = /var/run/dovecot/
disable_plaintext_auth = no
first_valid_uid = 93
listen = *
login_greeting = Dovecot ready man.
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
mail_location = maildir:/var/vmail/%d/%u
passdb {
driver = pam
}
passdb {
args = /etc/dovecot/dovecot-mysql.conf
driver = sql
}
protocols = imap pop3
service auth {
unix_listener auth-master {
group = exim
mode = 0660
user = exim
}
user = root
}
service imap-login {
chroot = 
client_limit = 256
process_limit = 128
process_min_avail = 3
service_count = 1
vsz_limit = 64 M
}
service pop3-login {
chroot = 
client_limit = 256
process_limit = 128
process_min_avail = 3
service_count = 1
vsz_limit = 64 M
}
ssl = no
userdb {
driver = passwd
}
userdb {
args = /etc/dovecot/dovecot-mysql.conf
driver = sql
}
protocol imap {
imap_client_workarounds = tb-extra-mailbox-sep
mail_plugins = quota imap_quota
}
protocol pop3 {
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = [email protected]
}

# gedit /etc/dovecot/dovecot-mysql.conf

#File: /etc/dovecot/dovecot-mysql.conf
driver = mysql
connect = host=localhost dbname=vexim user=vexim password=password
default_pass_scheme = MD5-CRYPT
password_query = SELECT `username` as `user`, `password` FROM  `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
user_query = SELECT 93 AS `uid`, 93 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'

6. Установка и настройка Exim
Установим сам Exim:

# yum install exim exim-mysql -y
# mv /etc/exim/exim.conf /etc/exim/exim.conf-orig

Теперь настроим Exim, создадим конфиг файл /etc/exim/exim.conf

# gedit /etc/exim/exim.conf

primary_hostname = mx.point.local
hide mysql_servers = localhost/vexim/vexim/password

domainlist local_domains = ${lookup mysql{SELECT `domain` \
FROM `domain` WHERE \
`domain`='${quote_mysql:$domain}' AND \
`active`='1'}}

domainlist relay_to_domains = ${lookup mysql{SELECT `domain` \
FROM `domain` WHERE \
`domain`='${quote_mysql:$domain}' AND \
`active`='1'}}

hostlist   relay_from_hosts = localhost:127.0.0.0/8:192.168.1.0/24 #add the hosts from which you allow relaying here

acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data

av_scanner = clamd:/var/run/clamav/clamd.socket

# spamd_address = 127.0.0.1 783

qualify_domain = point.local
qualify_recipient = point.local
allow_domain_literals = false
exim_user = exim
exim_group = exim
never_users = root
rfc1413_query_timeout = 0s

sender_unqualified_hosts = +relay_from_hosts
recipient_unqualified_hosts = +relay_from_hosts

ignore_bounce_errors_after = 45m
timeout_frozen_after = 15d
helo_accept_junk_hosts = 192.168.1.0/24
auto_thaw = 1h
smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"
smtp_accept_max = 50
smtp_accept_max_per_connection = 25
smtp_connect_backlog = 30
smtp_accept_max_per_host = 20
split_spool_directory = true
remote_max_parallel = 15
return_size_limit = 70k
message_size_limit = 64M
helo_allow_chars = _
smtp_enforce_sync = true

log_selector = \
+all_parents \
+connection_reject \
+incoming_interface \
+lost_incoming_connection \
+received_sender \
+received_recipients \
+smtp_confirmation \
+smtp_syntax_error \
+smtp_protocol_error \
-queue_run

syslog_timestamp = no

begin acl

acl_check_rcpt:
accept  hosts = :
deny    message       = "incorrect symbol in address"
domains       = +local_domains
local_parts   = ^[.] : ^.*[@%!/|]

deny    message       = "incorrect symbol in address"
domains       = !+local_domains
local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

accept  local_parts   = postmaster
domains       = +local_domains

deny    message       = "HELO/EHLO required by SMTP RFC"
condition     = ${if eq{$sender_helo_name}{}{yes}{no}}

accept  authenticated = *

deny    message       = "Your IP in HELO - access denied!"
hosts         =  * : !+relay_from_hosts : !81-196.point.local
condition     = ${if eq{$sender_helo_name}\
{$sender_host_address}{true}{false}}

deny    condition     = ${if eq{$sender_helo_name}\
{$interface_address}{yes}{no}}
hosts         = !127.0.0.1 : !localhost : *
message       = "My IP in your HELO! Access denied!"

deny    condition     = ${if match{$sender_helo_name}\
{\N^\d+$\N}{yes}{no}}
hosts         = !127.0.0.1 : !localhost : *
message       = "Incorrect HELO string"

# filter spammers from dynamic ips
deny    message       = "your hostname is bad (adsl, poll, ppp & etc)."
condition     = ${if match{$sender_host_name} \
{adsl|dialup|pool|peer|dhcp} \
{yes}{no}}

warn
set acl_m0 = 30s
warn
hosts = +relay_from_hosts:4.3.2.1/32:192.168.1.0/24 #disable waits for 'friendly' hosts
set acl_m0 = 0s
warn
logwrite = Delay $acl_m0 for $sender_host_name \
[$sender_host_address] with HELO=$sender_helo_name. Mail \
from $sender_address to $local_part@$domain.
delay = $acl_m0

accept  domains       = +local_domains
endpass
message       = "No such user"
verify        = recipient

accept  domains       = +relay_to_domains
endpass
message       = "i don't know how to relay to this address"
verify        = recipient

#  deny    message       = "you in blacklist - $dnslist_domain \n $dnslist_text"
#          dnslists      = opm.blitzed.org : \
#                          cbl.abuseat.org : \
#                          bl.csma.biz

accept  hosts         = +relay_from_hosts

deny    message       = "Homo hominus lupus est"

acl_check_data:

# check for viruses
deny malware = *
message = "Your message contains viruses: $malware_name"

# if needed - add spam filtering here

# permit everything else
accept

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

system_aliases:
driver      = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
`address`='${quote_mysql:$local_part@$domain}' OR \
`address`='${quote_mysql:@$domain}'}}

dovecot_user:
driver = accept
condition = ${lookup mysql{SELECT `goto` FROM \
`alias` WHERE \
`address`='${quote_mysql:$local_part@$domain}' OR \
`address`='${quote_mysql:@$domain}'}{yes}{no}}
transport = dovecot_delivery

begin transports

remote_smtp:
driver = smtp
#interface = 4.3.2.1 #your public ip address, if it's the main server ip - you could skip this parameter. if it's an alias- it must be specified in clear

dovecot_delivery:
driver = pipe
command = /usr/libexec/dovecot/deliver -d $local_part@$domain
message_prefix =
message_suffix =
delivery_date_add
envelope_to_add
return_path_add
log_output
user = exim

address_pipe:
driver = pipe
return_output

address_reply:
driver = autoreply

begin retry

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

begin rewrite

begin authenticators

auth_plain:
driver = plaintext
public_name = LOGIN
server_prompts = Username:: : Password::
server_condition = "${if crypteq{$2}{${lookup mysql{SELECT `password` FROM `mailbox` WHERE `username` = '${quote_mysql:$1}'}}}{yes}{no}}"
server_set_id = $1

auth_login:
driver = plaintext
public_name = PLAIN
server_condition = "${if crypteq{$3}{${lookup mysql{SELECT `password` FROM `mailbox` WHERE `username` = '${quote_mysql:$2}'}}}{yes}{no}}"
server_prompts = :
server_set_id = $2

auth_cram_md5:
driver = dovecot
public_name = CRAM-MD5
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1

7. Отключаем Postfix

# alternatives —config mta
# chkconfig —level 123456 postfix off
# service postfix stop
# yum remove postfix -y

Также отключим цепочку RH-Input:

# setup

Firewall Configuration -> Firewall Enabled -> Убираем галочку

Отключаем SELINUX:

# gedit /etc/selinux/config   -> SELINUX=disabled

8. Добавление сервисов в автозагрузку

# chkconfig —level 35 clamav on
# chkconfig —level 35 mysqld on
# chkconfig —level 35 httpd on
# chkconfig —level 35 exim on
# chkconfig —level 35 dovecot on

Выставляем права:

# usermod -a -G exim clamav
# chmod -Rf g+w /var/spool/exim
# chmod -Rf g+s /var/spool/exim
# mkdir /var/vmail
# chown exim:exim -R /var/vmail
# chown exim:exim -R /var/spool/exim
# chown clamav:clamav -R /var/run/clamav/

9. Настройка DNS сервера
Для того чтобы протестировать почтовый сервер, настройте Bind. Этот пакет позволить настроить DNS сервер.
Напомню, что наш почтовый сервер имеет следующий IP адрес 192.168.1.2.

# yum install bind -y

# gedit /etc/sysconfig/network

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=mx.point.local

# gedit /etc/hosts

192.168.1.2 mx.point.local mx

# service NetworkManager stop

# chkconfig NetworkManager off

# yum remove dnsmasq -y

# vi /etc/resolv.conf

nameserver 192.168.1.2

# gedit /etc/named.conf

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */

        bindkeys-file "/etc/named.iscdlv.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

zone "point.local" {
        type master;
        file "point.local.fwd";
};

zone "1.168.192.in-addr.arpa" {
        type master;
        file "point.local.rev";
};

include "/etc/named.rfc1912.zones";

# gedit  /var/named/point.local.fwd

$ORIGIN point.local.

$TTL 3D

@       SOA             mx.point.local.     root.point.local. (12 4h 1h 1w 1h)
@       IN      NS          mx.point.local.
@       IN      MX      10    mail.point.local.

mx.point.local.    IN      A    192.168.1.2
www            IN      A    192.168.1.2
mail            IN    A    192.168.1.2

# gedit  /var/named/point.local.rev

$ORIGIN 1.168.192.in-addr.arpa.

$TTL 3D
@    SOA         mx.point.local.    root.point.local. (12 4h 1h 1w 1h)
@    IN      NS      mx.point.local.
2    IN      PTR     mx.point.local.
# gedit /etc/resolv.conf -> ставим свой IP адрес 192.168.1.2  -  nameserver 192.168.1.2

# service named start

# chkconfig —level 35 named on

Проверка работы настроенного DNS:

# dig point.local

; <<>> DiG 9.7.4-RedHat-9.7.4-1.el5 <<>> point.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53153
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;point.local.                   IN      A
;; ANSWER SECTION:
point.local.            3600    IN      A       192.168.1.2
;; AUTHORITY SECTION:
point.local.            3600    IN      NS      mx.point.local.
;; ADDITIONAL SECTION:
mx.point.local.         3600    IN      A       192.168.1.2
;; Query time: 8 msec
;; SERVER: 192.168.1.2#53(192.168.1.2)
;; WHEN: Wed Aug 17 05:03:48 2011
;; MSG SIZE  rcvd: 78

# nslookup mx.point.local

# nslookup 192.168.1.2
# nslookup -type=MX point.local

# reboot

Теперь зайдите в PostfixAdmin, для этого запустите браузер и введите веб адрес http://127.0.0.1/postfixadmin/setup.php

В окошке Change setup password введите свой пароль. Запомните его, он нам пригодится в дальнейшем.

Во втором окошке появится HASH нашего пароля (шифрованный пароль). Скопируйте эту "белеберду" в буфер.

После того как вы скопировали "hash" в буфер обмена, его нужно вставить в файл /var/www/html/postfixadmin/config.inc.php

Откройте этот файл и найдите в нем строчку:

$CONF['setup_password'] = 'changeme';

За место "changeme" ставим наш hash который скопировали в буфер. Получится так:

$CONF['setup_password'] = '6c5af4c72af213f0acac5f21d8f95ca1:e59172283d2bb72a5992af8ddc15332cde62f003';

И еще поставьте NO здесь:

$CONF['emailcheck_resolve_domain']='NO';

Сохраните файл.

Зайдите еще раз на страничку: http://127.0.0.1/postfixadmin/setup.php
Создайте учетку Админа, например "[email protected]", определите его пароль.
Нажмите на кнопке "Add Admin", появится надпись:

Admin has been added!
([email protected])

Запомните адрес админа и пароль.

Теперь уже заходим на страничку http://127.0.0.1/postfixadmin/
Вводим почтовый адрес админа и пароль.
Добавляем домен "point.local":  Domain List - > New Domain -> point.local

Aliases - Ставим 0

Mailboxes - Ставим 0

Галочка Add default mail aliases
После появится надпись:

Domain has been added!
(point.local)

Создадим первый почтовый ящик, я создал "[email protected]".

Меню Virtual List -> Add MailBox ->

Username - linux

Password - 123 (sample)

Теперь пришло время тестировать наш почтовый сервер.

Найдите в локальной сети свободный компьютер, настройте сетевые настройки так чтобы он видел почтовый сервер.

Сетевой адрес должен быть в под сети сервера. Не забудьте указать ДНС сервер,  у меня он имеет IP адрес почтового сервера.

Откройте почтовый клиент Outlook, укажите адрес вашего сервера и логин/пароль учетной записи [email protected]

SMTP/POP3 server:                        point.local

Учетная запись (Account name):   [email protected]

Пароль (password):                      123

Отправьте себе тестовое письмо!

10. Установка и настройка RoundCube Web Mail

На данном этапе у нас есть удобный веб интерфейс для администратора почтового сервера, но нет веб интерфейса для пользователей. Этот досадное недоразумение решается установкой RoundCube:

# rpm -Uvh http://download.fedoraproject.org/pub/e … noarch.rpm
# yum install php-xml php-mcrypt php-intl php-sqlite php-pgsql
# cd /var/www/html
# wget http://nchc.dl.sourceforge.net/project/ … 7.2.tar.gz
# tar xvfz roundcubemail-0.7.2.tar.gz
# mv roundcubemail-0.7.2 roundcube

Cоздаем файл roundcube.conf:

# vi /etc/httpd/conf.d/roundcube.conf

Вписываем следующее:

Alias /webmail /var/www/html/roundcube


AddType application/x-httpd-php .php .php3 .php4 .phtml

# forcing open_base dir do not affect anything
php_admin_value open_basedir /

# AddDefaultCharset UTF-8
AddType text/x-component .htc


php_flag display_errors Off
php_flag log_errors On
php_value error_log logs/errors
php_value upload_max_filesize 5M
php_value post_max_size 6M
php_value memory_limit 64M



php_flag display_errors Off
php_flag log_errors On
php_value error_log logs/errors
php_value upload_max_filesize 5M
php_value post_max_size 6M
php_value memory_limit 64M



Order allow,deny
Deny from all


Order deny,allow
Allow from all

Далее создаем базу данных и пользователя:

# mysqladmin -p create roundcubemail
# mysql -p

mysql> GRANT ALL ON roundcube.* TO roundcube@localhost IDENTIFIED BY 'password';

# service httpd restart
# chown apache:apache -R /var/www/html/roundcube/temp
# chown apache:apache -R /var/www/html/roundcube/log

Далее  идем по адресу http://127.0.0.1/roundcube/installer/ и  устанавливаем по умолчанию, не меняя никаких настроек, кроме двух полей,  где нужно указать название базы данных и пароль. В нашем случае  название будет roundcubemail, а пароль, указанный ранее.Если все прошло успешно, удаляем директорию установщика в целях безопасности.

# rm -R -f /var/www/html/roundcube/installer

Альтернативный почтовый сервер на Postfix:
Установка и настройка почтового сервера Postfix на CentOS 6.2 x32

Оригинал: linuxforum.ru/viewtopic.php?id=21934

Запись опубликована в рубрике *Mail. Добавьте в закладки постоянную ссылку.

2 комментария на «Установка и настройка почтового сервера Exim на CentOS 6.2 x32»

  1. deep говорит:

    Ты сам то хоть строчку тут понял? Накопипастили по всему интернету, а что копипастили понимания 0.

    • Eugen говорит:

      у каждого свое мнение, скопипастил то что мне надо было в тот момент времени для моих целей

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Я не спамер This plugin created by Alexei91