Почтовый сервер Postfix на CentOS 7 с виртуальными доменами, системой управления, веб-доступом и многим другим

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

  • Почтовая система на базе Postfix;
  • Поддержка виртуальных доменов;
  • Хранение почты на сервере;
  • Подключение к почтовым ящикам по POP3 и IMAP (Dovecot);
  • Поддержка шифрования;
  • Хранение части настроек в MariaDB;
  • Защита от СПАМа и вирусов;
  • Доступ к почте с помощью веб-интерфейса (Roundcube);
  • Возможность управление почтовыми ящиками с помощью PostfixAdmin.

1. Преднастройка системы

Напоминаю, данная инструкция написана под систему Linux CentOS версии 7.

Общие настройки

Задаем правильное имя серверу — это важный шаг, так как большинство антиспам систем выполняют проверки, обращаясь к серверу по имени в ожидании ответа.

vi /etc/hostname

relay.dmosk.ru

* необходимо указать FQDN-имя, которое будет доступно из глобальной сети. В данном примере указано relay.dmosk.ru.

После вводим такую команду:

hostname relay.dmosk.ru

Устанавливаем служебные пакеты (они понадобятся в процессе настройки сервера):

yum install ntpdate wget

ntpdate для возможности синхронизировать время на сервере; wget — клиент для загрузки файлов.

Задаем временную зону (в данном примере московское время):

\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Синхронизируем время:

ntpdate ru.pool.ntp.org

Обновляем систему:

yum update

Настройка безопасности

Заранее открываем порты на брандмауэре с помощью firewalld:

firewall-cmd –permanent –add-port=25/tcp

firewall-cmd –permanent –add-port=80/tcp

firewall-cmd –permanent –add-port=110/tcp

firewall-cmd –permanent –add-port=143/tcp

firewall-cmd –permanent –add-port=443/tcp

firewall-cmd –permanent –add-port=465/tcp

firewall-cmd –permanent –add-port=587/tcp

firewall-cmd –permanent –add-port=993/tcp

firewall-cmd –permanent –add-port=995/tcp

firewall-cmd –reload

* где мы откроем следующие порты:

  • 25 — стандартный SMTP через STARTTLS;
  • 80 — HTTP для порталов Postfixadmin и Roundcube;
  • 110 — стандартный POP3 через STARTTLS;
  • 143 — стандартный IMAP через STARTTLS;
  • 443 — защищенный HTTPS для порталов Postfixadmin и Roundcube;
  • 465 — защищенный SMTP через SSL/TLS;
  • 587 — защищенный SMTP через STARTTLS;
  • 993 — защищенный IMAP через SSL/TLS;
  • 995 — защищенный POP3 через SSL/TLS.

В CentOS также может использоваться утилита iptables — в таком случае команды будут следующие:

iptables -A INPUT -p tcp –dport 25 -j ACCEPT

iptables -A INPUT -p tcp –dport 80 -j ACCEPT

iptables -A INPUT -p tcp –dport 110 -j ACCEPT

iptables -A INPUT -p tcp –dport 143 -j ACCEPT

iptables -A INPUT -p tcp –dport 443 -j ACCEPT

iptables -A INPUT -p tcp –dport 465 -j ACCEPT

iptables -A INPUT -p tcp –dport 587 -j ACCEPT

iptables -A INPUT -p tcp –dport 993 -j ACCEPT

iptables -A INPUT -p tcp –dport 995 -j ACCEPT

После сохраняем правила любым из описанных способов.

2. Настройка веб-сервера: NGINX + PHP + MariaDB

Система управления PostfixAdmin работает как веб-приложение, разработанное на PHP, а информацию хранит в базе данных. В нашем примере будет использоваться веб-сервер на NGINX, а база данных — MariaDB.

Установка NGINX

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

vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

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

yum install nginx

Разрешаем автозапуск сервиса и запускаем его:

systemctl enable nginx

systemctl start nginx

Проверяем работоспособность веб-сервера, обратившись к нему в браузере по IP-адресу. Если видим заголовок «Welcome to nginx!», NGINX настроен верно.

Приветствие NGINX — все настроено верно

PHP + PHP-FPM + NGINX

Устанавливаем php и php-fpm:

yum install php

yum install php-fpm

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

vi /etc/nginx/conf.d/default.conf

server {
listen       80 default_server;
set $root_path /usr/share/nginx/html;

location / {
root   $root_path;
index index.php index.hml;
}

location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
}

* где /usr/share/nginx/html — каталог для размещения портала управления Postfix.

Настраиваем PHP-FPM:

vi /etc/php-fpm.d/www.conf

listen = /var/run/php-fpm/php5-fpm.sock

* здесь мы поменяли строку 127.0.0.1:9000.

Запускаем сервисы:

systemctl enable php-fpm

systemctl start php-fpm

systemctl restart nginx

* если в процессе перезапуска nginx выскочит ошибка nginx: [emerg] a duplicate default server, необходимо найти настройку виртуального домена, в которой также указана опция default_server — опцию нужно убрать. Или можно самостоятельно настроить другой виртуальный домен.

Для проверки, создаем индексный файл в директории сайта со следующим содержимым:

vi /usr/share/nginx/html/index.php

<?php phpinfo(); ?>

Открываем сайт в браузере по его IP-адресу. На открывшейся странице мы должны увидеть подробную информацию по php:

phpinfo

MariaDB

Устанавливаем сервер баз данных следующей командой:

yum install mariadb mariadb-server

Включаем автозапуск сервиса и запускаем его:

systemctl enable mariadb

systemctl start mariadb

Задаем пароль для пользователя sql root:

mysqladmin -u root password

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

Устанавливаем дополнительные компоненты для PHP:

yum install php-mysql php-mbstring php-imap

Для применения установленных пакетов, перезапускаем обработчик скриптов:

systemctl restart php-fpm

Скачиваем PostfixAdmin:

wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz

В директории сайтов nginx создаем каталог для postfixadmin и распаковываем в него архив:

mkdir /usr/share/nginx/html/postfixadmin

tar -C /usr/share/nginx/html/postfixadmin -xvf postfixadmin.tar.gz –strip-components 1

Задаем права на каталог:

chown -R apache:apache /usr/share/nginx/html/postfixadmin

* несмотря на то, что мы используем веб-сервер nginx, php-fpm по умолчанию, запускается от пользователя apache.

Создаем базу данных postfix и учетную запись в mariadb:

mysql -u root -p

CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

* где postfix — имя базы.

GRANT ALL ON postfix.* TO ‘postfix’@’localhost’ IDENTIFIED BY ‘postfix123’;

* где postfix — имя учетной записи; postfix123 — пароль; localhost разрешает подключение только с локального сервера.

Выходим из командной оболочки MariaDB:

\q

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

vi /usr/share/nginx/html/postfixadmin/config.inc.php

И редактируем следующее:

$CONF[‘configured’] = true;
$CONF[‘default_language’] = ‘ru’;
$CONF[‘database_password’] = ‘postfix123′;
$CONF[’emailcheck_resolve_domain’]=’NO’;

Запускаем браузер и вводим адрес http://<IP-адрес сервера>/postfixadmin/setup.php

Начнется процесс проверки конфигурации и установки портала PostfixAdmin. После ее окончания вводим дважды пароль и генерируем хэш:

Вводим дважды пароль после установки PostfixAdmin

После перезагрузки страницы копируем хэш:

Так выглядит хэш PostfixAdmin

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

vi /usr/share/nginx/html/postfixadmin/config.inc.php

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

$CONF[‘setup_password’] = ‘changeme’;

И меняем ее на:

$CONF[‘setup_password’] = ‘7a8e14…c26’;

* где ‘7a8e14…c26’ — скопированный хэш.

После, на той же странице, где показан хэш, добавляем суперпользователя PostfixAdmin:

Создаем суперпользователя PostfixAdmin

* где Setup password — пароль, который мы ввели на предыдущей странице; Пароль — новый пароль для создаваемой учетной записи.

В итоге мы увидим следующее:

Мы создали суперпользователя для управления Postfix

И переходим в браузере на страницу http://<IP-адрес сервера>/postfixadmin/

