Как протестировать и обезопасить почтовый сервер в Debian и Ubuntu с ispmanager

Это вторая часть статьи о настройке почтового сервера. Расскажу о тестировании настроек почтового сервера и настройке его безопасности с помощью AppArmor, iptables и Fail2ban. Инструкция применима для Debian Linux и дистрибутива Ubuntu.

В этой статье:

  • Тестирование настроек почтового сервера

  • Настройка Firewall iptables

  • Настройка Fail2ban

  • Безопасность RoundCube

  • Создание профилей AppArmor

Процесс установки и настройки почтового сервера описал в первой части статьи — «Как настроить почтовый сервер в Debian и Ubuntu с ispmanager, чтобы защититься от спама»

Тестирование настроек почтового сервера

Проверять настройки почтового сервера можно с помощью бесплатного сервиса MxToolbox — анализировать DNS-записи, идентифицировать почтовые серверы и устранять проблемы с доставкой почты.

Вот как использовать MxToolbox:

  1. Перейдите на сайт MxToolbox в раздел Email Health Report.

  2. Введите доменное имя вашего почтового сервера (например, unixweb.info) или e-mail и нажмите Check Email Health. Измените доменное имя или email на ваши собственные данные.

Тестирование настроек почтового сервера

Тестирование настроек почтового сервера

Сервис предоставит вам информацию о состоянии DNS-записей, наличии внешних black-листов, настройках PTR, SPF, DKIM.

Настройка Firewall iptables

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

Правила iptables по умолчанию после установки ispmanager:

Файл конфигурации iptables /etc/ispiptable.conf содержит правила для фильтрации сетевого трафика с использованием iptables в ispmanager:

cat /etc/ispiptable.conf
# Generated by iptables-save v1.8.7 on Sat May 18 23:58:32 2024
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:ispmgr_allow_ip - [0:0]
:ispmgr_allow_sub - [0:0]
:ispmgr_deny_ip - [0:0]
:ispmgr_deny_sub - [0:0]
:ispmgr_limit_req - [0:0]
# Применение цепочек для фильтрации трафика
-A INPUT -j ispmgr_deny_ip
-A INPUT -j ispmgr_allow_ip
-A INPUT -j ispmgr_allow_sub
-A INPUT -j ispmgr_deny_sub
-A INPUT -m set --match-set ispmgr_limit_req src -j DROP
# Разрешение доступа к порту 1501 для субсети
-A ispmgr_allow_sub -p tcp -m tcp --dport 1501 -j ACCEPT
COMMIT
# Completed on Sat May 18 23:58:32 2024

Из содержимого файла /etc/ispiptable.conf понятно, что все порты открыты. Это небезопасно. Для безопасной работы ispmanager нужно применить более строгие правила. 

Вот как можно настроить iptables:

Открыть порты:

  • SMTP. Порты 25, 465, 587, протокол: TCP

  • IMAP. Порты 143, 993, протокол: TCP

  • POP3. Порты 110, 995, протокол: TCP

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

  • Ispmanager. Порт 1500, Протокол: TCP

  • HTTP. Порт 80, Протокол: TCP

  • HTTPS. Порт 443, Протокол: TCP

  • SSH. Порт 22, Протокол: TCP

  • FTP. Порт 21, Протокол: TCP

  • FTP пассивный режим. Диапазон 49152:65534, Протокол: TCP

  • DNS. Порт 53, Протокол: UDP

Чтобы открыть доступ к этим портам:

1. Добавьте правила для предоставления доступа к портам почтового сервера.

   Для IPv4:

# Разрешение входящих соединений на порт 21 для FTP
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# Разрешение входящих соединений на порты 49152-65534 для пассивного режима FTP
sudo iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT
# Разрешение входящих соединений на порт 22 для SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Разрешение входящих соединений на порт 80 для HTTP
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Разрешение входящих соединений на порт 443 для HTTPS
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Разрешение входящих соединений на порт 1500 для ISPmanager
sudo iptables -A INPUT -p tcp --dport 1500 -j ACCEPT
# Разрешение входящих соединений на порт 53 для DNS
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
# Разрешение входящих соединений на порт 25 для SMTP
sudo iptables -A INPUT -p tcp --dport 25 -j ACCEPT
# Разрешение входящих соединений на порт 465 для SMTPS
sudo iptables -A INPUT -p tcp --dport 465 -j ACCEPT
# Разрешение входящих соединений на порт 587 для Submission
sudo iptables -A INPUT -p tcp --dport 587 -j ACCEPT
# Разрешение входящих соединений на порт 143 для IMAP
sudo iptables -A INPUT -p tcp --dport 143 -j ACCEPT
# Разрешение входящих соединений на порт 993 для IMAPS
sudo iptables -A INPUT -p tcp --dport 993 -j ACCEPT
# Разрешение входящих соединений на порт 110 для POP3
sudo iptables -A INPUT -p tcp --dport 110 -j ACCEPT
# Разрешение входящих соединений на порт 995 для POP3S
sudo iptables -A INPUT -p tcp --dport 995 -j ACCEPT
# Разрешение установленных соединений
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Разрешение входящих соединений на localhost
sudo iptables -A INPUT -i lo -j ACCEPT
# Установка политики по умолчанию для цепочки INPUT на DROP
sudo iptables -P INPUT DROP

Для IPv6:

# Разрешить входящие соединения на порт 21 для FTP.
sudo ip6tables -A INPUT -p tcp --dport 21 -j ACCEPT
# Разрешить входящие соединения на порты 49152-65534 для пассивного режима FTP.
sudo ip6tables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT
# Разрешить входящие соединения на порт 22 для SSH.
sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
# Разрешить входящие соединения на порт 80 для HTTP.
sudo ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
# Разрешить входящие соединения на порт 443 для HTTPS.
sudo ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
# Разрешить входящие соединения на порт 1500 для ISPmanager.
sudo ip6tables -A INPUT -p tcp --dport 1500 -j ACCEPT
# Разрешить входящие соединения на порт 53 для DNS.
sudo ip6tables -A INPUT -p udp --dport 53 -j ACCEPT
# Разрешить входящие соединения на порт 25 для SMTP.
sudo ip6tables -A INPUT -p tcp --dport 25 -j ACCEPT
# Разрешить входящие соединения на порт 465 для SMTPS.
sudo ip6tables -A INPUT -p tcp --dport 465 -j ACCEPT
# Разрешить входящие соединения на порт 587 для Submission.
sudo ip6tables -A INPUT -p tcp --dport 587 -j ACCEPT
# Разрешить входящие соединения на порт 143 для IMAP.
sudo ip6tables -A INPUT -p tcp --dport 143 -j ACCEPT
# Разрешить входящие соединения на порт 993 для IMAPS.
sudo ip6tables -A INPUT -p tcp --dport 993 -j ACCEPT
# Разрешить входящие соединения на порт 110 для POP3.
sudo ip6tables -A INPUT -p tcp --dport 110 -j ACCEPT
# Разрешить входящие соединения на порт 995 для POP3S.
sudo ip6tables -A INPUT -p tcp --dport 995 -j ACCEPT
# Разрешить установленные соединения и связанные пакеты.
sudo ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Разрешить локальные петлевые соединения (localhost).
sudo ip6tables -A INPUT -i lo -j ACCEPT
# Установить политику по умолчанию для цепочки INPUT на DROP (блокировать все входящие соединения).
sudo ip6tables -P INPUT DROP

2. Проверьте, что правила добавлены.

Для IPv4:

sudo iptables -L -vn

Для Ipv6:

sudo ip6tables -L -vn

3. Сохраните изменения:

 Для IPv4:

sudo iptables-save > /etc/ispiptable.conf

Для IPv6:

sudo ip6tables-save > /etc/ispip6table.conf

Теперь ваш почтовый сервер защищен от несанкционированного доступа и будет работать корректно.

Настройка Fail2ban для Exim и Dovecot

Fail2ban автоматически реагирует на подозрительные активности и предотвращает брутфорс-атаки. 

Установка Fail2ban.

В интерфейсе ispmanager:

В командной строке:

sudo apt-get install fail2ban

Настройка конфигурации Fail2ban в интерфейсе ispmanager:

1. Войдите в интерфейс ispmanager.

2. Перейдите в раздел «Мониторинг и журналы».

3. Выберите «Сетевые службы».

Сетевые службы:

Мониторинг и журналы > Сетевые службы» /></p>

