место в рейтинге
  • 1121810
  • 688
  • 89
Нравится блог?
Подписывайтесь!

Установка Exim 4.80 на CentOS 6.4 x32

Почтовый сервер на базе Exim - это хорошее решение для малых и средних компаний которые хотят иметь свою надежную и стабильную почтовую службу для приема и отправки электронной почтовой переписки. В этой короткой записке будет описан процесс установки почтового сервера на базе MTA Exim 4.80 с MDA Dovecot v2, MySQL, Clamav и Postfixadmin.

Операционная система: CentOS 6.4 x32
MTA: Exim 4.80
IMAP/POP3 server: Dovecot v2.09
Антивирус: Clamav
Домен: point.local
Имя хоста почтового сервера: mx.point.local
IP адрес почтового сервера: 192.168.1.2

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

1. Подключение необходимых репозитариев
2. Установка СУБД MySQL, создание базы данных VEXIM
3. Установка Postfixadmin
4. Установка ClamAV
5. Установка Dovecot
6. Установка Exim
7. Настройка Exim
8. Настройка Dovecot
9. Отключаем Postfix
10. Добавление сервисов в автозагрузку
11. Для тех кто хочет протестировать почтовый сервер Exim в локальной сети
12. Установка и настройка RoundCube Web Mail

Приступим 

Замечу, что я установил CentOS с графической оболочкой

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

# rpm -Uvh http://dl.atrpms.net/el6-i386/atrpms/stable/atrpms-repo-6-6.el6.i686.rpm

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

Установим СУБД MySQL:

# yum -y install mysql-server mysql

# service mysqld start

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

# mysql -p

mysql> CREATE DATABASE vexim;

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

mysql> exit

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/postfixadmin/files/postfixadmin/postfixadmin-2.3.6/postfixadmin-2.3.6.tar.gz/download

# tar -xvzf postfixadmin-2.3.6.tar.gz

# mv postfixadmin-2.3.6/ 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';
$CONF['database_prefix'] = '';

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

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

Установим Clamav:

# yum -y install clamav

5. Установка Dovecot

Установим Dovecot:

# yum install dovecot dovecot-mysql -y

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

Установим сам Exim:

# yum install exim exim-mysql -y

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

7. Настройка 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.50.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.50.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.50.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

8. Настройка Dovecot

Настроим 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 = admin@point.local
}

Также требуется отредактировать файл /etc/dovecot/dovecot-mysql.conf:

# 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'

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

Отключим и удалим Postfix, который по умолчанию уже инсталирован в системе CentOS 6. Это надо сделать чтобы избежать конфликтов между двумя почтовыми системами.

# alternatives --config mta

Selection    Command
-----------------------------------------------
*  1           /usr/sbin/sendmail.postfix
+ 2           /usr/sbin/sendmail.exim

Жмем 2 и нажимаем Enter.

# chkconfig --level 123456 postfix off

# service postfix stop

# yum remove postfix -y

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

# setup

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

Отключаем SELINUX:

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

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

# 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

Для тех кто хочет протестировать Exim в локальной сети.

Если вы уже имеете DNS сервера в которые можно поместить запись MX и A,  данный пункт можно пропустить. Так как третий DNS сервер будет лишним.

Но если у вас нет DNS сервера, проделайте все что внизу написано. Мы устанавливаем DNS сервер чтобы проверить работоспособность почтового сервера.

За DNS функцию в Linux в большинстве случаев отвечает пакет Bind, после установки этого пакета вас станет доступен демон Named. Демон Named позволить настроить DNS сервер. В пашем случае DNS сервер будет мастером. В принципе этого хватает.

Напомню, что наш почтовый сервер имеет следующий IP адрес 192.168.1.2.

При этом еще имеется локальная сеть с адресом 192.168.1.0

Перед настройкой DNS сервера, полезно выключить службу NetworkManager:

# service NetworkManager stop

# chkconfig NetworkManager off

# service network restart

Установка пакета Bind:

# yum install bind bind-utils -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

# 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 {

listen-on port 53 { 127.0.0.1; 10.168.50.2; 192.168.1.2;}; //Перечисляем IP адреса наших сетевых карт 10.168.50.2 - внутренний IP, 192.168.1.2 - внешний IP

listen-on-v6 port 53 { ::1; };

listen-on-v6 port 53 { none; };

forwarders {217.15.88.2; 217.15.88.4;};

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";

allow-query       { any;}; // разрешаем всем доступ к DNS

allow-query-cache { 127.0.0.1; 10.168.50.0/24;}; // Локальная сеть 10.168.50.0/24

allow-recursion   { 127.0.0.1; 10.168.50.0/24;};

dnssec-enable yes;

dnssec-validation yes;

dnssec-lookaside auto;

/* Path to ISC DLV key */

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

managed-keys-directory "/var/named/dynamic";

};

logging {

category lame-servers {null;};

channel default_debug {

file "data/named.run";

severity dynamic;

};

};

zone "." IN {

type hint;

file "named.ca";

};

# Наша прямая зона просмотра "point.local"

zone "point.local" {

type master;

file "point.local.fwd";

allow-update {none;};

#allow-transfer {217.15.54.51; }; //slave DNS server

};

# Наша обратная зона просмотра "point.local"

zone "1.168.192.in-addr.arpa" {

type master;

file "point.local.rev";

allow-update {none;};

#allow-transfer {217.15.54.51; }; //slave DNS server

};

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

include "/etc/named.root.key";

include "/etc/rndc.key";

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

Создаем файл прямого просмотра зоны:

$ORIGIN point.local.

$TTL 3D

@       SOA     ns1.point.local.     admin.point.local. (13 4h 1h 1w 1h)

@           IN           NS                         ns1.point.local.

@           IN           MX         10          mx.point.local.

point.local.                      IN           A            192.168.1.2

ns1.point.local.                   IN           A            192.168.1.2

mx.point.local.                    IN           A            192.168.1.2

mail.point.local.                   IN           A            192.168.1.2

www                    IN      A       192.168.1.2

mail                   IN      A       192.168.1.2

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

Создаем файл обратного просмотра зоны:

$ORIGIN 1.168.192.in-addr.arpa.

$TTL 3D

@       SOA     ns1.point.local.     admin.point.local. (13 4h 1h 1w 1h)

@       IN      NS      ns1.point.local.

2 IN      PTR     ns1.point.local.

2 IN PTR mx.point.local.

2 IN PTR mail.point.local.

# gedit /etc/sysconfig/network-scripts/ifcfg-eth0  -> DNS1=127.0.0.1

# service named start

# service network restart

# chkconfig --level 35 named on

Проверка записей DNS:

# dig axfr point.local

[root@mx ~]# dig axfr point.local

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> axfr point.local

;; global options: +cmd

point.local. 259200 IN SOA ns1.point.local. admin.point.local. 13 14400 3600 604800 3600

point.local. 259200 IN NS ns1.point.local.

point.local. 259200 IN MX 10 mx.point.local.

point.local. 259200 IN A 192.168.1.2

mail.point.local. 259200 IN A 192.168.1.2

mx.point.local. 259200 IN A 192.168.1.2

ns1.point.local. 259200 IN A 192.168.1.2

www.point.local. 259200 IN A 192.168.1.2

point.local. 259200 IN SOA ns1.point.local. admin.point.local. 13 14400 3600 604800 3600

;; Query time: 1 msec

;; SERVER: 192.168.1.2#53(192.168.1.2)

;; WHEN: Fri Sep 13 12:02:21 2013

;; XFR size: 9 records (messages 1, bytes 233)

# nslookup -type=any point.local

[root@mx ~]# nslookup -type=any

> point.local

Server: 192.168.1.2

Address: 192.168.1.2#53

point.local

origin = ns1.point.local

mail addr = admin.point.local

serial = 13

refresh = 14400

retry = 3600

expire = 604800

minimum = 3600

point.local nameserver = ns1.point.local.

point.local mail exchanger = 10 mx.point.local.

Name: point.local

Address: 192.168.1.2

# nslookup -type=mx point.local
Server: 192.168.1.2
Address: 192.168.1.2#53
point.local mail exchanger = 10 mx.point.local.

# reboot

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


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

Во втором окошке появится "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';

$CONF['encrypt']='md5crypt';

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

Зайдите еще раз на страничку: http://127.0.0.1/postfixadmin/setup.php

Создайте учетную запись администратора, например "administrator@point.local", определите его пароль.

По ней мы будем входить в веб интерфейс администратора.

Нажмите на кнопке "Add Admin", появится надпись:

Admin has been added!
(administrator@point.local)

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

Теперь уже заходим на страничку http://127.0.0.1/postfixadmin/

Вводим почтовый адрес админа и пароль. Нажимаем кнопку Login.

Добавляем домен "point.local": Заходим в главное меню Domain List - > New Domain -> point.local

Aliases - Ставим 0

Mailboxes - Ставим 0

Add default mail aliases - Галочка

Add Domain - Нажать кнопку

После появится надпись:

Domain has been added!
(point.local)

Создадим первый почтовый ящик, я создал "linux@point.local" как на картинке внизу.

Заходим в главное меню  -> Virtual List -> Add MailBox ->

Вводим:

Username - linux

Password - 123456 (sample)

Name - Linux Way User

Add Mailbox - Нажать на кнопку

После создания учетной записи появится надпись вроде этой:

Поздравляю, вы создали первую пользовательскую учетную запись!

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

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

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

Откройте почтовый клиент Outlook, укажите адрес вашего сервера и логин/пароль учетной записи linux@point.local

SMTP/POP3 server:                        point.local

Учетная запись (Account name):   linux@point.local

Пароль (password):                      123456

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

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

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

# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.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/roundcubemail/roundcubemail/0.9.4/roundcubemail-0.9.4.tar.gz

# tar xvfz roundcubemail-0.9.4.tar.gz

# mv roundcubemail-0.9.4 roundcube

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

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

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

Alias /webmail /var/www/html/roundcube

<Directory /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

<IfModule mod_php4.c>
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
</IfModule>

<IfModule mod_php5.c>
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
</IfModule>

<FilesMatch "(\.inc|\~)$">
Order allow,deny
Deny from all
</FilesMatch>

Order deny,allow
Allow from all

</Directory>

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

# mysqladmin -p create roundcubemail
# mysql -p
mysql> GRANT ALL ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';

mysql> exit

# chown apache:apache -R /var/www/html/roundcube/temp

# chown apache:apache -R /var/www/html/roundcube/logs

Настройка часового пояса в php.ini:

# vi /etc/php.ini

date.timezone = Asia/Almaty

# service httpd restart

Для настройки RoundCube заходим на страницу по адресуhttp://127.0.0.1/roundcube/installer/ и  устанавливаем по умолчанию все настройки кроме обязательных. В нашем случае обязательными являются настройки доступа к базе данных MySQL которую мы создали ранее. Нам потребуется заполнить два поля  где нужно указать название базы данных и пароль. В нашем случае  название базы будет "roundcubemail", а пароль, указанный ранее "password". Внизу все это показано на картинках, не обращайте внимание на надписи NOT AVAILABLE, так как мы используем MySQL, пакеты от SQLite и SQL Server нам не нужны, об этом и сигнализирует предупреждение NOT AVAILBALE, что с  английского переводится как НЕ УСТАНОВЛЕН.

Нажмите кнопку "NEXT"

Доступ к базе данных MySQL, вводим свой пароль, у меня он для примера "password".

Удобно иметь расширенный редактор, включаем для этого настройку htmleditor = allways, это опция включить HTML формат писем с расширенными функциями редактирования текста. В наше время мало кто отправляет письма обычным текстом без форматирования.

По окончанию ввода нажимаем кнопку CREATE CONFIG


После нажатия кнопки создадутся два конфиг файла, их надо скачать и положить в директорию RoundCube:

/var/www/html/roundcube/config

Копируем следующие файлы: main.inc.php и db.inc.php в /var/www/html/roundcube/config/

Файлы положены?

Продолжаем дальше....

В этом же окне меняем надпись Product_name

И нажимаем кнопку CONTINUE


У нас создана база roundcubemail, но не созданы таблицы в ней. Для создания таблиц, нажмите на кнопке Initialize Database.

Как на картинке внизу:

Поздравляю, вы только что установили и настроили веб интерфейс RoundCube.

Если все прошло успешно, удаляем директорию установщика в целях безопасности.

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

Доступ к веб интерфейсу Roundcube осуществляется путем ввода в браузере адреса:

http://point.local/webmail

или

http://point.local/roundcube

Хотя можно ввести ip адрес сервера:

http://192.168.1.2/webmail

Окно авторизации пользователя, здесь надо вписать:

  • Логин - он же электронный почтовый адрес
  • Пароль - который администратор установил пользователю
  • Сервер - адрес сервера, можно ввести 127.0.0.1 или point.local или 192.168.1.2

Если у вас всего один домен, тогда желательно убрать поле Server, для этого откроем файл /var/www/html/roundcube/config/main.inc.php:

Строчка 78:Вписать свой почтовый сервер

$rcmail_config['default_host'] = 'mail.point.local';

 

------------------------

Установка и настройка завершена.

-------------------------

Заключение

Мы установили почтовый сервер на Linux систему, путь был долгим и кропотливым, но согласитесь, все таки у этого решения есть преимущества. Почтовый агент Exim, имеет хорошую документацию на русском языке, его конфигурационный файл более понятен. И самое главное, в этом MTA (Mail Transfer Agent) можно составлять разные правила которые могут отрабатывать в зависимости от разных условий.  Хотите резать спам по определенному условию или Вы хотите чтобы письмо обрабатывалось со сложной логикой, пожалуйста делайте! Этой фишкой пользуются многие Linux админы, поэтому их уже сложно пересадить на другие MTA, вроде Postfix.

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

Многие Windows админы наверно скажут, что эта же сложная система, и если возникнет проблема ее будет тяжело решить. Скажу честно, как бывший Windows админ почтового сервера на Mdaemon - ничего сложного тут нет, особенно если использовать базовый конфигурационный файл, который предоставляет самые востребованные функции почтового сервера. Что в принципе и нужно большинству компаний. Эта система работает как "ТАНК", главное чтобы исправно работало железо и разделы вашего жесткого диска всегда содержали достаточное место под письма и логи. И все таки, если у вас возникнуть проблемы, вы легко сможете найти причину заглянув в логи, которые прольют свет на детали ошибки. А дальше, как обычно - всемогущий "ГУГЛ" в руки...

 

mini FAQ:

1. Как можно настроить PLAIN авторизацию:

Если вы хотите чтобы у вас пароли хранились открытым текстом в базе:

Откройте файл /var/www/html/postfixadmin/config.inc.php

Найдите и приведите строчку к виду:

$CONF['encrypt'] = 'cleartext';

Откройте файл /etc/dovecot/dovecot-mysql.conf

Найдите и приведите строчку к виду:

default_pass_scheme = PLAIN

Откройте файл /etc/exim/exim.conf

Найдите  в конце файла  начало секции begin authenticators

Удалить старые строчки аутентификации и вставьте эти:

begin authenticators

auth_plain:

driver = plaintext
public_name = PLAIN
server_condition = ${lookup mysql{SELECT `username` FROM \
`mailbox` WHERE `username` = \
'${quote_mysql:$auth2}' AND `password` = \
'${quote_mysql:$auth3}'}{yes}{no}}
server_prompts = :
server_set_id = $auth2

auth_login:

driver = plaintext
public_name = LOGIN
server_condition = ${lookup mysql{SELECT `username` FROM \
`mailbox` WHERE `username` = \
'${quote_mysql:$auth1}' AND `password` = \
'${quote_mysql:$auth2}'}{yes}{no}}
server_prompts = Username:: : Password::
server_set_id = $auth1

auth_cram_md5:

driver = cram_md5
public_name = CRAM-MD5
server_secret = ${lookup mysql{SELECT `password` FROM \
`mailbox` WHERE `username` \
= '${quote_mysql:$auth1}'}{$value}fail}
server_set_id = $auth2
 

По окончанию правки файлов обязательно перезапустите демоны:

# service exim restart

# service dovecot restart

После этих изменений надо будет заново пересоздать учетные записи.

2. Как можно настроить Dovecot SASL и CRAM-MD5

Включаем авторизацию через SASL Dovecot (CRAM-MD5) в Exim

В /etc/exim/exim.conf меняем секцию авторизации чтобы задействовать Dovecot SASL + CRAM-MD5:

begin authenticators

auth_plain:

driver = dovecot

public_name = PLAIN

server_socket = /var/run/dovecot/auth-client

server_set_id = $auth1

auth_login:

driver = dovecot

public_name = LOGIN

server_socket = /var/run/dovecot/auth-client

server_set_id = $auth1

auth_cram_md5:

driver = dovecot

public_name = CRAM-MD5

server_socket = /var/run/dovecot/auth-client

server_set_id = $auth1

В /var/www/html/postfixadmin/config.inc.php находим строчки и меняем их значения на:

$CONF['encrypt'] = 'dovecot:CRAM-MD5';

$CONF['dovecotpw'] = "/usr/bin/doveadm pw";

