691 (23.11.2014 09:39:36 отредактировано AlfaStriker)

                                        Настройка  PTR, SPF, DKIM и DMARC


Чтобы письма от вашего почтового сервера принимались всеми другими серверами, необходимо настроить следующие фичи: PTR, SPF, DKIM и DMARC
На данный момент это необходимо делать, дабы избежать проблем в будущем.
Все эти технологии проверяют сервера Gmail (Google), если чего то не будет, Gmail с легкостью отклоняет ваши письма.
 
PTR - эта запись прописывается в обратной зоне на DNS сервере провайдера, откуда дают интернет доступ и статический IP адрес. Вы сами не можете прописать необходимые данные, это делает системный администратор вашего провайдера. Вы обращаетесь к провайдеру (админу) с просьбой прописать PTR запись


SPF - эта TXT запись на первичном DNS сервере вашего домена. Ее прописываете вы, обычно если установлен пакет Bind, то надо в файле прямой зоны указать следующею строку:

example.org.      IN        TXT      "v=spf1 mx ip4:117.15.12.89 ip4:217.15.10.20 -all"

Здесь мы указали два IP -117.15.12.89 и 217.15.10.20 наших почтовых серверов.

DKIM - это специальная подпись, которой помечаются исходящие сообщения, дабы указать что ваши письма неподдельные и не спамные. Настройка в данном случае будет такой:

Устанавливаете репозиторий Epel

Устанавливаете пакет opendkim

# yum install opendkim -y

Сохраняете текущий оригинальный конфиг файл

# mv /etc/opendkim.conf  /etc/opendkim.conf.orig

Создаете новый:

vi /etc/opendkim.conf

Со следующим содержимым:

AutoRestart             Yes
AutoRestartRate         10/1h
LogWhy                  Yes
Syslog                  Yes
SyslogSuccess           Yes
Mode                    sv
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
SignatureAlgorithm      rsa-sha256
Socket                  inet:8891@localhost
PidFile                 /var/run/opendkim/opendkim.pid
UMask                   022
UserID                  opendkim:opendkim
TemporaryDirectory      /var/tmp

Настраиваете публичный и секретный ключ

# mkdir /etc/opendkim/keys/example.org
# opendkim-genkey -D /etc/opendkim/keys/example.org/ -d example.org -s default
# chown -R opendkim: /etc/opendkim/keys/example.org
# mv /etc/opendkim/keys/example.org/default.private /etc/opendkim/keys/example.org/default

Открываете файл /etc/opendkim/KeyTable
Добавляете в него текст:

default._domainkey.example.org example.org:default:/etc/opendkim/keys/example.org/default

Открываете файл /etc/opendkim/SigningTable
Добавляете в него текст:

*@example.org default._domainkey.example.org

Открываете файл /etc/opendkim/TrustedHosts
Добавляете в него текст:

127.0.0.1
example.org
host.example.org

Открываете файл /etc/opendkim/keys/example.org/default.txt
Его содержимое копируете и добавляете в вашу прямую доменную зону (named):

default._domainkey      IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmzP0EaX5be0cnt9XCrfjBifv7oko2dKeGcvp5pSx1/NtTpQeLKmNa9BeGFiIZSbkJv5qlc4GA/vSJvuoTJL/UTzvRs2Cqffvsj5HQa7CsfQhny1yO

Проверяете, есть ли наша запись:

dig +short default._domainkey.example.org TXT

Открываете /etc/postfix/main.cf и добавляете

smtpd_milters           = inet:127.0.0.1:8891
non_smtpd_milters       = $smtpd_milters
milter_default_action   = accept
milter_protocol         = 2

Перезапускаете сервисы

# service opendkim start
# chkconfig opendkim on
# service postfix restart

Отправляете тестовое письмо на адрес check-auth@verifier.port25.com
После отправки письма, придет ответное письмо с текстом:

Summary of Results
SPF check:          pass
DomainKeys check:   neutral
DKIM check:         pass
DKIM check:         pass

Здесь видно что везде - pass

DMARC - это специальная запись которая объединяет уже настроенные технологии SPF и DKIM. Она также прописывается в настройках DNS сервера. В вашей прямой зоне оставьте такую строчку:

_dmarc.example.org.    3600        IN         TXT            "v=DMARC1; p=none; rua=mailto: admin@example.org ".

692 (18.11.2014 11:00:26 отредактировано ruldik)

И все таки... Вот что я сделал, начал как говорится заново, заменил везде имя домена на firma.com, поднял еще раз зону firma.com на своем виндовом днс и все такое... Опять по адресу mail.firma.com доступна только веб-морда почты, ввожу mail.firma.com/postfixadmin или mail.firma.com/postfixadmin/login.php - выдает ошибку... Немного покубатурив, пришел к решению сделать следующее:
создал - nano /etc/httpd/conf.d/postfixadmin.conf со следующими записями:

Alias /postfixadmin /var/www/html/postfixadmin
<Directory /var/www/html/postfixadmin>
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>

<Virtualhost mail.firma.com/postfixadmin:443>
ServerName mail.firma.com
ServerAdmin admin@point.local
DocumentRoot "/var/www/html/postfixadmin/"
SSLEngine on
SSLCertificateFile /etc/postfix/certs/cert.pem
SSLCertificateKeyFile /etc/postfix/certs/key.pem
# Поскольку roundcube написан на PHP и мы
# не предполагаем запуск чего-либо кроме PHP скриптов
# на этом виртуалхосте, то на всякий случай отключаем CGI
# и запрещаем изменение параметров ./htaccess'ом
<Directory "/var/www/html/postfixadmin/">
Options -ExecCGI
AllowOverride None
SSLRequireSSL
</Directory>
# Запрещаем PHP скриптам выходить за пределы
# директории виртуалхоста
#php_admin_value open_basedir /var/www/html/roundcube
#php_admin_value safe_mode_include_dir /var/www/html/roundcube
#php_admin_value safe_mode_exec_dir /noexec
#php_admin_value doc_root /var/www/html/roundcube
#php_admin_value upload_tmp_dir /var/www/html/roundcube/temp
#php_admin_value session.save_path /var/www/html/roundcube/temp

