Сканирование уязвимости nmap сообщает об уязвимости "smtps on port 465 ssl-dh-params" на веб-сервере Ubuntu 20.04. Как закрыть уязвимость?

Сканирование уязвимости nmap сообщает об уязвимости "smtps on port 465 ssl-dh-params" на веб-сервере Ubuntu 20.04. Как закрыть уязвимость?

Я использую почтовый/веб-сервер Ubuntu 20.04 LEMP (Linux, Nginx, MariaDb, PHP). Я также провожу некоторые тесты уязвимости nmap с моей клиентской машины MacOS. На MacOS я использую Oh My Zsh! с включенным плагином nmap. Чтобы провести некоторые тесты уязвимости на моем сервере Ubuntu с моей клиентской машины MacOS, я ввел команду:

nmap_check_for_vulns my.server.ip.address

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

nmap --script=vuln

После ввода команды с IP-адресом моего сервера nmap сообщил о следующих уязвимостях:

465/tcp   open  smtps
| ssl-dh-params:
|   VULNERABLE:
|   Anonymous Diffie-Hellman Key Exchange MitM Vulnerability
|     State: VULNERABLE
|       Transport Layer Security (TLS) services that use anonymous
|       Diffie-Hellman key exchange only provide protection against passive
|       eavesdropping, and are vulnerable to active man-in-the-middle attacks
|       which could completely compromise the confidentiality and integrity
|       of any data exchanged over the resulting session.
|     Check results:
|       ANONYMOUS DH GROUP 1
|             Cipher Suite: TLS_DH_anon_WITH_AES_128_CBC_SHA
|             Modulus Type: Safe prime
|             Modulus Source: Unknown/Custom-generated
|             Modulus Length: 2048
|             Generator Length: 8
|             Public Key Length: 2048
|     References:
|_      https://www.ietf.org/rfc/rfc2246.txt

На сервере вывод sudo -ss lnptбудет следующим:

LISTEN                        0                             100                                                        0.0.0.0:465                                                      0.0.0.0:*                            users:(("smtpd",pid=586529,fd=6),("master",pid=2078,fd=29))

Предоставленная ссылка nmaphttps://www.ietf.org/rfc/rfc2246.txt, не содержит ссылок на эту КОНКРЕТНУЮ уязвимость, которую я смог найти.

Мой вопрос: что означает эта уязвимость, какой процесс ее использует и как я могу устранить эту уязвимость на моем сервере Ubuntu 20.04, не отключая порт 456? Нужно ли мне исправлять проблему Диффи-Хеллмана на SMTP-серверах postfix/dovecot, и если да, то как это сделать?

решение1

Анонимный TLS — это тип конфигурации, также известный как «TLS без сертификатов». Нет цепочки доверия для пары ключей сервера, поэтому нет абсолютно никакой защиты от атак MitM. Сертификаты были придуманы именно для борьбы с этой проблемой.

Сопутствующая страница документации Postfix:TLS_README.

SMTP-сервер Postfix (служба, работающая на TCP-порту 465) поддерживает работу без сертификатов, нотолько для внутренних хостов:

Для серверов, которые не являются общедоступными MX-хостами в Интернете, Postfix поддерживает конфигурации без сертификатов.

Прежде всего, это единственный режим, который включается при установке smtpd_tls_cert_file = none, но вы не должны использовать его для публичного сервера. Вместо этого используйте надлежащий глобально доверенный сертификат и пару ключей. Подойдет тот, что от Let's Encrypt. Его можно настроить следующим образом:

smtpd_tls_chain_files = /.../rsachain.pem
smtpd_tls_cert_file =
smtpd_tls_key_file =

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

Обратите внимание, что TLS 1.3 не поддерживает работу без сертификатов. Поэтому один из способов избавиться от предупреждения (на самом деле хороший) — отключить все старое:

smtpd_tls_protocols = >=TLSv1.3

Проблема в том, что некоторые старые или несоответствующие требованиям клиенты (достаточно старые, чтобы не поддерживать TLS v1.3) не смогут установить TLS-соединение.

Другой способ — напрямую отключить работу без сертификата:

smtpd_tls_exclude_ciphers = aNULL

В любом случае, если предупреждение nmap было выдано просто потому, что Postfix не исключил этот aNULL, то это ложная тревога, согласно руководству Postfix:

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

Причиной этого является следующее соображение.

Даже когда эта штука отключена на сервере, есть возможность легкого понижения версии, которая представляет собой MitM-прокси, который публикует только этот набор aNULL и TLS v1.2 (или ниже). Единственный способ полностью защититься от этой проблемы — настроитьклиентыне использовать анонимные шифры и/или уязвимые протоколы и проверять сертификат сервера. Вы должны настроить это на каждом клиенте индивидуально, поэтому нет смысла отключать это на сервере.

решение2

Самая высокая версияPostfix в Ubuntu 20.04 Serverв настоящее время Postfixверсия 3.4.13.Самая стабильная версия postfix — Postfix v3.6, поэтому устранение этих уязвимостей зависит от вашей версии postfix.

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

В Postfix ниже версии 3.6Вы можете сделать это, отредактировав свой /etc/postfix/main.cfфайл.

sudo nano /etc/postfix/main.cf

и добавив !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 !TLSv1.2к следующим строкам:

smtpd_tls_mandatory_protocols = 
smtpd_tls_protocols = 
smtp_tls_mandatory_protocols = 
smtp_tls_protocols = 

в моем случае мне просто пришлось добавить, !TLSv1.2изменив следующие строки

smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1

к

smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1, !TLSv1.2
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1, !TLSv1.2
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1, !TLSv1.2
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1, !TLSv1.2

В Postfix ниже версии 3.6, вышеуказанные изменения должны фактически заставить Postfix принимать «только» соединения TLSv1.3 и выше, успешно устраняя эту уязвимость.

В постфиксе больше или равно v3.6Вы можете сделать это, отредактировав свой /etc/postfix/main.cfфайл.

sudo nano /etc/postfix/main.cf

и добавив >=TLSv1.3к следующим строкам:

smtpd_tls_mandatory_protocols = 
smtpd_tls_protocols = 
smtp_tls_mandatory_protocols = 
smtp_tls_protocols = 

поэтому ваша конфигурация /etc/postfix/main.cfдолжна выглядеть так:

smtpd_tls_mandatory_protocols = >=TLSv1.3
smtpd_tls_protocols = >=TLSv1.3
smtp_tls_mandatory_protocols = >=TLSv1.3
smtp_tls_protocols = >=TLSv1.3

В Postfix версии 3.6 или выше, вышеуказанные изменения должны фактически заставить Postfix принимать «только» соединения TLSv1.3 и выше, успешно устраняя эту уязвимость.

решение3

smtpsэто порт для отправки электронной почты с использованием шифрования TLS. Порт используется вашим SMTP-сервером.

Чтобы закрыть уязвимость, вам нужно изменить конфигурацию вашего SMTP-сервера. Есть два варианта:

  1. Отключите использование порта 465. Вы по-прежнему можете использовать другие порты SMTP для отправки электронной почты.
  2. Устраните проблему DH на SMTP-сервере.

Другой вариант — заблокировать порт 465 с помощью брандмауэра.

Связанный контент