Термины по теме: Postfix, POP3, SMTP, IMAP, MariaDB, CentOS, PostfixAdmin, Dovecot, Roundcube
В данной инструкции выполнена настройка полноценного почтового сервера. Список всех особенностей и возможностей:
Данная инструкция является обновлением для статьи Почтовый сервер Postfix на CentOS 7 с виртуальными доменами, системой управления, веб-доступом и многим другим.
Напоминаю, данная инструкция написана под систему Linux CentOS версии 8. Предварительно, выполним следующие действия.
Задаем правильное имя серверу — это важный шаг, так как большинство антиспам систем выполняют проверки, обращаясь к серверу по имени в ожидании ответа.
hostnamectl set-hostname relay.admins24.com
* необходимо указать FQDN-имя, которое будет доступно из глобальной сети. В данном примере указано relay.admins24.com.
Устанавливаем служебные пакеты (они понадобятся в процессе настройки сервера):
dnf install chrony wget
* chrony для возможности синхронизировать время на сервере; wget — клиент для загрузки файлов.
Задаем временную зону (в данном примере московское время):
timedatectl set-timezone Europe/Moscow
* в данном примере мы установим московское время. Чтобы получить список всех возможных зон, вводим timedatectl list-timezones.
Запускаем сервис для обновления времени:
systemctl enable chronyd —now
Обновляем систему:
dnf 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
* где мы откроем следующие порты:
Для отключения дополнительного компонента безопасности вводим 2 команды:
setenforce 0
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config
* первая команда отключит SELinux для текущей загрузки. Вторая оставит его отключенным на постоянной основе.
Система управления PostfixAdmin работает как веб-приложение, разработанное на PHP, а информацию хранит в базе данных. В нашем примере будет использоваться веб-сервер на NGINX, а база данных — MariaDB.
Устанавливаем nginx командой:
dnf install nginx
Разрешаем автозапуск сервиса и запускаем его:
systemctl enable nginx —now
Проверяем работоспособность веб-сервера, обратившись к нему в браузере по IP-адресу. Если видим заголовок «Welcome to nginx!», NGINX настроен верно.
Устанавливаем php и php-fpm. Мы будем использовать репозиторий remi, так как в репозитории CentOS отсутствует нужный нам php-imap.
И так, устанавливаем EPEL и REMI:
dnf install epel-release
dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm
Теперь устанавливаем PHP из репозитория REMI:
dnf module install php:remi-7.2
После ставим php-fpm:
dnf install php-fpm
Настраиваем NGINX:
vi /etc/nginx/nginx.conf
В разделах http — server добавляем настройку для обработки запросов php:
server { listen 80 default_server; …
location ~ \.php$ { set $root_path /usr/share/nginx/html; fastcgi_pass unix:/run/php-fpm/www.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 — каталог для размещения данных nginx по умолчанию.
Запускаем сервисы:
systemctl enable php-fpm —now
systemctl restart nginx
Для проверки, создаем индексный файл в директории сайта со следующим содержимым:
vi /usr/share/nginx/html/index.php
<?php phpinfo(); ?>
Открываем сайт в браузере по его IP-адресу. На открывшейся странице мы должны увидеть подробную информацию по php:
Устанавливаем сервер баз данных следующей командой:
dnf install mariadb-server
Включаем автозапуск сервиса и запускаем его:
systemctl enable mariadb —now
Задаем пароль для пользователя sql root:
mysqladmin -u root password
Устанавливаем дополнительные компоненты для PHP:
dnf install php-mysqli 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. После ее окончания мы увидем окно с результатами — проверяем, чтобы не было ошибок и предупреждений:
… после чего, вводим дважды пароль и генерируем хэш, кликнув по Generate password hash:
После перезагрузки страницы копируем хэш:
Открываем конфигурационный файл:
И добавляем строчку:
…$CONF[‘setup_password’] = ‘7a8e14…c26’;
* где ‘7a8e14…c26’ — скопированный хэш.
После, на той же странице, где показан хэш, добавляем суперпользователя PostfixAdmin:
* где Setup password — пароль, который мы ввели на предыдущей странице; Пароль — новый пароль для создаваемой учетной записи.
В итоге мы увидим следующее:
И переходим в браузере на страницу http://<IP-адрес сервера>/postfixadmin/public/
Вводим логин и пароль для созданного пользователя. Мы должны войти в postfix.admin:
Готово.
Установка Postfix в CentOS 8 выполняется командой:
dnf install postfix postfix-mysql
* помимо самого postfix, мы также установили postfix-mysql для возможности работы с СУБД.
После создаем учетную запись, от которой мы будем работать с каталогом виртуальных почтовых ящиков:
groupadd -g 1024 vmail
useradd -d /home/mail -g 1024 -u 1024 vmail -m
* сначала мы создаем группу vmail и guid 1024, после — пользователя vmail с uid 1024 и домашней директорией /home/mail — в ней у нас будет храниться почта. Обратите внимание, что в некоторых системах идентификатор группы и пользователя 1024 может быть занят. В таком случае необходимо создать другой, а в данной инструкции ниже заменить все 1024 на альтернативный.
Если директория для почты ранее уже была создана, то необходимо задать в качестве владельца нашего созданного пользователя:
chown vmail:vmail /home/mail
Теперь открываем на редактирование конфигурационный файл почтового сервера:
vi /etc/postfix/main.cf
И редактируем следующие строки:
myorigin = $mydomain…mydestination = localhost.$mydomain, localhost, localhost.localdomain…local_recipient_maps = unix:passwd.byname $alias_maps…mynetworks = 127.0.0.0/8…inet_interfaces = all…inet_protocols = all…smtpd_tls_cert_file = /etc/ssl/mail/public.pem…smtpd_tls_key_file = /etc/ssl/mail/private.key
* где:
Если имя сервера отличается от имени, по которому сервер будет зарегистрирован в 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_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. Каждый аргумент записывается с новой строки и начинается с двух пробелов. В данном примере мы используем следующие аргументы:
Генерируем сертификаты безопасности. Для этого создаем каталог, в котором их разместим:
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.
Разрешаем запуск postfix:
systemctl enable postfix —now
Устанавливаем Dovecot с компонентом для работы с СУБД:
dnf 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 задает пользователя и группу владельцев на сокет.
А также в этом файле добавим строки:
service stats { unix_listener stats-reader { user = vmail group = vmail mode = 0660 } unix_listener stats-writer { user = vmail group = vmail mode = 0660 }}
* в противном случае, мы увидим в логе ошибку error net_connect_unix(/var/run/dovecot/stats-writer) failed permission denied, так как у пользователя vmail не будет прав.
Настраиваем аутентификацию в 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/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
Запускаем dovecot:
systemctl enable dovecot —now
В браузере вводим в адресной строке путь до Postfixadmin — http://<IP-адрес сервера>/postfixadmin/public/.
Вводим логин и пароль от административной учетной записи, которую мы создали на шаге 3. Перед нами появится страница управления учетными записями.
Переходим в Список доменов — Новый домен:
Заполняем формы и нажимаем по Добавить домен:
Теперь переходим в Обзор — Создать ящик:
Вводим данные нового пользователя и нажимаем по Создать ящик:
Теперь можно подключиться к серверу с помощью любой почтовой программы, например, Mozilla Thunderbird.
Параметры для подключения:
* для корректной работы сервера на портах 993, 995, 465 (SSL/TLS) необходим правильный сертификат (для нашего домена и выпущенный доверенным центром сертификации).
В данной инструкции мы разберем использование веб-клиента Roundcube. При необходимости, можно установить другой, например, WebMail Lite или несколько одновременно.
На официальном сайте заходим на страницу загрузки Roundcube. Смотрим ссылку на версию продукта с длительной поддержкой (LTS):
Используем ссылку, чтобы загрузить архив программы:
wget https://github.com/roundcube/roundcubemail/releases/download/1.2.11/roundcubemail-1.2.11-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:
dnf install php-pear php-mcrypt php-intl php-ldap php-pear-Net-SMTP
Настроим php:
vi /etc/php.ini
date.timezone = «Europe/Moscow»…post_max_size = 30M…upload_max_filesize = 30M
* в данном примере мы задаем московское время и возможность загружать файл размером в 30 Мб (это будет максимальным объемом вложений, которые можно отправлять через веб-интерфейс).
Перезагружаем php-fpm:
Настроим nginx:
Добавим строку в раздел http:
http { … client_max_body_size 30M; …
* данной настройкой мы также разрешим загрузку файлов размером 30 Мб.
Перезапустим nginx для применения настройки:
Теперь открываем браузер и переходим по адресу http://<IP-адрес сервера>/webmail/installer/. В самом низу нажимаем по кнопке Next. Если кнопка будет неактивна, проверяем, что нет ошибок (NOT OK).
На следующей странице проверяем, что все пункты находятся в состоянии OK. Установка выполнена.
Открываем конфигурационный файл roundcube:
Запрещаем установку портала:
$config[‘enable_installer’] = false;
После удаляем папку с установочными скриптами:
\rm -R /usr/share/nginx/html/webmail/installer
И заходим в браузере по адресу http://<IP-адрес сервера>/webmail/. Вводим в качестве логина адрес почты созданного пользователя и его пароль.
Антивирус требует много ресурсов. Будьте готовы, что после его запуска сервер начнет работать медленнее и понадобится добавить ресурсы.
Устанавливаем необходимые для работы антивируса и антиспама компоненты:
dnf —enablerepo=epel,PowerTools install amavisd-new clamd perl-Digest-SHA1 perl-IO-stringy
Открываем конфигурационный файл amavis:
vi /etc/amavisd/amavisd.conf
Редактируем следующие параметры:
$mydomain = ‘admins24.com’;…$myhostname = ‘relay.admins24.com’;
* данные опции не обязательны, но они определяют сообщения в заголовках. $mydomain — домен, в котором находится сервер; $myhostname — имя сервера.
… а также добавим:
$allowed_header_tests{‘multiple’} = 0;$allowed_header_tests{‘missing’} = 0;
* данные опции позволят программе Outlook без ошибок отправлять тестовое сообщение.
Открываем конфигурационный файл clamd:
vi /etc/clamd.d/scan.conf
Снимаем комментарий для опции TCPSocket:
TCPSocket 3310
Теперь разрешаем запуск антивируса и amavis:
systemctl enable [email protected] —now
systemctl enable amavisd —now
Добавляем в postfix:
content_filter = scan:[127.0.0.1]:10024receive_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:10025 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:10025 (сервис без имени, он просто будет слушать на порту 10025 — это порт по умолчанию, на который отправляет сообщение amavis после выполнения проверки). Также, мы используем следующие опции:
Перезапускаем postfix:
systemctl restart postfix
Устанавливаем clamav-update:
dnf install clamav-update
Обновляем антивирусную базу командой:
Для обновления базы антиспама:
sa-update —nogpg —verbose
Для настройки автоматического обновления, редактируем cron:
crontab -e
15 3 * * * /bin/freshclam30 3 * * * /bin/sa-update
* в данном примере, каждый день в 03:15 будет запускаться процесс обновления clamav, а в 03:30 — антиспама.
Для проверки антивируса отправляем сообщение со следующим содержимым:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Письмо не должно дойти, а в логе (/var/log/maillog) мы увидим строку:
… amavis[17688]: (17688-04) Blocked INFECTED (Eicar-Signature) {DiscardedOutbound,Quarantined}, MYNETS LOCAL …… relay=127.0.0.1[127.0.0.1]:10024, delay=0.25, delays=0.19/0/0/0.06, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=17688-04 — INFECTED: Eicar-Signature)
Для проверки работы контентного антиспама, отправляем письмо со следующим содержимым:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
В итоге, письмо не должно прийти, а в логах мы увидим:
… amavis[17689]: (17689-04) Blocked SPAM {DiscardedOutbound,Quarantined}, MYNETS LOCAL …… status=sent (250 2.7.0 Ok, discarded, id=17689-04 — spam)
Все письма со спамом и вирусами будут перемещаться в карантин. Если мы хотим перенаправлять все подобные сообщения на специальный ящик, то необходимо настроить amavis.
Добавляем такие опции:
$spam_quarantine_to = «spam\@admins24.com»;…$virus_quarantine_to = «virus\@admins24.com»;
* где $spam_quarantine_to указываем на адрес для перенаправления СПАМ-писем; $virus_quarantine_to — почта для писем с обнаруженными вирусами.
После перезагрузим amavisd:
systemctl restart amavisd
Пробуем отправить сообщения с тестовыми сигнатурами на СПАМ и вирус — письма должны быть перенаправлены на указанные адреса.
Выше мы рассмотрели возможность перенаправления всех нежелательных писем на другой почтовый ящик. Данный способ удобен, что пользователи не видят ненужные сообщения, но накладывает дополнительную обязанность на администратора по поиску писем, которые ложно были определены как СПАМ. В данном подразделе мы рассмотрим альтернативу — сохранение нежелательных сообщений в специальной папке.
Устанавливаем пакет dovecot-pigeonhole:
dnf install dovecot-pigeonhole
Открываем на редактирование файл:
vi /etc/dovecot/conf.d/90-sieve.conf
Комментируем и добавляем строки:
#sieve = file:~/sieve;active=~/.dovecot.sievesieve = /etc/dovecot/sieve/default.sieve
* закомментированная строка указывала, что файл с настройками находится в домашней директории каждого пользователя. Мы же будем делать централизованный конфиг в файле /etc/dovecot/sieve/default.sieve.
Открываем файл /etc/dovecot/conf.d/15-lda.conf и редактируем:
protocol lda { … mail_plugins = $mail_plugins sieve}
* в данном примере мы добавили плагин sieve. Также необходимо со строки снять комментарий, если он был.
vi /etc/dovecot/conf.d/20-lmtp.conf
protocol lmtp { … mail_plugins = $mail_plugins sieve}
* также мы добавили плагин sieve + необходимо со строки снять комментарий, если он есть.
Создаем каталог и файл с настройками sieve:
mkdir /etc/dovecot/sieve
vi /etc/dovecot/sieve/default.sieve
require «fileinto»;if header :contains «X-Spam-Flag» «YES» { fileinto «Junk»;}
* в данном примере мы ищем в заголовках X-Spam-Flag и отправляем такие письма в папку Junk.
Задаем владельца для созданных каталога и файла:
chown -R vmail:vmail /etc/dovecot/sieve
Перезапускаем dovecot:
systemctl restart dovecot
Открываем конфиг amavis:
Редактируем строку:
$final_spam_destiny = D_PASS;
* по умолчанию стоит значение D_DISCARD, что означает, что сообщения будут отклонятся. Нам же нужно D_PASS — пропускать.
Перезапускаем amavisd:
В 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:
Мы установили amavis, который проверяет почту на СПАМ средствами spamassassin. Последний без обучения, практически, бесполезен. Синтаксис команды для обучения следующий:
sa-learn —spam <папка с нежелательными письмами>
sa-learn —ham <папка письмами, которые ошибочно определены как СПАМ>
Таким образом, первая команда укажет spamassassin какие письма являются нежелательными, а вторая — не несущими рекламный характер.
Хорошей практикой будет договориться с пользователями о ручном помещении нежелательной почты из входящих в папку СПАМ. Тогда мы сможем пройтись скриптом по всем ящиками на сервере и обучать антиспам. Например, такой командой:
sa-learn —spam /home/mail/admins24.local/*/{.\&BCEEPwQwBDw-,.Spam,.Junk\ E-mail,.Junk}/cur
* в данном примере мы сказали spamassassin найти в каталогах пользователей папки Спам, Spam, Junk, Junk E-mail (данные каталоги являются типичными для помещения СПАМа) и провести обучение.
Чтобы минимизировать количество ложных срабатываний, необходимо проводить обучение с ключом —ham. В нашем примере мы отправляем все нежелательные письма на ящик spam. В таком случае, необходимо вручную находить ложные срабатывания и переносить их в специальную папку, например Ham. Тогда команда для обучения будет такой:
sa-learn —ham /home/mail/admins24.local/spam\@admins24.local/.Ham/cur
Статистику обучения можно посмотреть командой:
sa-learn —dump magic
В настройках amavis мы можем переопределять СПАМ-бал для конкретного отправителя или всего домена. Для этого открываем файл:
Находим строки:
# read_hash(«/var/amavis/sender_scores_sitewide»),
{ …}
Внутри фигурных скобок можно создавать новые строки с описанием поведения антиспама.
а) для добавления в белый список.
Присваиваем минусовое значение для бала, например:
{ … ‘[email protected]’ => -10.0, ‘admins24.com’ => -5.0,}
* в данном примере все письма от домена admins24.com будут получать минус 5 баллов. Таким образом, шансов попасть в СПАМ будет меньше. У всех писем от email [email protected] будет отниматься 10 баллов.
б) для добавления в черный список.
В данном случае, мы задаем положительное значение для балла:
{ … ‘admins24.com’ => 5.0,}
После того, как мы внесли правки в наш файл, перезапускаем amavis:
Для отправки почты на другие почтовые серверы необходимо правильно сконфигурировать сервер, чтобы письма не попадали в СПАМ. Чтобы это сделать, выполняем инструкции ниже.
Многие почтовые серверы делают запросы в систему доменных имен для проверки легитимности почтового сервера, отправляющего почту. При настройке MTA очень важно правильно добавить необходимые записи в DNS.
1. rDNS. Обратная зона используется для проверки соответствия имени сервера в приветствии с именем, которое возвращает NS сервер при запросе по PTR-записи.
И так, для создания записи в обратной зоне, необходимо написать письмо Интернет провайдеру, к сети которого подключен сервер или хостеру, если почтовый сервер настроен на VPS. IP-адрес нашего сервера должен вести на имя, которым приветствуется наш postfix — можно посмотреть командой:
postconf -n smtpd_banner
Если мы получим пустой ответ, то вводим:
postconf -n myhostname
Если и в этот вариант не вернет ответ, вводим:
2. А-запись. Также необходимо, чтобы имя сервера, которым представляется почтовый сервер разрешалось в IP-адрес.
Для этого заходим в консоль управления зоной нашего домена и создаем запись типа А для сопоставления имени сервера с IP-адресом, на котором слушает запросы данный сервер.
Для каждого домена, для которого будем отправлять почту создаем записи:
Для проверки корректности настройки сервера, воспользуемся ресурсами:
Подпись писем не является обязательной, но помогает не попадать в СПАМ. DKIM настраивается для каждого домена, а также должна создаваться специальная запись в DNS. Рассмотрим создание и настройку DKIM в amavisd.
Создаем каталог для хранения ключей:
mkdir -p /var/lib/dkim
Генерируем последовательность для нашего домена:
amavisd genrsa /var/lib/dkim/admins24.com.pem 1024
* где admins24.com — домен, для которого мы сгенерируем подпись dkim.
Задаем права на созданный файл:
chown amavis:amavis /var/lib/dkim/*.pem
chmod 0400 /var/lib/dkim/*.pem
Открываем конфигурационный файл amavisd:
Редактируем запись:
#$inet_socket_port = 10024;$inet_socket_port = [10024,10026];
* в данном примере мы закомментировали первую строку и раскомментировали вторую. Это укажет amavis, что он должен запускаться и работать на двух портах.
Добавляем записи:
dkim_key(‘admins24.com’, «dkim», «/var/lib/dkim/admins24.com.pem»);
@dkim_signature_options_bysender_maps = ( { «admins24.com» => { d => «admins24.com», a => ‘rsa-sha256’, ttl => 10*24*3600 },});
* где admins24.com — домен, для которого мы настраиваем dkim; /var/lib/dkim/admins24.com.pem — путь до сгенерированного файла с последовательностью.
Проверяем, чтобы значение данных переменных было 1:
$enable_dkim_verification = 1;$enable_dkim_signing = 1;
Посмотреть DKIM последовательность для нового домена можно командой:
amavisd -c /etc/amavisd/amavisd.conf showkeys
Мы должны увидеть что-то на подобие:
; key#1 1024 bits, i=dkim, d=admins24.com, /var/lib/dkim/admins24.com.pemdkim._domainkey.admins24.com. 3600 TXT ( «v=DKIM1; p=» «MIGfMA0SDFqGSIb3DQEBAQUAA4GNADCBiQKBgQC44iOK+99mYBxsnIl1Co8n/Oeg» «4+x90sxqWzoGW42d/GCP4wiYqVqncc37a2S5Berv0OdoCGcmkDkKWh4CHhFD4blk» «x6eMYXsp1unAdo2mk/OVK7M2ApraIkh1jVbGBZrREVZYTE+uPOwtAbXEeRLG/Vz5» «zyQuIpwY2Nx3IgEMgwIDAQAB»)
Теперь нам нужно на основе данного вывода создать в DNS запись TXT. В данном примере, нужно создать запись c именем dkim._domainkey в зоне admins24.com и значением «v=DKIM1; p=MIGfMA0SD…wIDAQAB».
Проверить корректность настройки DKIM можно командой:
amavisd -c /etc/amavisd/amavisd.conf testkeys
Переходим к настройке Postfix. Мы должны добавить отправку всех исходящих писем на проверку в amavis на порт 10026 и принимать обратно письма на порт 10027.
Открываем файл:
Отредактируем submission и smtps, добавив content_filter:
submission inet n — n — — smtpd -o content_filter=scan:[127.0.0.1]:10026 …
smtps inet n — n — — smtpd -o content_filter=scan:[127.0.0.1]:10026 …
И добавим:
127.0.0.1:10027 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
Настраиваем Roundcube:
$config[‘smtp_server’] = »;…$config[‘smtp_port’] = 25;
… и меняем ее на:
$config[‘smtp_server’] = ‘tls://localhost’;…$config[‘smtp_port’] = 587;
* в данном примере мы указали, что соединение для отправки почты должно быть защищенным. Это важно для нашей настройки DKIM.
Пробуем отправить письмо — в заголовках мы должны увидеть:
dkim=pass header.d=admins24.com
В PostfixAdmin у нас есть возможность задать квоты на почтовые ящики, но они работать не будут, так как о них ничего не знает Dovecot.
Процесс настройки не сложен и описан отдельно в статье Настройка квот в Dovecot + PostfixAdmin.
После применения квот мы сможем наблюдать в почтовом клиенте Roundcube информацию об оставшемся дисковом пространстве:
… или в Webmail Lite:
Для автоматического конфигурирования почтовых клиентов необходимо настроить сервис autodiscover. Для этого настраиваем веб-сервер, который будет возвращать почтовые настройки для домена.
Подробнее процесс настройки описан в статье Настройка Autodiscover для своего почтового сервера.
По умолчанию, все почтовые клиенты, кроме Outlook распознают служебные папки IMAP:
Данные каталоги переводятся на русский язык и корректно отображаются в клиенте. В Outlook эти папки отображаются как есть — на английском языке.
Для решения проблемы мы должны открыть файл:
vi /etc/dovecot/conf.d/15-mailboxes.conf
Найти блок настроек namespace inbox. Для каждого из служебного каталога настроить следующее:
namespace inbox { … mailbox Черновики { auto = subscribe special_use = \Drafts } mailbox Drafts { auto = no special_use = \Drafts }
mailbox Спам { auto = subscribe special_use = \Junk } mailbox Junk { auto = no special_use = \Junk } mailbox Spam { auto = no special_use = \Junk } mailbox «Junk E-mail» { auto = no special_use = \Junk }
mailbox Удаленные { auto = subscribe special_use = \Trash } mailbox Trash { auto = no special_use = \Trash } mailbox «Deleted Messages» { auto = no special_use = \Trash }
mailbox Отправленные { auto = subscribe special_use = \Sent } mailbox Sent { auto = no special_use = \Sent } mailbox «Sent Messages» { auto = no special_use = \Sent } mailbox «Sent Items» { auto = no special_use = \Sent } ..}
* и так, мы задали несколько вариантов служебных каталогов:
Для применения настроек перезапускаем dovecot:
Рассмотрим дополнительные настройки для нашего сервера.
Также важно настроить некоторые ограничения, например:
Подробнее, информацию можно найти в статье Лимиты в Postfix.
Предположим, мы сделали ошибку в написании адреса электронной почты, но не хотим удалять учетную запись и создавать ее по новой. Рассмотрим смену email-адреса на примере [email protected] -> [email protected]
Нам нужно внести изменения в базу данных — для этого заходим в оболочку sql:
Вводим пароль, который создавали после установки СУБД.
Используем базу postfix:
> use postfix
Редактируем алиасы командой:
> UPDATE alias SET `address`=’[email protected]’, `goto`=REPLACE(`goto`, ‘[email protected]’, ‘[email protected]’) WHERE `address`=’[email protected]’;
Редактируем почтовый ящик:
> UPDATE mailbox SET `username`=’[email protected]’, `local_part`=’secretar’, `maildir`=REPLACE(`maildir`, ‘/sekretar/’, ‘/secretar/’) WHERE `username`=’[email protected]’;
И квоту:
> UPDATE quota2 SET `username`=’[email protected]’ WHERE `username`=’[email protected]’;
С базой данных закончили — выходим из sql:
Переходим в каталог с почтовыми ящиками пользователей для нашего домена:
cd /home/mail/admins24.com/
Перемещаем папку с почтой старого ящика в новый:
mv [email protected] [email protected]
Проверяем работу через веб-интерфейс. Если используем почтовый клиент, меняем настройки для использования нового email-адреса.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies