Yvision.kz
kk
Разное
Разное
399 773 постов42 подписчика
Всяко-разно
1
02:50, 05 января 2014

Почтовый сервер Postfix на CentOS 6.4 x32

Установка и настройка почтового сервера на основе 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
 

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

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

rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm

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

yum install postgrey -y

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

vi /etc/postfix/main.cf

 
smtpd_recipient_restrictions = permit_mynetworks,  
    permit_sasl_authenticated,  
    reject_unauth_destination,  
    check_policy_service unix:/var/spool/postfix/postgrey/socket,  
    reject_non_fqdn_recipient,  
    reject_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

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

yum install clamav clamav-server clamsmtp –y

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

 
freshclam -v
 

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

 
freshclam -d
   

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

vi /etc/clamsmtpd.conf

 
OutAddress: 10026  
        TimeOut: 180  
        KeepAlives: 0  
        XClient: on  
        Listen: 127.0.0.1:10025  
        ClamAddress: /var/run/clamav/clamd.sock  
        Header: X-Virus-Scanned: ClamAV using ClamSMTP  
        TempDirectory: /var/tmp  
        Action: drop   
        Quarantine: on  
        User: clam
   

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

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

tar -xvzf postfixadmin-2.91.tar.gz

mv postfixadmin-2.91/ postfixadmin

cd postfixadmin

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

Открываем файл /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:

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

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

cd /var/www/html

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

tar xvfz roundcubemail-1.0.3.tar.gz

mv roundcubemail-1.0.3 roundcube

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

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

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

 
Alias /webmail /var/www/html/roundcube  
<Directory /var/www/html/roundcube>  
AddType application/x-httpd-php .php .php3 .php4 .phtml  
# forcing open_base dir do not affect anything  
php_admin_value open_basedir /  
# AddDefaultCharset UTF-8  
AddType text/x-component .htc  
<IfModule mod_php4.c>  
php_flag display_errors Off  
php_flag log_errors On  
php_value error_log logs/errors  
php_value upload_max_filesize 5M  
php_value post_max_size 6M  
php_value memory_limit 64M  
</IfModule>  
<IfModule mod_php5.c>  
php_flag display_errors Off  
php_flag log_errors On  
php_value error_log logs/errors  
php_value upload_max_filesize 5M  
php_value post_max_size 6M  
php_value memory_limit 64M  
</IfModule>  
<FilesMatch "(\.inc|\~)$">  
Order allow,deny  
Deny from all  
</FilesMatch>  
Order deny,allow  
Allow from all  
</Directory>
 

Далее создаем базу данных и пользователя:

mysqladmin -p create roundcubemail

mysql -p

 
mysql> GRANT ALL ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';
 
mysql> quit
   

service httpd restart

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

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

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

vi /etc/php.ini

 
date.timezone = 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 есть репозиторий с большим выбором плагинов которые расширяют возможности:>http://trac.roundcube.net/wiki/Plugin_Repository

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

   

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

 
1