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

Защита сервера 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
Автор
Редакция

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

Как использовать Android как модем по USB
Руководство

Как использовать Android как модем по USB

Установить Linux на Chromebook: пошаговый гид
Chromebook

Установить Linux на Chromebook: пошаговый гид

smartmontools: тест и мониторинг дисков
Инструменты

smartmontools: тест и мониторинг дисков

Защита от Logjam на Ubuntu/Debian
Безопасность

Защита от Logjam на Ubuntu/Debian

Dark Sky: гиперлокальный прогноз дождя
Погода

Dark Sky: гиперлокальный прогноз дождя

Защита SSH на CentOS 7 с WiKID 2FA
Безопасность

Защита SSH на CentOS 7 с WiKID 2FA