Поиск по сайту

Температура за бортом

Войти в Гараж



Почтовый сервер Postfix+Dovecot v2, MySQL, Postgrey, ClamAV, Roundcubemail на платформе CentOS версии 6.3 x64

Источник: Пост пользователя AlfaStriker на LinuxForum

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


В процессе установки и настройки почтовика возникли некоторые "персональные грабли". Поэтому данная статья представляет собой зеркало первоисточника с некоторыми ремарками для самого себя.


Задачи устанавливаемых компонентов сервера:

Postfix -  отправка и получением писем от других почтовых серверов

Dovecot -  доставкой почты от Postfix к почтовым клиентам

MySQL - хранение почтовых даменов, имена почтовых учетных записей, паролей и т.д.

Postgrey - эффективный  спам фильтр

ClamAV и ClamSMTP - антивирус задача которого проверка почтовых сообщений

PostfixAdmin - веб интерфейс для администратора почтового сервера, облегчающий создание доменов и администрирование учетных записей.

RoundCube - веб интерфейс для пользователей почтового сервера

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


1. Настраиваем разрешение имен в  /etc/resolv.conf

nameserver 127.0.0.1        //адрес обратной петли. 
Иногда
вместо петли эффективнее указать ip нашего сервера.
В данном случае для корректной работы Postfix был использован
реальный ip сетевого интерфейса сервера.
nameserver 192.168.1.2
nameserver 83.83.1.2 //Первичный DNS провайдера nameserver 111.222.333.444 //Вторичный DNS провайдера

После изменения resolv.conf необходимо перезапустить службу сети

# service network restart

Проверить разрешение имен можно пропинговав какой-либо интернет-ресурс по имени.

# ping yandex.ru


2. Установка MySQL и создание базы

# yum install mysql mysql-server mysql-devel -y

# chkconfig --level 35 mysqld on

# service mysqld start

Заходим в консоль MySQL для создания почтовой базы "mail":

# mysql -u root -p

mysql>  Enter password: *****
mysql>  CREATE DATABASE mail;
mysql>  GRANT ALL PRIVILEGES ON mail.* TO 'postfix'@'localhost' 
IDENTIFIED BY 'password'; mysql> quit

Либо выполняем эту операцию через phpMyAdmin


3. Установка и настройка Postfix

# yum install postfix pam  mod_ssl  openssl crypto-utils mc system-config-firewall-tui setuptool wget -y

На всякие пожарные, сохраним оригинальный конфиг файл:

# mv /etc/postfix/main.cf /etc/postfix/main.cf.original

Создадим свой:

soft_bounce = no
queue_directory = /var/spool/postfix
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
default_privs = nobody
inet_interfaces = all
myhostname = mx.point.chita.ru
mydomain = point.chita.ru
myorigin = $mydomain
mydestination = $myhostname,localhost.$myhostname,localhost
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8
relay_domains =
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mail_spool_directory = /var/mail
smtpd_banner = $myhostname ESMTP
debug_peer_level = 2
debug_peer_list = 127.0.0.1
debugger_command = 
    PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
    xxgdb $daemon_directory/$process_name $process_id & sleep 5 
sendmail_path = /usr/sbin/sendmail
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/local/man
config_directory = /etc/postfix


Этот листинг содержит базовые настройки для запуска Postfix. В нем нам интересны такие настройки как debug_peer_level  и   debug_peer_list. Эти строчки отвечают за логирование SMTP сессий.
Первая debug_peer_level отвечает за уровень логирования, а вторая строчка указывает с каких хостов и сетей должны попадать логи.
Для примера, можно ввести адреса серверов популярных почтовых сервисов:

debug_peer_level = 2
debug_peer_list =  yandex.ru, mail.ru pochta.ru 10.10.10.23/32 10.10.10.0/24


Хосты и сети можно перечислять через пробелы и знака запятой.
Если будут проблемы, вас спасет это debug режим.
Примечание:  При составлении Postfix конфига, важно соблюдать отступы в два пробела в некоторых местах.
Откроем опять главный конфиг файл:

# vi /etc/postfix/main.cf

И добавим текст:

virtual_mailbox_domains = mysql:$config_directory/sql/vdomains.cf
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = mysql:$config_directory/sql/vmailbox.cf
virtual_alias_maps = mysql:$config_directory/sql/valias.cf
virtual_minimum_uid = 1150
virtual_uid_maps = static:1150
virtual_gid_maps = static:12
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/spool/postfix/private/dovecot-auth


В этом листинг важно выставить идентификаторы пользователя, под которым будет работать Postfix. Если пользователь создан, ID  можно взять с файла /etc/passwd, а ID группы хранится в  /etc/groups. Так как у нас нет пользователя vmail, создадим его:

# useradd -r -u 1150 -g mail -d /var/vmail -s /sbin/nologin -c Virtual vmail

Мы создали нового пользователя vmail c идентификатором ID - 1150, добавили его в группу mail (GID - 12). Пользователь имеет право на папку /var/vmail, при этом он больше ни где не используется. Авторизация в системе ему запрещена (nologin).

# mkdir -p -v /var/vmail

# chmod 770 -R /var/vmail

# chown vmail:mail /var/vmail

Для корректной работы создали каталог почтовых сообщений /var/vmail, куда будет попадать почтовая переписка.

Для обеспечения работы почтовика необходимо настроить iptables, либо если это позволяют условия безопасности на период отладки почтовика отключить firewall:

# setup

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

Здесь мы отключи встроенную цепочку правил фаерволла (RH-Input)
Отключаем SELINUX:

# vi /etc/selinux/config

Находим строчку:

SELINUX=enforcing

Приводим ее к виду:

SELINUX=disabled


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

# vi /etc/postfix/main.cf

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,
 reject_unauth_destination,

Пишем все параметры smtpd_recipient_restrictions в одну строку, иначе получим ошибку.


Создадим дополнительные конфигурационные файлы, которые указаны в /etc/postfix/main.cf, эти файлы отвечают за обращение к базе данных MySQL:

# mkdir /etc/postfix/sql

# vi /etc/postfix/sql/vdomains.cf
user = postfix
password = password
hosts = localhost
dbname = mail
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'


# vi /etc/postfix/sql/vmailbox.cf

user = postfix
password = password
hosts = localhost
dbname = mail
table = mailbox
select_field = CONCAT(domain,'/',maildir)
where_field = username
additional_conditions = and active = '1'


# vi /etc/postfix/sql/valias.cf

user = postfix
password = password
hosts = localhost
dbname     = mail
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'


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

# yum install dovecot dovecot-mysql -y

Чтобы Dovecot служил локальным транспортом, допишем следующие строчки в /etc/postfix/master.cf

# vi /etc/postfix/master.cf

dovecot    unix    -    n    n    -    -    pipe
      flags=DRhu user=vmail:mail argv=/usr/libexec/dovecot/deliver -d $(recipient)

Добавим в конец файла main.cf  в список значений параметра 'smtpd_recipient_restrictions = ' следующие значения:

# vi /etc/postfix/main.cf

    reject_non_fqdn_recipient, 
reject_unverified_recipient,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dialups.mail-abuse.org,
permit


Опять таки пишем все параметры smtpd_recipient_restrictions в одну строку, иначе получим ошибку.

Здесь мы задали дополнительные проверки.
Они дополнят наши до этого внесенные настройки, получится так:

smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_non_fqdn_recipient,
reject_unverified_recipient,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dialups.mail-abuse.org,
permit


Сохраним оригинальный конфиг файл dovecot.conf

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

Создаем файл /etc/dovecot/dovecot.conf

# vi /etc/dovecot/dovecot.conf

Вставим туда следующие настройки:

# 2.0.9: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-220.7.1.el6.i686 i686 CentOS release 6.2 (Final) ext4
auth_debug = yes
auth_debug_passwords = yes
auth_mechanisms = plain login cram-md5
auth_verbose = yes
base_dir = /var/run/dovecot/
disable_plaintext_auth = no
log_path = /var/log/dovecot
ssl = no first_valid_uid = 1150 last_valid_uid = 1150 log_timestamp = %Y-%m-%d %H:%M:%S mail_debug = yes mail_location = maildir:/var/vmail/%d/%u passdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } protocols = imap pop3 service auth { unix_listener /var/spool/postfix/private/dovecot-auth { user = postfix group = postfix mode = 0660 } unix_listener auth-master { user = vmail group = mail mode = 0660 } unix_listener auth-userdb { user = vmail group = mail mode = 0660 } #user=root } service imap-login { executable = /usr/libexec/dovecot/imap-login inet_listener imap { address = * port = 143 } } service imap { executable = /usr/libexec/dovecot/imap } service pop3-login { executable = /usr/libexec/dovecot/pop3-login inet_listener pop3 { address = * port = 110 } } service pop3 { executable = /usr/libexec/dovecot/pop3 } userdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } protocol lda { auth_socket_path = /var/run/dovecot/auth-master postmaster_address = Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript }


Теперь создаем файл /etc/dovecot/dovecot-sql.conf

# vi /etc/dovecot/dovecot-sql.conf

В файл пишем следующие строки:

driver = mysql
connect = host=localhost dbname=mail user=postfix password=password
default_pass_scheme = CRAM-MD5
user_query = SELECT '/var/vmail/%d/%n' as home, 
'maildir:/var/vmail/%d/%n'as mail,
1150 AS uid, 12 AS gid, concat('dirsize:storage=',
quota) AS quota FROM mailbox
WHERE username = '%u' AND active = '1' password_query = SELECT username as user, password,
'/var/vmail/%d/%n' as userdb_home,
 'maildir:/var/vmail/%d/%n' as userdb_mail,
1150 as userdb_uid,
12 asuserdb_gid FROM mailbox
WHERE username = '%u' AND active = '1'


Внимание! Все аргументы пишем в одну строку.


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

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

# rpm -Uvh http://pkgs.repoforge.org/.....ase 0.5.2-2.el6.rf.i686.rpm

Теперь установим Postgrey:

# yum install postgrey -y

После установки нам нужно дописать всего 1 строчку в главный конфигурационный файл main.cf, чтобы postfix подружился со спам фильтром postgrey. Открываем файл - /etc/postfix/main.cf и делаем соответствующие изменения:

# vi /etc/postfix/main.cf

smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    check_policy_service unix:/var/spool/postfix/postgrey/socket,
    reject_non_fqdn_recipient,
    reject_unverified_recipient,
    reject_rbl_client cbl.abuseat.org,
    reject_rbl_client dialups.mail-abuse.org,
    permit


И опять-таки все в одну строку. Здесь приведено в таком виде для удобства просмотра.

Примечание: строчка “check_policy_service unix …” должна быть обязательно прописана после строчки параметра

“reject_unauth_destination”, как на примере выше.

После рестарта postfix мы должны увидеть открытый socket и лог-файл работы postgrey в каталоге

/var/spool/postfix/postgrey/


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

# yum remove rpmforge-release -y

# rpm -Uvh http://download.fedoraproject.org/pub/...l-release-6-8.noarch.rpm

# yum install clamav clamav-server clamsmtp –y

Обновляем базы:

freshclam -v

Устанавливаем автообновление баз:

freshclam -d

# mv /etc/clamsmtpd.conf /etc/clamsmtpd.conf.orig

# vi /etc/clamsmtpd.conf

OutAddress: 10026
        TimeOut: 180
        KeepAlives: 0
        XClient: on
        Listen: 127.0.0.1:10025
        ClamAddress: /var/run/clamav/clamd.sock
        Header: X-Virus-Scanned: ClamAV using ClamSMTP
        TempDirectory: /var/tmp
        Action: drop 
        Quarantine: on
        User: clam
Умолчательно владельцем приведенных ниже каталогов является clamsmtp.mail . Меняем владельца:
# chown clam:mail -R /var/run/clamd.clamsmtp/
# chown clam:clam -R /var/lib/clamd.clamsmtp

Добавляем в main.cf строчки:

# vi /etc/postfix/main.cf

content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings

Добавляем в master.cf строчки:

# vi /etc/postfix/master.cf

scan unix - - n - 16 smtp -o smtp_send_xforward_command=yes

Добавляем ниже приведенный конфиг в master.cf:

# vi /etc/postfix/master.cf

127.0.0.1:10026 inet n - n - 16 smtpd
  -o content_filter=
  -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
  -o smtpd_helo_restrictions=
  -o smtpd_client_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks_style=host
  -o smtpd_authorized_xforward_hosts=127.0.0.0/8
   


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

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

Если какие-либо из этих пакетов не были установлены, после установки необходимо перезапустить apache. Иначе PostfixAdmin их не увидит.

# service httpd restart

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

Измените в конфиге строки:
cat /etc/dovecot/dovecot.conf | grep cram-md5
с

auth_mechanisms = plain login cram-md5

на

auth_mechanisms = cram-md5

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

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

# cd /var/www/html

# wget http://sourceforge.net/projects/postfix … z/download

# tar -xvzf postfixadmin-2.3.6.tar.gz

# mv postfixadmin-2.3.6/ postfixadmin

# cd  postfixadmin

# vi /var/www/html/postfixadmin/config.inc.php

В этом файле находим строчки которые внизу и меняем их значение на следующие:

$CONF['configured'] = true;
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'password';
$CONF['database_name'] = 'mail';
$CONF['encrypt'] = 'dovecot:CRAM-MD5';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
$CONF['emailcheck_resolve_domain']='YES';


Будте внимательны! Параметр $CONF['dovecotpw'] уже присутствует, но обратите внимание, необходимо изменить:

с

$CONF['dovecotpw'] = "/usr/sbin/dovecotpw";

на

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

В противном случае получите ошибку:

can't encrypt password with dovecotpw, see error log for details

Ставим все службы в автозагрузку:

# chkconfig --level 35 mysqld on
# chkconfig --level 35 dovecot on
# chkconfig --level 35 postfix on
# chkconfig --level 35 httpd on
# chkconfig --level 35 postgrey on
# chkconfig --level 35 clamd on
# chkconfig --level 35 clamsmtpd on
# chkconfig --level 35 saslauthd on



8. Настройка DNS сервера
Для того чтобы протестировать почтовый сервер, установите пакет Bind. Установка Bind  позволить настроить DNS сервер. После установки Bind, станет доступна служба named - отвечающая за функции DNS сервера.
И так, первым делом еще раз проверяем наш файл /etc/resolv.conf:
search point.chita.ru
nameserver 127.0.0.1

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


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

После наших изменений в файле - /etc/resolv.conf, данные о зоне "point.local" будут браться из нашего DNS сервера с IP адресом 192.168.1.2. Другие запросы будут разрешатся через DNS сервер провайдера.

Наш почтовый сервер имеет следующий IP адрес 192.168.1.2, он еще у нас должен быть и DNS сервером. Теперь самое главное, установим пакет Bind:

# yum install bind -y

Впишем имя хоста:

# vi /etc/sysconfig/network

NETWORKING=yes
NETWORKING_IPV6=no
#HOSTNAME=mx.point.chita.ru
HOSTNAME=servername.mydomain.chita.ru


# vi /etc/hosts

192.168.1.2 servername.mydomain.chita.ru mx.mydomain.chita.ru mx

останавливаем и убираем из автозагрузки Network Manager (NM):

# service NetworkManager stop

# chkconfig NetworkManager off

# yum remove dnsmasq -y

# service network restart


Сохраняем на всякие пожарные основной конфигурационный файл демона "named":

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

Создаем чистый конфиг файл следующего содержания (проверить наличие симлмнка этого файла в /var/named/named.conf):

#mcedit /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 { any; };
        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; 192.168.1.0/24; }; 
# меняем, добавляем локальную сеть если она есть allow-recursion { localhost;
192.168.1.0/24;};
# меняем, добавляем локальную сеть если она есть
  recursion yes; # возможно излишне
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"; };

// back view for 127.0.0.1
zone "0.0.127.in-addr.arpa" IN {
type master;
file "localhost.rev";
allow-update { none; };
};

# Зона прямого просмотра "mydomain.chita.ru"
zone "mydomain.chita.ru" IN {
type master;
file "mydomain.chita.ru.zone";
allow-update {192.168.1.2; };
allow-transfer {192.168.1.50; }; //вторичный DNS
};

# Наша обратная зона просмотра "mydomain.chita"
zone "1.168.192.in-addr.arpa" IN {
type master;
file "mydomain.chita.ru.rev";
allow-update {192.168.1.2; };
allow-transfer {192.168.1.50; };
};

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


Файлы 4-х описанных в named.conf зон:

Прямая зона named.ca - оставил без изменения, т.е. таким, какой он есть в составе дистрибутива ОС.

Обратная зона localhost.rev :

$TTL    86400
@        IN SOA    servername.mydomain.chita.ru.       root.mydomain.chita.ru. (
42        ; serial (d. adams)
3H        ; refresh
15M        ; retry
1W        ; expiry
1D )        ; minimum

IN NS        servername.mydomain.chita.ru.
IN PTR        localhost.mydomain.chita.ru.


Прямая зона mydomain.chita.ru.zone

# vi /var/named/mydomain.chita.ru.zone

$TTL    86400
@ IN    SOA    servername.mydomain.chita.ru. root.mydomain.chita.ru. (
2013120101 ; Serial
28800      ; Refresh
14400      ; Retry
3600000    ; Expire
86400      ; Ncache
)
@    IN     NS     servername.mydomain.chita.ru.
@    IN     MX    10     mail.mydomain.chita.ru.

mx.mydomain.chita.ru.    IN    A    192.168.1.100
A    192.168.1.100    
main        A     192.168.1.100
mail    IN    A    192.168.1.100
www    IN    A    192.168.1.100
papa        A     192.168.1.21


Обратная зона mydomain.chita.ru.rev

# vi /var/named/mydomain.chita.ru.rev

$TTL 86400
@      IN SOA    servername.mydomain.chita.ru.    root.mydomain.chita.ru. (
2013101102 ; Serial
28800      ; Refresh
14400      ; Retry
3600000    ; Expire
86400      ; Minimum
)
@    IN      NS    servername.mydomain.chita.ru.
@    IN      PTR    mx.mydomain.chita.ru.
100.1.168.192 IN    PTR     servername.mydomain.chita.ru.

0/24    NS        servername.mydomain.chita.ru.
100    IN    PTR    servername.mydomain.chita.ru.
21    IN    PTR    papa.mydomain.chita.ru.
0     IN    PTR     mydomain.chita.ru.


Перестартуем сервер имен и вносим его в автозапуск:

# service named start

# chkconfig --level 35 named on

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

[root@servername /]# nslookup mx.mydomain.chita.ru
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   mx.mydomain.chita.ru
Address: 192.168.1.100

[root@servername /]# nslookup 192.168.1.100
Server:         127.0.0.1
Address:        127.0.0.1#53

100.1.168.192.in-addr.arpa      name = servername.mydomain.chita.ru.

[root@servername cron.daily]# nslookup -type=MX mydomain.chita.ru
Server:         127.0.0.1
Address:        127.0.0.1#53

maidomain.chita.ru mail exchanger = 10 mail.mydomain.chita.ru.

[root@servername cron.daily]# hostname -f
servername
[root@servername cron.daily]#

Внимание! На моем сервере сервис named периодически (раз в несколько дней) "сваливается". Он не умирает, у него нормальный статус:

[root@servername /]# service named status
version: 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6
CPUs found: 4
..........................

server is up and running
named (pid  22049) выполняется...
[root@servername /]#

Но при попытке разрешения имен получаю следующее:

[root@servername /]# nslookup mx.mydomain.chita.ru
Server:         8.8.8.1              
Address:        8.8.8.1#53            

** server can't find mx.mydomain.chita.ru: NXDOMAIN

[root@main /]# nslookup 192.168.1.100
Server:         8.8.8.1
Address:        8.8.8.1#53

** server can't find 100.1.168.192.in-addr.arpa.: NXDOMAIN

Где 8.8.81 - DNS-сервер моего провайдера.

Перестартую сервер имен:

[root@servername /]# service named restart
Останавливается named:                                     [  OK  ]
Запускается named:                                         [  OK  ]

И после рестарта он начинает нормально разрешать имена и прямой и обратной зоны как на листингах приведенных выше.

Ввиду нехватки времени причину такого "поведения" не установил. Внес в ежесуточный cron-daily задачу по рестарту named.


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

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

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

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

Создайте учетку Админа, например " Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript ", определите его пароль.

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

Admin has been added!
(
 Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
 )

В моем случае postfixadmin очень долго тупил и когда я уже решил, что где-то ошибка, он наконец выдал сообщение указанное выше.

Запомните адрес админа и пароль.
Теперь уже заходим на страничку 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!
(mydomain.chita.ru)

Создадим первый почтовый ящик, я создал " Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript ".
Меню Virtual List -> Add MailBox ->
Username - galia
Password - 123 (sample)


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

Найдите в локальной сети свободный компьютер, настройте сетевые настройки так чтобы он видел почтовый сервер.
Сетевой адрес должен быть в под сети сервера. Не забудьте указать ДНС сервер,  у меня он имеет IP адрес почтового сервера.
Откройте почтовый клиент Outlook, укажите адрес вашего сервера и логин/пароль учетной записи Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript

SMTP/POP3 server:                        mx.mydomain.chita.ru
Учетная запись (Account name):   Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
Пароль (password):                      123

Примечание: Не забудьте настроить SMTP авторизацию.

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

В моем случае отправка и получение писем через почтовые web-клиенты прошла удачно. Письма с mail.ru на mydomain.chita.ru и обратно ходили без замечаний. А вот с почтовым клиентом The Bat! дело не заладилось.

Отправку писем настроил так:

Включил "Аутентификация SMTP"  и указал в качестве имени пользователя его полный почтовый адрес - Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript и соответственно пароль.  Почта уходит. Пробовал дополнительно поставить галочку "Требовать безопасную MD5 аутентивикацию" - почта так же уходит успешно и успешно принимается адресатом.

Без включенной аутентификации SMTP почта не уходи - The Bat выдает сообщение об ошибке аутентификации.

А вот прием почты не заработал.

Какие бы параметры POP, IMAP и режимы аутентификации я не выставлял - результат один:

FETCH: - Сервер сообщает об ошибке ERR: Authentication failed

На сервере в лога /'var/log/dovecot вижу следующее:

2014-02-16 14:18:15auth: Info: mysql: Connected to localhost (mail)
2014-02-16 14:18:15auth: Debug: sql(galia,192.168.1.2): query: SELECT username as user, password, '/var/vmail//galia' as userdb_home, 'maildir:/var/vmail//galia' as userdb_mail, 1150 as userdb_uid, 12 asuserdb_gid FROM mailbox WHERE username = 'galia' AND active = '1'
2014-02-16 14:18:15auth: Info: sql(galia,192.168.1.2): unknown user
2014-02-16 14:18:17auth: Debug: client out: FAIL        1       user=galia
2014-02-16 14:18:20pop3-login: Info: Disconnected (auth failed, 1 attempts): user=<pavlov>, method=PLAIN, rip=192.168.1.2, lip=192.168.1.100