# Логирование
#ErrorLog /var/log/httpd/postfixadmin-error.log
#TransferLog /var/log/httpd/postfixadmin-access.log
</Virtualhost>

далее... дописал в nano /etc/httpd/conf/httpd.conf

<VirtualHost 192.168.10.25:80> # Ваш IP адрес
    ServerAdmin admin@point.local
    Redirect permanent / https://mail.firma.com/postfixadmin/
    DocumentRoot /var/www/html/postfixadmin/
    ServerName mail.firma.com/postfixadmin
    #ErrorLog logs/mail.point-error_log
    #CustomLog logs/mail.point-access_log common
</VirtualHost>

делаю service httpd restart и получаю:

Запускается httpd: [Tue Nov 18 07:22:26 2014] [error] (EAI 2)Name or service not known: Could not resolve host name mail.firma.com/postfixadmin -- ignoring!
[Tue Nov 18 07:22:26 2014] [warn] VirtualHost 192.168.10.25:80 overlaps with VirtualHost 192.168.10.25:80, the first has precedence, perhaps you need a NameVirtualHost directive

при этом по имени адреса вида: mail.firma.com - попадаю на веб-морду без проблем и по mail.firma.com/postfixadmin - попадаю в админку...
писмьма летают, вроде все гуд...
Помогите устранить ошибку и шлифануть файлы!
Спасибо.

693

ruldik пишет:

Could not resolve host name mail.firma.com/postfixadmin

ошибку видите?

It is good day to die ...
MS Windows 10
Заметки о главном...

694

i2ks пишет:
ruldik пишет:

Could not resolve host name mail.firma.com/postfixadmin

ошибку видите?

прописал в /etc/hosts - 192.168.10.25 mail.firma.com/postfixadmin
при рестарте ошибка исчезла, остальные остались...

695

ruldik пишет:

прописал в /etc/hosts - 192.168.10.25 mail.firma.com/postfixadmin

это не правильно

ruldik пишет:

[Tue Nov 18 07:22:26 2014] [warn] VirtualHost 192.168.10.25:80 overlaps with VirtualHost 192.168.10.25:80, the first has precedence, perhaps you need a NameVirtualHost directive

Возможно надо добавить:
NameVirtualHost *:80

p.s. а вообще у вас полная чушь в конфиге., првидите его в нормальный вид.

It is good day to die ...
MS Windows 10
Заметки о главном...

696

i2ks пишет:

p.s. а вообще у вас полная чушь в конфиге., првидите его в нормальный вид.

Да я просто скопировал с другого конфига, вот и прошу помощи подправить его....

697

Дай удаленный доступ, посмотрим что у тебя.
Через личку отправь ID и Pas от Teamviewer

698 (19.11.2014 12:07:59 отредактировано ruldik)

В общем... убрал из /etc/httpd/conf/httpd.conf всю инфу и настройки виртал-хостов, так сказать сбросил его в дефолт, удалил /etc/httpd/conf.d/postfixadmin.conf, привел конфиг /etc/httpd/conf.d/roundcube.conf к виду:

Alias /webmail /var/www/html/roundcube
<Virtualhost mail.firma.com:80>
ServerName mail.firma.com
ServerAdmin admin@point.local
DocumentRoot "/var/www/html/roundcube/"
SSLEngine on
SSLCertificateFile /etc/postfix/certs/cert.pem
SSLCertificateKeyFile /etc/postfix/certs/key.pem
# Поскольку roundcube написан на PHP и мы
# не предполагаем запуск чего-либо кроме PHP скриптов
# на этом виртуалхосте, то на всякий случай отключаем CGI
# и запрещаем изменение параметров ./htaccess'ом
<Directory "/var/www/html/roundcube/">
Options -ExecCGI
AllowOverride None
SSLRequireSSL
</Directory>
# Запрещаем PHP скриптам выходить за пределы
# директории виртуалхоста
php_admin_value open_basedir /var/www/html/roundcube
php_admin_value safe_mode_include_dir /var/www/html/roundcube
#php_admin_value safe_mode_exec_dir /noexec
php_admin_value doc_root /var/www/html/roundcube
php_admin_value upload_tmp_dir /var/www/html/roundcube/temp
php_admin_value session.save_path /var/www/html/roundcube/temp

# Логирование
ErrorLog /var/log/httpd/roundcube-error.log
TransferLog /var/log/httpd/roundcube-access.log
</Virtualhost>

все работает, service httpd restart - ошибок не вываливает, НО...
если заходишь браузером по адресу mail.firma.com, выдает тестовую страницу апача, заходишь по адресу mail.firma.com/webmail выдает веб-морду почты. postfixadmin тож нормально работает...
НО стоит в конфиге roundcube поменять порт на

<Virtualhost mail.firma.com:443>

веб-морда почты становится доступна по адресу mail.firma.com, а postfixadmin отваливается...
Народ, подмогните настроить....!!!

699

Спецы выручайте, воткнулся я с этими настройками. Все перелопатил..... Ничего не выходит....

700 (21.11.2014 17:12:54 отредактировано ruldik)

bu

701 (29.11.2014 09:44:37 отредактировано AlfaStriker)

                                                Установка почтового сервера на CentOS 7
                                 
В этом посте написано о том, как установить почтовый сервер на CentOS 7. В новой версии операционной системы произошли некоторые изменения, поэтому старая инструкция по установке Postfix требовала корректировки, которые отражены в этом посте.

Основная часть настроек по настройке Postfix не изменилась, но изменились настройки касающиеся самой операционной системы. Были упразднены старые пакеты по работе с брандмауэром, появился "systemd".
На мой взгляд произошли следующие изменения:
1. Появился systemd - демон инициализации других демонов в Linux, пришедший на замену используемого ранее скрипта инициализации /sbin/init. Вследствие чего, за место привычного iptables имеем firewalld. Который настраивается по другому. А также управление демонами стало делаться через команду "systemctl" за место "service" и "chkconfig".
2. Так как СУБД MySQL приобрела корпорация Oracle, сообщество решило использовать в своих дистрибутивах форк по имени MariaDB. Практически все что когда-то делалось в MySQL работает и в MariaDB. Изменилась только установка, теперь она выглядит так: yum install mariadb mariadb-server
3. Версия Dovecot подскочила с 2.0.9 до 2.2, что повлияло на конфигурирование некоторых настроек.
4. В остальном все осталось по старому, хотя кто имеет кучу скриптов старой системы инициализации, им видимо придется переписывать наработанное все свое добро на новый лад.

Обычно Postfix сам по себе не может выполнять все функции почтового сервиса, его задача - это пересылка сообщений другим почтовым системам. Для полноценной работы на сервер выполняющий почтовые задачи ставят дополнительные пакеты, такие как: Dovecot, MySQL, CLamAV, Postgrey и т.д.

У меня в этой записке будут трудится в связке:

  • Postfix

  • Dovecot

  • MySQL

  • Postgrey

  • Postfixadmin

  • Roundcube

Кратко напишу для чего какой пакет (программа) используются:
Postfix - будет заниматься отправкой и получением писем от других почтовых серверов (MTA - Mail Transfer Agent / почтовый агент пересылки )

Dovecot - занимается доставкой почты от Postfix к почтовым клиентам (MDA - mail delivery agent / почтовый агент доставки)

MySQL -  в базе MySQL будут содержаться такие данные, как наш домен - company.kz, имена почтовых учетных записей, пароли и т.д.

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

PostfixAdmin - веб интерфейс для управления почтовым сервером, предназначен для системного администратора. IT-специалист в нем может легко производить такие операции как: заведение доменов, почтовых учетный записей, смена паролей и т.д.

RoundCube - веб интерфейс для пользователей почтового сервера. С помощью него пользователь непрсредственно работает со своим почтовым ящиком. То есть он может: просматривать почтовые сообщения, отправлять письма и т.д.



Все что здесь написано должно работать на Fedora версий v15-19 и Red Hat 7.
Домен: point.ru
Имя хоста почтового сервера: mail.point.ru
IP адрес почтового сервера: 217.15.188.50
IP адрес DNS сервера провайдера: 10.22.32.51

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

1. Настройка сетевого адаптера
2. Установка MySQL и создание базы "mail"
3. Установка и настройка Postfix
4. Установка и настройка Dovecot
5. Установка Postgrey
6. Установка PostfixAdmin и Apache
7. Настройка имени хоста
8. Настройка фаервола firewalld
9. Настройка PostfixAdmin
10. Установка и настройка RoundCube Web Mail


1. Настройка сетевого адаптера
Проверяем какие есть у нас сетевые адаптеры в системе, вводим в консоли:

# ip a

Здесь видно, что на компьютере три адаптера:
1. lo (loopback)
2. enp0s3
3. enp0s8

Первый адаптер - это специальный программный интерфейс обратной петли. Мы его использовать не будем.
Второй адаптер - это наш внешний физический интерфейс, мы должны прописать белый IP адрес в его настройки.
Третий адаптер - это внутренний интерфейс подключенный в локальную сеть,  соответственно у него будет адрес из диапазона локальной сети.

Теперь давайте найдем файлы настроек сетевых адаптеров, они хранятся в каталоге /etc/sysconfig/network-scripts/, для этого введем:

# ls /etc/sysconfig/network-scripts/

[b]ifcfg-enp0s3[/b]  ifdown-post      ifup-bnep   ifup-routes
[b]ifcfg-enp0s8[/b]  ifdown-ppp       ifup-eth    ifup-sit
ifcfg-lo      ifdown-routes    ifup-ippp   ifup-Team
ifdown        ifdown-sit       ifup-ipv6   ifup-TeamPort
ifdown-bnep   ifdown-Team      ifup-isdn   ifup-tunnel
ifdown-eth    ifdown-TeamPort  ifup-plip   ifup-wireless
ifdown-ippp   ifdown-tunnel    ifup-plusb  init.ipv6-global
ifdown-ipv6   ifup             ifup-post   network-functions
ifdown-isdn   ifup-aliases     ifup-ppp    network-functions-ipv6

Обычно файлы настроек сетевых адаптеров имеют имена:
1. ifcfg-enp0s3, ifcfg-enp0s8 ...
2. ifcfg-p2p1, ifcfg-p7p1 ...
3. ifcfg-eth0, ifcfg-eth1 ...

У нас первый вариант.

До настроек сетевых карт, обязательно отключите программу под названием NetworkManager. Это программа помогает пользователю облегчить настройки подключения к разным сетям. Но на сервере, из за этой работающей утилиты, могут возникнуть необъяснимые проблемы. Если у вас сервер, то желательно отключить NetworkManager.

Отключение NetworkManager:

# systemctl stop NetworkManager.service

# systemctl disable NetworkManager.service

Включаем сеть если она не включена:

# systemctl enable network.service

# systemctl start network.service

Файл /etc/sysconfig/network-scripts/ifcfg-enp0s3, дописываем или меняем сетевые реквизиты:

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

HWADDR=08:00:27:DF:58:83
TYPE=Ethernet
[b]BOOTPROTO=static[/b]
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
[b]IPV6INIT=no[/b]
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=enp0s3
UUID=9825ca5b-d916-4514-b3ac-fdc7964c8362
[b]ONBOOT=yes
IPADDR=217.15.188.50
NETMASK=255.255.255.0
GATEWAY=217.15.188.48[/b]

Жирным шрифтом помечены изменения которые были произведены мною.  Здесь дописаны такие основные параметры как:
- IP адрес компьютера
- указан признак статического адреса для хоста
- маска сети
- адрес шлюза
- адрес DNS сервера

В моих примерах, текстовые файлы создаются и редактируются с помощью редактора vi. Кратко опишу основные операции по работе с текстом:

  • После открытия файла через команду vi <имя файла>, требуется активировать режим редактирования (ввода), это нужно чтобы вносить текст в файл. Активирование режима ввода осуществляется с помощью нажатия клавиши "INS". Далее редактор перейдет с режима просмотра в состояние редактирования. Потом от вас потребуется вводить новые данные в файл.  В моих примерах от вас нужно будет копировать текст из инструкции в созданный файл, обычно это происходит путем нажатия "INS" - переход в режим редактирования, и далее осуществляется вставка текста из буфера обмена нажатием комбинации "SHIFT"+"INS".

  • По окончанию ввода текста, нажмите кнопку "ESC". Тем самым вы вернетесь в режим просмотра.

  • Самое главное - это сохранение файла, чтобы ваш труд не пропал.  В текстовом редакторе vi данную операцию возможно осуществить двумя способами, первый вариант - нажмите и держите кнопку Shift, теперь когда кнопка Shift удержана, не отпуская ее нажмите по букве "z" - два раза. Обязательно проверьте "Caps Lock" - он должен быть выключен. Второй вариант - после выхода из режима редактирования "ESC",  введите ":w!" и нажмите "ENTER".

  • Поиск текста в редакторе vi делается путем нажатия в режиме просмотра кнопки "/", далее вводится текст который нужно найти.

  • Выход без сохранения текста - если вдруг вы неправильно ввели текст, можно выйти из редактора без сохранения введенных данных. Для этого нажмите "ESC" и введите ":q!", потом нажмите ENTER.

Перезапускаем демон отвечающий за сеть:

# systemctl restart network.service

В файл /etc/resolv.conf  вписываем IP адрес DNS сервера провайдера:

# vi /etc/resolv.conf

search point.ru
nameserver 10.22.32.51 //DNS провайдера

Проверяем есть ли интернет на сервере, пингуем:

# ping google.ru

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

# yum install mariadb mariadb-server -y

# systemctl enable mariadb.service

# systemctl start mariadb.service

Создаем почтовую базу -  "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

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

# yum install postfix pam  mod_ssl  openssl crypto-utils mc wget -y

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

Файл /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 = mail.point.ru
mydomain = point.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

Опять открываем /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

Создаем учетную запись пользователя vmail:

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

Для корректной работы создаем каталоги:

# mkdir -p -v /var/vmail

# chmod 770 -R /var/vmail

# chown vmail:mail /var/vmail

Отключаем SELINUX, открываем /etc/selinux/config и меняем:
Находим строку:

SELINUX=enforcing

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

SELINUX=disabled

# setenforce 0

В CentOS 7 по умолчанию уже должен стоят Postfix, но если вдруг у вас другой агент доставки, понадобится поменять его:

# alternatives --config mta

Нажимаем цифру 2 -> ENTER

There are 2 programs which provide 'mta'.
Selection    Command
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.sendmail
2                /usr/sbin/sendmail.postfix
Enter to keep the current selection[+], or type selection number: 2

# systemctl disable sendmail.service

# systemctl stop sendmail.service

Запрещаем Postfix быть открытым релеем, открываем /etc/postfix/main.cf, дописываем:

smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,

Создаем файлы c помощью которых Postfix будет работать с БД:

# mkdir /etc/postfix/sql

Создаем файл /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'

Создаем файл /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'

Создаем файл /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

Если не работает SASL, установите пакет cyrus-sasl:

# yum install cyrus-sasl -y

Открываем /etc/postfix/master.cf и добавляем:

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

Открываем /etc/postfix/main.cf и добавляем:

       
       reject_non_fqdn_recipient,
       reject_unverified_recipient,
       reject_rbl_client cbl.abuseat.org,
       permit

Создаем файл /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/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 = admin@point.ru
}

Теперь создайте файл /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
Подключаем  репозиторий Epel:

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm

Устанавливаем Postgrey:

# yum install postgrey -y

Открываем файл /etc/postfix/main.cf                       
И добавляем строку в правила:

check_policy_service unix:/var/spool/postfix/postgrey/socket

после  reject_unauth_destination
Получится примерно так:

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

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

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

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

# cd /var/www/html

# wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-2.91/postfixadmin-2.91.tar.gz/download -O postfixadmin-2.91.tar.gz

# tar -xvzf postfixadmin-2.91.tar.gz

# mv postfixadmin-2.91/ postfixadmin

# cd  postfixadmin

# chown -R apache.apache /var/www/html/postfixadmin/templates_c

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

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

# systemctl enable dovecot.service

# systemctl enable postfix.service

# systemctl enable httpd.service

# systemctl enable postgrey.service

7. Настройка имени хоста

Открываем файл /etc/resolv.conf и приводим к виду:

search point.ru
nameserver 10.22.32.51    //DNS провайдера

Впишем имя хоста в /etc/sysconfig/network

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=mail.point.ru

А также впишем имя хоста в /etc/hosts

217.15.188.50 mail.point.ru mail

Еще раз проверяем файл /etc/resolv.conf

search point.ru
nameserver 10.22.32.51

Здесь IP адрес:
10.22.32.51 - провайдерский DNS сервер

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

# nslookup mail.point.ru

# nslookup 217.15.188.50

# nslookup -type=MX point.ru

# hostname -f

mail.point.ru

# reboot


8. Настройка фаерволла
Смотрим активные зоны:

# firewall-cmd --get-active-zones

public 
interfaces: enp0s3 enp0s8