Вводим логин и пароль для созданного пользователя.

Готово.

4. Настройка Postfix

По умолчанию, Postfix уже установлен в CentOS 7. Но если встретится сервер без него, выполним установку простой командой:

yum install postfix

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

groupadd -g 1024 vmail
useradd -d /home/mail -g 1024 -u 1024 vmail -m

* сначала мы создаем группу vmail и guid 1024, после — пользователя vmail с uid 1024 и домашней директорией /home/mail. Обратите внимание, что в некоторых системах идентификатор группы и пользователя 1024 может быть занят. В таком случае необходимо создать другой, а в данной инструкции ниже заменить все 1024 на альтернативный.

Теперь открываем на редактирование конфигурационный файл почтового сервера:

vi /etc/postfix/main.cf

И редактируем следующие строки:

myorigin = $mydomain

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

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

* указываем, для каких доменов принимаем входящую почту.

local_recipient_maps = unix:passwd.byname $alias_maps

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

mynetworks = 127.0.0.0/8

* разрешаем отправлять сообщения локальному серверу.

alias_maps = hash:/etc/aliases

* указываем, откуда брать список алиасов.

inet_interfaces = all

* необходимо убедиться, что postfix будет слушать на всех необходимых интерфейсах, в данном случае, на всех.

Теперь в конец конфигурационного файла допишем следующее:

virtual_mailbox_base = /home/mail
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1024
virtual_uid_maps = static:1024
virtual_gid_maps = static:1024
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 = private/auth

smtpd_tls_cert_file = /etc/ssl/mail/public.pem
smtpd_tls_key_file = /etc/ssl/mail/private.key
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_helo_required = yes

* где:

  • virtual_mailbox_base — базовый путь хранения почтовых ящиков в системе UNIX.
  • virtual_alias_maps — формат и путь хранения алиасов для виртуальных пользователей.
  • virtual_mailbox_domains — формат и путь хранения доменов виртуальных пользователей.
  • virtual_mailbox_maps — формат и путь хранения почтовых ящиков для виртуальных пользователей.
  • virtual_minimum_uid — с какого номера присваивать идентификаторы пользователям.
  • virtual_uid_maps — идентификатор пользователя, от которого записываются сообщения.
  • virtual_gid_maps — идентификатор группы, от которой записываются сообщения.
  • virtual_transport — задает доставщика сообщений.
  • dovecot_destination_recipient_limit — передача сообщений от Postfix в Dovecot выполняется по заданному количеству (в нашем примере, по 1 шт.).
  • smtpd_sasl_auth_enable — разрешает sasl аутентификацию.
  • smtpd_sasl_exceptions_networks — исключение сетей от использования шифрования.
  • smtpd_sasl_security_options — дополнительные опции настройки sasl.
  • broken_sasl_auth_clients — эту опцию прописываем для клиентов MS Outlook.
  • smtpd_sasl_type — указывает тип аутентификации.
  • smtpd_sasl_path — путь до временных файлов обмена информацией с Dovecot. Указывается либо абсолютный путь, либо относительный queue_directory.
  • smtpd_tls_cert_file — полный путь до публичного сертификата.
  • smtpd_tls_key_file — полный путь до приватного сертификата.
  • smtpd_use_tls — указывает клиентам на наличие поддержки TLS.
  • smtpd_tls_auth_only — использовать только TLS.
  • smtpd_helo_required — требовать начинать сессию с приветствия.

Создаем файл с настройками обращения к базе с алиасами:

vi /etc/postfix/mysql_virtual_alias_maps.cf

user = postfix
password = postfix123
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address=’%s’ AND active = ‘1’

* где user и password — логин и пароль для подключения к MySQL; hosts — имя сервера баз данных (в нашем случае, локальный сервер); dbname — имя базы данных; query — шаблон запроса к данным.

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

vi /etc/postfix/mysql_virtual_domains_maps.cf

user = postfix
password = postfix123
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain=’%u’

И файл с почтовыми ящиками:

vi /etc/postfix/mysql_virtual_mailbox_maps.cf

