Термины по теме: Postfix, POP3, SMTP, IMAP, MariaDB, CentOS, PostfixAdmin, Dovecot, Roundcube
В данной инструкции выполнена настройка полноценного почтового сервера. Список всех особенностей и возможностей:
Напоминаю, данная инструкция написана под систему Linux CentOS версии 7.
Задаем правильное имя серверу — это важный шаг, так как большинство антиспам систем выполняют проверки, обращаясь к серверу по имени в ожидании ответа.
vi /etc/hostname
relay.admins24.com
* необходимо указать FQDN-имя, которое будет доступно из глобальной сети. В данном примере указано relay.admins24.com.
После вводим такую команду:
hostname relay.admins24.com
Устанавливаем служебные пакеты (они понадобятся в процессе настройки сервера):
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 –add-port=80/tcp –add-port=110/tcp –add-port=143/tcp –add-port=443/tcp –add-port=465/tcp –add-port=587/tcp –add-port=993/tcp –add-port=995/tcp
firewall-cmd –reload
* где мы откроем следующие порты:
В 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 команды:
setenforce 0
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config
* первая команда отключит SELinux для текущей загрузки. Вторая оставит его отключенным на постоянной основе.
Система управления PostfixAdmin работает как веб-приложение, разработанное на PHP, а информацию хранит в базе данных. В нашем примере будет использоваться веб-сервер на NGINX, а база данных — MariaDB.
Устанавливаем репозиторий EPEL:
yum install epel-release
Устанавливаем nginx:
yum install nginx
Разрешаем автозапуск сервиса и запускаем его:
systemctl enable nginx
systemctl start nginx
Проверяем работоспособность веб-сервера, обратившись к нему в браузере по IP-адресу. Если видим заголовок «Welcome to nginx!», NGINX настроен верно.
Устанавливаем php и php-fpm:
yum install php 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:
Устанавливаем сервер баз данных следующей командой:
yum install mariadb-server
Включаем автозапуск сервиса и запускаем его:
systemctl enable mariadb
systemctl start mariadb
Задаем пароль для пользователя sql root:
mysqladmin -u root password
Устанавливаем дополнительные компоненты для 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
Создаем каталог templates_c внутри папки портала (без него не запустится установка):
mkdir /usr/share/nginx/html/postfixadmin/templates_c
Задаем права на каталог:
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:
Создаем конфигурационный файл postfixadmin:
vi /usr/share/nginx/html/postfixadmin/config.local.php
* в предыдущих версиях использовался файл config.inc.php. В новых версиях его не рекомендуется править, а использовать config.local.php, который переопределяет настройки.
И добавим следующее:
<?php
$CONF[‘configured’] = true;$CONF[‘default_language’] = ‘ru’;$CONF[‘database_password’] = ‘postfix123’;$CONF[’emailcheck_resolve_domain’]=’NO’;
?>
* где configured говорит приложению, что администратор закончил его конфигурирование; default_language — используемый язык по умолчанию; database_password — пароль для базы данных, который мы задали на предыдущем шаге; emailcheck_resolve_domain — задает необходимость проверки домена при создании ящиков и псевдонимов.
Запускаем браузер и вводим адрес http://<IP-адрес сервера>/postfixadmin/public/setup.php
Начнется процесс проверки конфигурации и установки портала PostfixAdmin. После ее окончания вводим дважды пароль и генерируем хэш:
После перезагрузки страницы копируем хэш:
Открываем конфигурационный файл:
И добавляем строчку:
…$CONF[‘setup_password’] = ‘7a8e14…c26’;
* где ‘7a8e14…c26’ — скопированный хэш.
После, на той же странице, где показан хэш, добавляем суперпользователя PostfixAdmin:
* где Setup password — пароль, который мы ввели на предыдущей странице; Пароль — новый пароль для создаваемой учетной записи.
В итоге мы увидим следующее:
И переходим в браузере на страницу http://<IP-адрес сервера>/postfixadmin/public/
Вводим логин и пароль для созданного пользователя.
Готово.
По умолчанию, 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 = localhost.$mydomain, localhost, localhost.localdomain
* указываем, для каких доменов принимаем входящую почту.
local_recipient_maps = unix:passwd.byname $alias_maps
* указываем, откуда брать список локальных пользователей.
mynetworks = 127.0.0.0/8
* разрешаем отправлять сообщения локальному серверу.
inet_interfaces = all
* необходимо убедиться, что postfix будет слушать на всех необходимых интерфейсах, в данном случае, на всех (all). Также можно задать варианты loopback-only (127.0.0.1) или конкретный IP-адрес интерфейса.
inet_protocols = all
* данный параметр задаст протокол для работы postfix. В данном примере на всех (all). Также можно задать значения ipv4 или ipv6.
Если имя сервера отличается от имени, по которому сервер будет зарегистрирован в DNS, задаем опцию:
myhostname = mx01.admins24.com
Теперь в конец конфигурационного файла допишем следующее:
virtual_mailbox_base = /home/mailvirtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cfvirtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cfvirtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cfvirtual_minimum_uid = 1024virtual_uid_maps = static:1024virtual_gid_maps = static:1024virtual_transport = dovecotdovecot_destination_recipient_limit = 1
smtpd_sasl_auth_enable = yessmtpd_sasl_exceptions_networks = $mynetworkssmtpd_sasl_security_options = noanonymousbroken_sasl_auth_clients = yessmtpd_sasl_type = dovecotsmtpd_sasl_path = private/auth
smtpd_tls_cert_file = /etc/ssl/mail/public.pemsmtpd_tls_key_file = /etc/ssl/mail/private.keysmtpd_use_tls = yessmtpd_tls_auth_only = yessmtpd_helo_required = yes
* где:
Создаем файл с настройками обращения к базе с алиасами:
vi /etc/postfix/mysql_virtual_alias_maps.cf
user = postfixpassword = postfix123hosts = localhostdbname = postfixquery = 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 = postfixpassword = postfix123hosts = localhostdbname = postfixquery = SELECT domain FROM domain WHERE domain=’%u’
И файл с почтовыми ящиками:
vi /etc/postfix/mysql_virtual_mailbox_maps.cf
user = postfixpassword = postfix123hosts = localhostdbname = postfixquery = 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. В файле master.cf мы настраиваем работу вспомогательных сервисов для Postfix. Описание каждого сервиса начинается с новой строки без отступа. Затем идут настройки для сервиса и параметры запуска. Для примера, рассмотрим первую добавленную строку — submission inet n – n – – smtpd:
* после команды идут аргументы ее запуска. Они могут переопределять параметры, заданные в main.cf. Каждый аргумент записывается с новой строки и начинается с двух пробелов. В данном примере мы используем слудующие аргументы:
Перезапустим postfix:
systemctl restart postfix
Устанавливаем Dovecot с компонентом для работы с СУБД:
yum install dovecot dovecot-mysql
Настраиваем способ хранения сообщений:
vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/mail/%d/%u/
* в данном примере сообщения будут храниться в продвинутом формате maildir в каталоге /home/mail/<почтовый домен>/<логин пользователя>.
Настраиваем слушателя для аутентификации:
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 — для возможности постфиксом использовать авторизацию через Dovecot (обращаем внимание, что /var/spool/postfix/private/auth — это тот же private/auth, который был прописан нами в postfix); auth-userdb — сокет для авторизации через dovecot-lda. Опция mode задает права на сокет, например, 666 позволит любому пользователю к нему подключиться; user и group задает пользователя и группу владельцев на сокет.
Настраиваем аутентификацию в 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 = requiredssl_cert = </etc/ssl/mail/public.pemssl_key = </etc/ssl/mail/private.key
* ssl = required укажет dovecot требовать от клиентов использования шифрования; ssl_cert — путь до открытого сертификата (также нами указывался в postfix); ssl_key — путь к закрытому ключу.
Настроим автоматическое создание каталогов при первом подключении пользователя к ящику:
vi /etc/dovecot/conf.d/15-lda.conf
lda_mailbox_autocreate = yes
Открываем файл:
vi /etc/dovecot/conf.d/20-imap.conf
Приводим опцию imap_client_workarounds к виду:
imap_client_workarounds = outlook-idle delay-newmail
* данная настройка позволит решить проблему потери соединения между Outlook и сервером IMAP.
Настраиваем подключение к нашей базе данных:
vi /etc/dovecot/conf.d/auth-sql.conf.ext
passdb { … args = /etc/dovecot/dovecot-sql.conf.ext}
userdb { … args = /etc/dovecot/dovecot-sql.conf.ext}
* в данном примере мы указали на файл, в котором будут находиться настройки для получения пользователей и паролей из базы данных. Данная настройка является настройкой по умолчанию и, в большинстве случаев, ее не нужно менять без необходимости указать свой путь.
Создаем файл с настройками работы с mysql:
vi /etc/dovecot/dovecot-sql.conf.ext
driver = mysqlconnect = host=localhost dbname=postfix user=postfix password=postfix123default_pass_scheme = MD5-CRYPTpassword_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’
* в данном примере мы настроили запрос на получение данных из базы mysql (mariadb). password_query — запрос на получение пароля из таблицы mailbox; user_query — запрос на получение данных пользователя (домашняя почтовая директория, идентификатор 1024 (идентификатор созданного нами ранее пользователя vmail).
И, напоследок, настраиваем интерфейс, на котором будет слушать dovecot:
vi /etc/dovecot/dovecot.conf
listen = *
* по умолчанию, dovecot слушает также на ipv6 (listen = *, ::). Если на сервере не используется 6-я версия протокола TCP/IP, в логах dovecot появятся ошибки:master: Error: service(imap-login): listen(::, 143) failed: Address family not supported by protocolmaster: 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.admins24.com”
* сертификат сгенерирован на 1461 день, ключи subj могут быть произвольными, CN необходимо указать в соответствии с именем сервера, по которому мы будем подключаться к почте.* если мы хотим использовать сертификат, который будет проходить все проверки безопасности, его нужно купить или запросить у Let’s Encrypt.
Запускаем dovecot:
systemctl enable dovecot
systemctl start dovecot
В браузере вводим в адресной строке путь до Postfixadmin — http://<IP-адрес сервера>/postfixadmin/public/.
Вводим логин и пароль от административной учетной записи, которую мы создали на шаге 3. Перед нами появится страница управления учетными записями.
Переходим в Список доменов – Новый домен:
Заполняем формы и нажимаем по Добавить домен:
Теперь переходим в Обзор – Создать ящик:
Вводим данные нового пользователя и нажимаем по Создать ящик:
Теперь можно подключиться к серверу с помощью любой почтовой программы, например, Mozilla Thunderbird.
Параметры для подключения:
* для корректной работы сервера на портах 993, 995, 465 (SSL/TLS) необходим правильный сертификат (для нашего домена и выпущенный доверенным центром сертификации).
На официальном сайте заходим на страницу загрузки Roundcube. Смотрим ссылку на последнюю стабильную версию продукта (LTS):
Используем ссылку, чтобы загрузить архив программы:
wget https://github.com/roundcube/roundcubemail/releases/download/1.1.12/roundcubemail-1.1.12-complete.tar.gz
Создаем каталог, где будут размещаться файлы портала:
mkdir /usr/share/nginx/html/webmail
И распаковываем скачанный архив:
tar -C /usr/share/nginx/html/webmail -xvf roundcubemail-*.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:[email protected]/roundcubemail’;$config[‘enable_installer’] = true;
* первую строку мы редактируем, а вторую добавляем. В первой строке roundcube:roundcube123 — логин и пароль для доступа к базе данных; localhost — сервер базы данных; roundcubemail — имя базы данных. Вторая строка разрешает установку портала.
Также дописываем в конфигурационный файл следующее:
$config[‘drafts_mbox’] = ‘Drafts’;$config[‘junk_mbox’] = ‘Junk’;$config[‘sent_mbox’] = ‘Sent’;$config[‘trash_mbox’] = ‘Trash’;$config[‘create_default_folders’] = true;
* настройка $config[‘create_default_folders’] = true создает папки по умолчанию, если их нет:
* Без данной настройки, если не создавались папки другим клиентом, веб-клиент будет выдавать ошибки при пересещении писем, например, при их удалении.
Задаем владельца 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 [email protected] IDENTIFIED BY ’roundcube123′;
И загружаем в созданную базу данные:
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:
Теперь открываем браузер и переходим по адресу http://<IP-адрес сервера>/webmail/installer/. В самом низу нажимаем по кнопке Next. Если кнопка будет неактивна, проверяем, что нет ошибок (NOT OK).
На следующей странице проверяем, что все пункты находятся в состоянии OK. Установка выполнена.
Открываем конфигурационный файл roundcube:
Запрещаем установку портала:
$config[‘enable_installer’] = false;
После удаляем папку с установочными скриптами:
\rm -R /usr/share/nginx/html/webmail/installer
И заходим в браузере по адресу http://<IP-адрес сервера>/webmail/.
Антивирус требует много ресурсов. Будьте готовы, что после его запуска сервер начнет работать медленнее и понадобится добавить ресурсы.
Устанавливаем антивирус:
yum install clamav clamsmtp clamav-scanner-systemd clamav-update
Добавляем в postfix:
content_filter = scan:[127.0.0.1]:10025receive_override_options = no_address_mappings
* где content_filter указывает на приложение, которое будет сканировать сообщения; receive_override_options позволяет увидеть оригинальные email адреса писем с вирусами.
Теперь редактируем 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
* итак, данной настройкой мы создадим два вспомогательных сервиса scan и 127.0.0.1:10026 (сервис без имени, он просто будет слушать на порту 10026 — это порт по умолчанию, на который отправляет сообщение антивирусная программа clam после выполнения проверки). Также, мы используем следующие опции:
Конфигурируем clamsmtpd:
vi /etc/clamsmtpd.conf
ClamAddress: /tmp/clamd.sock
* где ClamAddress указываем на путь к сокетному файлу — он должен совпадать с путем к LocalSocket в конфигурационном файле для clamscan;
Редактируем конфигурационный файл для clamscan:
vi /etc/clamd.d/scan.conf
#Example…LocalSocket /tmp/clamd.sock…User clamsmtp
* где #Example — закомментированная Example, которая не позволит запустить сканер, пока ее не удалить или закомментировать; LocalSocket — путь до сокетного файла для взаимодействия с clamsmtp; User — пользователь, от которого будет запускаться clamd.
Обновляем антивирусную базу:
Теперь разрешаем запуск антивируса:
systemctl enable clamsmtpd
systemctl enable [email protected]
Запускаем clamscan:
systemctl start [email protected]
* запуск может занять некоторое время. Если мы получим ошибку Job for clamd.service failed because timeout was exceeded, переходим к ее решению.
И после запускаем clamsmtpd:
systemctl start clamsmtpd
И также перезапускаем postfix:
Для настройки автоматического обновления, редактируем 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*
Письмо не должно дойти, а в логе должны увидет строку:
Mar 22 15:50:03 mx01 postfix/smtp[6189]: B5BEDCAF3E0: to=<[email protected]>, relay=127.0.0.1[127.0.0.1]:10025, delay=0.1, delays=0.01/0/0.04/0.04, dsn=2.0.0, status=sent (250 Virus Detected; Discarded Email)
Устанавливаем spamassassin:
yum install spamassassin
Редактируем master.cf:
Для smtp добавляем опцию фильтра:
smtp inet n – n – – smtpd -o content_filter=spamassassin
* в данном случае мы добавим к сервису postfix smtp дополнительную опцию 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 — добавляемый сервис фильтрации; /usr/bin/spamc — путь до исполняемого файла спамассасина; spamd — учетная запись, от которой запучкается spamassassin.
Создаем учетную запись spamd:
useradd spamd
Обновляем spamassassin:
sa-update –nogpg –verbose
Разрешаем его запуск и стартуем сервис:
systemctl enable spamassassin
systemctl start spamassassin
Перезапускаем postfix:
Для автоматического обновления добавим в cron следующее:
30 3 * * * /bin/sa-update
* обновление будет происходить каждый день в 03:30.
Для проверки работы контентного антиспама, отправляем письмо со следующим содержимым:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
В итоге должно прийти письмо с меткой в теме [SPAM], а в логах мы увидим:
… spamd: identified spam (999.0/5.0) for spamd:1025 in 0.2 seconds, 695 bytes.… spamd: result: Y 999 – ALL_TRUSTED,GTUBE scantime=0.2,size=695,user=spamd,uid=1025,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=57254,mid=<[email protected]>,autolearn=no autolearn_force=no
Мы настроили антиспам фильтр для smtp-соединения. В основном, он будет отрабатывать для входящей почты. Если нам необходимо также проверять исходящую почту, в master.cf добавляем content_filter для smtps и submission:
…submission inet n – n – – smtpd -o content_filter=spamassassin …
smtps inet n – n – – smtpd -o content_filter=spamassassin …
Все письма со спамом будут отправляться в ящик пользователя с пометкой в теме [SPAM]. Если мы хотим перенаправлять все подобные сообщения на специальный ящик, то необходимо настроить обработку заголовков с перенаправлением сообщений.
Открываем конфигурационный файл Postfix:
Проверяем наличие строки:
header_checks = regexp:/etc/postfix/header_checks
… и если ее нет, то добавляем.
Открываем на редактирование файл:
vi /etc/postfix/header_checks
И добавляем строку:
/^SUBJECT:\s+\[SPAM\]/ REDIRECT [email protected]
Проверим, что мы все сделали правильно:
postmap -q “SUBJECT: [SPAM]” regexp:/etc/postfix/header_checks
Мы должны увидеть что-то на подобие:
REDIRECT [email protected]
Перезапускаем Postfix:
В MTA Postfix встроен свой механизм проверки заголовков входящих сообщений. Правила размещаются в 7 секций, обработка которых выполняется в следующем порядке:
client -> helo -> sender -> relay -> recipient -> data -> end_of_data
Чтобы лучше понять принцип, мы должны знать SMTP-команды при выполнении отправки почты. И так, порядок, следующий:
И так, для настройки антиспама в конфигурационный файл 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
* более подробное описание опций для защиты можно найти на странице postfix.org/postconf.5.html.
После внесения всех правок, необходима перезагрузка Postfix:
Для отправки почты на другие почтовые серверы необходимо правильно сконфигурировать сервер, чтобы письма не попадали в СПАМ. Чтобы это сделать, выполняем инструкции ниже.
Многие почтовые серверы делают запросы в систему доменных имен для проверки легитимности почтового сервера, отправляющего почту. При настройке MTA очень важно правильно добавить необходимые записи в DNS.
1. rDNS. Обратная зона используется для проверки соответствия имени сервера в приветствии с именем, которое возвращает NS сервер при запросе по PTR-записи.
И так, для создания записи в обратной зоне, необходимо написать письмо Интернет провайдеру, к сети которого подключен сервер или хостеру, если почтовый сервер настроен на VPS. IP-адрес нашего сервера должен вести на имя, которым приветствуется наш postfix — можно посмотреть командой:
postconf -n smtpd_banner
Если мы получим пустой ответ, то вводим:
postconf -n myhostname
2. А-запись. Также необходимо, чтобы имя сервера, которым представляется почтовый сервер разрешалось в IP-адрес.
Для этого заходим в консоль управления зоной нашего домена и создаем запись типа А для сопоставления имени сервера с IP-адресом, на котором слушает запросы данный сервер.
Для каждого домена, для которого будем отправлять почту создаем записи:
DKIM настраивается на сервере, а для каждого домена создается специальная запись в DNS. Подробнее в инструкции Настройка DKIM + Postfix.
Появляется при попытке запустить службу clamd.
Причина: сервис стартует так долго, что время, которое отведено на его запук заканчивается.
Решение: увеличиваем время, в течение которого может стартовать сервис. Для этого открываем файл настройки юнита systemd для clamd:
vi /usr/lib/systemd/system/clamd.service
В раздел [Service] добавляем:
…[Service]…TimeoutSec=900
…
Перечитываем юнит:
systemctl daemon-reload
Снова пробуем запустить clamscan:
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies