1 (08.02.2015 15:10:16 отредактировано AlfaStriker)

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

В данном посте описан процесс установки почтового сервера на основе MTA Exim. В качестве платформы будет использована CentOS версии 6.5 x32.
Для полноценной работы понадобятся дополнительные пакеты, такие как: Dovecot v2, MySQL, Clamav и Postfixadmin.

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

Давайте разберем зачем нам столько пакетов и зачем они используются:
Exim - будет заниматься отправкой и получением писем от других почтовых серверов
Dovecot - доставка почты к почтовому клиенту от почтового сервера.
MySQL  - в базе MySQL будут содержаться такие данные как наш домен company.kz, имена почтовых учетных записей, пароли и т.д.
ClamAV- это антивирус задача которого проверка почтовых сообщений на предмет вирусов
PostfixAdmin - веб интерфейс для администратора почтового сервера который позволяет управлять почтовым сервером, такие операции как заведение доменов, почтовых учетный записей, смена паролей производятся именно в нем.
RoundCube - веб интерфейс для пользователей почтового сервера, этот интерфейс позволяет работать с почтовым ящиком. Пользователь в нем просматривает почтовые сообщения, отправлять письма и т.д.

Документация на русском:
- http://www.lissyara.su/doc/exim/4.70/
- http://www.rldp.ru/exim/exim480r/exim48.htm
Форумы где могут помочь:
1. http://forum.lissyara.su/viewforum.php? … 68f32a7638
2. http://forum.ru-board.com/topic.cgi?for … art=420#lt

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


Если Вы хотите реальный почтовый сервер, Вам понадобится:

  • Белый статический IP адрес. Обычно эти IP адреса выдает провайдер.

  • Зарегистрированное доменное имя - company.ru. Можете воспользоватся любым регистратором, например www.reg.ru

  • Два DNS сервера которые будут отвечать за домен - company.ru. Бывает так, что после регистрации домена регистратор дает свои DNS сервера в пользование. Можно уговорить провайдера поддерживать Ваш домен, а можно настроить свои DNS сервера

  • PTR запись которая правильно резолвит Ваш почтовый хост (111.222.333.444 -> mail.company.ru). Обычно PTR запись прописывает  провайдер, поэтому админ обращается к провайдеру с запросом занести PTR запись вида -  IP адрес -> mail.company.ru

Более детальная информация по этой части предоставлена пользователем Cruiser78 в сообщении с темой:  Как не надо настраивать свой почтовый сервер
Скажем спасибо Cruiser78 за ценную информацию которую он всегда любезно предоставляет.

Если не устраивает Exim, посмотрите на альтернативный почтовый сервер на базе Postfix:
http://linuxforum.ru/viewtopic.php?id=21932

Исходные данные
Домен - point.local
Обычно домен покупают у регистраторов доменов. Если у вас другой домен, например "company.ru", измените "point.local" на "company.ru" в конфигурационных файлах.

Имя хоста почтового сервера -  mx.point.local
Здесь обычно  задают имя компьютера, в основном ставят "mail.point.local" или "mail.company.ru".

IP адрес почтового сервера - 192.168.1.2
Если ваш почтовый должен работать в глобальной сети, то вам понадобится взять у провайдера реальный статический IP адрес. Его в народе еще называют как "белый".
У меня в моем примере используется "серый" - IP адрес, чтобы показать как работает почтовый сервер этого достаточно.


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

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


Приступим....

Начнем нашу установку с настройки сетевого адаптера
1. Настройка сетевого адаптера
Наш сервер имеет всего один сетевой адаптер, после установки CentOS, настройки этого адаптера хранятся в файле "/etc/sysconfig/network-scripts/ifcfg-eth0".
По умолчанию этот файл содержит следующие настройки

# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"
HWADDR="08:00:27:79:17:85"
NM_CONTROLLED="yes"
ONBOOT="no"

Следует дописать в этот файл дополнительные настройки, подправим содержимое этого файла:

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

Чтобы внести текст в файл, нажмите клавишу "INS" -это активирует режим редактирования, переведет вас с режима просмотра в режим редактирования. После чего вводите новые данные. Обычно после нажатия "INS", текст вставляется комбинацией "SHISFT"+"INS".
По окончанию ввода текста, нажмите кнопку "ESC" и потом нажмите одновременно кнопки "SHIFT и два раза нажать "z" или введите ":w!" и потом нажмите "ENTER" - это делается для сохранения файла и выхода с редактора.
Поиск файла в редакторе vi делается путем нажатия кнопки "/", далее вводится текст который нужно найти.

DEVICE="eth0"
HWADDR="08:00:27:79:17:85"
NM_CONTROLLED="no"
ONBOOT="yes"
GATEWAY=192.168.1.250
IPADDR=192.168.1.2
NETMASK=255.255.255.0
BROADCAST=192.168.1.255

Перезапускаем сетевую службу:

# service network restart

Вписываем адреса DNS серверов:

# vi /etc/resolv.conf

nameserver 192.168.1.2     //Первичный DNS
nameserver 111.222.333.444     //Вторичный DNS

Здесь IP адреса:
192.168.1.2 - это IP нашего почтового сервера, он также будет и DNS сервером
111.222.333.444  - адрес DNS сервера провайдера
Перезапустим сетевую службу, чтобы внесенные нами изменения вступили в силу:

# service network restart

Проверьте, выход в Интернет на сервере:

# ping google.ru

Наличие Интернета - обязательно!

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

3. Установка СУБД 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> quit

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

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

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

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

Меняем параметры:

# vi 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['encrypt'] = 'dovecot:CRAM-MD5';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";

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

# yum -y install clamav

# freshclam -v

# freshclam -d

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

# yum install dovecot dovecot-mysql -y

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

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

# vi /etc/dovecot/dovecot.conf

# 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 = /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 для доступа Dovecot к MySQL базе.

# vi /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 = CRAM-MD5
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'

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

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

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

# vi  /etc/exim/exim.conf

#######################
#MAIN CONFIGURATION SETTINGS#
#######################
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_not_smtp = acl_not_smtp
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

#######################################
# ACL CONFIGURATION 
# Specifies access control lists for incoming SMTP mail
#######################################
begin acl

acl_not_smtp:
        deny message = Sender rate overlimit - $sender_rate / $sender_rate_period
        ratelimit = 50 / 1h / strict
        accept

acl_check_rcpt:
  deny message          = "You blacklisted"
  condition = ${lookup{$sender_host_name}nwildlsearch{black.list}{yes}}

  deny message          = "Lookup failed"
          condition = ${if eq{$host_lookup_failed}{1}}

  deny sender_domains = !+local_domains
          ratelimit = 5/1h/leaky/$authenticated_id
          message = Bite my shiny metal shaper!

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

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

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


##############################
#                      TRANSPORTS CONFIGURATION  
##############################
#                       ORDER DOES NOT MATTER       
#     Only one appropriate transport is called for each 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


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

Создаем файл /etc/exim/black.list

# vi /etc/exim/black.list

^.*\d+[-\.]\d+[-\.]\d+.*
^.*[-\.]dynamic[-\.].*
^.*[-\.]static[-\.].*
^.*[-\.]dyn[-\.].*
^.*[-\.]adsl[-\.].*
^.*[-\.]cable[-\.].*
^.*[-\.]pool[-\.].*
^.*[-\.]broadband[-\.].*
^.*[-\.]user[-\.].*
^.*[-\.]in-addr[-\.].*
^.*[-\.]customer[-\.].*
^.*[-\.]fibertel[-\.].*
^.*[-\.]cdma[-\.].*
^.*[-\.]client[-\.].*
^.*[-\.]catv[-\.].*
^.*[-\.]xdsl[-\.].*
^.*[-\.]comcast[-\.].*
^.*[-\.]dhcp[-\.].*
^.*[-\.]ppp[-\.].*
^.*[-\.]dial[-\.].*
^.*[-\.]fbx[-\.].*
^.*[-\.]kabel[-\.].*
^.*[-\.]peer[-\.].*

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:

# vi /etc/selinux/config

SELINUX=disabled

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

# chkconfig clamav on
# chkconfig mysqld on
# chkconfig httpd on
# chkconfig exim on
# chkconfig dovecot on


10. Выставляем права на почтовые каталоги
Важно правильно выставить права доступа на важные папки,
у многих начинающих возникают проблемы именно с этой частью настройки Exim.

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

Создаем почтовый каталог

# mkdir /var/vmail

# chown exim:exim -R /var/vmail

11. Настройка DNS сервера
Если у вас есть зарегистрированное доменное  имя "company.ru" и два DNS сервера регистратора или хостера то, данный пункт настройки DNS сервера - можно пропустить!  При этом в файле - /etc/resolv.conf, должны быть указаны только IP адреса DNS серверов вашего провайдера, не надо вставлять туда IP адреса DNS хостера или вашего регистратора домена.

Для того чтобы протестировать почтовый сервер, настройте Bind. Этот пакет позволить настроить DNS сервер.
Первым делом проверяем - используется ли наш DNS сервер для разрешения запросов:

# cat /etc/resolv.conf

nameserver 192.168.1.2
nameserver 111.222.333.444

Наш сервер DNS будет авторитарным для зоны "point.local", запрос о зоне "point.local" будет выдаваться нашим DNS-ком, а другие которые он не сможет обработать уйдут на сервер DNS провайдера.

Наш почтовый сервер имеет следующий IP адрес 192.168.1.2, он еще у нас должен быть и DNS сервером. Поэтому везде в настройках DNS сервера меняем IP адрес на наш 192.168.1.2

# yum install bind -y

# vi /etc/sysconfig/network

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

# vi /etc/hosts

192.168.1.2 mx.point.local mx

Удаляем Network Manager (NM):

# service NetworkManager stop

# chkconfig NetworkManager off

# yum remove dnsmasq -y

# vi /etc/resolv.conf

search point.local
nameserver 192.168.1.2
nameserver 127.0.0.1
nameserver 111.222.333.444

Здесь IP адреса:
192.168.1.2 - наш DNS сервер
111.222.333.444 - IP адрес DNS сервера провайдера
Сохраняем на всякие пожарные основной конфигурационный файл демона "named":

# mv /etc/named.conf /etc/named.conf.orig

Создаем чистый конфиг файл с настройками внизу:

# vi /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; 192.168.1.2; }; # ставим внешний IP интерфейса
        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; }; # меняем, даем обращатся всем
        allow-query-cache { localhost; 10.0.0.0/24; }; # меняем, добавляем локальную сеть если она есть
        allow-recursion { localhost; 10.0.0.0/24;}; # меняем, добавляем локальную сеть если она есть
        forwarders { 111.222.333.444; 444.555.666.777; }; # добавляем, ip dns провайдера
        dnssec-enable no;
        dnssec-validation no;
        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";
};

# Зона прямого просмотра "point.local"
zone "point.local" {
type master;
file "point.local.fwd";
allow-update {none;};
allow-transfer {192.168.1.10; }; //вторичный DNS
};

# Наша обратная зона просмотра "point.local"
zone "1.168.192.in-addr.arpa" {
type master;
file "point.local.rev";
allow-update {none;};
allow-transfer {192.168.1.10; };
};

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

Создаем файл прямого просмотра зоны - point.local (forward zone)

# vi /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

Создаем файл обратного просмотра зоны - point.local (reverse zone)

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

Здесь  за место 1.168.192 - надо указать свою под сеть в обратном порядке.
А также в при добавлении PTR записи требуется ставить последнею цифру IP адреса,
у нас эта цифра 2, так как IP адрес почтового сервере оканчивается на 2 (192.168.1.2) 

$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.

# service named start

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

hostname -f

mx.point.local

# reboot

12. Настройка PostfixAdmin
Здесь мы настроим веб интерфейс под названием - PostfixAdmin. Этот интерфейс управляет почтовым сервером. В нем можно: добавлять обслуживаемые домены для почты,  открывать или удалять почтовые учетные записи, настраивать функцию автоответчика  на определённые ящики и т.д.

Зайдите в 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


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


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

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

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

Теперь уже заходим на страничку 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)

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

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

Username - linux

Password - 123 (sample)



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

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

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

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

SMTP/POP3 server:                        point.local

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

Пароль (password):                      123

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

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

# yum install php php-xml php-mcrypt php-intl php-sqlite php-pgsql

# cd /var/www/html

# tar xvfz roundcubemail-0.9.5.tar.gz

# mv roundcubemail-0.9.5 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> quit

# service httpd restart

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

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

Ставим свой часовой пояс:

# vi /etc/php.ini

date.timezone = Asia/Almaty

или

date.timezone = Europe/Moscow

Далее  идем по адресу http://127.0.0.1/roundcube/installer/ и  устанавливаем по умолчанию, не меняя никаких настроек, кроме двух полей,  где нужно указать название базы данных и пароль. В нашем случае  название базы будет "roundcubemail", а пароль указанный ранее 'password'.  А также следует включить опцию 'htmleditor' в 'always'. В процессе настройки надо обязательно согласится на создание схемы базы Roundcube (Create Database Scheme). В противном случае будет ошибка. 
По окончании установки веб интерфейса, Вам будет предложено скачать и сохранить два конфигурационных файла:
1. db.inc.php
2. main.inc.php
Эти два файла требуется переместить в папку:

/var/www/html/roundcube/config/

Далее открываем файл /var/www/html/roundcube/config/main.inc.php и в нем меняем алгоритм по умолчанию на:

# vi /var/www/html/roundcube/config/main.inc.php

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

А также ставим IP адрес своего почтового хоста здесь:

$rcmail_config['default_host'] = '192.168.1.2';

Если пароль к базе Roundcube был введен с ошибкой, его можно сменить в файле

# vi /var/www/html/roundcube/config/db.inc.php
$rcmail_config['db_dsnw'] = 'mysql://roundcube:password@localhost/roundcubemail';

Здесь:
     roundcube - имя пользователя базы roundcubemail
     password - пароль доступа к базе
     roundcubemail - сама база веб Интерфейса RoundCube

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

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

Пытаемся зайти с Веб интерфейса, в браузере вводим адрес:

http://point.local/webmail

или

http://point.local/roundcube

Будет выведено окошко, где надо указать:
- логин
- пароль
- сервер
Вводим например:
- логин: user@point.local
- пароль: 123456
- сервер: point.local


14. Настройка фаерволла iptables
Создаем файл с правилами фаерволла:

# vi /etc/sysconfig/firewall.sh
+ открыть спойлер

#!/bin/bash

#Очистка всех цепочек
iptables -F
iptables -F -t nat
iptables -F -t mangle

iptables -X
iptables -X -t nat
iptables -X -t mangle

#Политика по умолчанию - запретить все, что не разрешено
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#Разрешаем обращение к lo интерфейсу
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A OUTPUT -o lo -p all -j ACCEPT

#Пропускать уже инициированные, а также их дочерние пакеты на вход
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

#Пропускать новые, инициированные, а также их дочерние на выход
iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#Разрешаем пинги с внeшнего интерфейса
iptables -A INPUT -i eth0 -p ICMP -j ACCEPT
iptables -A OUTPUT -o eth0 -p ICMP -j ACCEPT

#Разрешаем доступ по SSH на 1234 порт сервера
iptables -A INPUT -p tcp --dport 1234 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1234 -j ACCEPT

#Разрешаем WWW на 80 порт (для Roundcube и Postfixadmin)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

#Разрешаем почтовый доступ по портам 143 (IMAP), 110(POP3) и 25 (SMTP).
iptables -A INPUT -p tcp -m multiport --dports 25,110,143 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 25,110,143 -j ACCEPT

#Разрешаем ходить DNS запросам по UDP протоколу
iptables -A OUTPUT  -p udp -m udp  --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT   -p udp -m udp  --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#Разрешаем ходить DNS запросам по TCP протоколу
iptables -A OUTPUT  -p tcp -m tcp  --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT   -p tcp -m tcp  --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Лимитируем запросы по DNS порту
iptables -A INPUT -p udp --dport 53 -m hashlimit --hashlimit-name DNS --hashlimit-above 20/second \
        --hashlimit-mode srcip --hashlimit-burst 100 --hashlimit-srcmask 28 -j DROP

Даем права на запуск файла (исполняемый файл):

# chmod +x /etc/sysconfig/firewall.sh

Вставляем автозапуск скрипта во время загрузки ОС:

# vi /etc/rc.d/rc.local

/etc/sysconfig/firewall.sh

15. Установка Fail2ban
На сервер часто ломятся разные роботы (боты), подбирая пароли и логины. Логи почтовой системы от этих ботов растут, и самое главное в конце концов не исключено что, бот подберет правильную пару логин/пароль. Утилита Fail2Ban помогает утихомирить ботов, блокируя через iptables ip адреса хостов ботов.

# yum install fail2ban -y

Откройте файл - /etc/fail2ban/jail.conf

# vi /etc/fail2ban/jail.conf

И  добавьте в конец файла следующий текст:

[roundcube-banhammer]
enabled = true
filter = roundcube.banhammer
action = iptables-multiport[name=roundcube, port="http,https", protocol=tcp]
logpath = /var/log/maillog
findtime = 3600
maxretry = 5
bantime = 3600

[dovecot-banhammer]
enabled = true
filter = dovecot.banhammer
action = iptables-multiport[name=dovecot, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/maillog
maxretry = 5
findtime = 300
bantime = 3600
ignoreip = 127.0.0.1 192.168.1.2

[exim-banhammer]
enabled = true
filter = exim.banhammer
action = iptables-multiport[name=Exim, port="smtp,smtps", protocol=tcp]
#sendmail[name=exim-spam, dest=admin@company.ru, sender=fail2ban@localhost]
logpath = /var/log/exim/main.log
maxretry = 2
bantime = 18000
ignoreip = 127.0.0.1 192.168.1.2

Здесь IP адрес:
192.168.1.2 - за место этого IP адреса указываем Ваш внешний белый адрес который не будет проверятся fail2ban. Если их два, указываем их через пробел.

Создаем файл - /etc/fail2ban/filter.d/roundcube.banhammer.conf:

# vi /etc/fail2ban/filter.d/roundcube.banhammer.conf

[Definition]
failregex = roundcube: (.*) Error: Login failed for (.*) from <HOST>\.
ignoreregex =

Создаем файл - /etc/fail2ban/filter.d/dovecot.banhammer.conf:

# vi /etc/fail2ban/filter.d/dovecot.banhammer.conf

[Definition]
failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed).*rip=(?P<host>\S*),.*
ignoreregex =

