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

Тема: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

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

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

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

Плохим тоном считается, использования публичных почтовых служб. У клиентов такой компании, да и у партнеров может сложится плохое впечатление о фирме, если они увидят адрес известного почтового сервера (mail.ru, yandex.ru, gmail.com и т.д.)

Преимущества Postfix как агента передачи следующие:

  • Быстрый и безопасный

  • Модульная архитектура

  • Бесплатный

Минусы:

  • Сложная установка и настройка по сравнению с Windows решениями.

  • Требуется знать основы Linux



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

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

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

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

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

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

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

  • RoundCube - веб интерфейс для пользователей почтового сервера, этот интерфейс позволяет работать с почтовым ящиком. Пользователь в нем просматривает почтовые сообщения, отправлять письма и т.д.

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

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

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

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

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

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



Краткое содержание:
1. Настройка сетевого адаптера
2. Установка MySQL и создание базы
3. Установка и настройка Postfix
4. Установка и настройка Dovecot
5. Установка Postgrey
6. Установка ClamAV
7. Установка PostfixAdmin и Apache
8. Настройка DNS сервера
9. Настройка PostfixAdmin
10. Установка и настройка RoundCube Web Mail
11. Настройка фаерволла iptables
12. Установка Fail2Ban

Альтернативный почтовый сервер на Exim:
http://linuxforum.ru/viewtopic.php?id=21934

Аналогичная установка на  CentOS 7:
Установка и настройка почтового сервера Postfix на CentOS 6.5 x32

Домен:    

point.local

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

mx.point.local

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

192.168.1.2

Если у вас другой домен и имя хоста, а также IP адрес сервера - поменяйте их на свои в конфигах!


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

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

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

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

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

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

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

Здесь мы дописали IP адрес нашего сервера/компьютера, его подсеть и шлюз в Интернет.


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

# service network restart

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

# vi /etc/resolv.conf

search point.local
nameserver 127.0.0.1        // адрес обратной петли, это ускорит работу DNS
nameserver 192.168.1.2     //Первичный DNS
nameserver 111.222.333.444     //Вторичный DNS

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

# service network restart

Проверьте, ваш сервер должен иметь выход Интернет:

# ping google.ru

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

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

Ставим демон (службу) в автозагрузку:

# chkconfig mysqld on

Запускаем демон СУБД MySQL:

# 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

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

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

# 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 = 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.  Так как у нас нет данного пользователя, создадим его:

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

Тут мы создали нового пользователя vmail c идентификатором ID - 1150, добавили его в группу mail. Созданный пользователь имеет право на папку /var/vmail, при этом он больше ни где не используется. При входе в систему его не будет, то есть ему запрещено входить в систему как обычный пользователь (nologin).

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

# 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,
    reject_non_fqdn_recipient,
    reject_invalid_hostname,
    reject_unknown_recipient_domain,
    reject_unknown_client,
    reject_unlisted_recipient,
    reject_unverified_recipient,
    reject_unauth_pipelining,
    reject_rbl_client cbl.abuseat.org,
    reject_rbl_client dialups.mail-abuse.org,
    reject_rbl_client bl.spamcop.net,
    reject_rbl_client zen.spamhaus.org,
    reject_rbl_client sbl-xbl.spamhaus.org,
    permit

Здесь правило reject_unauth_destination - должно запрещать открытый релей через ваш сервер.
Создадим дополнительные конфигурационные файлы, которые указаны в /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 следующие строчки:

# vi /etc/postfix/main.cf

Чтобы лучше отбивался спам, добавим также следующие ограничения:

+ открыть спойлер

smtpd_client_restrictions =
    reject_unauth_pipelining,
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unknown_client_hostname,
    permit
smtpd_helo_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_invalid_hostname,
    reject_invalid_helo_hostname,
    reject_unknown_hostname,
    reject_non_fqdn_helo_hostname,
    reject_unknown_helo_hostname,
    permit
smtpd_sender_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_non_fqdn_sender,
    reject_authenticated_sender_login_mismatch,
    reject_unauthenticated_sender_login_mismatch,
    reject_unknown_sender_domain,
    permit_sasl_authenticated,
    reject_sender_login_mismatch
    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.6 (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.local
}

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

Теперь установим 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_invalid_hostname,
    reject_unknown_recipient_domain,
    reject_unknown_client,
    reject_unlisted_recipient,
    reject_unverified_recipient,
    reject_unauth_pipelining,
    reject_rbl_client cbl.abuseat.org,
    reject_rbl_client dialups.mail-abuse.org,
    reject_rbl_client bl.spamcop.net,
    reject_rbl_client zen.spamhaus.org,
    reject_rbl_client sbl-xbl.spamhaus.org,
    permit
smtpd_client_restrictions =
    reject_unauth_pipelining,
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unknown_client_hostname,
    permit
smtpd_helo_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_invalid_hostname,
    reject_invalid_helo_hostname,
    reject_unknown_hostname,
    reject_non_fqdn_helo_hostname,
    reject_unknown_helo_hostname,
    permit
smtpd_sender_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_non_fqdn_sender,
    reject_authenticated_sender_login_mismatch,
    reject_unauthenticated_sender_login_mismatch,
    reject_unknown_sender_domain,
    permit_sasl_authenticated,
    reject_sender_login_mismatch
    permit

Примечание: строчка “check_policy_service unix:/var/spool/postfix/postgrey/socket,” должна быть обязательно прописана после строчки параметра “reject_unauth_destination”, как на примере выше.


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

# yum remove rpmforge-release -y

# 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

# 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

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

# cd /var/www/html

# tar -xvzf postfixadmin-2.91.tar.gz

# mv postfixadmin-2.91/ postfixadmin

# cd  postfixadmin

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

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

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

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

# chkconfig mysqld on

# chkconfig dovecot on

# chkconfig postfix on

# chkconfig httpd on

# chkconfig postgrey on

# chkconfig clamd on

# chkconfig clamsmtpd on

# chkconfig saslauthd on

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

search point.local
nameserver 127.0.0.1 
nameserver 192.168.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.local

# vi /etc/hosts

192.168.1.2 mx.point.local mx

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

# service NetworkManager stop

# chkconfig NetworkManager off

# yum remove dnsmasq -y

# service network restart

# vi /etc/resolv.conf

search point.local
nameserver 127.0.0.1
nameserver 192.168.1.2
nameserver 111.222.333.444

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

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

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

# vi /etc/named.conf

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
        listen-on port 53 { 127.0.0.1; 192.168.1.2; }; # ставим внешний IP интерфейса
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query { any; }; # меняем, даем обращатся всем
        allow-query-cache { localhost; 10.0.0.0/24; }; # меняем, добавляем локальную сеть если она есть
        allow-recursion { localhost; 10.0.0.0/24;}; # меняем, добавляем локальную сеть если она есть
        forwarders { 111.222.333.444; 444.555.666.777; }; # добавляем, ip dns провайдера
        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */

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

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

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

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

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

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

Даем права на файл:

chown root:named /etc/named.conf

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

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

$ORIGIN point.local.

$TTL 3D

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

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

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

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

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

$ORIGIN 1.168.192.in-addr.arpa.

$TTL 3D
@    SOA         mx.point.local.    root.point.local. (12 4h 1h 1w 1h)
@    IN          NS      mx.point.local.
2    IN          PTR     mx.point.local.

# service named start

# chkconfig named on

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

# nslookup mx.point.local

# nslookup 192.168.1.2

# nslookup -type=MX point.local

hostname -f

mx.point.local

# reboot

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

Создайте учетку Админа, например "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:                        mx.point.local
Учетная запись (Account name):   linux@point.local
Пароль (password):                      123

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

# 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 -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 = Asia/Almaty

или

date.timezone = Europe/Moscow

Далее  идем по адресу http://127.0.0.1/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'] = 'company.kz';

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

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

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

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

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

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

http://point.local/webmail

или

http://point.local/roundcube

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

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

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

11. Настройка фаерволла 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

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

# vi /etc/fail2ban/jail.conf

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

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

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

[postfix-banhammer]
enabled = true
filter = postfix.banhammer
action = iptables-multiport[name=postfix, port="smtp,smtps", protocol=tcp]
# sendmail[name=Postfix, dest=you@mail.com]
logpath = /var/log/maillog
bantime = 3600
maxretry = 5
ignoreip = 127.0.0.1 192.168.1.2

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

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

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

[Definition]
[INCLUDES]
before = common.conf
failregex = roundcube: (.*) Error: Login failed for (.*) from <HOST>\.
                 roundcube:^\s*(\[(\s[+-][0-9]{4})?\])?(%(__hostname)s roundcube: IMAP Error)?: (FAILED login|Login failed) for .*? from <HOST>(\. .* in .*?/rcube_imap\.php on line \d+ \(\S+ \S+\))?$

ignoreregex =

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

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

[Definition]
failregex = dovecot: auth-worker\(default\): sql\(.*,<HOST>\): unknown user
            dovecot: (pop3|imap)-login: Aborted login \(.*\): .*, \[<HOST>\]
            dovecot: (pop3|imap)-login: Disconnected \(auth failed, .*\): .*, \[<HOST>\]
            dovecot: auth\(default\): passdb\(.*,<HOST>\)\: Attempted login with password having illegal chars
            dovecot: (pop3|imap)-login: Disconnected \(auth failed, .*\): .*, \[<HOST>\]
            dovecot: (pop3|imap)-login: Aborted login: .*, \[<HOST>\]
            (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed).*rip=(?P<host>\S*),.*
            dovecot.*auth-worker\(default\): sql\(.*,<HOST>\): Password mismatch
            dovecot: auth: sql.*,<HOST>.*: Password mismatch
            dovecot: auth: sql.*,<HOST>.*: unknown user
ignoreregex =

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

# vi /etc/fail2ban/filter.d/postfix.banhammer.conf
[Definition]
failregex = \[<HOST>\]: SASL (PLAIN|LOGIN) authentication failed
reject: RCPT from (.*)\[<HOST>\]: 550 5.1.1
reject: RCPT from (.*)\[<HOST>\]: 450 4.7.1
reject: RCPT from (.*)\[<HOST>\]: 554 5.7.1
(?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$
Connection rate limit exceeded: .* from (.*)\[<HOST>\] for service smtp
ignoreregex =

# chkconfig fail2ban on

# service fail2ban start

Чтобы проверить срабатывания правил fail2ban, необходимо чтобы почтовый сервер поработал некоторое время, например 1 день. Далее введите команды:

# fail2ban-regex /var/log/maillog /etc/fail2ban/filter.d/postfix.banhammer.conf

# fail2ban-regex /var/log/maillog /etc/fail2ban/filter.d/dovecot.banhammer.conf

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

Failregex: 6958 total

Заключение
Почтовый сервер установлен и настроен, теперь за электронную переписку отвечает связка программ из мира Open Source. Решение  бесплатное, гибкое и довольно быстрое. В компании где я работаю, Postfix трудится уже продолжительное время. Управлять таким почтовым сервером легко, даже Windows админ справится с такой задачей, так как мы настроили Веб интерфейс под названием PostfixAdmin. В нем можно быстро создавать почтовые домены, пользователей, настраивать пересылку и автоответчик. И это еще не все его достоинства. 
Для обычных пользователей, доступен Веб интерфейс, через который они могут проверять почту, если под рукой не оказалось почтового клиента.

В данном посте в целях более лучшего понимания и упрощения, было решено оставить только самое важное.
Это дает базовый функционал, который в принципе многих удовлетворит.
Если  у вас возникнуть вопросы, можете их задавать на специализированном форуме Postfix: www.postfix.ru
 

Альтернативный почтовый сервер на Exim:
http://linuxforum.ru/viewtopic.php?id=21934

Кому интересно, вот мой конфиг /etc/postfix.main.cf - выдернул с рабочего сервера. Конечно конфиг простой, но мне этого пока хватает:

+ открыть спойлер

############## Начало файла 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.company.kz
mydomain = company.kz
myorigin = $mydomain
mydestination = $myhostname,localhost.$myhostname,localhost
#local_recipient_maps = $virtual_mailbox_maps, $virtual_alias_maps
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8
relay_domains =
always_bcc = backup9@company.kz    # Ящик для бекапов писем, сюда попадают все письма.
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
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
###### Checks #####
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks
mailbox_command = /usr/lib/dovecot/deliver -d В«$USERВ»
###################TLS######################
smtpd_use_tls = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache
smtpd_tls_key_file = /etc/postfix/certs/key.pem
smtpd_tls_cert_file = /etc/postfix/certs/cert.pem
tls_random_source = dev:/dev/urandom
###################TLS######################
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
smtpd_restriction_classes = OnlyFromMyUsers
OnlyFromMyUsers = permit_mynetworks,
    permit_sasl_authenticated,
    reject
smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated,
    reject_authenticated_sender_login_mismatch,
    check_helo_access hash:/etc/postfix/helo_checks,
    check_helo_access pcre:/etc/postfix/helo_checks.pcre,
    check_recipient_access pcre:/etc/postfix/recipient_checks.pcre,
    reject_unauth_destination,
#    check_policy_service unix:/var/spool/postfix/postgrey/socket,
    permit_tls_clientcerts,
    reject_non_fqdn_recipient,
    reject_unauthenticated_sender_login_mismatch,
    reject_invalid_hostname,
    reject_unknown_recipient_domain,
    reject_unknown_client,
    reject_unlisted_recipient,
    reject_unverified_recipient,
    reject_unauth_pipelining,
    reject_rbl_client cbl.abuseat.org,
    reject_rbl_client dialups.mail-abuse.org,
    reject_rbl_client bl.spamcop.net,
    reject_rbl_client zen.spamhaus.org,
    reject_rbl_client sbl-xbl.spamhaus.org,
    permit
smtpd_client_restrictions =
    reject_unauth_pipelining,
    permit_sasl_authenticated,
    permit_mynetworks,
    check_sender_access hash:/etc/postfix/whitelist,
    check_sender_access hash:/etc/postfix/blacklist,
    reject_unknown_client_hostname,
    permit
smtpd_helo_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    check_client_access hash:/etc/postfix/whitelist,
    check_sender_access hash:/etc/postfix/whitelist,
    check_client_access hash:/etc/postfix/blacklist,
    check_sender_access hash:/etc/postfix/blacklist,
    reject_invalid_hostname,
    reject_invalid_helo_hostname,
    reject_unknown_hostname,
    reject_non_fqdn_helo_hostname,
    permit
smtpd_sender_restrictions =
    check_sender_access hash:/etc/postfix/access_sender,
    reject_authenticated_sender_login_mismatch,
    reject_unauthenticated_sender_login_mismatch,
    permit_sasl_authenticated,
    check_sender_access hash:/etc/postfix/whitelist,
    check_sender_access hash:/etc/postfix/blacklist,
    reject_sender_login_mismatch
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
    permit
content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings
strict_rfc821_envelopes = yes
disable_vrfy_command = yes
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_discard_ehlo_keywords = etrn, silent-discard
smtpd_forbidden_commands = CONNECT GET POST
broken_sasl_auth_clients = yes
address_verify_sender = $double_bounce_sender
#################LIMITS###########################
message_size_limit = 51200000
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 15
smtpd_error_sleep_time = 20
anvil_rate_time_unit = 60s
smtpd_client_connection_count_limit = 6
smtpd_client_connection_rate_limit = 6
smtpd_client_message_rate_limit = 6
smtpd_client_recipient_rate_limit = 20
################LIMITS############################
############## Конец файла #########################

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

# vi /etc/postfix/access_sender

company1.kz OnlyFromMyUsers
company2.kz OnlyFromMyUsers

Сохраняем файл.
И вводим следующие команды:

# postmap /etc/postfix/access_sender

# service postfix reload

2 (06.12.2014 15:01:28 отредактировано AlfaStriker)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

                      ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ К ПОЧТОВОМУ СЕРВЕРУ

Здесь в этом посте собраны некоторые настройки которые можно прикрутить к уже установленному Postfix и Dovecot.
Этих настроек немного, взяты они с разных Интернет ресурсов.

Вот краткое содержание дополнений которые вы найдете в этом посте:
1. Включение TLS/SSL в Postfix, Dovecot и RoundCube
2. Авто-создание IMAP папок в Dovecot
3. Установка MailScanner
4. Перемещение спам писем в IMAP папку с именем СПАМ
5. Настройка cron для  автообучения  SA.
6. Дополнительные настройки Postfix для борьбы со спамом
7. Настройка автоответчика в Postfixadmin
8. Копирование всех отправленных/принятых писем в один ящик
9. Черные и белые списки Postfix
10. Анализатор логов к Postfix
11. Как сделать чтобы Postfix работал на нестандартном порту
12. Установка веб интерфейса SquirrelMail для пользователей сервера
13. Переадресация писем
14. Пример настройки авторизации через Active Directory
15. Установка Spamassassin

-----------------------------------------------------------------
Включение TLS/SSL в Postfix, Dovecot и RoundCube
-----------------------------------------------------------------

Создаем само подписанные сертификаты

# mkdir /etc/postfix/certs

# openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/certs/cert.pem -keyout /etc/postfix/certs/key.pem

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

Продолжим нашу настройку, подправим конфигурационные файлы Postfix, Dovecot и RoundCube

Postfix

Открываем файл /etc/postfix/main.cf и добавляем в него настройки (обычно стоят возле smtpd_sasl)

###################TLS######################
smtpd_use_tls = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache
smtpd_tls_key_file = /etc/postfix/certs/key.pem
smtpd_tls_cert_file = /etc/postfix/certs/cert.pem
tls_random_source = dev:/dev/urandom
###################TLS######################

Здесь мы сказали Postfix, что будет защищенное соединение и какие сертификаты использовать.

Открываем файл /etc/postfix/master.cf, находим строчку и раскомментируем ее:

smtps     inet  n       -       n       -       -       smtpd

Здесь мы открыли 465 порт

А также добавим в конец файла:

submission inet n       -       n       -       -       smtpd
          -o syslog_name=postfix/submission
          -o smtpd_tls_wrappermode=no
          -o smtpd_tls_security_level=encrypt
          -o smtpd_sasl_auth_enable=yes
          -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
          -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
          -o milter_macro_daemon_name=ORIGINATING

Здесь мы открыли порт 587

Dovecot
Отрываем файл /etc/dovecot/dovecot.conf и добавляем строчки:

ssl = yes
ssl_cert = </etc/postfix/certs/cert.pem
ssl_key = </etc/postfix/certs/key.pem

А также вписываем:

+ открыть спойлер

service imap-login {
executable = /usr/libexec/dovecot/imap-login
inet_listener imap {
address = *
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}

service imap {
executable = /usr/libexec/dovecot/imap
}
service pop3-login {
executable = /usr/libexec/dovecot/pop3-login
inet_listener pop3 {
address = *
port = 110
}
inet_listener pop3s {
port = 995
ssl = yes
}
}

Здесь мы открыли 993 и 995 порт.

RoundCube
Открываем файл /var/www/html/roundcube/config/main.inc.php
В нем находим строчки и меняем их значения на:

$rcmail_config['default_host'] = 'ssl://192.168.1.2:993';
$rcmail_config['force_https'] = true;

Здесь можно вписать доменное имя или IP адрес почтового сервера. Напомню что IP адрес почтового сервера у нас по примеру - 192.168.1.2
Этими строчками мы дали указания RoundCube чтобы он обращался по SSL соединению к Dovecot, который в свою очередь поможет работать с почтой.

Настройка виртуального хоста в Apache
Создаем файл - /etc/httpd/conf.d/roundcube.conf

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

+ открыть спойлер

<Virtualhost mail.point.local:443>
ServerName mail.point.local
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>

Добавляем в конец файла - /etc/httpd/conf/httpd.conf

+ открыть спойлер

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

Теперь можно заходить на веб интерфейс почтового сервера с адреса - https://mail.point.local
А если вы случайно введете http://mail.point.local, вас автоматически перенаправят на защищенный сайт - https://mail.point.local

Firewall
Когда будете настраивать сетевой брандмауэр, откройте следующие порты:
- стандартные без шифрования:

578 -  SMTP (Submission)
143 -  IMAP
110 -  POP3
25 -  SMTP

- стандартные с шифрованием:

IMAP — 143 (при использовании шифрования STARTTLS) и 993 (при использовании шифрования SSL/TLS)  
POP3 — 995 (с шифрованием)  
SMTP — 465 (с шифрованием).

Например фаервол можно настроить так:

+ открыть спойлер

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

#Разрешаем обращение к почтовым портам
iptables -A INPUT -p tcp -m multiport --dports 25,110,143,443,465,587,993,995,2525 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 25,110,143,443,465,587,993,995,2525 -j ACCEPT

-----------------------------------------------------------------
Авто-создание IMAP папок в Dovecot
-----------------------------------------------------------------

Dovecot по умолчанию не создает папки IMAP такие как - ОТПРАВЛЕННЫЕ, СПАМ, ЧЕРНОВИКИ и КОРЗИНА.
Он лишь отображает одну папку с именем ВХОДЯЩИЕ и все на этом.
Чтобы исправить это, надо проделать следующее:
Редактируем /etc/dovecot/dovecot.conf, добавляем в конец файла:

protocol imap {
  mail_plugins = $mail_plugins autocreate
}
plugin {
    autocreate = INBOX
    autocreate2 = Sent
    autocreate3 = Trash
    autocreate4 = Drafts
    autocreate5 = Junk
    autosubscribe = INBOX
    autosubscribe2 = Sent
    autosubscribe3 = Trash
    autosubscribe4 = Drafts
    autosubscribe5 = Junk
}

После этого станут доступны IMAP папки c английскими именами -  INBOX (ОТПРАВЛЕННЫЕ) , Junk (СПАМ), Drafts (ЧЕРНОВИКИ) и Trash (КОРЗИНА).
Это можно проверить зайдя в веб интерфейс RoundCube или настроив почтовый клиент используя протокол IMAP.
Если вы хотите чтобы IMAP папки создавались с русскими названиями, надо перевести названия имен папок в кодировку UTF7-IMAP.
Например:

Входящие  ->          &BBIERQQ+BDQETwRJBDgENQ-
Отправленные ->    &BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-
Корзина ->              &BBoEPgRABDcEOAQ9BDA-
Черновики ->          &BCcENQRABD0EPgQyBDgEOgQ4-
Спам ->                   &BCEEPwQwBDw-

Соответственно с учетом этого указываем эти новые названия в кодировке UTF-7:

plugin {
    autocreate = INBOX                         # Входящие
    autocreate2 = &BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-      # Отправленные
    autocreate3 = &BCMENAQwBDsENQQ9BD0ESwQ1-  # Удаленные
    autocreate4 = &BCcENQRABD0EPgQyBDgEOgQ4-   # Черновики
    autocreate5 = &BCEEPwQwBDw-                            # Спам
    autosubscribe = INBOX
    autosubscribe2 = &BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-
    autosubscribe3 = &BCMENAQwBDsENQQ9BD0ESwQ1-
    autosubscribe4 = &BCcENQRABD0EPgQyBDgEOgQ4-
    autosubscribe5 = &BCEEPwQwBDw-
}

Для кодировки русских имен в формат UTF7-IMAP используйте следующий сайт - http://toolswebtop.com/text/process/enc … wTLEvl_vag. Папку ВХОДЯЩИЕ - создавать не надо! Она по умолчанию должна быть всегда как  - INBOX.

В итоге получаем IMAP папки с русским именами, которые правильно отображается в Outlook.
Если вы используете dovecot sieve, поменяйте название спам папки c Junk на Спам.

Чтобы папки использовались в RoundCube и были не удаляемыми, проделаем следующее:
Откроем конфигурационный файл RoundCube

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

В нем меняем значение:

$rcmail_config['drafts_mbox'] = 'Черновики';
$rcmail_config['junk_mbox'] = 'Спам';
$rcmail_config['sent_mbox'] = 'Отправленные';
$rcmail_config['trash_mbox'] = 'Удаленные';
$rcmail_config['default_folders'] = array('INBOX', 'Черновики', 'Отправленные', 'Спам', 'Удаленные');
$rcmail_config['create_default_folders'] = false;
$rcmail_config['protect_default_folders'] = true;

Чтобы IMAP папки не мог удалить пользователь в своем OUTLOOK или Roundcube, лучше выставить права только на чтение, например папку СПАМ нельзя переименовывать, так как из этой папки обучается Spamassassin.
В файл /etc/dovecot/dovecot.conf добавляете в раздел плагинов плагин imap_acl:

mail_plugins = acl
protocol imap {
             mail_plugins = $mail_plugins autocreate imap_acl
}

Далее в раздел создания папок IMAP добавляете

plugin {
    autocreate = INBOX
    autocreate2 = Sent
    autocreate3 = Trash
    autocreate4 = Drafts
    autocreate5 = Junk
    autosubscribe = INBOX
    autosubscribe2 = Sent
    autosubscribe3 = Trash
    autosubscribe4 = Drafts
    autosubscribe5 = Junk
    acl = vfile:/etc/dovecot/acls    ###Наша глобальная ACL
}

Здесь мы указали папку /etc/dovecot/acls, где у нас будут файлы с правами на каждую IMAP папку. Создаем каталог и файлы где будут прописаны права только для чтения:

# mkdir /etc/dovecot/acls

Создаем первый файл /etc/dovecot/acls/.DEFAULT, прописываем в нем права только на чтение:

# vi /etc/dovecot/acls/.DEFAULT

После создания файла запишите в него текст:

owner lrwstipek

Создаем второй файл /etc/dovecot/acls/Drafts, в этом файле мы дадим права только для чтения папки Drafts - Черновики.

# vi /etc/dovecot/acls/Drafts

После создания файла запишите в него текст:

owner lrwstipek

Создаем третий файл /etc/dovecot/acls/INBOX, в этом файле будут права только на чтение папки INBOX - Входящие

# vi /etc/dovecot/acls/INBOX

owner lrwstipek

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

# vi /etc/dovecot/acls/Junk

owner lrwstipek

Папка Отправленные:

# vi /etc/dovecot/acls/Sent

owner lrwstipek

Папка Корзина

# vi /etc/dovecot/acls/Trash

owner lrwstipek

После этих изменений обязательно перезапустите Dovecot.
Теперь пользователь не сможет удалить или переименовать IMAP папки.


-----------------------------------------------------------------
Установка MailScanner
-----------------------------------------------------------------
MailScanner позволит проверят почтовые письма на спам и вирусы.

Качаем установочный архив:

Прежде чем приступить, у вас должны быть установлены Postfix, Clamav и Spamassassin. У нас уже имеется установленный Postfix и ClamAV, поэтому мы устанавливаем только Spamassassin:

# yum install spamassassin -y

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

# freshclam

Устанавливаем почтовые консольные утилиты:

# yum install mailx mutt

Отправляем тесовое письмо:

# echo "this is a test" | mail -s "test" root

Проверяем:

# mutt

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

# yum install \
perl-Archive-Zip \
perl-DBI \
perl-DBD-SQLite \
perl-Filesys-Df \
perl-Net-CIDR \
perl-OLE-Storage_Lite \
perl-Sys-Hostname-Long \
perl-Sys-SigAction \
perl-MIME-tools

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

# tar zxf MailScanner-*
# cd MailScanner-*
# yum install --nogpgcheck mailscanner* tnef*

Настраиваем MailScanner
Открываем его конфигурационный файл

# vi /etc/MailScanner/MailScanner.conf

Меняем в нем настройки:

%org-name% = test    # Название организации, можно поставить просто - company, за место - test
Run As User = postfix
Run As Group = postfix
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
MTA = postfix
Incoming Work Group = clam
Incoming Work Permissions = 0640
Virus Scanners = clamd
Clamd Socket = /var/run/clamav/clamd.sock
SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin
High Scoring Spam Actions = deliver

Открываем файл /etc/MailScanner/virus.scanners.conf

# vi /etc/MailScanner/virus.scanners.conf

Находим  и меняем в нем строчку на

clamd /bin/false /usr

Открываем файл /etc/MailScanner/spam.assassin.prefs.conf

# vi /etc/MailScanner/spam.assassin.prefs.conf

Находим и меняем в нем строчки на:

bayes_ignore_header X-test-MailScanner
bayes_ignore_header X-test-MailScanner-SpamCheck
bayes_ignore_header X-test-MailScanner-SpamScore
bayes_ignore_header X-test-MailScanner-Information
envelope_sender_header X-test-MailScanner-From
#use_auto_whitelist 0

# cd /var/spool/MailScanner
# mkdir spamassassin
# chown -R postfix:clam *
# chmod -R 750 *

Открываем файл/etc/postfix/main.cf

# vi /etc/postfix/main.cf

Добавляем строчку:

header_checks = regexp:/etc/postfix/header_checks

Создаем файл /etc/postfix/header_checks

# echo "/^Received:/ HOLD" >> /etc/postfix/header_checks

Открываем основной файл MailScanner (демон)

# vi $(which MailScanner)

Первая строчка, меняем ее на :

#!/usr/bin/perl -I/usr/lib/MailScanner -U

По умолчанию подозрительные письма помечаются заголовком - {Spam?}
Чтобы поменять его на другой, например чтобы было ***SPAM***, надо сделать следующее:

# vi /etc/MailScanner/MailScanner.conf

High Scoring Spam Subject Text = ***SPAM***

Проверяем конфигурационный файл MailScanner

# MailScanner --lint

Останавливаем и убираем с автозагрузки Postfix:

# service postfix stop
# chkconfig postfix off

Запускаем MailScanner:

# service MailScanner start
# chkconfig MailScanner on


-----------------------------------------------------------------
Перемещение спам писем в IMAP папку с именем СПАМ
-----------------------------------------------------------------

Установленный спам фильтр SPAMASSASSIN который вызывает MailScanner, помечает письма флагом  "X-Spam-Flag=YES" и добавляет в тему письма "***SPAM***", если проверенное письмо является спамом или имеет подозрение. Чтобы письма с такой пометкой не попадали в папку ВХОДЯЩИЕ, а падали вместо нее в папку СПАМ, надо проделать следующею инструкцию:
Открываем /etc/dovecot/dovecot.conf - и добавляем:

protocol lda {
  mail_plugins = $mail_plugins sieve
}
plugin {
  sieve = /var/dovecot_sieve/spam_handler
}

Создаем каталог:

# mkdir /var/dovecot_sieve

# chown -R vmail:mail /var/dovecot_sieve

Создаем файл /var/dovecot_sieve/spam_handler - c текстом:

require "fileinto";
if header :contains "X-Spam-Flag" "Yes" {
  fileinto "Junk";
  stop;
}
if header :comparator "i;ascii-casemap" :contains "Subject" "**SPAM**"  {
    fileinto "Junk";
    stop;
}

# chmod ug+x /var/dovecot_sieve/spam_handler

В /etc/postfix/main.cf - добавляем:

mailbox_command = /usr/lib/dovecot/deliver -d «$USER»

Не забываем перезапустить Postfix и Dovecot:

# service postfix restart

# service dovecot restart



-----------------------------------------------------------------
Настройка авто обучения  Spamassasin
-----------------------------------------------------------------
Через задание планировщика Сron можно обучать спам фильтр Spamassasin. Алгоритм работы получается такой:
- Пользователи IMAP ящиков перемещают спамерские письма в папку с именем - СПАМ
- Ежедневно запускается задание для обучения Spamassassin. Все что есть в папке СПАМ - маркируется как спам, а все что есть в папке ВХОДЯЩИЕ - помечается как рабочая почта.
- После истечения 7 дней старые спамерские письма удаляются из папки СПАМ.
- Аналогично требуется удалять письма из папки КОРЗИНА, чтобы не хранить без полезные сообщения.

Открываем файл /etc/crontab и вписываем:

# vi /etc/crontab

Нормальные письма хранятся в папке - cur:

20 2 * * * find /var/vmail/point.local/ -maxdepth 3  -name cur -type d -exec sa-learn --ham {} \;

Спамерские письма хранятся в папках Spam или Junk:

30 2 * *  (sa-learn --spam "/var/vmail/point.local/*/{.Spam,.Junk}/{new,cur}"; rm -f "/var/vmail/point.local/*/{.Spam,.Junk}/{new,cur}/*";) 

Удаление старых писем которые уже лежать 7 дней, чтобы папка Spam и Корзина не разбухали:

40 2 * * * find /var/vmail/point.local/* -iname .Spam -o -iname .Junk -type f -mtime +7 -exec rm {} \;

-----------------------------------------------------------------
Дополнительные настройки Postfix для борьбы со спамом
-----------------------------------------------------------------

  • Борьба с пустыми заголовками и неправильным адресом:

Создаем файл /etc/postfix/header_checks

# vi /etc/postfix/header_checks

И добавляем в него строку:

/^To:$/ REJECT Go away Spamer

Вот еще правила, которые тоже не помешают:

+ открыть спойлер

/^To[:] $/    REJECT inkn-for-who   
/^Received[:].from.*81\.93\.6\.33.*mail2\.blindergroup\.com/
REJECT SPAM_blindergroup-com
/^Received:.from.*statya\.ru/
REJECT SPAM_staya
/^Received:.from.*HELO.igorkalinin\.dialup\.corbina\.ru/
REJECT SPAM_igorkalinin
/^Received:.from.*server[0-9]*\.moderndata\.net/
REJECT SPAM_moderndata-net
/^Received:.from.corbina\.ru.*/
REJECT SPAM_CORBINA_RU
/^Received:.from.*webmail\.hansenet\.de/
REJECT SPAM_webmail-hansenet-de
/^Received:.from.*barracuda\.tnsc\.net/
REJECT SPAM_barracuda
/^Received:.from.*cluster.*\.messagelabs\.com/
REJECT SPAM_messagelabs
/^Received:.from.*220\.246\.35\.[0-9]+/
REJECT SPAM_220-246-35-
/^X-Spam-Report:.*identified.this.incoming.email.as.possible.spam/
REJECT SPAM
/^From:.*tequila\@/
REJECT SPAM_tequila
/^Received:.from.by.*\.business\.mindspring\.com/
REJECT    SPAM_business-mindspring-com
/^Received:.*by.gmail-smtp-in\.l\.google\.com/
REJECT SPAM_by-gmail-smtp-in-l
/^Received:.from.*\.chello\.nl/
REJECT SPAM_chello.nl
/z-bu-gz\.ru/
REJECT SPAM_z-bu-gz-ru
/^Reply-To:.zentr_bu_gz.mail\.ru/
REJECT SPAM_bu-gz-ru
/^Reply-To:.mail2mryikwan.yahoo\.com\.hk/
REJECT SPAM_mail2mryikwan_
#/tc-cargo\.ru/
#    REJECT SPAM_tc-cargo-ru
/^From:.*goszakaz/
REJECT SPAM_goszak
/^Received:.*\.net\.ibizdns\.com.*$/
REJECT SPAM_dns
/bizbookbiz\.ru/
REJECT SPAM_bizbookbiz
/^Reply-To.*safety-first\.ru/
REJECT SPAM_safety-ru
/energytour\.ru/
REJECT SPAM_ENTUR
/^From:.*Microword\.com.Corporations/
REJECT SPAM_Microword
/From:.*rodo\.ruseminar\.ru/
REJECT SPAM_seminar-rodo
/From:.*Global.Tenders.Alert/
REJECT SPAM_Global_Tenders
/^From:.*Tender.Alerts/
REJECT SPAM_Global_Tenders
/^Received:.from.mail\.seminar-for-you\.ru/
REJECT SPAM_seminar-1
/^Received:.from.mail\.pacpic\.ru/
REJECT SPAM_seminar-2
/^Received:.*servak04\.pacificplaza\.local/
REJECT SPAM_from_pplaza
/mailto:goszakaz2010/
REJECT SPAM_seminar_agava
/mailto:goszakaz2011/
REJECT SPAM_seminar_agava
/holiday-complex\.com/
REJECT SPAM_restoran


В /etc/postfix/main.cf добавляем строку:

# vi /etc/postfix/main.cf

header_checks = regexp:/etc/postfix/header_checks

Завершаем настройку командами:

# postmap /etc/postfix/header_checks

# service postfix reload

  • Борьба с теми, кто неправильно здоровается, проставляя в helo  ваш домен или IP адрес:

Создаем файл /etc/postfix/helo_checks

# vi /etc/postfix/helo_checks

# Somebody HELO'ing with our domain?
company.kz               REJECT You are not me
company.ua               REJECT You are not me
 
# Somebody HELO'ing with our IP address?
xxx.xxx.xxx.xxx         REJECT You are not me
yyy.yyy.yyy.yyy         REJECT You are not me

Добавляем в проверки наш файл /etc/postfix/helo_checks:

# vi /etc/postfix/main.cf

smtpd_recipient_restrictions = permit_mynetworks,
                  permit_sasl_authenticated,
                  check_helo_access hash:/etc/postfix/helo_checks,

Завершаем настройку командами:

# postmap /etc/postfix/helo_checks

# service postfix reload

  • Блокируем кривые и косые hostname

Создаем файл /etc/postfix/helo_checks.pcre

# vi /etc/postfix/helo_checks.pcre

/[^[] *[0-9]+((\.|-)[0-9]+){3}/ REJECT Invalid hostname (ipable)
/(modem|dia(l|lup)|dsl|p[cp]p|cable|catv|poo(l|les)|dhcp|client|customer|user|[0-9]{4,})(-|\.|[0-9])/ REJECT Invalid hostname (client)
/[0-9]+-[0-9]+/                 REJECT Invalid hostname (D-D)

Добавляем в проверки наш файл /etc/postfix/helo_checks.pcre:

# vi /etc/postfix/main.cf

smtpd_recipient_restrictions = permit_mynetworks,
                  permit_sasl_authenticated,
                  check_helo_access pcre:/etc/postfix/helo_checks.pcre,

Завершаем настройку командами:

# postmap /etc/postfix/helo_checks.pcre

# service postfix reload

  • Даем разрешение на отправку писем только нашим доменам

В этом файле мы перечисляем домены, только по этим доменам может отправляться почта из Postfix. Если спамер захочет отправит письмо с вашего сервера с левым доменом, у него ничего не выйдет.
Создаем файл /etc/postfix/access_sender

# vi /etc/postfix/access_sender

Добавляем в него наши домены:

company.kz OnlyFromMyUsers
company.ua OnlyFromMyUsers
company.ru OnlyFromMyUsers

Добавляем в проверки наш файл /etc/postfix/access_sender:

# vi /etc/postfix/main.cf

smtpd_restriction_classes = OnlyFromMyUsers
OnlyFromMyUsers = permit_mynetworks,
                  permit_sasl_authenticated,
                  reject
smtpd_sender_restrictions =
                  check_sender_access hash:/etc/postfix/access_sender,

Завершаем настройку командами:

# postmap /etc/postfix/access_sender

# service postfix reload

  • Проверяем тело входящего письма на определенные вхождения, обычно это спам, сюда можно добавлять свои правила для отлупа спамерских писем

Создаем файл /etc/postfix/body_checks

# vi /etc/postfix/body_checks

+ открыть спойлер

/<strong>\*\*\*\*\*<BR>[^ f]/
REJECT SPAM_POPKI
#/.*a.href="http:.*>.*<\/a/
# REJECT SPAM_links
/www\.z-bu-gz\.ru/
REJECT SPAM_SEMINAR
/\s8[^0-9]{0,11}495[^0-9]{0,10}2[^0-9]{0,10}2[^0-9]{0,10}9[^0-9]{0,10}0[^0-9]{0,10}4[^0-9]{0,10}3[^0-9]{0,10}3/
REJECT SPAM_SEMINAR_ZAKuPKI
/w.*w.*w.*\..*z.*-.*b.*u.*-.*g.*z.*\..*r.*u/
REJECT SPAM_SEMINAR_gz_ru
/w.+w.+w.+\..+z.+-.+b.+u.+-.+g.+z.+\..+r.+u/
REJECT SPAM_SEMINAR_gz_Ru
/http:\/\/www\.tc-cargo\.ru/
REJECT SPAM_tc-cargo
/http:\/\/powatih\.com/
REJECT SPAM_powatih
/aroldvdarol\.ru/
REJECT SPAM_DVD-1
/apldvdwex\.ru/
REJECT SPAM_DVD-2
/gooddvdgood\.ru/
REJECT SPAM_DVD-3
/bestdvdbest\.ru/
REJECT SPAM_DVD-4
/awerdvdawer\.ru/
REJECT SPAM_DVD-6
/bsqdvdbsq\.ru/
REJECT SPAM_DVD-7
/@colldvdco/
REJECT SPAM_DVD-5
/drwdvddrw\.ru/
REJECT SPAM_DVD-8
/efgdvdefg\.ru/
REJECT SPAM_DVD-9
/bizbookbiz\.ru/
REJECT SPAM_bizbookru
/461477110/
REJECT SPAM_BizBookBiz
/BIZBOOKBIZ/
REJECT SPAM_BizBookRU
/href=.mailto:goszakaz/
REJECT SPAM_SEMINAR
/:.\s8[^0-9]{0,11}495[^0-9]{0,10}6[^0-9]{0,10}4[^0-9]{0,10}6[^0-9]{0,10}1[^0-9]{0,10}7[^0-9]{0,10}3[^0-9]{0,10}4/
REJECT SPAM_seminar_maskwa
/regcondv\.ru/
REJECT SPAM_seminar_dv

Добавляем наш файл /etc/postfix/body_checks в головной файл main.cf:

# vi /etc/postfix/main.cf

body_checks = regexp:/etc/postfix/body_checks

Завершаем настройку командами:

# postmap /etc/postfix/body_checks

# service postfix reload


-----------------------------------------------------------------
Настройка автоответчика в Postfixadmin
-----------------------------------------------------------------


Perl скрипт "vacation.pl" позволит добавить функцию автоответчика в Postfixadmin. Он уже имеется в установленном веб интерфейсе Postfixadmin, мы просто активируем его и настроим Postfix на использование этого скрипта.
Подключаем Epel репозиторий:

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

# yum install perl-MailTools perl-MIME-EncWords perl-MIME-Charset perl-Email-Valid perl-Test-Pod perl-TimeDate perl-Mail-Sender perl-Log-Log4perl imapsync offlineimap -y

Сделаем первичную настройку:

# mkdir -p /etc/postfix/vacation

# cd /etc/postfix/vacation

# cp /var/www/html/postfixadmin/VIRTUAL_VACATION/vacation.pl /etc/postfix/vacation

# chown -R vmail /etc/postfix/vacation

# chmod 700 vacation.pl

Если вы следовали инструкции с первого поста по настройке Postfix, значить у вас уже имеется уже созданный пользователь "vmail".

Меняем в скрипте "vacation.pl" реквизиты доступа к базе MySQL, а также комментируем одну переменную c PostgreSQL, так как у нас используется MySQL:

# vi /etc/postfix/vacation/vacation.pl

#our $db_type = 'Pg';
our $db_type = 'mysql';
our $db_username = 'postfix';
our $db_password = 'password';
our $db_name     = 'mail';
our $vacation_domain = 'autoreply.point.local';
our $interval = 0;     # Здесь указывается сколько раз отправлять сообщение, по умолчанию стоит 1 раз

Как видите, мы указали уже созданную базу "mail", и домен "autoreply.point.local" который надо будет указать в /etc/hosts.
Откроем файл /etc/hosts

# vi /etc/hosts

Добавим туда строку:

127.0.0.1 autoreply.point.local

Теперь  настроим Postfixadmin:

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

В нем меняем:

$CONF['vacation'] = 'YES';
$CONF['vacation_domain'] = 'autoreply.point.local';

Создаем файл:

# vi /etc/postfix/vacation/transport

Вписываем в него строку:

autoreply.point.local       vacation:

После сохранения, вводим команду:

# postmap hash:/etc/postfix/vacation/transport

Открываем файл /etc/postfix/main.cf

# vi /etc/postfix/main.cf

Добавляем в него строку:

transport_maps = hash:/etc/postfix/vacation/transport

Открываем файл /etc/postfix/master.cf

# vi /etc/postfix/master.cf

Добавляем в него строку:

vacation unix - n n - - pipe
          flags=Rq user=vmail argv=/etc/postfix/vacation/vacation.pl -f ${sender} -- ${recipient}

Все сделано, теперь пере-запускаем Postfix на перечитывание конфигурационного файла:

# service postfix reload

Загружаем веб браузер, вводим http://ВАШ IP АДРЕС СЕРВЕРА POSTFIX/postfixadmin
Вводим логин и пароль админа. Тем самым мы авторизовались в Postfixadmin.
Зайдите в меню - Virtual list -> Virtual list
Выберите учетную запись где надо установить автоответчик и напротив нее щелкните надпись "Set Vacation".
В открывшемся окне заполняем поле Subject
Например:

Subject: Меня нет на рабочем месте

Далее заполняем тело письма где стоить надпись - Message:
Здесь мы пишем что-то типа:

Я буду отсутствовать с 2 по 18. Для срочных вопросов свяжитесь с Ивановым из отдела спиртных напитков ivanov@point.local

Далее нажимаем кнопку "Change / Set away message".


-----------------------------------------------------------------
Копирование всех отправленных/принятых писем в один ящик
-----------------------------------------------------------------

Добавляем в - /etc/postfix/main.cf

always_bcc = backup8@point.local

Делаем рестарт Postfix

# service postfix reload

Теперь вся почтовая переписка будет попадать в ящик - backup8@point.local


-----------------------------------------------------------------
Черные и белые списки Postfix
-----------------------------------------------------------------
Полезно иногда заносить IP адрес и некоторые домены в белые и черные списки.
Белый список позволяет обойти проверки, а черный - заблокировать.
Белые списки:

/etc/postfix/main.cf

smtpd_client_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    check_client_access hash:/etc/postfix/client_white_list,
    check_sender_access hash:/etc/postfix/sender_white_list,
    check_sender_access hash:/etc/postfix/blacklist,
***
smtpd_helo_restrictions =
    check_client_access hash:/etc/postfix/client_white_list,
    check_sender_access hash:/etc/postfix/sender_white_list,
***
smtpd_sender_restrictions =
    check_sender_access hash:/etc/postfix/access_sender,
    check_sender_access hash:/etc/postfix/sender_white_list,
    check_client_access hash:/etc/postfix/client_white_list,
***

# vi /etc/postfix/client_white_list

user@compnay.kz OK
@pochta.ru OK
.porno.ru OK
111.222.333.444 OK

# cp /etc/postfix/client_white_list /etc/postfix/sender_white_list

# postmap /etc/postfix/client_white_list

# postmap /etc/postfix/sender_white_list

# service postfix reload

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

+ открыть спойлер

.gmail.com OK
.yandex.ru OK
.hotmail.ru OK
.mail.ru    OK
.pochta.ru    OK
ns8.spamhaus.org    OK
.roilcom.ru    OK
server11.servera.info    OK
nat5.iks.ru    OK
192.168.115.79    OK
192.168.203.146     OK
.svtc.ru    OK
213.171.44.62    OK
213.171.44.61    OK
83.166.115.33    OK
88.212.197.154    OK
81.176.70.125    OK
192.168.115.1    OK
92.50.219.70    OK
83.234.8.147    OK
85.202.113.18    OK
195.208.174.5    OK
194.85.238.129    OK
192.168.115.4    OK
10.12.1.1    OK
213.199.154.139    OK
213.199.154.140    OK
213.199.154.141    OK
213.199.154.142    OK
213.199.154.143    OK
213.199.154.144    OK
www.itc.mecom.ru    OK
.sakhugms.ru    OK

Черные списки:

/etc/postfix/main.cf

smtpd_client_restrictions =
    check_sender_access hash:/etc/postfix/blacklist,
smtpd_helo_restrictions =
    check_client_access hash:/etc/postfix/blacklist,
    check_sender_access hash:/etc/postfix/blacklist,
smtpd_sender_restrictions =
    check_sender_access hash:/etc/postfix/blacklist,

# vi /etc/postfix/blacklist

porno.ru reject
@hvatit.ru reject
.zakolebal.ru reject
111.222.333.444 reject

# postmap /etc/postfix/blacklist

# service postfix reload

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

+ открыть спойлер

.cz REJECT
.br REJECT
.pl REJECT
.nl REJECT
.ro REJECT
.comcast.net REJECT
.revip2.asianet.co.th    REJECT
.revip.asianet.co.th    REJECT
.pck.nerim.net    REJECT
luna.ptwc.noaa.gov    REJECT
alphacompany.ser.forthnet.gr    REJECT
.dyn.user.ono.com    REJECT
solar.websiteactive.com    REJECT
artflag.rmt.ru    REJECT
epfw.ep.ee    REJECT
.astral.ro    REJECT
.conavicoop.cl    REJECT
.vps.agava.net    REJECT
.tampabay.res.rr.com    REJECT
Stankostroy.TeNeT.Odessa.UA    REJECT
artcafe.id.dunanet.hu    REJECT
bazalt.ru    REJECT
rd-mastbank-vogw.mtu.ru    REJECT
bibble.privatedns.com    REJECT
laoujin.coltel.ru    REJECT
ukrpoligrafmedia.ukrhub.net    REJECT
sakhar.kuwaitnet.net    REJECT
.baitlure.com    REJECT
.safesecureweb.com    REJECT
.gw.smartbro.net    REJECT
.vpn.flex.ru    REJECT
.dyn.tyfon.se    REJECT
foto.convex.ru    REJECT
.soborka.net    REJECT
.bb.netvision.net.il    REJECT
.lefkoniko.gr    REJECT
ns.shakht.donpac.ru    REJECT
proxy.kskls.sk    REJECT
boss.devx.ru    REJECT
mail.demonnet.org    REJECT
toyota-zhetisu.kz    REJECT
unisono.net.mx    REGECT
copolod.ru    REJECT
fw.rags.ru REJECT
relay.aragon.es    REJECT
ns.satkom.ru    REJECT
aseriopoles.ru    REJECT
.powatih.com    REJECT
.buyvolas.ru    REJECT
.ruskyhost.ru    REJECT
.quelle-info.ru    REJECT
.newsletter.yves-rocher.ua    REJECT
.hostupon.com    REJECT
.magelan.su    REJECT
.broadband.redcom.ru    REJECT
kali.comncom.fr    REJECT
taxisexcelencia.com    REJECT
terra-net.com.ua    REJECT
.ips-sys.ru    REJECT
ns.vega-int.ru    REJECT
.us-noc.com    REJECT
gloluxx1.com REJECT
.royaltelesystems.net    REJECT
@ors.com.tr   REJECT
hostlife.net   REJECT
vz13.hostlife.net   REJECT
.static.telecom.kz   REJECT
static.telecom.kz   REJECT
.vtx.ch REJECT
190.254.189.100 REJECT
e-pochta.kz REJECT
93.171.216.39 REJECT
79.142.54.100 REJECT
manulkin1978@mail.ru REJECT
apipluskz@gmail.com REJECT
trade@imperiaemail.ru REJECT
sales@realinvest.kz REJECT
news@grandmaster.kz REJECT
reservation2@bell.kz REJECT
postman@xbx.ru REJECT
postman@usndr.com REJECT
aurifer@mail.ru REJECT
mail@topmarketing2.ru REJECT
hrr.kz@mail.ru REJECT
uspeh.m@nursat.kz REJECT
blockadingmd9@mail.ru REJECT
a.kiselev@iblc.ru REJECT
premiumskrx@mail.ru REJECT
info@intax-group.com REJECT
pkz2014@yandex.ru REJECT
tourservice.kz REJECT
prod14@imperiaemail.ru REJECT
icsg2014.activehosted.com@s140.acemserv.com REJECT
mrliptak@gmail.com REJECT
bell.kz REJECT
46.31.112.131 REJECT
46.165.241.167 REJECT
mundivia.es REJECT
62.13.225.130 REJECT
hinet.net REJECT


Вот пример как должны быть прописаны черные и белые списки в /etc/postfix/main.cf

+ открыть спойлер

smtpd_client_restrictions =
    check_sender_access hash:/etc/postfix/whitelist,
smtpd_helo_restrictions =
    check_client_access hash:/etc/postfix/whitelist,
    check_sender_access hash:/etc/postfix/whitelist,
smtpd_sender_restrictions =
    check_sender_access hash:/etc/postfix/whitelist,

-----------------------------------------------------------------
Анализатор логов к Postfix
-----------------------------------------------------------------

Полезно знать статистику по почтовому серверу, сколько писем отправлен/получено, а также сколько спама отбилось.
Или даже можно узнать что у вас проблема с конфигурационным файлом.

# yum -y install postfix-perl-scripts
# perl /usr/sbin/pflogsumm -d yesterday /var/log/maillog >> /home/yesterday.log

Теперь откройте статистику из файла /home/yesterday.log через vi или mcedit.
Можно также получить статистику сегодняшнего дня задав параметр - today

# perl /usr/sbin/pflogsumm -d yesterday /var/log/maillog >> /home/yesterday.log

Установка Logwatch
Чтобы каждый день виден статистику по серверу, полезно установить утилиту Logwatch которая будет отправлять на ваш почтовый ящик статистику каждый день, тем самым позволяя вам держать руку на пульсе, если вдруг что случится с вашим почтарем или любым другим серверов.

# yum install logwatch

Теперь отредактируйте файл

# vi /usr/share/logwatch/default.conf/logwatch.conf

MailTo = admin@company.ru
MailFrom = Logwatch_Company_Mail
Detail = High

Здесь мы указали что отчет должен отсылаться на ящик admin@company.ru
Тестовый отчет можно получить если ввести

/etc/cron.daily/0logwatch

-----------------------------------------------------------------
Как сделать чтобы Postfix работал на нестандартном порту
-----------------------------------------------------------------
Для примера мы хотим чтобы слушался порт 2525, это полезно бывает иногда, когда провайдеры блокируют порт 25.
Добавляем в /etc/postfix/master.cf  строчку вида:

111.222.333.444:2525 inet n - n - - smtpd

Здесь 111.222.333.444 - это IP вашего сервера  и соответственно порт 2525
И перезапускаем Postfix:

# service postfix reload

-----------------------------------------------------------------
Установка веб интерфейса SquirrelMail для пользователей сервера
-----------------------------------------------------------------
Если вам не нравится RoundCube, попробуйте интерфейс -  SquirrelMail.

# yum install squirrelmail -y

Теперь скачаем и установим плагин Postfixadmin к SquirrelMail:

# cd /usr/share/squirrelmail/plugins/

# tar -xvzf squirrelmail-postfixadmin-0.4.3.2.tar.gz

# cd postfixadmin

Настраиваем Squirrelmail:

# /usr/share/squirrelmail/config/conf.pl

В меню выбираем - Plugins
Далее выбираем - Postfixadmin
Выходим выбираем - q
Жмем - Enter

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

# yum install php-pear-MDB2-Driver-mysql -y

# mv /usr/share/squirrelmail/plugins/postfixadmin/config.php.sample /usr/share/squirrelmail/plugins/postfixadmin/config.php

Открываем конфигурационный файл плагина Postfixadmin:

# vi /usr/share/squirrelmail/plugins/postfixadmin/config.php

Меняем в нем параметры доступа к БД MySQL:

$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'password';
$CONF['database_name'] = 'mail';

Сохраняем файл, по умолчанию сайт работает по адресу - https://127.0.0.1/webmail
Чтобы поменять его на другой, отредактируйте файл:

/etc/httpd/conf.d/squirrelmail.conf 

Меняем - /webmail  на свой предпочитаемый вариант, например - /webmail123:

Alias /webmail /usr/share/squirrelmail

-----------------------------------------------------------------
Переадресация писем
-----------------------------------------------------------------
Исходные данные:
1. Ящик - ivanov@company.kz
2. Ящик - petrovich@company.kz

Надо сделать так чтобы письма письма приходящие на ящик  - ivanov@company.kz параллельно дублировались на адрес -  petrovich@company.kz. Это нужно когда например сотрудник Иванов уйдет в отпуск, а его письма надо смотреть, и смотрит в нашем примере эти письма сотрудник Петрович.

Все операции делаются в консоле СУБД MySQL.

Включение переадресации
Запускаем консоль MySQL:

# mysql -p

# проверяем какие есть базы

mysql> show databases;

# используем базу "mail" которую нам создал Postfixadmin

mysql> use mail;

# выводим все таблицы базы "mail";

mysql> show tables;

# выводим на экран содержимое таблицы "alias"

mysql> select * from alias;

# выводим на экран информацию касательно учетной записи "ivanov@company.kz"

mysql> select * from `alias` where `address`='ivanov@company.kz';

# самый главный момент, тут мы обновили "alias" учетной записи "ivanov@company.kz", по помимо своего alias'a, мы добавили туда адрес "petrovich@company.kz" чтобы почта приходила на два ящика ivanov@company.kz и petrovich@company.kz

mysql> update `alias` SET `goto`='ivanov@company.kz,petrovich@company.kz' WHERE `address`='ivanov@company.kz';

# выходим

mysql> exit

Чтобы отключить переадресацию:

# mysql -p

mysql> use mail;

mysql> update `alias` SET `goto`='ivanov@company.kz' WHERE `address`='petrovich@company.kz';

mysql> exit

Более простой метод переадресации:
Настройка переадресации писем, например если вам необходимо выполнить переадресацию с вашего ящика test@mydomain.com на user@mail.ru
Надо в файл

# vi /etc/postfix/main.cf

добавить строчку

recipient_bcc_maps = hash:/etc/postfix/recipient_bcc 

а в файл

# vi /etc/postfix/recipient_bcc

добавить

test@mydomain.com user@mail.ru

после чего 

# postmap /etc/postfix/recipient_bcc

# postfix reload


-----------------------------------------------------------------
Пример настройки авторизации через Active Directory
-----------------------------------------------------------------
Вот еще одно решение твоей проблемы:

Исходные данные:
Почтовый сервер

  • Машина: CentOS 6.5, Postfix+Dovecot+Roundcube

  • Внутренний IP адрес: 10.168.50.2

  • Имя хоста в локальной сети: mail.company.ru

Доменный контроллер

  • Машина: Windows 2003, Active Directory

  • Домен: company.local

  • Имя хоста: pdc.company.local

  • Внутренний IP адрес: 10.168.50.8

  • Учетная запись для чтения данных из каталога: vmail / ее пароль - Ivanka123

  • Учетные записи будут браться из организационной единицы company.local/users/
    из поля email учетных записей

1. Настраиваем имя хоста
В файле /etc/hosts, добавляем строчки:

10.168.50.2 mx.company.local mx
10.168.50.8 pdc.company.local pdc

2. Устанавливаем утилиты OpenLDAP:

yum install openldap-clients

Проверяем как работает доступ к Windows AD:

ldapsearch -x -h pdc.company.local -D 'vmail' -W -b 'cn=users,dc=company,dc=local'

Получим в выводе кучу информации которая хранится в каталоге LDAP.

3. Редактируем конфигурационный фал Postfix - /etc/postfix/main.cf
Меняем значения:

virtual_mailbox_domains = company.ru
transport_maps = hash:/etc/postfix/transport
proxy_read_maps = $smtpd_sender_login_maps $local_recipient_maps $virtual_alias_maps $virtual_mailbox_maps
smtpd_sender_login_maps = proxy:ldap:/etc/postfix/ad_sender_login_maps.cf
virtual_mailbox_maps = proxy:ldap:/etc/postfix/ad_virtual_mailbox_maps.cf
virtual_alias_maps = proxy:ldap:/etc/postfix/ad_virtual_group_maps.cf
virtual_mailbox_base = /var/vmail

Создаем первый файлы:

vi /etc/postfix/transport

company.ru dovecot

Делаем:

postmap hash:/etc/postfix/transport

Создаем файлы со следующим содержимым:

vi /etc/postfix/ad_sender_login_maps.cf

server_host     = pdc.company.local
server_port     = 389
version         = 3
bind            = yes
start_tls       = no
bind_dn         = vmail
bind_pw         = Ivanka123
search_base     = cn=users,dc=company,dc=local
scope           = sub
query_filter    = (&(userPrincipalName=%s)(objectClass=person)(!(userAccountControl=514)))
result_attribute= userPrincipalName
debuglevel      = 0

# vi  /etc/postfix/ad_virtual_mailbox_maps.cf

server_host     = 10.168.50.8
server_port     = 389
version         = 3
bind            = yes
start_tls       = no
bind_dn         = vmail
bind_pw         = Ivanka123
search_base     = cn=users,dc=company,dc=local
scope           = sub
query_filter    = (&(objectClass=person)(mail=%s)(!(userAccountControl=514)))
result_attribute= userPrincipalName
debuglevel      = 0

vi /etc/postfix/ad_virtual_group_maps.cf

server_host     = pdc.company.local
server_port     = 389
version         = 3
bind            = yes
start_tls       = no
bind_dn         = vmail
bind_pw         = Ivanka123
search_base     = cn=users,dc=company,dc=local
scope           = sub
query_filter    = (&(objectClass=group)(mail=%s))
special_result_attribute = member
leaf_result_attribute = mail
result_attribute= userPrincipalName
debuglevel      = 0

Пояснение:
%d  - Доменная часть без локальной части и символа @ (например, pipec.org).
%s  - Полный почтовый адрес (например, artem@pipec.org).
%u  - Локальная часть без символа @ и указания домена (например, artem).


ПРОВЕРКИ, ВЫБОРКА ДАННЫХ ИЗ КАТАЛОГА LDAP
Проверяем:

postmap -q AlfaStriker@company.local
ldap:/etc/postfix/ad_virtual_mailbox_maps.cf

Получаем:

company.local/AlfaStriker/Maildir/

Проверяем:

postmap -q AlfaStriker@company.local ldap:/etc/postfix/ad_sender_login_maps.cf

Получаем:

AlfaStriker@company.local

Создаем группу в Active Directory, назовем ее - mailgroup@company.local
В настройках этой группы заполним поле e-mail - mailgroup@company.local

Проверяем:

postmap -q mailgroup@company.local ldap:/etc/postfix/ad_virtual_group_maps.cf

Получаем:

AlfaStriker@company.local

Настройка Dovecot

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

hosts           = pdc.company.local:389
ldap_version    = 3
auth_bind       = yes
dn              = vmail
dnpass          = Ivanka123
base            = cn=users,dc=company,dc=local
scope           = subtree
deref           = never
user_filter     = (&(userPrincipalName=%u)(objectClass=person)(!(userAccountControl=514)))
pass_filter     = (&(userPrincipalName=%u)(objectClass=person)(!(userAccountControl=514)))
pass_attrs      = userPassword=password
default_pass_scheme = CRYPT
user_attrs      = =home=/var/vmail/%Ld/%Ln/Maildir/,=mail=maildir:/var/vmail/%Ld/%Ln/Maildir/     

   

Для наглядности приведу полный конфиг файл Dovecot:

+ открыть спойлер

# 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
auth_verbose = yes
base_dir = /var/run/dovecot/
disable_plaintext_auth = no
ssl = no
first_valid_uid = 1150
last_valid_uid = 1150
mail_uid = 1150
mail_gid = 12
log_timestamp = %Y-%m-%d %H:%M:%S
mail_debug = yes
mail_location = maildir:/var/vmail/%d/%u
passdb {
   args = /etc/dovecot/dovecot-ldap.conf
   driver = ldap
}
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-ldap.conf
   driver = ldap
}
protocol lda {
   auth_socket_path = /var/run/dovecot/auth-master
   postmaster_address = admin@company.ru
}

А также полный конфигурационный файл  Postfix:

+ открыть спойлер

soft_bounce = no
queue_directory = /var/spool/postfix
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
default_privs = nobody
inet_interfaces = all
myhostname = mx.company.ru
mydomain = company.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
virtual_mailbox_domains = company.ru
transport_maps = hash:/etc/postfix/transport
proxy_read_maps = $smtpd_sender_login_maps $local_recipient_maps $virtual_alias_maps $virtual_mailbox_maps
smtpd_sender_login_maps = proxy:ldap:/etc/postfix/ad_sender_login_maps.cf
virtual_mailbox_maps = proxy:ldap:/etc/postfix/ad_virtual_mailbox_maps.cf
virtual_alias_maps = proxy:ldap:/etc/postfix/ad_virtual_group_maps.cf
virtual_mailbox_base = /var/vmail
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
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
content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings

Создаем тестовую учетную запись в OU - Users
Создайте учетную запись Andrey и в поле email (почтовый адрес) введите test@company.ru

Проверка из RoundCube
Входим в веб интерфейс и вводим test@company.ru, пароль разумеется берем от учетной записи Andrey.
Отправляем письмо себе или на другой ящик.

-----------------------------------
Установка Spamassasin
-----------------------------------

# yum install spamassassin -y
# vi /etc/mail/spamassassin/local.cf
Вставляем текст в файл:

required_hits 5.0
report_safe 0
required_score 5
rewrite_header Subject ***SPAM***

# groupadd spamd

# useradd -g spamd -s /bin/false -d /var/log/spamassassin spamd

# chown spamd:spamd /var/log/spamassassin

Открываем файл /etc/postfix/master.cf и вставляем две строчки в конец файла:

# vi /etc/postfix/master.cf

smtp        inet   n           -           n          -             -              smtpd -o content_filter=spamassassin
spamassassin unix - n n - - pipe flags=R user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Обновляем и перечитываем настройки SA:

# sa-update && /etc/init.d/spamassassin reload

Перезапускаем Postfix и Spamassassin:

# service /etc/init.d/postfix reload

# service spamassassin restart

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

# chkconfig spamassassin on

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

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

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

Получаем входящее сообщение:

****SPAM****XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

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

X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on
    localhost.localdomain
X-Spam-Flag: YES
X-Spam-Level: *****
X-Spam-Status: Yes, score=5.3 required=5.0 tests=ALL_TRUSTED,
    DOS_BODY_HIGH_NO_MID,HTML_MESSAGE,HTML_MIME_NO_HTML_TAG,MIME_HTML_ONLY,
    MISSING_DATE,MISSING_MID,TVD_RCVD_SINGLE autolearn=no version=3.3.2
X-Spam-Report: 
    * -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP
    *  1.2 TVD_RCVD_SINGLE Message was received from localhost
    *  0.0 HTML_MESSAGE BODY: HTML included in message
    *  1.1 MIME_HTML_ONLY BODY: Message only has text/html MIME parts
    *  0.6 HTML_MIME_NO_HTML_TAG HTML-only message, but there is no HTML tag
    *  0.1 MISSING_MID Missing Message-Id: header
    *  1.4 MISSING_DATE Missing Date: header
    *  1.8 DOS_BODY_HIGH_NO_MID High bit body and no message ID header

3

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

День добрый.
Я не великий специалист, и хочу поинтересоваться,
зачем нам здесь нужен Postgrey?

4 (30.05.2012 11:53:05 отредактировано AlfaStriker)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Если вас бесит Postgrey, используйте mailscanner, его  все хвалят.
В Интернете есть howto как прикрутить его к Postfix'у.

5

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Спасибо ab, я что то протупил.... конечно же, серые списки...

6

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Да хорошая статья, вот бы есче б такую только без mysql  ab

7

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Доброго времени суток! Спасибо за статью. Доходчиво, ничего лишнего. Но возникла такая проблема. МХ-запись с указанием нашего белого IP уже существует у нашего хостера. В таком случае получается что поднимать DNS сервер не нужно? Если так, то что изменится в конфигах, или может в resolv.conf? При запуске postfix, да и всех остальных служб никаких ошибок не возникает. PostfixAdmin работает, тестовые сообщения и сообщения от клиентов уходят, но никуда не приходят. При отправке на наш сервак сообщения, к примеру, с яндекса, обратно приходит что невозможно доставить
host mail.ssm-samara.ru[85.26.171.46] said: 554
5.7.1 Service unavailable; Client host [77.88.46.7] blocked using dull.ru
(in reply to RCPT TO command)
Перепробовали кучу вариантов. Если DNS установить, то сообщения на внешку уходят, а обратно не идут, возвращаются ошибкой.
Помогите пожалуйста.

8

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Добрый вечер!
А возможно и как отправить письма на внешний почтовый сервер (например mail.ru, yandex.ru, rambler.ru)

9 (19.07.2012 14:59:48 отредактировано AlfaStriker)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

ssm-samara попробуй удалить строчку 56 из /etc/postfix/main.cf

reject_rbl_client dull.ru

Пока ошибок DNS нет.

В /etc/resolv.conf добавь сервера провайдера.
А вообще можешь поставить любой DNS сервер, главное чтобы в авторитарных DNS были записи со ссылкой твой хост.

10 (19.07.2012 14:55:42 отредактировано AlfaStriker)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

dflbv.p Если у тебя локальный домен, можно отправить только на yandex.ru. Но обратно письмо тебе не придет, здесь по любому надо DNS настраивать.

На другие сервера опять таки не возможно отправлять/получать письма, практически все почтовые сервера проверяют DNS записи.
Для отправки и приема почты надо покупать доменное имя, а потом у регистратора домена указать DNS сервера ответственные  за твой домен.
На этих DNS серверах у тебя обязательно должны быть прописаны записи типа A, MX
Запись  типа PTR вносится провайдером, админу провайдера говоришь чтобы он внес запись для обратного преобразования PTR (IP адрес -> Доменное имя).

11

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

закомментили строку, ошибка пропала, но сообщения все равно никуда не приходят. Доменное имя у нас куплено, сервак раньше работал на этом IP, просто сгорел. Когда настраивался почтовик фирма писала офф письмо хостеру (крафт-с) чтобы они изменили МХ запись для домена, чтобы она указывала на наш IP 85.26.171.46 (при сменах интернет провайдеров мы им такие же письма отправляли). У нас хостер и провайдер разные. Тогда всё работало, правда и система была немного другая postfix+sqlgrey, но к ней мы путевых мануалов не нашли. Раньше в resolv.conf было search intra и nameserver был днс провайдера (не хостера)
Мы настроили поначалу DNS, всё как ты описал, сообщения во внешку уходили, а на приём нет. Возникла мысль что это какие-то проблемы из-за того что MX у хостера прописана. Отключили named, искали ошибку, много разного перепробовали, бесполезно.

[root@mail ~]# dig ssm-samara.ru

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> ssm-samara.ru
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55422
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;ssm-samara.ru.            IN    A

;; ANSWER SECTION:
ssm-samara.ru.        69875    IN    A    213.156.192.5

;; AUTHORITY SECTION:
ssm-samara.ru.        69875    IN    NS    ns1.kraft-s.net.
ssm-samara.ru.        69875    IN    NS    ns2.kraft-s.net.

;; ADDITIONAL SECTION:
ns1.kraft-s.net.    10988    IN    A    213.156.192.1
ns2.kraft-s.net.    11749    IN    A    213.156.193.1

;; Query time: 22 msec
;; SERVER: 83.149.22.14#53(83.149.22.14)      сервер в этой строке какой должен быть?
;; WHEN: Thu Jul 19 16:08:54 2012
;; MSG SIZE  rcvd: 126

12

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

После всех исканий вот пока конечный конфиг

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.ssm-samara.ru
mydomain = ssm-samara.ru
myorigin = $mydomain
mydestination = localhost, $myhostname, $mydomain, localhost.$mydomain
local_recipient_maps = $virtual_mailbox_maps, $virtual_alias_maps, $tran
unknown_local_recipient_reject_code = 550
mynetworks = 192.168.0.0/24
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
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


smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    permit

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

content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings

13 (19.07.2012 16:54:16 отредактировано AlfaStriker)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

;; SERVER: 83.149.22.14#53(83.149.22.14)      сервер в этой строке какой должен быть?

Обычно в этой строке стоит DNS сервер из которого запрашиваются данные (который в /etc/resolv.conf)

Что у тебя в логах /var/log/maillog:

# grep -E -e 'warning|critical|error' /var/log/maillog

Конфиг вставь мой, поменяй

soft_bounce = no
queue_directory = /var/spool/postfix
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
default_privs = nobody
myhostname = mail.ssm-samara.ru
mydomain = ssm-samara.ru
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
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
smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    permit
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
content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings

Получается ты можешь отправить письмо во внешний мир, но не можешь принять письмо из внешнего мира?

14

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Нашли причину. В общем на этот мой конфиг смотреть не надо - это плод неудавшихся эксперементов в порыве отчаяния. Поменяли обратно, на твой вариант, заново настроили DNS, ничего опять не вышло, пока не прописали в resolv.conf второй nameserver. Один из них - это днс провайдера, а второй- наш белый IP. Если там был один - то работал интернет и не работала почта, если другой - то вдруг неожиданно на клиента начали приходить сообщения, но отрубался интернет. Прописав оба - всё заработало и пришло вдруг счастье!

Спасибо огромное за помощь!!! От души. И за статью спасибо!

PS: ушли в загул)

15

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Ka3aH6ac пишет

ssm-samara попробуй удалить строчку 56 из /etc/postfix/main.cf

reject_rbl_client dull.ru

Пока ошибок DNS нет.

В /etc/resolv.conf добавь сервера провайдера.
А вообще можешь поставить любой DNS сервер, главное чтобы в авторитарных DNS были записи со ссылкой твой хост.

Если бы сразу дошли до мозга эти слова!!! Написали же ДОБАВЬ, а мы меняли как .....   bu 

Еще раз СПАСИБО

16

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Ну  и славненько!

17

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Ругается dovecot

service dovecot start
Запускается Dovecot Imap: Error: Error in configuration file /etc/dovecot.conf line 15: Unknown section type
Fatal: Invalid configuration in /etc/dovecot.conf               [ СБОЙ ]

конфиг ваш скопирован один в один.

18

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

У тебя Федора?

19

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

uname -a
Linux server 2.6.18-308.13.1.el5 #1 SMP Tue Aug 21 17:10:18 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux

cat /etc/redhat-release
CentOS release 5.8 (Final)

20 (18.09.2012 19:50:41 отредактировано AlfaStriker)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Ну так для тебя другой пост Помогите настроить почтовый сервер на Postfix
Там есть конфиг довекота, посмотри его.
Не плохо было бы узнать версию Dovecot : dovecot --version

21 (19.09.2012 04:35:46 отредактировано huawey)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

dovecot --version
1.2.17

Dovecot запустился, теперь другая ошибка

warning: SASL: Connect to /var/spool/postfix/private/dovecot-auth failed: No such file or directory
postfix/smtpd[5348]: fatal: no SASL authentication mechanisms

по телнету не подключается

telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
Connection closed by foreign host.

Нашел ошибку не до конца отредактировал main.cf строка smtpd_sasl_path = /var/spool/postfix/private/dovecot-auth на smtpd_sasl_path = private/auth

22 (19.09.2012 08:07:46 отредактировано AlfaStriker)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

huawey, у тебя первая версия Dovecot, поэтому и проблемы. В моем посте написано что используется вторая версия.
Конфиг во втором посте, на который я тебе дал ссылку содержит именно-то что тебе надо.
Конфиги все, лучше возьми со второго поста, так как все что там написано тестировалось на 5-ой ветке CentOS.
А по твоей ошибке, надо значение строчки в файле "/etc/postfix/main.cf" поменять с -

smtpd_sasl_path = /var/spool/postfix/private/dovecot-auth

на

smtpd_sasl_path = private/auth

23 (30.09.2012 20:08:16 отредактировано sysdoc)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Я настроил SELinux

У меня работает получение и отправление почты через Roundcube.

Почтовые клиенты могут получать письма но отправить не могут.

Вот такая ошибка в логах

dovecot: imap-login: Disconnected (no auth attempts):

Помогите пожалуйста понять и решить эту проблему


Centos 6.3 x64_86
dovecot version 2.0.21
postfix version 2.9.4
Postfix Admin 2.3.5   
Roundcube Webmail 0.8.1


Конфиги
/etc/postfix/main.cf

queue_directory = /var/spool/postfix

command_directory = /usr/sbin

daemon_directory = /usr/libexec/postfix

data_directory = /var/lib/postfix

mail_owner = postfix

default_privs = nobody

myhostname = mail.domain.com

mydomain = domain.com

myorigin = $mydomain

inet_interfaces = all

mydestination = $myhostname, localhost.$mydomain, 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

efault_destination_concurrency_limit = 20

debug_peer_level = 2

debug_peer_list = 127.0.0.1

debugger_command =
     PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
     ddd $daemon_directory/$process_name $process_id & sleep 5


 
sendmail_path = /usr/sbin/sendmail.postfix

newaliases_path = /usr/bin/newaliases.postfix

mailq_path = /usr/bin/mailq.postfix

setgid_group = postdrop

html_directory = no

manpage_directory = /usr/share/man

sample_directory = /usr/share/doc/postfix-2.9.4/samples

readme_directory = /usr/share/doc/postfix-2.9.4/README_FILES
inet_protocols = ipv4

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


smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key

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

content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings

/etc/postfix/master.cf

smtp      inet  n       -       n       -       -       smtpd

pickup    fifo  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
#qmgr     fifo  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp

showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

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


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

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

/etc/dovecot/dovecot.cf

dict {
  #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
  #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
}

!include conf.d/*.conf

!include_try local.conf

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
#ssl_cert_file = /etc/ssl/certs/dovecot.pem
#ssl_key_file = /etc/ssl/private/dovecot.pem


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

driver = mysql
connect = host=localhost dbname=postfix 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 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'

В конфиге postfix admin

$CONF['encrypt'] = 'dovecot:CRAM-MD5';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";

В конфиге Roundcube
$rcmail_config['imap_auth_type'] = cram-md5;

24 (30.09.2012 20:26:06 отредактировано sysdoc)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

и так
telnet localhost pop3
и так
telnet localhost imap
вхожу

25

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Настройка RoundCube не полная.

В ближайшее время добавлю более полную инфу.

26 (01.10.2012 15:42:39 отредактировано sysdoc)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Вот лог которые создает THE Bat при отправки письма

Sep 30 13:55:46 dovecot: auth: Debug: auth client connected (pid=6138)
Sep 30 13:55:46 dovecot: auth: Debug: client in: AUTH#0111#011CRAM-MD5#011service=imap#011secured#011lip=XX.XX.XX.XX#011rip=XX.XX.XX.XX#011lport=143#011rport=44586
Sep 30 13:55:46 dovecot: auth: Debug: client out: CONT#0111#011PDQ0MDkxMzIzODIxMjE2NzUuMTM0OTAyNzc0NkBmaWRpbmFtLWhvdXNpbmcubmluZS5jaD4=
Sep 30 13:55:46 dovecot: auth: Debug: client in: CONT#0111#011a2xldkBpY29zbm92YS5jb20gN2JjN2NhYWQyMDc3ODgzOWFjM2YzMDBiZjcwMDI5N2E=
Sep 30 13:55:46 dovecot: auth: Debug: password(user@domain.com,XX.XX.XX.XX): passdb doesn't support credential lookups
Sep 30 13:55:46 dovecot: auth-worker: Debug: sql(user@domain.com,XX.XX.XX.XX): query: SELECT username as user, password, '/var/vmail/domain.com/user' as userdb_home, 'maildir:/var/vmail/domain.com/user' as userdb_mail, 1150 as userdb_uid, 12 as userdb_gid FROM mailbox WHERE username = 'user@domain.com' AND active = '1'
Sep 30 13:55:46 dovecot: auth: Debug: password(user@domain.com,XX.XX.XX.XX): Credentials: 2376538d14c94e5e4a646ee6bbfb19e8ad75a78eb641d17e067384efdebd72f2
Sep 30 13:55:46 dovecot: auth: Debug: client out: OK#0111#011user=user@domain.com
Sep 30 13:55:46 dovecot: auth: Debug: master in: REQUEST#0112060845057#0116138#0111#011e35456ba58bf6c6cf2ed39c264a4a7d1
Sep 30 13:55:46 dovecot: auth: Debug: passwd(user@domain.com,XX.XX.XX.XX): lookup
Sep 30 13:55:46 dovecot: auth: passwd(user@domain.com,XX.XX.XX.XX): unknown user
Sep 30 13:55:46 dovecot: auth-worker: Debug: sql(user@domain.com,XX.XX.XX.XX): SELECT '/var/vmail/domain.com/user' as home, 'maildir:/var/vmail/domain.com/user'as mail, 1150 AS uid, 12 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = 'user@domain.com' AND active = '1'
Sep 30 13:55:46 dovecot: auth: Debug: master out: USER#0112060845057#011user@domain.com#011home=/var/vmail/domain.com/user#011mail=maildir:/var/vmail/domain.com/user#011uid=1150#011gid=12#011quota=dirsize:storage=0
Sep 30 13:55:46 dovecot: imap-login: Login: user=<user@domain.com>, method=CRAM-MD5, rip=XX.XX.XX.XX, lip=XX.XX.XX.XX, mpid=6139, secured
Sep 30 13:55:46 dovecot: imap: Debug: Added userdb setting: mail=maildir:/var/vmail/domain.com/user
Sep 30 13:55:46 dovecot: imap: Debug: Added userdb setting: plugin/quota=dirsize:storage=0
Sep 30 13:55:46 dovecot: imap(user@domain.com): Debug: Effective uid=1150, gid=12, home=/var/vmail/domain.com/user
Sep 30 13:55:46 dovecot: imap(user@domain.com): Debug: maildir++: root=/var/vmail/domain.com/user, index=, control=, inbox=/var/vmail/domain.com/user, alt=
Sep 30 13:55:46 dovecot: imap(user@domain.com): Disconnected: Logged out bytes=90/773
Sep 30 13:55:47 dovecot: auth: Debug: auth client connected (pid=6140)
Sep 30 13:55:47 dovecot: auth: Debug: client in: AUTH#0111#011CRAM-MD5#011service=pop3#011lip=XX.XX.XX.XX#011rip=XX.XX.XX.XX#011lport=110#011rport=56288
Sep 30 13:55:47 dovecot: auth: Debug: client out: CONT#0111#011PDgzMzk1MjM5OTgzMzI2MzYuMTM0OTAyNzc0N0BmaWRpbmFtLWhvdXNpbmcubmluZS5jaD4=
Sep 30 13:55:47 dovecot: auth: Debug: client in: CONT#0111#011a2xldkBpY29zbm92YS5jb20gYWU3NzEzMzYxMzg4OGNmYjkyNjVjMGQyMDk1ZWZkODc=
Sep 30 13:55:47 dovecot: auth: Debug: password(user@domain.com,XX.XX.XX.XX): passdb doesn't support credential lookups
Sep 30 13:55:47 dovecot: auth-worker: Debug: sql(user@domain.com,XX.XX.XX.XX): query: SELECT username as user, password, '/var/vmail/domain.com/user' as userdb_home, 'maildir:/var/vmail/domain.com/user' as userdb_mail, 1150 as userdb_uid, 12 as userdb_gid FROM mailbox WHERE username = 'user@domain.com' AND active = '1'
Sep 30 13:55:47 dovecot: auth: Debug: password(user@domain.com,XX.XX.XX.XX): Credentials: 2376538d14c94e5e4a646ee6bbfb19e8ad75a78eb641d17e067384efdebd72f2
Sep 30 13:55:47 dovecot: auth: Debug: client out: OK#0111#011user=user@domain.com
Sep 30 13:55:47 dovecot: auth: Debug: master in: REQUEST#0113508142081#0116140#0111#011e27821784a2dee9a53cac6b9b948e1d6
Sep 30 13:55:47 dovecot: auth: Debug: passwd(user@domain.com,XX.XX.XX.XX): lookup
Sep 30 13:55:47 dovecot: auth: passwd(user@domain.com,XX.XX.XX.XX): unknown user
Sep 30 13:55:47 dovecot: auth-worker: Debug: sql(user@domain.com,XX.XX.XX.XX): SELECT '/var/vmail/domain.com/user' as home, 'maildir:/var/vmail/domain.com/user'as mail, 1150 AS uid, 12 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = 'user@domain.com' AND active = '1'
Sep 30 13:55:47 dovecot: auth: Debug: master out: USER#0113508142081#011user@domain.com#011home=/var/vmail/domain.com/user#011mail=maildir:/var/vmail/domain.com/user#011uid=1150#011gid=12#011quota=dirsize:storage=0
Sep 30 13:55:47 dovecot: pop3-login: Login: user=<user@domain.com>, method=CRAM-MD5, rip=XX.XX.XX.XX, lip=XX.XX.XX.XX, mpid=6141
Sep 30 13:55:47 dovecot: pop3: Debug: Added userdb setting: mail=maildir:/var/vmail/domain.com/user
Sep 30 13:55:47 dovecot: pop3: Debug: Added userdb setting: plugin/quota=dirsize:storage=0
Sep 30 13:55:47 dovecot: pop3(user@domain.com): Debug: Effective uid=1150, gid=12, home=/var/vmail/domain.com/user
Sep 30 13:55:47 dovecot: pop3(user@domain.com): Debug: maildir++: root=/var/vmail/domain.com/user, index=, control=, inbox=/var/vmail/domain.com/user, alt=
Sep 30 13:55:47 dovecot: pop3(user@domain.com): Disconnected: Logged out top=0/0, retr=0/0, del=0/9, size=35230
Sep 30 13:55:48 dovecot: auth: Debug: auth client connected (pid=6142)
Sep 30 13:55:49 dovecot: imap-login: Disconnected (no auth attempts): rip=XX.XX.XX.XX, lip=XX.XX.XX.XX, TLS handshaking: SSL_accept() failed: error:14094419:SSL routines:SSL3_READ_BYTES:tlsv1 alert access denied: SSL alert number 49

Я вижу свою проблему в SASL
У меня не проходит эта проверка и меня тупо не пускает сервер…..

не работает imap-login dovecot
по pop3 работает

dovecot: auth: Debug: Loading modules from directory: /usr/lib64/dovecot/auth
dovecot: auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libauthdb_ldap.so
dovecot: auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libdriver_mysql.so
dovecot: auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libdriver_sqlite.so
dovecot: auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libmech_gssapi.so
dovecot: auth: Debug: auth client connected (pid=6922)
dovecot: imap-login: Disconnected (no auth attempts): rip=xx.xx.xx.xx, lip=xx.xx.xx.xx, TLS: Disconnected
auth: Debug: auth client connected (pid=6926)
dovecot: imap-login: Disconnected (no auth attempts): rip=xx.xx.xx.xx, lip=xx.xx.xx.xx

SElinux  не ругается. Это не он.
Самое обидно нигде в логах, ни чего не пишет….  Как понять что ему нужно?

27 (01.10.2012 18:28:54 отредактировано sysdoc)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Блин я использовал 995 порт в место 465 =)
На 465 все работает

Вопрос теперь другой
Если у меня пароль не длинный то меня пускает. А если длинный то нет =))  Это ANDROID MAIL
Она передает пароль в открытом виде.
В логах я вижу свой пароль в открытом виде? ( в настройках там это не выставить).  Это когда пароль длинный! И не пускает!

Oct  1 19:13:43 postfix/smtps/smtpd[8550]: warning: hostname lan-blabla-blabla.blabla.blabla.ru does not resolve to address XX.XX.XX.XX
Oct  1 19:13:43 postfix/smtps/smtpd[8550]: connect from unknown[XX.XX.XX.XX]
Oct  1 19:13:44 dovecot: auth: Debug: client in: AUTH#0113#011LOGIN#011service=smtp#011nologin#011lip=94.230.210.118#011rip=XX.XX.XX.XX#011secured
Oct  1 19:13:44 dovecot: auth: Debug: client out: CONT#0113#011VXNlcm5hbWU6
Oct  1 19:13:44 dovecot: auth: Debug: client in: CONT#0113#011a2xldkBpY29zbm92YS5jb20=
Oct  1 19:13:44 dovecot: auth: Debug: client out: CONT#0113#011UGFzc3dvcmQ6
Oct  1 19:13:44 dovecot: auth: Debug: client in: CONT#0113#011bGtkNzhCdm5NamRzNkdoc1M=
Oct  1 19:13:44 dovecot: auth-worker: Debug: sql(user@domain.com,XX.XX.XX.XX): query: SELECT username as user, password, '/var/vmail/domain.com/user' as userdb_home, 'maildir:/var/vmail/domain.com/user' as userdb_mail, 1150 as userdb_uid, 12 as userdb_gid FROM mailbox WHERE username = 'user@domain.com' AND active = '1'
Oct  1 19:13:44 dovecot: auth-worker: sql(user@domain.com,XX.XX.XX.XX): Password mismatch
Oct  1 19:13:44 dovecot: auth-worker: Error: md5_verify(user@domain.com): Not a valid MD5-CRYPT or PLAIN-MD5 password
Oct  1 19:13:44 dovecot: auth-worker: Error: ssha512_verify(user@domain.com): SSHA512 password too short
Oct  1 19:13:44 dovecot: auth-worker: Warning: Invalid OTP data in passdb
Oct  1 19:13:44 dovecot: auth-worker: Warning: Invalid OTP data in passdb
Oct  1 19:13:44 dovecot: auth-worker: Debug: sql(user@domain.com,XX.XX.XX.XX): CRAM-MD5(МОЙ ПРАВИЛЬНЫЙ ПАРОЛЬ В ОТКРЫТОМ ВИДЕ) != '27ceg23c6a72bf8957ef7614aFee3d597BLABLABLABLABLABVLABLA'
Oct  1 19:13:46 postfix/smtps/smtpd[8550]: warning: unknown[XX.XX.XX.XX]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
Oct  1 19:13:46 dovecot: auth: Debug: client out: FAIL#0113#011user=user@domain.com
Oct  1 19:13:46 postfix/smtps/smtpd[8550]: disconnect from unknown[XX.XX.XX.XX]

А вот так пускает. Пароль не длинный

Oct  1 19:15:08 postfix/smtps/smtpd[8550]: warning: hostname lan-blabla-blabla.blabla.blabla.ru does not resolve to address XX.XX.XX.XX
Oct  1 19:15:08 postfix/smtps/smtpd[8550]: connect from unknown[XX.XX.XX.XX]
Oct  1 19:15:08 dovecot: auth: Debug: client in: AUTH#0114#011LOGIN#011service=smtp#011nologin#011lip=94.230.210.118#011rip=XX.XX.XX.XX#011secured
Oct  1 19:15:08 dovecot: auth: Debug: client out: CONT#0114#011VXNlcm5hbWU6
Oct  1 19:15:08 dovecot: auth: Debug: client in: CONT#0114#011a2xldkBpY29zbm92YS5jb20=
Oct  1 19:15:08 dovecot: auth: Debug: client out: CONT#0114#011UGFzc3dvcmQ6
Oct  1 19:15:08 dovecot: auth: Debug: client in: CONT#0114#011MTAxMTMxMDc=
Oct  1 19:15:08 dovecot: auth-worker: Debug: sql(user@domain.com,XX.XX.XX.XX): query: SELECT username as user, password, '/var/vmail/domain.com/user' as userdb_home, 'maildir:/var/vmail/domain.com/user' as userdb_mail, 1150 as userdb_uid, 12 as userdb_gid FROM mailbox WHERE username = 'user@domain.com' AND active = '1'
Oct  1 19:15:08 dovecot: auth: Debug: client out: OK#0114#011user=user@domain.com
Oct  1 19:15:08 postfix/smtps/smtpd[8550]: disconnect from unknown[XX.XX.XX.XX]

Пароль во всех случаях верен. THE BAT пускает в любом случае.

28 (27.11.2012 22:23:54 отредактировано ketaminsmp)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Здраствуйте, после настройки почтового сервера  в RoundCube  почта прекрано отправляется на любые  email но не принимается-Почтовый ящик всегда пуст, но почта почемуто приходит только на системных пользователей, случайно заметил в webmin в Службы/Read User Mail, причем от туда тоже прекрасно отправляются почта. Конфиги были взяты из этой статьи (Авторам респект) + были прикручены  clamav + spamassassin. так как почта отправляется из вебмина и туда же приходит сделал вывод что сервер пашет но RoundCube упорно не видит входящей почты, подскажите пожалуйста в чем может быть дело...

Centos 6.3 x64_86
Dovecot Version 2.0.21
Postfix version 2.9.4
Postfix Admin 2.3.5
Roundcube Webmail  0.8.4
SpamAssassin version 3.3.1
clamav 0.97.6-1.el6
clamsmtp 1.10-6.el6


Конфиги
/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 =  domen.com
mydomain = domen.com
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/spool/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
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
smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    permit
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,
content_filter = scan:[127.0.0.1]:10025
receive_override_options = no_address_mappings
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/httpd/ssl/com.key
smtpd_tls_cert_file = /etc/httpd/ssl/com.crt
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s    


/etc/postfix/master.cf

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd -o content_filter=myfilter:dummy
#smtp      inet  n       -       n       -       1       postscreen
#smtpd     pass  -       -       n       -       -       smtpd
#dnsblog   unix  -       -       n       -       0       dnsblog
#tlsproxy  unix  -       -       n       -       0       tlsproxy
#submission inet n       -       n       -       -       smtpd
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#smtps     inet  n       -       n       -       -       smtpd
#  -o syslog_name=postfix/smtps
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#628       inet  n       -       n       -       -       qmqpd
pickup    fifo  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
#qmgr     fifo  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent.  See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
#maildrop  unix  -       n       n       -       -       pipe
#  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
#
# ====================================================================
#
# Recent Cyrus versions can use the existing "lmtp" master.cf entry.
#
# Specify in cyrus.conf:
#   lmtp    cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
#
# Specify in main.cf one or more of the following:
#  mailbox_transport = lmtp:inet:localhost
#  virtual_transport = lmtp:inet:localhost
#
# ====================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
#
#cyrus     unix  -       n       n       -       -       pipe
#  user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
#
# ====================================================================
#
# Old example of delivery via Cyrus.
#
#old-cyrus unix  -       n       n       -       -       pipe
#  flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
#
# ====================================================================
#
# See the Postfix UUCP_README file for configuration details.
#
#uucp      unix  -       n       n       -       -       pipe
#  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# ====================================================================
#
# Other external delivery methods.
#
#ifmail    unix  -       n       n       -       -       pipe
#  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
#
#bsmtp     unix  -       n       n       -       -       pipe
#  flags=Fq. user=bsmtp argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
#
#scalemail-backend unix -       n       n       -       2       pipe
#  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store
#  ${nexthop} ${user} ${extension}
#
#mailman   unix  -       n       n       -       -       pipe
#  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
#  ${nexthop} ${user}
dovecot unix - n n - - pipe
  flags=DRhu user=vmail:mail argv=/usr/libexec/dovecot/deliver -d $(recipient)
scan      unix  -       -       n       -       16      smtp
    -o smtp_send_xforward_command=yes
    -o smtp_tls_security_level=none
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
#welcome spam
myfilter        unix    -       n       n       -       -       pipe
  flags=R user=clamav argv=/usr/local/bin/spamfilter.sh -f ${sender} -- ${recipient}


/etc/dovecot/dovecot.cf

auth_debug = yes
auth_debug_passwords = yes
auth_mechanisms = plain login cram-md5
auth_verbose = yes
base_dir = /var/run/dovecot/
shutdown_clients = yes
log_path = /var/log/dovecot.log
mail_debug = no 
auth_verbose = no
auth_debug = no
auth_debug_passwords = no
disable_plaintext_auth = yes
ssl = yes
ssl_cert = </etc/httpd/ssl/com.crt
ssl_key = </etc/httpd/ssl/com.key
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
} 

/etc/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'

29

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Спасибо большое за инструкцию. Все ясно и подробно ay

30 (18.12.2012 12:47:10 отредактировано Bif)

Re: Установка и настройка почтового сервера Postfix на CentOS 6.6(CentOS7)

Спасибо за подробную инфу. Небольшой полезный совет:  В /etc/dovecot-sql.conf в условиях WHERE username = '%u' передается полное имя пользователя:  user@domain. Если в почтовых клиентах задано имя как user,  то  условия лучше переписать так  name = '%n', см описание переменных Dovecot

Вот мой /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 name = '%n' 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 as userdb_gid FROM mailbox WHERE name = '%n' AND active = '1'