Здесь видим, что два наших интерфейса в зоне Public, где все запрещено кроме DHCP и SSH.
Адаптер enp0s8 - это внутренний адаптер, его добавим в зону Trust:

# firewall-cmd --permanent --zone=trusted --change-interface=enp0s8

Также добавим в зону Trust локальную сеть:

# firewall-cmd --permanent --zone=trusted --add-source=192.168.2.0/24

Открываем порты на внешнем интерфейсе:

# firewall-cmd --permanent --zone=public --add-service=smtp

# firewall-cmd --permanent --zone=public --add-service=http

# firewall-cmd --permanent --zone=public --add-port=110/tcp

# firewall-cmd --permanent --zone=public --add-port=143/tcp

Здесь я открыл основные порты 25, 80, 110 и 143.
Если вы настроили TLS/SSL доступ, потребуется открыть также порты 443, 578, 993 и 995.

# firewall-cmd --permanent --zone=public --add-service=https

# firewall-cmd --permanent --zone=public --add-service=imaps

# firewall-cmd --permanent --zone=public --add-service=pop3s

Внесенные настройки надо сохранить через команды

# firewall-cmd --reload

Проверка открытых сервисов:

# firewall-cmd --list-services

Проверяем наши открытые порты/настройки

# firewall-cmd --zone=public --list-ports

110/tcp 443/tcp 80/tcp 25/tcp 143/tcp

По умолчанию в зоне Public есть всего только два сервиса dhcp и ssh, так как это самые используемые службы. Это легко проверить введя команду:

# firewall-cmd --zone=public --list-all

public (default, active)
  interfaces: enp0s3 enp0s8
  sources:
  services: dhcpv6-client ssh
  ports: 110/tcp 443/tcp 80/tcp 25/tcp 143/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

Здесь видно что есть службы dhcpv6-client и ssh
DHCP удаляется командой:

# firewall-cmd --permanent --remove-service=dhcpv6-client

9. Настройка PostfixAdmin

В браузере ввести адрес

http://217.15.188.50/postfixadmin/setup.php

или

http://mail.point.ru/postfixadmin/setup.php

В окошке "Change setup password" - забиваем свой пароль, записываем его на бумажку.
Во втором окошке появится длинная красная непонятная строчка (наш шифрованный пароль), копируем ее в буфер обмена.
Открываем файл:

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


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

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

Меняем, вместо  "changeme", вставляем шифрованный пароль который скопировали в буфер обмена. Вот что должно получится:

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

Создаем учетную запись администратора, например "administrator@point.ru".
Нажимаем на кнопке "Add Admin", появится надпись:

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


или

Администратор был добавлен! (admin@point.ru)

Примечание: Если у вас не получается создать учетную запись администратора, вы на экране видите сообщение - "Некорректный адрес администратора!", то значить имеется проблема с DNS сервером. Для исправления ошибки понадобится настроить ответственные DNS сервера вашего домена у хостера или поднять свой DNS сервер.

Запоминаем адрес (логин) и пароль.
Заходим на страничку:

http://217.15.188.50/postfixadmin/ 

или

http://имя хоста mail.point.ru/postfixadmin/

Вводим адрес administrator@point.ru и пароль.
Добавляем домен point.ru :

Заходим в меню -> Domain List - > New Domain -> point.ru

Aliases - Ставим 0
Mailboxes - Ставим 0
Add default mail aliases - Галочка
Нажимаем ОК.

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

Domain has been added!
(point.ru)

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

Меню Virtual List -> Add MailBox ->
Username - linux
Password - 123 (sample)

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

В локальной сети находим свободный компьютер, настраиваем сетевые настройки так чтобы этот ПК видел почтовый сервер.

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

SMTP/POP3 server:                        point.ru
Учетная запись (Account name):   linux@point.ru
Пароль (password):                      123

Ставим галку - SMTP авторизация.

Отправляем себе письмо на linux@point.ru


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

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

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

# mysql -u root -p

mysql> CREATE DATABASE IF NOT EXISTS `roundcubemail`;
mysql> GRANT ALL PRIVILEGES ON `roundcubemail` . * TO 'roundcube'@'localhost' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
mysql> quit

# cd /var/www/html

# wget http://sourceforge.net/projects/roundcubemail/files/roundcubemail/1.0.3/roundcubemail-1.0.3.tar.gz/download  -O roundcubemail-1.0.3.tar.gz

# tar xvfz roundcubemail-1.0.3.tar.gz

# mv roundcubemail-1.0.3 roundcube

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

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

# cd /var/www/html/roundcube/SQL/

# mysql -u root -p roundcubemail < mysql.initial.sql

# cd /var/www/html/roundcube/config/

# cp config.inc.php.sample config.inc.php

# vi config.inc.php

$config['db_dsnw'] = 'mysql://roundcube:password@localhost/roundcubemail';
$rcmail_config['default_host'] = 'localhost';
$config['product_name'] = 'Roundcube Webmail';
$config['plugins'] = array(
    'archive',
    'zipdownload',
$config['skin'] = 'larry';

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

$rcmail_config['imap_auth_type'] = cram-md5;
$rcmail_config['default_host'] = '127.0.0.1';
$rcmail_config['login_autocomplete'] = 2;
$config['htmleditor'] = 1;
$rcmail_config['username_domain'] = 'point.ru';
$rcmail_config['db_dsnw'] = 'mysql://roundcube:password@localhost/roundcubemail';

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>

# service httpd restart

Примечание: У веб интерфейса RoundCube есть репозиторий с большим выбором плагинов которые расширяют его возможности:

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

-------------------------------------------------------------
Настройка при помощи веб браузера
-------------------------------------------------------------

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

# cd /var/www/html

# wget http://sourceforge.net/projects/roundcubemail/files/roundcubemail/1.0.3/roundcubemail-1.0.3.tar.gz/download  -O roundcubemail-1.0.3.tar.gz

# tar xvfz roundcubemail-1.0.3.tar.gz

# mv roundcubemail-1.0.3 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 = Europe/Moscow

Далее  идем по адресу http://217.15.188.50/roundcube/installer/ и  устанавливаем по умолчанию, не меняя никаких настроек, кроме двух полей,  где нужно указать название базы данных и пароль. В нашем случае  название базы будет "roundcubemail", а пароль указанный ранее 'password'.  В процессе настройки надо обязательно согласится на создание схемы базы Roundcube (Create Database Scheme или Initialize Database). В противном случае будет ошибка, и вы не сможете войти на страничку RoundCube.
По окончании установки веб интерфейса, Вам будет предложено скачать и сохранить один конфигурационный файл:

  • config.inc.php


Этот файл требуется переместить в папку:

/var/www/html/roundcube/config/

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

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

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

А также ставим IP адрес своего почтового хоста чтобы каждый раз не вводить его, логично было бы указать адрес - 127.0.0.1:

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

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

$rcmail_config['login_autocomplete'] = 2;

Также следует включить опцию 'htmleditor' в 'always'.

$config['htmleditor'] = 0;

Если у вас всего один домен, и вы не хотите вводит доменную часть почтового адреса при входе в веб интерфейс, установите заранее свой домен здесь:

$rcmail_config['username_domain'] = 'point.ru';

Если пароль к базе 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.ru/webmail

или

http://point.ru/roundcube

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



11. Настройка своего DNS сервера

Свой DNS сервер нужен если у вас нет аналогичных от хостера/регистратора/провайдера или в компании где вы работаете по информационной политике запрещено использование сторонних служб DNS.
Этот пункт настройки в основном можно пропускать, так как редки случаи настройки своего DNS сервера. Исключением является - проверка работоспособности почтового сервера у себя в локальной сети или в виртуальной машине.  Итак поехали настраивать свой небольшой сервер имен для гипотетического домена "point.ru".
Первым делом установим пакет Bind, именно он отвечает за функции DNS сервера:

# yum install bind -y

Открываем файл /etc/resolv.conf и приводим к виду:

search=point.ru
nameserver 217.15.188.50

Здесь мы убрали адрес DNS сервера провайдера и поставили IP адрес нашего почтового сервера. Чтобы обращение по DNS запросам шли непосредственно к нашей DNS службе.

Открывает /etc/sysconfig/network вписываем в него имя хоста нашего почтового сервера:

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=mail.point.ru

А теперь самое главное, редактируем главный файл отвечающий за работу DNS сервера/службы - /etc/named.conf
Открываем его в текстовом редакторе:

# 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; };
        listen-on-v6 port 53 { ::1; };
        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     { localhost; };

        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

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

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

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

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

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

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

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

Мы его меняем к следующему ввиду:

//
// 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; 217.15.188.50; }; # Наш внешний IP адрес почтового сервера
#      listen-on-v6 port 53 { ::1; };                         # комментируем, нам пока IPv6 не нужен, хотя...
        version "MS DNS server";                               # скрываем версию "named"
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        ###### Наши настройки #####
        allow-query { any; }; # меняем, даем обращаться всем к нашему DNS серверу
        allow-query-cache { localhost; 10.0.0.0/24; }; # меняем, добавляем локальную сеть если она есть
        allow-recursion { localhost; 10.0.0.0/24;}; # меняем, добавляем локальную сеть если она есть
        forwarders { 10.22.32.51; 8.8.8.8; }; # добавляем IP адреса DNS серверов провайдера и публичный Google DNS
        ## Наши настройки закончены ##


        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
#      recursion yes; # комментируем

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

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

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

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

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

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

### Rate Limit ###
rate-limit {
    responses-per-second 15;
    window 5;
};
########Наша прямая зона##########
# Зона прямого просмотра "point.ru"
zone "point.ru" {
     type master;
     file "point.ru.fwd";
     allow-update {none;};
     allow-transfer {217.15.188.55; }; //вторичный DNS - желательно чтобы он был
};

##### Наша обратная зона просмотра "point.ru"######
zone "188.15.217.in-addr.arpa" {
     type master;
     file "point.ru.rev";
    allow-update {none;};
    allow-transfer {217.15.188.55; }; //вторичный DNS - желательно чтобы он был
};

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

Теперь надо создать файлы прямой (forward) и обратной (reverse) зоны для домена "point.ru".
Создаем файл отвечающий за прямую зону /var/named/point.ru.fwd и вписываем:

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

$ORIGIN point.ru.

$TTL 3D

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

mail.point.ru.         IN      A    217.15.188.50
www                     IN      A    217.15.188.50
mail                    IN      A    217.15.188.50

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

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

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

$ORIGIN 188.15.217.in-addr.arpa.

$TTL 3D
@    SOA         mail.point.ru.    root.point.ru. (12 4h 1h 1w 1h)
@    IN          NS      mail.point.ru.
50   IN          PTR     mail.point.ru.

Поставим службу named в автозагрузку и запустим ее:

# systemctl enable named.service

# systemctl start named.service

702 (22.11.2014 17:35:41 отредактировано XliN)

Попробовал настроить DKIM, но при отправке письма получаю в логах

opendkim[13928]: 62F143B786A: DKIM-Signature field added (s=default, d=xlin.tk)

Хотя ответ получил

==========================================================
Summary of Results
==========================================================
SPF check:          pass
DomainKeys check:   neutral
DKIM check:         pass
Sender-ID check:    pass
SpamAssassin check: ham

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

703 (22.11.2014 18:05:03 отредактировано AlfaStriker)

XliN
Это считается нормальным, в письмо добавлена подпись DKIM, о чем и свидетельствует строка в логах.
Примерно это так происходит по логам:

postfix/pickup[7857]: 123: uid=0 from=
postfix/cleanup[8112]: 123: message-id=
opendkim[7699]: 123: DKIM-Signature field added (s=default, d=yourdomain.ru)
postfix/qmgr[7858]: 123: from=, size=437, nrcpt=1 (queue active)
postfix/smtp[8114]: 123: to=, relay=gmail-smtp-in.l.google.com[173.194.78.26]:25, delay=0.86, delays=0.08/0.04/0.21/0.53, dsn=2.0.0, status=sent (250 2.0.0 OK 1400704868 t7si2082882wiy.24 - gsmtp)
postfix/qmgr[7858]: 123: removed

У меня недавно проблема с Gmail была. Ихние сервера перестали принимать письма от моего домена (почтового сервера). Я начал думать, в чем же проблема.
Выяснилось что Gmail любит когда все удостоверяющие  отправителя примочки настроены. После настройки DKIM и DMARC письма стали попадать на сервера GMAIL. Некоторые попадали в папку СПАМ, оттуда я переместил сообщения в папку ВХОДЯЩИЕ. И вообщем, все наладилось.
Хотя аналогичный случай был у друга, письма от его сервака иногда просачивались на Gmail и попадали в папку СПАМ, он письма от своего сервера перемещал в папку ВХОДЯЩИЕ. Тем  самым обеливая свой почтовый сервер. Это надо делать постоянно.
У Гугля тоже есть штука вроде Spamassasin,  которая обучается, путем сканирования папок   ВХОДЯЩИЕ и СПАМ. Все что спамное, после определенного порога, тупо не принимается. А все что есть во ВХОДЯЩИХ - принимается без проблем.

704 (22.11.2014 18:08:42 отредактировано XliN)

AlfaStriker, Сорри. Это я затупил. Принял за fail  bm
Кстати по твоей первой инструкции отлично настраивается почта на CentOS 7. Я по ней делал. =) А тут ты ее адаптировал.

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