Создаем файл - /etc/fail2ban/filter.d/exim.banhammer.conf

# vi /etc/fail2ban/filter.d/exim.banhammer.conf

[Definition]
failregex = [\] .*(?:rejected by local_scan|Unrouteable address|Dnsbl blocked|Sender verify failed|relay not permitted|Unknown user)

Ставим fail2ban в автозагрузку:

# chkconfig fail2ban on

Стартуем демона fail2ban:

# service fail2ban start


Заключение

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

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

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

Альтернативное решение - почтовый сервер на базе Postfix:
http://linuxforum.ru/viewtopic.php?id=21932

2

Полезно. Спасибо.

3 (23.08.2012 11:21:27 отредактировано arman.alshymbekov)

что то не срабатывает

failed to expand "${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}}" while checking a list: lookup of "SELECT `domain` FROM `domain` WHERE `domain`='satti-telecom.net' AND `active`='1'" gave DEFER: MYSQL connection failed: Access denied for user 'vexim'@'localhost' (using password: YES)

застрял , уже неделю бьюсь и ничего, даже успел сервак переставить. Ставлю впервые о этого дня опыта небыло

[root@ns exim]# cat /var/log/exim/main.log | tail -10
2012-08-23 11:57:02 1T4Kq9-0006s1-E7 == root@domen.net routing defer (-51): retry time not reached
2012-08-23 11:57:07 exim 4.76 daemon started: pid=15231, -q1h, listening for SMTP on port 25 (IPv6 and IPv4)
2012-08-23 11:57:07 1T4NeL-0000NR-Bw == root@domen.net routing defer (-51): retry time not reached
2012-08-23 11:57:07 1T4FDl-0000nn-7p == root@domen.net routing defer (-51): retry time not reached
2012-08-23 11:57:07 1T4Kq9-0006s1-E7 == root@domen.net routing defer (-51): retry time not reached
2012-08-23 11:57:07 1T4IVK-0004Ra-Hg == root@domen.net routing defer (-51): retry time not reached
2012-08-23 11:57:07 1T4I1x-0003lV-UI == root@domen.net routing defer (-51): retry time not reached
2012-08-23 11:57:17 failed to expand "${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}}" while checking a list: lookup of "SELECT `domain` FROM `domain` WHERE `domain`='domen.net' AND `active`='1'" gave DEFER: MYSQL connection failed: Access denied for user 'vexim'@'localhost' (using password: YES)
2012-08-23 11:57:17 H=(ArmanNB) [192.168.2.3] I=[37..хх.хх.хх]:25 F=<info@domen.net> temporarily rejected RCPT <info@domen.net>: MYSQL connection failed: Access denied for user 'vexim'@'localhost' (using password: YES)
2012-08-23 11:57:17 unexpected disconnection while reading SMTP command from (ArmanNB) [192.168.2.3] I=[37.хх.хх.хх]:25
220 mail.domen.net, ESMTP EXIM 4.76
EHLO n44.omega.d6.hsdnsrv.net
250-mail.domen.net Hello n44.omega.d6.hsdnsrv.net [91.226.136.137]
250-SIZE 67108864
250-PIPELINING
250-AUTH LOGIN PLAIN CRAM-MD5
250 HELP
MAIL FROM: <mailvalid@hsdn.org>
250 OK
RCPT TO: <info@domen.net>
451 Temporary local problem - please try later
RSET
250 Reset OK
QUIT
221 mail.domen.net closing connection

4 (23.08.2012 12:46:50 отредактировано AlfaStriker)

Ты забыл прописать пароль во второй строчки /etc/exim/exim.conf

hide mysql_servers = localhost/vexim/vexim/password

За место password ставишь свой пароль. Этот пароль задается командой:

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

Где password пароль доступа к БД MySQL.

теперь решил такое мне написать

[root@ns exim]# cat /var/log/exim/panic.log | tail -10
2012-08-23 13:43:49 failed to expand "${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}}" while checking a list: lookup of "SELECT `domain` FROM `domain` WHERE `domain`='satti-telecom.net' AND `active`='1'" gave DEFER: MYSQL: query failed: Table 'vexim.domain' doesn't exist