user = postfix
password = postfix123
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,’/’,maildir) FROM mailbox WHERE username=’%s’ AND active = ‘1’

Открываем файл master.cf и дописываем в самый конец:

vi /etc/postfix/master.cf

submission     inet  n       –       n       –       –       smtpd
-o smtpd_tls_security_level=may
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=/var/spool/postfix/private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname

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

dovecot    unix  –       n       n       –        –       pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d ${recipient}

* необходимо убедиться, что в содержимом файла нет других раскомментированных опций для submission, smtps и dovecot (по умолчанию, их нет). В данном случае, мы настроили работу postfix на портах 25, 465 и 587.

Перезапустим postfix:

systemctl restart postfix

5. Настройка Dovecot

Устанавливаем Dovecot с компонентом для работы с СУБД:

yum install dovecot dovecot-mysql

Настраиваем способ хранения сообщений:

vi /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:/home/mail/%d/%u/
first_valid_gid = 1024

* в данном примере сообщения будут храниться в продвинутом формате maildir.

Настраиваем слушателя для аутентификации:

vi /etc/dovecot/conf.d/10-master.conf

service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
}

* обращаем внимание, что /var/spool/postfix/private/auth — это тот же private/auth, который был прописан нами в postfix.

Настраиваем аутентификацию в Dovecot:

vi /etc/dovecot/conf.d/10-auth.conf

#!include auth-system.conf.ext
!include auth-sql.conf.ext

* в данном случае мы просто комментируем обычную аутентификацию и снимаем комментарий для использования sql-аутнтификации.

Настраиваем использование шифрования:

vi /etc/dovecot/conf.d/10-ssl.conf

ssl = required
ssl_cert = </etc/ssl/mail/public.pem
ssl_key = </etc/ssl/mail/private.key

* данная настройка укажет dovecot требовать от клиентов использования шифрования.

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

vi /etc/dovecot/conf.d/15-lda.conf

lda_mailbox_autocreate = yes

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

vi /etc/dovecot/conf.d/auth-sql.conf.ext

passdb {

args = /etc/dovecot/sql.conf
}

userdb {

args = /etc/dovecot/sql.conf
}

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

Создаем файл с настройками работы с mysql:

vi /etc/dovecot/sql.conf

driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix123
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = ‘%u’
user_query = SELECT maildir, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = ‘%u’
user_query = SELECT CONCAT(‘/home/mail/’,LCASE(`domain`),’/’,LCASE(`maildir`)), 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = ‘%u’

И, напоследок, настраиваем протоколы и интерфейс, на котором будет слушать dovecot:

vi /etc/dovecot/dovecot.conf

protocols = imap imaps pop3 pop3s
listen = *

* по умолчанию, dovecot слушает также на ipv6 (listen = *, ::). Если на сервере не используется 6-я версия протокола TCP/IP, в логах dovecot появятся ошибки:
master: Error: service(imap-login): listen(::, 143) failed: Address family not supported by protocol
master: Error: service(imap-login): listen(::, 993) failed: Address family not supported by protocol

Генерируем сертификаты безопасности

Создаем каталог, в котором разместим сертификаты:

mkdir -p /etc/ssl/mail

И сгенерируем их следующей командой:

openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/mail/public.pem -keyout /etc/ssl/mail/private.key -subj “/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=relay.dmosk.ru”

* сертификат сгенерирован на 1461 день, ключи subj могут быть произвольными, CNнеобходимо указать в соответствии с именем сервера, по которому мы будем подключаться к почте.

Запускаем dovecot:

systemctl start dovecot

6. Создаем первый почтовый ящик и проверяем работу сервера

В браузере вводим в адресной строке путь до Postfixadmin — http://<IP-адрес сервера>/postfixadmin/.

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

Переходим в Список доменов – Новый домен:

Создаем новый домен в Postfixadmin

Заполняем формы и нажимаем по Добавить домен:

Данные домена

Теперь переходим в Обзор – Создать ящик:

Создаем новый почтовый ящик через Postfixadmin

Вводим данные нового пользователя и нажимаем по Создать ящик:

Заполняем данные для создания нового ящика