705 (22.11.2014 18:36:50 отредактировано AlfaStriker)

Я тоже затупил))), подумал что и в правду fail.

Вторую инструкцию сделал чтобы показать что уже есть systemd, и что за место iptables стоит работает firewalld.

706

У меня postfix ругается на запуск postgrey. Говорит что нет прав на postgrey.pid Хотя в логах видно, что он пизает почту в gray и если все хорошо, отдает статус pass.

Это нормально?

В main.cf у меня прописано:

#       check_policy_service unix:/var/spool/postfix/postgrey/socket,
        check_policy_service inet:localhost:10030,

Первая строчка не отрабатывает, а вот со второй работает, но все еще ругается на права.

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

707 (30.11.2014 13:41:24 отредактировано AlfaStriker)

По ищи этот файл у себя в системе:

# find / -name postgrey

Если правильно установлен Postgrey, то должен быть этот файл в системе.
У меня вот такие файлы на CentOS 7:

# find / -name "postgrey"

/etc/sysconfig/postgrey
/var/spool/postfix/postgrey
/usr/sbin/postgrey 

В директории /var/spool/postfix/postgrey должен быть socket файл.

708 (30.11.2014 13:52:16 отредактировано XliN)

Вот все что он нашел

/run/openrc/daemons/postgrey
/run/openrc/started/postgrey
/etc/conf.d/postgrey
/etc/init.d/postgrey
/var/spool/postfix/postgrey
/sys/fs/cgroup/openrc/postgrey
/usr/sbin/postgrey
/usr/portage/mail-filter/postgrey

В директории /var/spool/postfix/postgrey нет сокет файла

 Консоль:
ls /var/spool/postfix/postgrey
__db.001  __db.002  __db.003  __db.004  __db.005  log.0000000001  postgrey_clients.db  postgrey.db  postgrey.lock

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

709 (30.11.2014 14:02:29 отредактировано AlfaStriker)

У меня он есть:

# ls -la /var/spool/postfix/postgrey/

total 10332
drwxr-x--x.  2 postgrey postfix      4096 Nov 24 10:35 .
drwxr-xr-x. 17 root     root         4096 Nov 22 09:36 ..
-rw-------   1 postgrey postgrey   262144 Nov 24 10:35 __db.001
-rw-------   1 postgrey postgrey    32768 Nov 24 10:35 __db.002
-rw-------   1 postgrey postgrey    49152 Nov 24 10:35 __db.003
-rw-------   1 postgrey postgrey 10485760 Nov 24 10:35 log.0000000001
-rw-------   1 postgrey postgrey     8192 Nov 22 10:00 postgrey_clients.db
-rw-------   1 postgrey postgrey     8192 Nov 24 10:35 postgrey.db
-rw-------   1 postgrey postgrey        0 Nov 22 10:00 postgrey.lock
srw-rw-rw-   1 postgrey postgrey        0 Nov 24 10:35 socket

На 5 CentOS вот такие файлы:

# find / -name "postgrey"

/etc/rc.d/init.d/postgrey
/usr/sbin/postgrey
/var/lock/subsys/postgrey
/var/spool/postfix/postgrey

# ls -la /var/spool/postfix/postgrey/

total 10980
drwxr-x--x.  2 postgrey postfix      4096 Nov 29 11:22 .
drwxr-xr-x. 17 root     root         4096 Feb 20  2014 ..
-rw-------   1 postgrey postgrey    24576 Nov 29 11:22 __db.001
-rw-------   1 postgrey postgrey   163840 Nov 29 11:22 __db.002
-rw-------   1 postgrey postgrey   270336 Nov 29 11:22 __db.003
-rw-------   1 postgrey postgrey    98304 Nov 29 11:22 __db.004
-rw-------   1 postgrey postgrey    49152 Nov 29 11:22 __db.005
-rw-------   1 postgrey postgrey 10485760 Nov 29 11:22 log.0000000002
-rw-------   1 postgrey postgrey    61440 Apr  9  2014 postgrey_clients.db
-rw-------   1 postgrey postgrey   450560 Apr  9  2014 postgrey.db
-rw-------   1 postgrey postgrey        0 Oct 12  2013 postgrey.lock
srw-rw-rw-   1 postgrey postgrey        0 Nov 29 11:22 socket

Видимо есть другой вариант запуска Postgrey, еще можешь попробовать sqlgrey, но там базу надо в ручную очищать временами.

710 (30.11.2014 14:01:52 отредактировано XliN)

Странно. Почему у меня его нема )) Это на gentoo нет, а вот на Centos 7 все как у тебя.

На centos он запускается как сокет

 Консоль:
postgrey   580  0.0  2.5 171852 12924 ?        Ss   Nov13   0:00 /usr/sbin/postgrey --unix=/var/spool/postfix/postgrey/socket --pidfile=/var/run/postgrey.pid --group=postgrey --user=postgrey --greylist-text=Greylisted for %s seconds --daemonize --delay=60

А вот в gentoo нет

 Консоль:
postgrey 24764  0.0  0.2  65644 14364 ?        Ss   ноя29   0:00 /usr/sbin/postgrey --inet=127.0.0.1:10030 --daemonize --pidfile=/var/run/postgrey.pid --delay=300 --greylist-text=Greylisted for %s seconds

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

711 (30.11.2014 14:11:05 отредактировано AlfaStriker)

В Gentoo  есть наверно свои ОС зависимые настройки которые надо подкрутить.
А ставил Postgrey так:

emerge -s postgrey

?

Вот коротко пишут как на Gentoo завести Postgrey:

Конфигурация улучшенных серых списков с помощью postgrey
Вы можете установить улучшенную политику серых списков с помощью простой команды emerge :

root # emerge postgrey

После установки postgrey нам нужно отредактировать файл main.cf . Изменения почти те же самые, как мы делали при настройке серых списков.

Редактируем main.cf используем серые списки

# (Добавьте под smtpd_recipient_restrictions:)
check_sender_access hash:/etc/postfix/sender_access
# (Добавьте попозже:)
smtpd_restriction_classes = greylist
greylist = check_policy_service inet:127.0.0.1:10030

Заметка

Только SMTPD_POLICY_README программы Postfix использует restriction_classes, однако похоже это не работает.

Заметка

Если вы хотите использовать серые списки везде, добавьте check_policy_service inet:127.0.0.1:10030 .
Наконец, запустите сервер и добавьте его к нужному уровню запуска.

root # /etc/init.d/postgrey start

root # rc-update add postgrey default

712

AlfaStriker пишет:

А ставил Postgrey

emerge -av postgrey

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

713

AlfaStriker пишет:

check_policy_service inet:127.0.0.1:10030

Ну у меня так и сделано

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

714

А по логом видно что запускается Postgrey? Задержка есть при поступлении входящих писем?
Например ты отправил письмо на masha@company.ru с ящика andrusha@mail.ru. Письмо с mail.ru должно придти с задержкой.
В логах должна быть запись что письмо от andrusha@mail.ru  временно не принято до повторной попытки, это все на инглише должно быть.
Если все тип-топ, то причин для беспокойства нет имхо.

715

AlfaStriker пишет:

А по логом видно что запускается Postgrey?

Он запускается и работает. Ругнулся только что нет доступа и типо в бекгроунд стартанул.

AlfaStriker пишет:

Задержка есть при поступлении входящих писем?

Да. Письма с задержкой приходят. В логах видно, что postgrey пометил его как greylist и ждет от сервера, что он постучит еще раз. Если все гуд, то статус pass и письмо приходит. То есть все работает. =) Просто не люблю, когда ошибки лезут в логах.

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

716 (30.11.2014 20:48:50 отредактировано AlfaStriker)

Блин, это видимо права на какой нибудь файл не хватает. Я все время эксперементирую в этом случае, так как одназначного решения нет, если только в документации не освещен  этот момент.
Генту боюсь, много там думать надо и ручками ковырять. Тут с Центосом еще не до конца разобрался.
Обязательно в белый список Postgrey, внеси адреса публичных серверов от которых часто приходят письма, наприме: yandex.ru, mail.ru, gmail.com, yahoo.com, pisem.net и т.д. Это чтобы избежать задержек от уже заведомо легитимных отправителей. Да и шеф будет рад быстрому полуению письма.

717

Указал postgray в настройках запускаться от пользователя/группы postgrey и путь к сокету тоже вручную подправил. Стартанул. Postgray сокет создает, но все равно ругается на права. Письма перестали ходить.

Откатился с unix на inet. Так хоть работает.

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

718

Работает - не трогай!
Или будь мужиком, снеси Генту, поставь Ентерпрайз в продакшн (нахватался слов  ag )

719

AlfaStriker пишет:

Или будь мужиком, снеси Генту, поставь Ентерпрайз в продакшн (нахватался слов  ag )

Работает не трогай =)

У меня новая проблема. Мой сервер кому то понадобился. В логах

+ открыть спойлер
Dec  1 09:57:13 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<source>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:13 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<vince>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:13 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<sophia>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:13 mail dovecot: pop3-login: Aborted login (no auth attempts in 0 secs): user=<>, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:13 mail dovecot: pop3-login: Aborted login (no auth attempts in 0 secs): user=<>, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<roberts>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<mitchell>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<sharon>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<siteadmin>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<turbo>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<tommy>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<service>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<rosie>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<webuser>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<peter>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<web1>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<rusty>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<webmaster>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<spencer>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<pokemon>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<payments>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<ruth>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<veronica>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<teddy>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<website>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<peterson>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154
Dec  1 09:57:14 mail dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 17 secs): user=<sasha>, method=PLAIN, rip=162.212.124.149, lip=194.190.30.154

Я так понимаю подбираю логин для почты. Закрыл доступ на 162.212.124.149 через iptables. ЧТо предпринять?

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

720

Fail2ban нужен.