В /var/www/html/roundcube/config/main.inc.php находим строчку и меняем ее значение на:

$rcmail_config['imap_auth_type'] = cram-md5;

В /etc/dovecot/dovecot.conf находим строчку и меняем ее значение на:

auth_mechanisms = plain login cram-md5

Вот полный текст этого конфиг файла:

# 2.0.9: /etc/dovecot/dovecot.conf

# OS: Linux 2.6.32-358.6.2.el6.i686 i686 CentOS release 6.4 (Final)

auth_default_realm = point.local

auth_mechanisms = plain login cram-md5

base_dir = /var/run/dovecot/

disable_plaintext_auth = no

dotlock_use_excl = yes

first_valid_gid = 6

first_valid_uid = 26

listen = *

mail_location = maildir:/var/vmail/%d/%u

mail_privileged_group = mail

passdb {

args = /etc/dovecot/dovecot-mysql.conf

driver = sql

}

protocols = imap pop3

service auth {

unix_listener auth-client {

group = exim

mode = 0660

user = exim

}

unix_listener auth-master {

group = exim

mode = 0600

user = exim

}

user = root

}

ssl = no

userdb {

args = blocking=yes

driver = passwd

}

userdb {

args = /etc/dovecot/dovecot-mysql.conf

driver = sql

}

verbose_proctitle = yes

protocol imap {

imap_client_workarounds = delay-newmail   tb-extra-mailbox-sep

}

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 = admin@point.local

}

В /etc/dovecot/dovecot-mysql.conf находим строчку и меняем ее значение на:

default_pass_scheme = CRAM-MD5

 

----------------------------------------------------

Документация на русском:

http://www.lissyara.su/doc/exim/4.70/

Конфигурационные  файлы системы тут:

http://download.files.namba.kz/files/3287044

Установка Postfix на CentOS 6 x32:

http://akehayc.yvi.kz/post/251584

Источник:

http://blog.eulinux.org/2009/09/exim-dovecot-clamav-postfixadmin.html

 
Almas AkeHayc
Пишу для себя, блог как записная книжка. Со временем все забывается, а у меня оно все в бложике. Будьте упертым глухим и веселым бегемотиком :)
5 января 2014, 14:58
22212

Загрузка...
Loading...

Комментарии

а кластеризовать это решение реально?
а сделать 2 таких сервера, но заставит их обслуживать один почтовый домен можно?
А вам что нужно, отказоустойчивость или балансировка?
С почтовыми кластерами не работал.
Но есть три варианта:
1. Сделать две MX записи
MX 10 и MX 50
Прописать два сервера.
2. Для отказоустойчивости использовать carp
3. Для балансировки и отказоустойчивости использовать
HAProxy

А сразу всё, гипотетическая ситуация - есть 2 офиса территориально распределенных в каждом много юзеров, между офисами линк 100mibs, как сделать нормальную почтовую систему при условии что бабла на exchange2010 не дадут? Собственно вот я и подумал, что может в каждом офисе по серваку с халявным ПО поставить, синхронизировать их как-то и обеспечить балансировку и отказоустойчивость и полную взаимозаменяемость в любой момент времени, ну тоесть один сервак сдох, но почта всё равно у всех работает?
p.s. понимаю что наивный, но может как-то можно?
Я написал выше какими способами можно это сделать.
deny message = "Your IP in HELO - access denied!"
hosts = * : !+relay_from_hosts : !81-196.lissyara.su
condition = ${if eq{$sender_helo_name}\
{$sender_host_address}{true}{false}}

point.local же
В инструкции ошибка. Нужно добавить пользователя clamav в группу exim (кстати в centos 6 пользователь clam) и делается это командой
# usermod -a -G clamav exim
Во всяком случае у меня лезли ошибки при попытках записи.
С имеющимися настройками dovecot не стартует, в итоге взял отсюда (в частности конфиг не парсится из-за некорректного расположения секции passdb, разбираться не стал): www.ul-tech.ru Начинал по данному мануалу ставить в самом начале, но postfix отбил все желание.
Дима Scout - Спасибо, за поправку.
Вадим Коваленко - Я все ошибки исправил, записка рабочая.
Просто когда писал первую версию этой записки, многое что забыл.
Вот из за этого и лезли косяки, да и лень обновлять всю записку.
Здравствуйте! Очень полезные и профессиональные посты. У меня такой вопрос: В чем различие установки при ОС CentOS 6.5 на архитектуре x64?
Команда arch выдает x86_64
Добрый день, разницы нет, кроме команд подключения репозиториев. Например:
Для x32 -
rpm -Uvh download.fedoraproject.org
Для x64 -
rpm -Uvh ftp.jaist.ac.jp
Здесь видно что i386 поменялось на x86_64.