Теперь можно подключиться к серверу с помощью любой почтовой программы, например, Mozilla Thunderbird.

Параметры для подключения:

  • Сервер: имя сервера или его IP-адрес (не желательно, так как сертификат выдается по доменному имени).
  • IMAP: 143 STARTTLS или 993 SSL/TLS
  • POP3: 110 STARTTLS или 995 SSL/TLS
  • SMTP: 25 STARTTLS или 465 SSL/TLS или 587 STARTTLS

7. Устанавливаем и настраиваем Roundcube Webmail

На официальном сайте заходим на страницу загрузки Roundcube. Смотрим ссылку на последнюю стабильную версию продукта:

Скачиваем стабильную версию Roundcube

Используем ссылку, чтобы загрузить архив программы:

wget https://github.com/roundcube/roundcubemail/releases/download/1.1.9/roundcubemail-1.1.9.tar.gz

Создаем каталог, где будут размещаться файлы портала:

mkdir /usr/share/nginx/html/webmail

И распаковываем скачанный архив:

tar -C /usr/share/nginx/html/webmail -xvf roundcubemail-1.1.9.tar.gz –strip-components 1

Копируем шаблон конфига:

cp /usr/share/nginx/html/webmail/config/config.inc.php.sample /usr/share/nginx/html/webmail/config/config.inc.php

И открываем его на редактирование:

vi /usr/share/nginx/html/webmail/config/config.inc.php

$config[‘db_dsnw’] = ‘mysql://roundcube:roundcube123@localhost/roundcubemail’;
$config[‘enable_installer’] = true;

* первую строку мы редактируем, а вторую добавляем. В первой строке roundcube:roundcube123 — логин и пароль для доступа к базе данных; localhost — сервер базы данных; roundcubemail — имя базы данных.

Задаем владельца apache на папку портала:

chown -R apache:apache /usr/share/nginx/html/webmail

Создаем в MariaDB базу для roundcubemail:

mysql -uroot -p

> CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY ’roundcube123′;

> quit

И загружаем в созданную базу данные:

mysql -uroot -p roundcubemail < /usr/share/nginx/html/webmail/SQL/mysql.initial.sql

Устанавливаем компоненты, необходимые для работы Roundcube:

yum install php-pear php-mcrypt php-intl php-ldap php-pear-Net-SMTP php-pear-Net-IDNA2 php-pear-Mail-Mime

Настроим php:

vi /etc/php.ini

date.timezone = “Europe/Moscow”

Перезагружаем php-fpm:

systemctl restart php-fpm

Теперь открываем браузер и переходим по адресу http://<IP-адрес сервера>/webmail/installer/. В самом низу нажимаем по кнопке Next. Если кнопка будет неактивна, проверяем, что нет ошибок (NOT OK).

Проверяем, что все пункты находятся в состоянии OK.

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

\rm -R /usr/share/nginx/html/webmail/installer

И заходим в браузере по адресу http://<IP-адрес сервера>/webmail/.

8. Защищаемся от вирусов

Установка и настройка ClamAV

Устанавливаем антивирус:

yum install clamav clamsmtp clamav-scanner-systemd clamav-update

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

vi /etc/postfix/main.cf

content_filter = scan:[127.0.0.1]:10025
receive_override_options = no_address_mappings

* где content_filter указывает на приложение, которое будет сканировать сообщения; receive_override_options позволяет увидеть оригинальные email адреса писем с вирусами.

Теперь редактируем master.cf:

vi /etc/postfix/master.cf

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

scan unix – – n – 16 smtp
-o smtp_send_xforward_command=yes
-o smtp_enforce_tls=no

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

Перезапускаем postfix:

systemctl restart postfix

Конфигурируем clamsmtpd:

vi /etc/clamsmtpd.conf

ClamAddress: /var/run/clamd.scan/clamd.sock
TempDirectory: /var/run/clamd.scan

* где ClamAddress указываем на путь к сокетному файлу — он должен совпадать с путем в конфигурационном файле для clam scan; TempDirectory — путь для хранения временных файлов.

Редактируем конфигурационный файл для clam scan:

vi /etc/clamd.d/scan.conf