Из лога видно, что dovecot ищет почтовый ящик по следующему пути: '/var/vmail//galia' . Однако, вследствие того что у нас мультидоменный сервер, ящик находится здесь:  '/var/vmail/mydomain.chita.ru/galia'. То есть сервер не получает имя домена и его пустое значение заключено между двумя слэшами перед именем пользователя.

И вот здесь я вижу что прсто протупил: в клиенте The Bat! в настройках отправки почты указал полное доменное имя пользователя, а в получении почты только непосредственно имя: galia. После того как заменил его на полное доменное Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript получение почты прошло удачно. Тип аутентификации указывал MD5 CRAM :

2014-02-16 14:45:59pop3( Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript ): Debug: maildir++: root=/var/vmail/mydomain.chita.ru/galia, index=, control=, inbox=/var/vmail/mydomain.chita.ru/galia
2014-02-16 14:45:59pop3( Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript ): Info: Disconnected: Logged out top=0/0, retr=0/0, del=0/56, size=3895050

Проверка почтовой пересылки завершена.


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

# rpm -Uvh http://download.fedoraproject.org/pub....l-release-6-8.noarch.rpm

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

# cd /var/www/html

# wget http://sourceforge.net/projects/roundcu … z/download

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


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

Первым шагом установщик проверяет окружение на предмет удовлетворения зависимостей. В моем случае неудовлетворенными оказались следующие:

........................

