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

В данном посте описан процесс установки почтового сервера на основе MTA Postfix. В качестве платформы будет использована CentOS версии 6.2 x32.
Для полноценной работы понадобятся дополнительные пакеты, такие как: Dovecot v2, MySQL, Postgrey, ClamAV.
Краткое содержание:
1. Установка MySQL и создание базы
2. Установка и настройка Postfix
3. Установка и настройка Dovecot
4. Установка Postgrey
5. Установка ClamAV
6. Установка PostfixAdmin и Apache
7. Настройка DNS сервера
8. Установка и настройка RoundCube Web Mail

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

Домен:

point.local

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

mx.point.local

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

192.168.1.2

Начнем нашу установку  с базы данных MySQL
1. Установка MySQL и создание базы

# yum install mysql-server mysql-devel -y

# service mysqld start

# vi /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# chkconfig —level 35 mysqld on

# service mysqld restart

# 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

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

# yum install postfix mysql pam  mod_ssl  openssl crypto-utils -y

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

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

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

# vi /etc/postfix/main.cf

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.local
mydomain = point.local
myorigin = $mydomain
mydestination = $myhostname,localhost.$myhostname,localhost
local_recipient_maps = $virtual_mailbox_maps, $virtual_alias_maps, $transport_maps
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8
relay_domains = $transport_maps
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.  Так как у нас нет данного пользователя, создадим его:

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

Тут мы создали нового пользователя vmail c идентификатором ID — 1150, добавили его в группу mail.

# mkdir -p -v /var/vmail

# chmod 770 -R /var/vmail

# chown vmail:mail /var/vmail

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

# setup

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

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

# gedit /etc/selinux/config

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

SELINUX=enforcing

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

SELINUX=disabled

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

# vi /etc/postfix/main.cf

smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    permit

Создадим дополнительные конфигурационные файлы, которые указаны в /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'
#query = SELECT domain FROM domain WHERE domain='%s' 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'
#query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s'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'
#query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

3. Установка и настройка 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 следующие строчки:

# vi /etc/postfix/main.cf

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,

Сохраним оригинальный конфиг файл 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
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-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-sql.conf
driver = sql
} 

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

# vi /etc/dovecot-sql.conf

Внутри него поместите:

driver = mysql
connect = host=localhost dbname=mail user=postfix password=password
default_pass_scheme = 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'

4. Установка Postgrey
Подключим необходимый репозитарий:

# rpm -Uvh http://pkgs.repoforge.org/rpmforge-rele … f.i686.rpm

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

# yum install postgrey -y

После установки нам нужно дописать всего 1 строчку в главный конфигурационный файл main.cf, чтобы postfix подружился со спам фильтром postgrey. Открываем 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,
    reject_rbl_client dull.ru

Примечание: строчка “check_policy_service unix …” должна быть обязательно прописана после строчки параметра “reject_unauth_destination”, как на примере выше.
5. Установка ClamAV

# yum remove rpmforge-release -y

# rpm -Uvh http://download.fedoraproject.org/pub/e … noarch.rpm

# yum install clamav clamav-server clamsmtp –y

# 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

# 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
   

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

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

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

# cd /var/www/html

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

# tar -xvzf postfixadmin-2.3.6.tar.gz

# mv postfixadmin-2.3.6/ postfixadmin

# cd  postfixadmin

# gedit /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['emailcheck_resolve_domain']='YES';

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

# 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

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

# yum install bind -y

# gedit /etc/sysconfig/network

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

# gedit /etc/hosts

192.168.1.2 mx.point.local mx

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

# service NetworkManager stop

# chkconfig NetworkManager off

# yum remove dnsmasq -y

# vi /etc/resolv.conf

nameserver 192.168.1.2

# gedit /etc/named.conf

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

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

        /* Path to ISC DLV key */

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

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

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

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

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

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

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

$ORIGIN point.local.

$TTL 3D

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

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

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

$ORIGIN 1.168.192.in-addr.arpa.

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

# service named start

# chkconfig —level 35 named on

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

# dig point.local

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

# nslookup mx.point.local

# nslookup 192.168.1.2

# nslookup -type=MX point.local

hostname -f

mx.point.local

# reboot

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

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

Во втором окошке появится HASH нашего пароля (шифрованный пароль). Скопируйте эту «белеберду» в буфер.
После того как вы скопировали «hash» в буфер обмена, его нужно вставить в файл:

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

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

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

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

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

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

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

Сохраните файл.
Зайдите еще раз на страничку: 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

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

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

# rpm -Uvh http://download.fedoraproject.org/pub/e … noarch.rpm

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

# cd /var/www/html

# wget http://nchc.dl.sourceforge.net/project/ … 7.2.tar.gz

# tar xvfz roundcubemail-0.7.2.tar.gz

# mv roundcubemail-0.7.2 roundcube

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

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

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

Alias /webmail /var/www/html/roundcube
<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 roundcube.* TO roundcube@localhost IDENTIFIED BY 'password';

# service httpd restart

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

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

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

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

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

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

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

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

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

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