2012-08-23 13:55:40 failed to expand "${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}}" while checking a list: lookup of "SELECT `domain` FROM `domain` WHERE `domain`='satti-telecom.net' AND `active`='1'" gave DEFER: MYSQL: query failed: Table 'vexim.domain' doesn't exist

2012-08-23 13:55:57 failed to expand "${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}}" while checking a list: lookup of "SELECT `domain` FROM `domain` WHERE `domain`='satti-telecom.net' AND `active`='1'" gave DEFER: MYSQL: query failed: Table 'vexim.domain' doesn't exist

2012-08-23 13:56:53 failed to expand "${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}}" while checking a list: lookup of "SELECT `domain` FROM `domain` WHERE `domain`='satti-telecom.net' AND `active`='1'" gave DEFER: MYSQL: query failed: Table 'vexim.domain' doesn't exist

2012-08-23 13:57:59 failed to expand "${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}}" while checking a list: lookup of "SELECT `domain` FROM `domain` WHERE `domain`='satti-telecom.net' AND `active`='1'" gave DEFER: MYSQL: query failed: Table 'vexim.domain' doesn't exist

6 (23.08.2012 12:09:33 отредактировано AlfaStriker)

Это потому что не созданы таблицы в базе VEXIM.
Для того чтобы их создать, надо запустить Postfixadmin, сделайте пункт 3.

Вообщем, если двигаться с 1-го пункта до 10-го, выполняя команды и меняя конфиг. файлы, вы добьетесь работоспособного почтового сервера.

У меня FEDORA RFRemix 16.1
файлов нету там где должны быть я их тут многих сам создаю
ещё один к примеру

2012-08-23 15:53:17 1T4U6H-0008Ga-Q2 malware acl condition: clamd: unable to connect to UNIX socket /var/run/clamav/clamd.socket (No such file or directory)

хотя пишет что установлен, или его так и надо самому создавать?

[root@ns pfadmin]# yum -y install clamav
Загружены модули: langpacks, presto, refresh-packagekit
Пакет clamav-0.97.5-1600.fc16.x86_64 уже установлен, и это последняя версия.
Выполнять нечего
[root@ns etc]# freshclam -v
ERROR: Please edit the example config file /etc/freshclam.conf
ERROR: Can't open/parse the config file /etc/freshclam.conf
[root@ns etc]# ls -l /etc/freshclam.conf
-rw-rw-rw- 1 root root 7768 авг.  22 18:04 /etc/freshclam.conf
[root@ns etc]#

9 (23.08.2012 14:13:47 отредактировано AlfaStriker)

Все правильно, это файл надо найти у себя в системе, а потом прописать путь к нему в конфигурационном файле clamav. Обычно я нахожу файлы используя команду find:

# find / -name "clamd.socket"

Данная команда найдет этот файл и покажет путь к нему.
Этот путь пропиши в конфиг файле clamav.

# freshclam -v
ERROR: Please edit the example config file /etc/freshclam.conf
ERROR: Can't open/parse the config file /etc/freshclam.conf

Для решения этой проблемы, тебе надо  закоментировать в конфигурационном файле /etc/freshclam.conf две строчки:

# Comment or remove the line below.
# Example
find: `clamd.socket': Нет такого файла или каталога
[root@ns ~]#

11 (23.08.2012 14:29:51 отредактировано AlfaStriker)

Тогда поищи все файлы clamav:

# find / -name "clam*"

Вывод этой команды здесь покажи.
В Федоре не много другие пути.

[root@ns clamav-server-0.97.5]# find / -name "clam*"
find: Обнаружено зацикливание в файловой системе; `/var/named/chroot/var/named' является частью той же петли файловой системы что и `/var/named'.
/var/spool/mail/clamav
/var/lib/clamav
/usr/share/selinux/devel/include/services/clamav.if
/usr/share/doc/clamav-0.97.5
/usr/share/doc/clamav-0.97.5/clamav-mirror-howto.pdf
/usr/share/doc/clamav-0.97.5/clamdoc.pdf
/usr/share/doc/clamav-server-0.97.5
/usr/share/doc/clamav-server-0.97.5/clamd.conf
/usr/share/doc/clamav-server-0.97.5/clamd.init
/usr/share/doc/clamav-server-0.97.5/clamd.logrotate
/usr/share/doc/clamav-server-0.97.5/clamd.sysconfig
/usr/share/man/man5/clamd.conf.5.gz
/usr/share/man/man5/clamav-milter.conf.5.gz
/usr/share/man/man1/clamdscan.1.gz
/usr/share/man/man1/clamconf.1.gz
/usr/share/man/man1/clamscan.1.gz
/usr/share/man/man1/clambc.1.gz
/usr/share/man/man1/clamdtop.1.gz
/usr/share/man/man8/clamd.8.gz
/usr/share/clamav
/usr/share/clamav/clamd-wrapper
/usr/sbin/clamd
/usr/sbin/clamav-notify-servers
/usr/bin/clamconf
/usr/bin/clamdscan
/usr/bin/clambc
/usr/bin/clamdtop
/usr/bin/clamscan
/etc/logrotate.d/clamav-update
/etc/selinux/targeted/modules/active/modules/clamav.pp
/etc/cron.d/clamav-update
/etc/clamd.d
/etc/clamd.d/clamav.conf
/home/clamav