OpenSSL:  OK
Mcrypt:  NOT AVAILABLE(Could be loaded. Please add in php.ini;

               See http://www.php.net/manual/en/book.mcrypt.php)

SQLite (v2):  NOT AVAILABLE(See http://www.php.net/manual/en/ref.pdo-sqlite.php)
SQL Server (SQLSRV):  NOT AVAILABLE

(See http://www.php.net/manual/en/ref.pdo-sqlsrv.php)
SQL Server (DBLIB):  NOT AVAILABLE

(See http://www.php.net/manual/en/ref.pdo-dblib.php)


Библиотека Mcrypt позволяет выполнить высокоуровневое шифрование. Устанавливаем php-mcrypt из репозитория rpmforge:
#yum install php-mcrypt

Перезагружаем веб-сервер apache:
service httpd restart

Возвращаемя на страницу инсталляции Roundcube Webmail (http://localhost/roundcubemail/installer), обновляем и видим все то же сообщение.

Проверяем наличие загруженной библиотеки mcrypt с помощью
php -r 'phpinfo();' |grep mcrypt

Вывод даёт нам понять, что у нас не все в порядке:

PHP Warning:
PHP Startup: Unable to load dynamic library
‘/usr/lib64/php/modules/module.so’ — /usr/lib64/php/modules/module.so:
cannot open shared object file: No such file or directory in Unknown on line 0
/etc/php.d/mcrypt.ini,

Задаемся вопросом причем здесь  module.so? Проверяем, какие файлы нам проставил пакет php-mcrypt :

# rpm -ql php-mcrypt
/etc/php.d/mcrypt.ini
/usr/lib64/php/modules/mcrypt.so

Значит отредактируем неверную запись в файле /etc/php.d/mcrypt.ini. Действительно, там написано неверно:

# cat /etc/php.d/mcrypt.ini
; Enable mcrypt extension module
extension=module.so

Правим неверную запись на верную:

$ cat /etc/php.d/mcrypt.ini
; Enable mcrypt extension module
extension=mcrypt.so

Перезагружаем апач:
service httpd restart

Заново проверяем наличие загруженной библиотеки mcrypt:

[root@servername]# php -r 'phpinfo();' | grep mcrypt
PHP Warning:  Module 'gd' already loaded in Unknown on line 0
PHP Warning:  Module 'sqlite3' already loaded in Unknown on line 0
/etc/php.d/mcrypt.ini,
Registered Stream Filters => zlib.*, bzip2.*, convert.iconv.*,
string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*,
consumed, dechunk, mcrypt.*, mdecrypt.*
mcrypt
mcrypt support => enabled
mcrypt_filter support => enabled
mcrypt.algorithms_dir => no value => no value
mcrypt.modes_dir => no value => no value
[root@main log]#


Опять таки проверяем ситуацию на странице инсталляции Roundcube Webmail:


..................
OpenSSL:  OK
Mcrypt:  OK
Intl:  OK
Exif:  OK

Сообщения об ошибке sqlite решил проигнорировать, потому что, во-первых, подключена уже 3-я версия sqlite и возможно roundcube просто тупо не знает об этом и ищет вторую:

#cat /etc/php.ini | grep sqlite

extension=sqlite3.so

во-вторых, мы будем работать с mysql, а не sqlite.

По окончании установки веб интерфейса, Вам будет предложено скачать и сохранить два конфигурационных файла:
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.100';

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

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

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

Это так же был мой случай. В веб-интерфейсе инсталляции RoundCube получил следующее сообщение:

Test IMAP config

Connecting to localhost...
IMAP connect: 

NOT OK(Login failed for roundcube from 192.168.1.100. AUTHENTICATE CRAM-MD5:

A0001 NO [UNAVAILABLE] Temporary authentication failure.)

Кнопка инициализации отсутствует.

Соответственно поправил пароль в файле  /var/www/html/roundcube/config/db.inc.php как описано выше.

Появилась кнопка инициализации! Жмем 'Inizialize Database' :

Check DB config

DSN (write):  OK
DB Schema:  OK
DB Write:  OK
DB Time:  OK

Test SMTP config

Server: PHP mail()
Port: 25

Trying to send email...
SMTP send:  OK

TTest IMAP config

Connecting to localhost...
IMAP connect: 

NOT OK(Login failed for roundcube from 192.168.1.100. AUTHENTICATE CRAM-MD5:

A0001 NO [AUTHENTICATIONFAILED] Authentication failed.)


Аутентификация IMAP не прошла, но регистрация в интерфейсе roundcube и пересылка почты проходят.

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

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

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

http://mydomain.chita.ru/roundcube

Будет выведено окошко, где надо указать:
- логин
- пароль
- сервер
Вводим например:
- логин: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
- пароль: 123456
- сервер: point.local

Логин вводим как полное даменное имя даже если у нас заведен всего один домен.


11. Настройка фаерволла iptables
Создаем файл с правилами фаерволла. Я этот шаг пропустил так как мой 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


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

# yum install fail2ban -y

# vi /etc/fail2ban/jail.conf

Добавляем в конец файла:

[postfix-banhammer]
enabled  = true
filter   = postfix
action   = iptables-multiport-tcp[name=PFIX, port="smtp", protocol=tcp]
logpath  = /var/log/maillog
maxretry = 3
bantime  = 7200

[dovecot-banhammer]
enabled  = true
filter   = dovecot
action   = iptables-multiport-tcp[name=DCOT, port="pop3,imap", protocol=tcp]
logpath  = /var/log/maillog
findtime = 300
maxretry = 10
bantime  = 1800

[sasl-banhammer]
enabled  = true
filter   = sasl
action   = iptables-multiport-tcp[name=SASL, port="smtp", protocol=tcp]
logpath  = /var/log/maillog
findtime = 300
maxretry = 10
bantime  = 1800

# chkconfig fail2ban on

# service fail2ban start


Почтовый сервер готов. Все настройки завершены.

Обновлено 19.02.2014 12:19
 
Rambler's Top100
 
www.garage.zabkray.net , Powered by HardWorm Chita 2010 - 2021