<p>Мониторинг и журналы > <strong>Сетевые службы</strong></p>

<p>3. Отметьте нужный сервис, который вы хотите защитить — например, <code>sshd</code>. Нажмите кнопку «Правила Fail2ban». Откроется страница «Правила службы». </p>

<p>4. Выберите соответствующий сервис — в нашем примере <code>sshd</code> и активируйте правило, нажав соответствующую кнопку, как показано в примерах.</p>

<p>Правила службы: </p>

<p><img src=apt install rsyslog

2. Создание файла /var/log/mail.log и установка прав:

touch /var/log/mail.log && chown syslog:adm /var/log/mail.log

3. Повторный перезапуск rsyslog и dovecot:

sudo systemctl restart rsyslog dovecot

4. Проверка работы лога:

tail -f  /var/log/mail.log
Jun 17 22:31:02 mail dovecot: master: Warning: Killed with signal 15 (by pid=3037075 uid=0 code=kill)
Jun 17 22:31:03 mail dovecot: master: Dovecot v2.3.16 (7e2e900c1a) starting up for imap, pop3 (core dumps disabled)
Jun 17 22:31:03 mail dovecot: config: Warning: /etc/dovecot/conf.d/90-plugin.conf line 12: Global setting mail_plugins won't change the setting inside an earlier filter at /etc/dovecot/conf.d/15-lda.conf line 47 (if this is intentional, avoid this warning by moving the global setting before /etc/dovecot/conf.d/15-lda.conf line 47)

Основной лог ведется, не вижу смысла в детальном его анализе, так как это не является критичным.

5. Перезапуск fail2ban:

sudo fail2ban-client restart

После выполнения этих шагов все правила заработали. Проверка статуса Fail2ban показала следующее:

sudo fail2ban-client status
Status
|- Number of jail:  	5
`- Jail list: 	dovecot, exim-isp, exim-spam, sieve, sshd

Настройка конфигурации Fail2ban в командной строке

Произведите изменения в файле /etc/fail2ban/jail.local:

# ispmanager start
[sshd]
maxretry = 5
enabled = true
 
backend = systemd
[exim-isp]
port   = smtp,465,submission
logpath = %(exim_main_log)s
maxretry = 3
enabled = true
 
[exim-spam]
port   = smtp,465,submission
logpath = %(exim_main_log)s
maxretry = 3
enabled = true
 
[dovecot]
port	= pop3,pop3s,imap,imaps,submission,465,sieve
logpath = %(dovecot_log)s
backend = %(dovecot_backend)s
maxretry = 3
enabled = true
 
[sieve]
port   = smtp,465,submission
logpath = %(dovecot_log)s
backend = %(dovecot_backend)s
maxretry = 3
enabled = true
# ispmanager end

Чтобы предотвратить блокировку вашего IP Fail2ban, добавьте ваш IP в секцию ignoreip в файле конфигурации [DEFAULT], как показано в примере ниже. Замените 1.2.3.4 на ваш текущий IP-адрес:

[DEFAULT]
bantime = 600
ignoreip = 1.2.3.4
maxretry = 3

Сохраните изменения и перезапустите правила в Fail2ban с помощью команды sudo fail2ban-client reload.

4. Перезапустите Fail2ban с помощью команды:

sudo service fail2ban restart

Теперь Fail2ban будет следить за логами Exim и Dovecot, блокируя подозрительные IP-адреса. Это обезопасит ваш почтовый сервер.

Безопасность RoundCube

RoundCube — это веб-почтовый клиент, который предоставляет доступ к электронной почте через веб-интерфейс и программное обеспечение с открытым исходным кодом, уязвимости которого часто публикуются в базах данных, таких как exploit-db.com. Описанные в этой главе меры помогают минимизировать риск эксплуатации этих уязвимостей злоумышленниками. 

Ограничение доступа к RoundCube это:

Безопасность. Ограничение доступа помогает предотвратить несанкционированный доступ к почтовым ящикам и конфиденциальной информации.

Защита от спама и фишинга. Ограничение доступа помогает предотвратить злоумышленникам использование RoundCube для массовой рассылки спама или фишинговых писем.

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

Соответствие стандартам безопасности. Многие организации обязаны соблюдать определенные стандарты безопасности и конфиденциальности данных. Ограничение доступа к почтовым клиентам помогает соответствовать этим требованиям.

Список эксплойтов:

Список эксплойтов RoundCube

Список эксплойтов RoundCube

Рекомендации по обеспечению безопасности в RoundCube. 

Регулярно обновляйте RoundCube и все его зависимости для устранения возможности эксплуатации возможных уязвимостей.

В данном примере рассмотрю методы ограничения доступа по IP-адресам, конфигурацию web-сервера Nginx, .htaccess файла и изменение параметров в самом RoundCube и общие рекомендации. 

Настройка web-сервера (Nginx):

Для Nginx можно использовать директиву allow и deny в конфигурационном файле:

cat /etc/nginx/vhosts-includes/roundcube-nginx.conf
location /roundcube {
 	allow 1.2.3.4;
 	allow 192.168.1.0/24;
 	deny all;
 	alias /var/lib/roundcube;
 	index index.php;
}
location ~* ^/roundcube/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
 	alias /var/lib/roundcube/$1;
 	error_page 404 @apache;
}
location ~ ^/roundcube/(.+\.php)$ {
 	allow 1.2.3.4;
 	allow 192.168.1.0/24;
 	deny all;
 	alias /var/lib/roundcube/$1;
 	fastcgi_pass unix:/var/run/php-fpm.www-data.sock;
 	fastcgi_index index.php;
 	fastcgi_param SCRIPT_FILENAME $request_filename;
 	fastcgi_param PHP_VALUE "display_errors=off \n display_startup_errors=off";
 	include fastcgi_params;
 	error_page 502 = @apache;
 	error_page 404 = @apache;
}
location @apache {
 	error_log /dev/null crit;
 	proxy_pass http://127.0.0.1:8080;
 	proxy_redirect http://127.0.0.1:8080 /;
 	proxy_set_header Host $host;
 	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 	proxy_set_header X-Forwarded-Proto $scheme;
}

Для ограничения доступа к RoundCube достаточно использовать следующие настройки — замените 1.2.3.4 и 192.168.1.0/24 на IP-адреса администраторов.

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

sudo chattr +i /etc/nginx/vhosts-includes/roundcube-nginx.conf

Настройка самого RoundCube. В конфигурационном файле RoundCube /etc/roundcube/config.inc.php можно добавить проверку IP-адреса:

$allowed_ips = array('1.2.3.4', '192.168.1.0/24');
if (!in_array($_SERVER['REMOTE_ADDR'], $allowed_ips)) {
    die('Access denied');
}

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

sudo chattr +i /etc/roundcube/config.inc.php

Настройка .htaccess файла:

В файле .htaccess можно указать разрешенные IP-адреса:


    RewriteEngine on
    RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4$
    RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
    RewriteRule ^ - [F,L]

Этот сценарий актуален, когда RoundCube работает под управлением Apache. При настройках по умолчанию в ispmanager файл .htaccess не работает.

В этой главе описаны лишь базовые методы обеспечения безопасности RoundCube. Если есть вопросы — задавайте в комментариях.

Профили AppArmor для Exim, Dovecot, RoundCube

AppArmor изолирует каждое приложение и ограничивает доступ приложений к системным ресурсам. Это уменьшает риски несанкционированного доступа. 

Важно! Невозможно учесть все детали и создать универсальные правила AppArmor для каждого случая.

Скрипт и профили AppArmor распространяются под лицензией GPL-3.0. Загружая скрипт, вы делаете это на свой страх и риск и несете ответственность за его использование.

Итоги и рекомендации

Советы по дальнейшей настройке и обслуживанию почтового сервера:

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

Использовали:

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

Сетевой фильтр с настройкой iptables — используется для управления сетевыми соединениями и предотвращения несанкционированного доступа.

Fail2ban для защиты от брутфорс-атак — он автоматически блокирует вредоносные IP-адреса. 

Greylisting, DNSBL, SpamAssassin для борьбы со спамом.

ClamAV для антивирусной защиты —  обеспечивает сканирование и защиту от вредоносного ПО. А еще дополнительно ограничивает доступ к RoundCube — оставляет его только для пользователей из белого списка.

Пять рутин, чтобы обеспечить безопасность почтового сервера:

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

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

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

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

Вот еще мои статьи на Хабре по теме информационной безопасности:

© Habrahabr.ru