Гид по технологиям

Защита сервера Ubuntu/Debian от уязвимости Logjam

5 min read Безопасность Обновлено 03 Oct 2025
Защита от Logjam на Ubuntu/Debian
Защита от Logjam на Ubuntu/Debian

Этот пошаговый гид показывает, как защитить серверы Ubuntu и Debian (включая установки ISPConfig 3) от уязвимости Logjam — атаки на обмен ключами Diffie‑Hellman. Вы сгенерируете уникальные DH‑параметры, настроите Apache, Nginx, Postfix, Dovecot и Pure‑ftpd, а также получите чек‑лист для проверки и варианты действий при несовместимости версий.

Что такое Logjam

Logjam — уязвимость в протоколе обмена ключами Diffie‑Hellman (DHE), которая позволяет атакующему заставить сервер и клиента использовать слабые, заранее вычисленные параметры DH и дешифровать трафик. Кратко: слабые DH‑параметры + старые реализации криптографии = риск компрометации TLS/HTTPS/SMTPS/SSH и других протоколов. Подробно: https://weakdh.org/.

Короткие определения

  • Diffie‑Hellman (DHE): алгоритм для согласования секретного ключа по незащищённому каналу.
  • ECDHE: вариант на эллиптических кривых (обычно безопаснее и быстрее).
  • DH‑параметры (dhparams): наборы чисел, определяющие группу для DHE; для защиты нужна уникальная, длинная группа (рекомендуется 2048 бит и выше).

Совместимость и требования

  • Руководство применимо к Debian и Ubuntu. Тесты и команды выполняются от root в shell.
  • Для привязки dhparams в Apache необходимы: Apache ≥ 2.4.8 и OpenSSL ≥ 1.0.2. Если версии ниже — можно отключить слабые шифры и всё равно повысить безопасность, но привязка DH‑параметров потребует апгрейда.

Важное: не выдумывайте параметры: используйте openssl для генерации собственной dhparams.pem и храните файл с правами 600.

Генерация уникальной DH‑группы

Создайте каталог и права, если его нет:

mkdir -p /etc/ssl/private  
chmod 710 /etc/ssl/private

Сгенерируйте файл dhparams.pem и установите безопасные права:

cd /etc/ssl/private  
openssl dhparam -out dhparams.pem 2048  
chmod 600 dhparams.pem

Примечание: генерация 2048‑битной группы может занять несколько минут. Для ещё более высокой стойкости используйте 4096 бит, но учтите большую нагрузку на CPU.

Apache

  1. Добавьте безопасный набор шифров в /etc/apache2/mods-available/ssl.conf:
nano /etc/apache2/mods-available/ssl.conf

Вставьте или измените эти строки (SSLCipherSuite — одна длинная строка, не разбивайте её):

SSLProtocol             all -SSLv2 -SSLv3  

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

SSLHonorCipherOrder     on
  1. Если ваш Apache ≥ 2.4.8 и OpenSSL ≥ 1.0.2, добавьте привязку DH‑параметров:

Проверьте версии:

apache2 -v

Пример вывода:

root@server1:/etc/apache2# apache2 -v  
Server version: Apache/2.2.22 (Debian)  
Server built: Dec 23 2014 22:48:29

Проверьте OpenSSL:

openssl version

Пример вывода:

root@server1:/# openssl version  
OpenSSL 1.0.1e 11 Feb 2013

Если версии удовлетворяют требованиям, отредактируйте ssl.conf и добавьте:

SSLOpenSSLConfCmd DHParameters "/etc/ssl/private/dhparams.pem"

и перезапустите Apache:

service apache2 restart

Если версии старые — либо обновите OpenSSL/Apache (желательно через пакетную систему или безопасно соберите из исходников), либо примените только настройку шифров (SSLCipherSuite), что уже значительно снижает риск.

Nginx

Отредактируйте /etc/nginx/nginx.conf:

nano /etc/nginx/nginx.conf

В секции http { … } добавьте или замените:

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

ssl_prefer_server_ciphers on;

ssl_dhparam /etc/ssl/private/dhparams.pem;

Перезапустите Nginx:

service nginx restart

Postfix

Установите безопасный список шифров и укажите файл DH‑параметров:

postconf -e "smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA"  
postconf -e "smtpd_tls_dh1024_param_file = /etc/ssl/private/dhparams.pem"

Перезапустите Postfix:

service postfix restart

Dovecot

Отредактируйте /etc/dovecot/dovecot.conf:

nano /etc/dovecot/dovecot.conf

Добавьте строку (после ssl_protocols):

ssl_cipher_list=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

Проверьте версию dovecot:

dovecot --version
  • Если версия ≥ 2.2.6, добавьте:
ssl_prefer_server_ciphers = yes
  • Если версия ≥ 2.2.7, добавьте также:
ssl_dh_parameters_length = 2048

Перезапустите dovecot:

service dovecot restart

Pure‑ftpd

На Debian/Ubuntu оболочка /usr/sbin/pure-ftpd-wrapper не поддерживает опцию -J по умолчанию. Выполните следующие шаги:

  1. Отредактируйте обёртку:
nano /usr/sbin/pure-ftpd-wrapper

Найдите строку:

'TLS' => ['-Y %d', \&parse_number_1],

и добавьте сразу после неё:

'TLSCipherSuite' => ['-J %s', \&parse_string],
  1. Создайте или отредактируйте файл конфигурации шифров:
nano /etc/pure-ftpd/conf/TLSCipherSuite