13 (23.08.2012 14:58:16 отредактировано AlfaStriker)

Походу сокет файла вообще нету. Значить его надо создать:

# touch /var/lib/clamav/clamd.sock
# chown clamav:clamav /var/lib/clamav/clamd.sock

А потом прописать путь к нему в файле /etc/clamd.d/clamav.conf

На CentOS этот файл создается автоматически.

[root@ns clamav]# cat /var/log/exim/panic.log | tail -3
2012-08-23 16:59:14 1T4V86-0001pS-6f malware acl condition: clamd: unable to connect to UNIX socket /var/run/clamav/clamd.socket (Permission denied)
2012-08-23 17:00:52 1T4V9f-0001sA-Vl malware acl condition: clamd: unable to connect to UNIX socket /var/run/clamav/clamd.socket (Permission denied)
2012-08-23 17:04:50 1T4VDW-00020Q-8k malware acl condition: clamd: unable to connect to UNIX socket /var/run/clamav/clamd.socket (Permission denied)
[root@ns clamav]# cat /var/log/exim/main.log | tail -3
2012-08-23 17:04:20 Delay 30s for warman.satti-telecom.net [192.168.2.3] with HELO=ArmanNB. Mail from info@satti-telecom.net to info@satti-telecom.net.
2012-08-23 17:04:50 1T4VDW-00020Q-8k malware acl condition: clamd: unable to connect to UNIX socket /var/run/clamav/clamd.socket (Permission denied)
2012-08-23 17:04:50 1T4VDW-00020Q-8k H=warman.satti-telecom.net (ArmanNB) [192.168.2.3] I=[37.208.42.4]:25 F=<info@satti-telecom.net> temporarily rejected after DATA
[root@ns clamav]# ls -l
итого 0
-rw-r--r-- 1 clamav clamav 0 авг.  23 17:03 clamd.socket

дал права для exim, но тут он откинул подключение "отказ связи"

[root@ns clamav]# cat /var/log/exim/panic.log | tail -3
2012-08-23 17:00:52 1T4V9f-0001sA-Vl malware acl condition: clamd: unable to connect to UNIX socket /var/run/clamav/clamd.socket (Permission denied)
2012-08-23 17:04:50 1T4VDW-00020Q-8k malware acl condition: clamd: unable to connect to UNIX socket /var/run/clamav/clamd.socket (Permission denied)
2012-08-23 17:07:10 1T4VFm-00024q-5W malware acl condition: clamd: unable to connect to UNIX socket /var/run/clamav/clamd.socket (Connection refused)
[root@ns clamav]# cat /var/log/exim/main.log | tail -3
2012-08-23 17:06:40 Delay 30s for warman.satti-telecom.net [192.168.2.3] with HELO=ArmanNB. Mail from info@satti-telecom.net to info@satti-telecom.net.
2012-08-23 17:07:10 1T4VFm-00024q-5W malware acl condition: clamd: unable to connect to UNIX socket /var/run/clamav/clamd.socket (Connection refused)
2012-08-23 17:07:10 1T4VFm-00024q-5W H=warman.satti-telecom.net (ArmanNB) [192.168.2.3] I=[37.208.42.4]:25 F=<info@satti-telecom.net> temporarily rejected after DATA
[root@ns clamav]# ls -l
итого 0
-rw-r--r-- 1 exim exim 0 авг.  23 17:03 clamd.socket

а антивирус так сильно критичен? может его отключить? мне для поднятия боевого духа пока и без антивируса, только-бы письма пошли

15 (23.08.2012 15:23:58 отредактировано AlfaStriker)

Критичен, потому что почтовое сообщение передается ему на проверку, если он не отработает, почта не будет ходить.
Тебе осталось совсем не много.

Файл сокета у тебя есть /var/run/clamav/clamd.socket, дай права на него. Мне кажется ты опять пропустил важный момент:

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

16 (23.08.2012 15:33:44 отредактировано arman.alshymbekov)