Да и мой блог не профессиональный), я больше похож на любителя.

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

Мой дом – не гостиница. Я не останавливаюсь у своей родни, потому что знаю, что это такое

Мой дом – не гостиница. Я не останавливаюсь у своей родни, потому что знаю, что это такое

Наступил долгожданный момент и мы смогли заселиться в собственную квартиру. А потом началось... Все знакомые, родственники, даже коллеги и соседи родителей вспомнили о нашем существовании.
Idealovnet
14 окт. 2017 / 20:38
  • 8861
  • 82
Работа на EXPO. «Улыбайтесь, вы – лица Казахстана»

Работа на EXPO. «Улыбайтесь, вы – лица Казахстана»

Продление перерывов, втыки от менеджеров, борьба за стенды, кучкования, как мы друг-друга прикрывали, защищали от гостей. Все эти события доставляли радость, и каждый день на работу я приходила...
madiNAtty
14 окт. 2017 / 22:34
  • 6107
  • 23
О проститутках, ЗППП и других сексуальных страстях

О проститутках, ЗППП и других сексуальных страстях

У меня обширный сексуальный опыт, и я этим не хвастаюсь. Будь у меня возможность, променял бы это всё на одного партнёра. Но так как с личной жизнью не заладилось, а секс я очень люблю, то приходилось изворачиваться.
bez_prav
18 окт. 2017 / 18:01
Я четко помню тот день, когда мне позвонили друзья и сообщили: «Она выходит замуж»

Я четко помню тот день, когда мне позвонили друзья и сообщили: «Она выходит замуж»

У нас была особенная атмосфера, мы постоянно были вместе, читали треки, летом часто поднимались в горы. Гуляли пешком по ночному городу, иногда до утра. Снимали хату и представляли совместную жизнь...
Dominator-kz
14 окт. 2017 / 22:29
Отчего в Казахстане предвзятое отношение к отечественному продукту?

Отчего в Казахстане предвзятое отношение к отечественному продукту?

Вы когда-нибудь пользовались казахстанской косметикой? Я тоже нет, поэтому сразу же откликнулась на приглашение своего фейсбук-френда протестировать отечественные крема… из Степногорска.
Shimanskaya
16 окт. 2017 / 11:32
  • 2764
  • 30
Я помню тот день, когда мне позвонили друзья и сообщили: «Она выходит замуж». Часть 2

Я помню тот день, когда мне позвонили друзья и сообщили: «Она выходит замуж». Часть 2

Я знал дату свадьбы. За неделю до свадьбы в соцсети "Вконтакте" на все мои последние фото, был проставлен лайк с её профиля. Сердце забилось сильнее. В душе загорелась наивная, крошечная надежда.
Dominator-kz
17 окт. 2017 / 15:41
Мой парень – «тиран». Почему я вступила в такие отношения?

Мой парень – «тиран». Почему я вступила в такие отношения?

История из моей жизни. Я вспоминаю эти отношения и сама не могу понять - как так произошло? А дело в том, что вы и сами не заметите. Это наступает плавно и динамично.
Altynai_JA
18 окт. 2017 / 14:17
«Автобусная неделя». Выдержит ли аким Шымкента давку в общественном транспорте?

«Автобусная неделя». Выдержит ли аким Шымкента давку в общественном транспорте?

Аким Шымкента Габидулла Абдрахимов нашёл решение накопившихся проблем городского транспорта. Все ключевые работники акимата некоторое время будут сами ездить на автобусах.
openqazaqstan
18 окт. 2017 / 10:53
  • 1653
  • 31
Аркадий Волож привел в Казахстан «Яндекс.Лицей». Плакать или радоваться?

Аркадий Волож привел в Казахстан «Яндекс.Лицей». Плакать или радоваться?

"Яндекс.Лицей" зашел в казахстанские школы. План - учить бесплатно программированию, формировать себе кадры и выйти на мощность 10 тысяч школьников в год.
Zhumanova
18 окт. 2017 / 8:36
  • 1445
  • 11