Как защитить свой сервер Debian или Ubuntu от атаки Logjam
В этом руководстве описываются шаги, которые необходимо предпринять для защиты вашего Ubuntu или Debian Linux Server от недавно обнаруженной атаки Logjam. Logjam — это атака на обмен ключами Диффи-Хеллмана, который используется в популярных протоколах шифрования, таких как HTTPS, TLS, SMTPS, SSH и других. Подробное описание можно найти здесь https://weakdh.org/.
Это руководство совместимо с настройками ISPConfig 3 в Debian и Ubuntu.
Следующие шаги должны быть выполнены от имени пользователя root в оболочке.
Создайте уникальную группу DH
Первым шагом для защиты вашего сервера является создание уникальной группы DH с помощью команды openssl. Я создам файл в каталоге /etc/ssl/private/. Если у вас нет этого каталога на вашем сервере, создайте его с помощью следующих команд:
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
Апач
Сначала я добавлю набор безопасных шифров на основе рекомендаций от weakdh.org. Откройте файл /etc/apache2/mods-available/ssl.conf в редакторе:
nano /etc/apache2/mods-available/ssl.conf
и измените или добавьте эти строки:
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
Обратите внимание, что SSLCipherSuide — это всего лишь одна длинная строка, поэтому не добавляйте разрывы строк!
Вторая часть — установить группу DH в apache. Параметр конфигурации SSLOpenSSLConfCmd доступен только в apache 2.4.8 или новее, а также требует openssl 1.0.2 или новее, поэтому мы должны сначала проверить, поддерживает ли его наша версия apache и openssl:
apache2 -v
Вывод на моем сервере Debian 7:
:/etc/apache2# apache2 -v
Server version: Apache/2.2.22 (Debian)
Server built: Dec 23 2014 22:48:29
Теперь я проверю openssl:
openssl version
Вывод в моей системе:
:/# openssl version
OpenSSL 1.0.1e 11 Feb 2013
Поэтому я не могу установить группу DH на этом сервере. Первая и вторая части не зависят друг от друга, в первой части уже отключены слабые шифры для защиты вашего сервера и она будет работать без группы DH. Если вы хотите установить последний источник формы OpenSSL, ознакомьтесь с этим руководством. Если ваша версия Apache > 2.4.8 и OpenSSL > 1.0.2, снова отредактируйте файл /etc/apache2/mods-available/ssl.conf:
nano /etc/apache2/mods-available/ssl.conf
Добавьте строку:
SSLOpenSSLConfCmd DHParameters "/etc/ssl/private/dhparams.pem"
и перезапустите апач:
service apache2 restart
Nginx
Отредактируйте файл конфигурации Nginx /etc/nginx/nginx.conf.
nano /etc/nginx/nginx.conf
Добавьте или замените следующие параметры в разделе httpd { .... }:
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
Постфикс
Запустите эти команды, чтобы установить безопасный набор шифров и группу 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"
И перезапустите постфикс:
service postfix restart
Голубятня
Отредактируйте файл конфигурации dovecot /etc/dovecot/dovecot.conf.
nano /etc/dovecot/dovecot.conf
и добавьте строку:
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
сразу после строки ssl_protocols.
Для остальных параметров нам нужно знать версию голубятни. Запустите эту команду, чтобы получить информацию о версии dovecot в оболочке:
dovecot --version
Если версия 2.2.6 или выше, добавьте эту дополнительную строку:
ssl_prefer_server_ciphers = yes
Если версия 2.2.7 или выше, добавьте эту третью строку:
ssl_dh_parameters_length = 2048
Наконец перезапустите голубятню
service dovecot restart
Чистый ftpd
Защита pure-ftpd в Debian и Ubuntu немного сложнее, так как скрипт /usr/sbin/pure-ftpd-wrapper не поддерживает ключ -J из коробки, который используется pure-ftpd для установки SSL Cipher Suite. . Первый шаг – добавить поддержку параметра -J в скрипт-оболочку. Откройте файл:
nano /usr/sbin/pure-ftpd-wrapper
И прокрутите вниз до строки:
'TLS' => ['-Y %d', \&parse_number_1],
Теперь добавьте эту новую строку сразу после этого:
'TLSCipherSuite' => ['-J %s', \&parse_string],
Затем создайте (или отредактируйте, если он существует) файл /etc/pure-ftpd/conf/TLSCipherSuite с помощью nano:
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
Когда файл уже существует и содержит некоторые шифры, замените шифры на приведенные выше. Затем сохраните файл и перезапустите pure-ftpd:
service pure-ftpd-mysql restart
Ссылки
- https://weakdh.org/