нет этого не забыл
я сейчас все файлы на права проверяю
у меня оказывается глюк происходит(незнаемо почему) при смене права на группа:пользователь начинает на светло синем экране ругательства писать, а иногда не пишет, промолчит но права не сменят.  вот с этим разбираюсь пока. и просматриваю все файлы на владельцов

AlfaStriker пишет:

chown clamav:clamav -R /var/run/clamav/

1T4Vcv-0002zq-07 malware acl condition: clamd: unable to connect to UNIX socket /var/run/clamav/clamd.socket (Permission denied)

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

chown exim:exim -R /var/run/clamav/
17:36:40 1T4ViK-00039J-2V malware acl condition: clamd: unable to connect to UNIX socket /var/run/clamav/clamd.socket (Connection refused)

18 (23.08.2012 15:43:01 отредактировано AlfaStriker)

После того как выставил права, перезапускай демон или сделай перезагрузку.

да перезапускаю

[root@ns etc]# service exim reload
Reloading exim configuration (via systemctl):              [  OK  ]
[root@ns etc]# service exim restart
Restarting exim (via systemctl):                           [  OK  ]
[root@ns etc]# service clamd restart

может я чего не доустановил??

[root@ns var]# rpm -qa | grep -i clamav
clamav-filesystem-0.97.5-1600.fc16.noarch
clamav-data-empty-0.97.5-1600.fc16.noarch
clamav-0.97.5-1600.fc16.x86_64
clamav-server-0.97.5-1600.fc16.x86_64
clamav-lib-0.97.5-1600.fc16.x86_64
clamav-update-0.97.5-1600.fc16.x86_64
AlfaStriker пишет:

Найдите в локальной сети свободный компьютер, настройте сетевые настройки так чтобы он видел почтовый сервер.
Сетевой адрес должен быть в под сети сервера. Не забудьте указать ДНС сервер,  у меня он имеет IP адрес почтового сервера.
Откройте почтовый клиент Outlook, укажите адрес вашего сервера и логин/пароль учетной записи linux@point.local

может причина в этом??
у меня полноценный ДНС сервер, мастер(или как его по другому "авторитарный"?) копьютер с тестовой почтой в сети 192.168.2.0/24  сервер на белых IP

21 (27.08.2012 07:59:15 отредактировано AlfaStriker)

Не в этом дело. Правильная настройка прав и все пойдет по маслу.
Можешь дать удаленный доступ?

тимвивер есть?

23

Есть, только давай завтра.

ок в ICQ постучусь

25 (27.08.2012 14:10:48 отредактировано AlfaStriker)

На Федоре 16 надо ставить пакет exim-clamav.
Соответственно имя демона clamd.exim, так как имя поменялось значить в автозагрузку clamav надо ставить следующим образом:

chkconfig clamd.exim on

Конфиг файл этого демона находится в

/etc/clamd.conf/clamd.exim.conf

А потом прописать его сокет в

/etc/exim/exim.conf

Репозитарий atrpms можно не подключать, все пакеты имеются в базовых репах.
Заметил еще один глюк, при удалении NetworkManager, служба Network не стартует автоматом. Пришлось заново ставить ее в автозагрузку.

26

Спасибо автору за статью но у меня возникли проблемы.
Мне нужно настроить почтовый сервер на впс.
Поэтому как я понимаю мне нужны только эти пункты:
5. Установка и настройка Dovecot
3. Установка Postfixadmin
6. Установка и настройка Exim
При запуске exim ругается на драйвер dovecot
authenticator login: cannot find authenticator driver "dovecot"
OC Centos 5.8 x86_64
Что не так сделал?

27

portos пишет:

Что не так сделал?

Я так понимаю, что в перечисленном нет мускула. Не?

28

Спасибо автору за труды. Инструкция просто шикарная.

У меня вот какой вопрос.
Мне нужно чтобы входящие сообщения для одного почтового адреса или алиаса направлялись в пхп скрипт (pipe messages to php script).
К примеру вся входящая почта для data@domain.com в скрипт pipe.php

Как заставить екзим направлять почту для data@domain.com в скрипт pipe.php ?
Что и куда добавлять ?

29 (18.05.2013 17:47:39 отредактировано epr)

Мне нужно чтобы входящие сообщения для одного почтового адреса или алиаса направлялись в пхп скрипт (pipe messages to php script).

А не легче научить твой скрипт получать почту?
все делаешь согласно POP3 протоколу - читаешь из сокета, пишешь в него и получаешь письма.

Зачем ногой чесать голову?

30

Может кто подсказать, почему не загружает?
The requested URL /postfixadmin/setup.php was not found on this server.
Apache/2.2.15 (CentOS) Server at 127.0.0.1 Port 80