PidFile /var/run/clamd.scan/clamd.pid
LocalSocket /var/run/clamd.scan/clamd.sock
User clamsmtp

* где PidFile — путь для pid-файла сервиса; LocalSocket — путь до сокетного файла для взаимодействия с clamsmtp; User — пользователь, от которого будет запускаться clamd.

Редактируем владельца на каталог для сокетного файла:

chown clamsmtp:clamscan /var/run/clamd.scan

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

systemctl enable clamsmtpd

systemctl start clamsmtpd

systemctl enable clamd@scan

systemctl start clamd@scan

Обновление

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

vi /etc/freshclam.conf

#Example

Разрешаем и запускаем сервис:

systemctl enable clamd@freshclam

systemctl start clamd@freshclam

Запускаем обновление:

freshclam

Для настройки автоматического обновления, редактируем cron:

crontab -e

15 3 * * * /bin/freshclam

* в данном примере, каждый день в 03:15 будет запускаться процесс обновления clamav.

Проверка

Для проверки отправляем сообщение со следующим содержимым:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Письмо не должно дойти.

9. Боремся со СПАМом

Проверка контента с помощью Spamassassin

Устанавливаем spamassassin

yum install spamassassin

Редактируем master.cf:

vi /etc/postfix/master.cf

Для smtp добавляем следующую опцию:

smtp      inet  n       –       n       –       –       smtpd
-o content_filter=spamassassin

И добавить следующее:

spamassassin      unix  –       n       n       –       –       pipe
flags=R user=spamd argv=/usr/bin/spamc -u spamd -e /usr/sbin/sendmail -f $sender $recipient

Обновляем spamassassin:

sa-update –nogpg

Разрешаем его запуск и стартуем сервис:

systemctl enable spamassassin

systemctl start spamassassin

Перезапускаем postfix:

systemctl restart postfix

Для автоматического обновления добавим в cron следующее:

crontab -e

30 3 * * * /bin/sa-update

* обновление будет происходить каждый день в 03:30.

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

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

Антиспам средствами Postfix

В MTA Postfix встроен свой механизм проверки заголовков входящих сообщений. Правила размещаются в 6 секций, обработка которых выполняется в следующем порядке:

client -> helo -> sender -> relay -> recipient -> data

И так, для настройки антиспама в конфигурационный файл main.cf добавляем:

vi /etc/postfix/main.cf

smtpd_client_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_pipelining
permit

smtpd_helo_restrictions =
permit

smtpd_sender_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_non_fqdn_sender
reject_unknown_sender_domain
permit

smtpd_relay_restrictions =
permit

smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_non_fqdn_recipient
reject_unauth_destination
reject_unknown_recipient_domain
reject_unverified_recipient
permit

smtpd_data_restrictions =
permit

smtpd_end_of_data_restrictions =
permit

* это более или менее мягкие правила. Их можно использовать первое время, пока тестируем сервер.

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

smtpd_recipient_restrictions =

reject_unknown_client_hostname
reject_invalid_helo_hostname
reject_non_fqdn_helo_hostname
reject_unknown_helo_hostname
reject_rbl_client bl.spamcop.net
reject_rbl_client cbl.abuseat.org
reject_rbl_client dul.ru
reject_rbl_client dnsbl.abuse.ch
permit

* где:

  • reject_unknown_client_hostname — проверяет наличие PRT-записи отправителя и наличие рабочей А-записи в соответствие PTR.
  • reject_invalid_helo_hostname — проверяет синтаксис HELO-приветствия.
  • reject_non_fqdn_helo_hostname — требует правильного FQDN-имени во время HELO-приветствия.
  • reject_unknown_helo_hostname — запрещает представляться именами, для которых нет А-записи или MX.
  • reject_rbl_client — проверяет наличие отправителя в черных списках.

После внесения всех правок, необходима перезагрузка Postfix:

systemctl restart postfix

Сервер настроен — можно пользоваться.

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий

Яндекс.Метрика Рейтинг@Mail.ru Resurs.kz: сайты Казахстана и раскрутка сайта

Thanks: Studenthelp78