Вставьте список шифров (замените существующий, если он есть):

ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
  1. Перезапустите pure‑ftpd (имя сервиса может отличаться в зависимости от пакета):
service pure-ftpd-mysql restart

Проверка и тестирование

Рекомендованные проверки:

  • Внешние проверки: https://weakdh.org/ и инструменты вроде testssl.sh для полного аудита TLS.
  • Локальные проверки:
    • Проверить версии apache/openssl/dovecot: команды apache2 -v, openssl version, dovecot --version.
    • Проверить, что SSLv2/SSLv3 отключены и что сервер предпочитает свои шифры.
    • Попробовать подключиться с использованием DHE‑наборов и убедиться, что используются параметры ≥2048 бит.

Пример команды теста TLS‑соединения (проверить сертификат и наборы шифров):

openssl s_client -connect example.com:443 -cipher "DHE" -brief

(замените example.com на ваш хост); отсутствие успешного соединения через слабые DHE‑наборы — желательный результат.

Контрольный список (роль‑ориентированный)

Для системного администратора:

  • Сгенерировать /etc/ssl/private/dhparams.pem и установить chmod 600.
  • Обновить конфигурации веб‑/почтовых/ftp‑серверов как описано.
  • Перезапустить сервисы и проверить логи на ошибки.

Для веб‑администратора:

  • Проверить, что SSLCipherSuite/ssl_ciphers обновлены.
  • При возможности настроить SSLOpenSSLConfCmd для привязки dhparams.

Для почтового администратора:

  • Применить postconf для исключения слабых шифров.
  • Убедиться, что dovecot и postfix согласованы по шифрам.

Когда эти меры не помогут

  • Если клиенты используют крайне старые ОС/браузеры, не поддерживающие современные шифры. В этом случае либо обновите клиенты, либо допустите понижение безопасности для совместимости, но это рисковано.
  • Если у вас компрометированы приватные ключи сервера — замена DH‑параметров не спасёт; нужно заменить сертификаты и ключи.
  • Если серверы используют сторонние аппаратные TLS‑акселераторы с собственными устаревшими наборами шифров — требуется обновление/перенастройка оборудования.

Альтернативные подходы

  • Отключить DHE совсем и разрешить только ECDHE и AEAD‑шифры (современный и быстрый вариант). Минус: совместимость со старой клиентурой.
  • Принудительное использование TLS 1.2/1.3, где DHE не требуется, и ECDHE/рабочие наборы сильнее.
  • Централизованное управление конфигурациями (Ansible/Chef/Puppet) для массового применения безопасных настроек.

Мини‑методология внедрения (быстрый план)

  1. Сделать бэкап конфигураций.
  2. Сгенерировать dhparams.pem.
  3. Применить конфигурации сначала на тестовом узле.
  4. Провести тесты (testssl.sh, openssl s_client).
  5. Раскатать на продакшн и мониторить логи.

Критерии приёмки

  • SSLv2 и SSLv3 отключены.
  • Сервер использует предпочтительные серверные шифры (server‑cipher order).
  • На стороне сервера нет слабых DHE с длиной < 2048 бит.
  • Все изменённые сервисы успешно перезапускаются и обслуживают TLS‑подключения.

Простая диагностическая схема (рекомендации по решению проблем)

flowchart TD
  A[Проверить версии Apache/OpenSSL] --> B{Apache >= 2.4.8 и OpenSSL >= 1.0.2?}
  B -- Да --> C[Добавить SSLOpenSSLConfCmd и привязать /etc/ssl/private/dhparams.pem]
  B -- Нет --> D[Обновить пакеты или применить только набор шифров]
  D --> E[Отключить слабые шифры и задокументировать ограничения]
  C --> F[Перезапустить сервис и протестировать]
  E --> F
  F --> G[Мониторинг и внешние тесты]

Факто‑бокс

  • Рекомендуемая длина DH‑парамметров: 2048 бит (минимум). 4096 бит — сильнее, но дороже по CPU.
  • Порог для SSLOpenSSLConfCmd: Apache 2.4.8, OpenSSL 1.0.2.
  • Основной внешний ресурс по уязвимости: https://weakdh.org/.

Однострочный глоссарий

  • Logjam: атака, заставляющая использовать слабые общие DH‑параметры; приводит к возможности расшифровки трафика.
  • DH: Diffie‑Hellman, способ согласования секретного ключа.
  • DH‑параметры (dhparams): числа, задающие группу для DHE.

Резюме

Генерация собственной dhparams.pem и обновление конфигураций шифров в веб‑ и почтовых сервисах — практический и эффективный способ снизить риск эксплуатации Logjam. При старых версиях Apache/OpenSSL важно либо обновиться, либо компенсировать отключением слабых шифров и дополнительным мониторингом.

Ссылки

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Вернуть классический регулятор громкости в Windows 11
Windows

Вернуть классический регулятор громкости в Windows 11

Как исправить ошибку msvcp140.dll — руководство
Windows

Как исправить ошибку msvcp140.dll — руководство

Автозапуск приложений на Android TV
Android TV

Автозапуск приложений на Android TV

Исправление ошибки «Игра не может запуститься» на Xbox 360
Руководства

Исправление ошибки «Игра не может запуститься» на Xbox 360

Sharpen и Denoise в Google Photos — как пользоваться
Фото

Sharpen и Denoise в Google Photos — как пользоваться

Как удалить профиль Netflix быстро
Руководство

Как удалить профиль Netflix быстро