如何保护您的 Debian 或 Ubuntu 服务器免受 Logjam 攻击
本教程描述了保护您的 Ubuntu 或 Debian Linux 服务器免受最近检测到的 Logjam 攻击所需采取的步骤。 Logjam 是针对 Diffie-Hellman 密钥交换的攻击,该密钥交换用于流行的加密协议,如 HTTPS、TLS、SMTPS、SSH 等。可以在此处找到详细说明 https://weakdh.org/。
本教程与 Debian 和 Ubuntu 上的 ISPConfig 3 设置兼容。
必须以 root 用户身份在 shell 上执行以下步骤。
生成唯一的 DH 组
保护您的服务器的第一步是使用 openssl 命令生成一个唯一的 DH 组。我将在 /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 只是一长行,所以不要添加换行符!
第二部分是在apache中设置DH组。 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"
并重新启动apache:
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 版本。运行此命令以获取 shell 上的 dovecot 版本信息:
dovecot --version
当版本为 2.2.6 或更高版本时,添加以下附加行:
ssl_prefer_server_ciphers = yes
当版本为 2.2.7 或更高版本时,添加第三行:
ssl_dh_parameters_length = 2048
最后重启鸽舍
service dovecot restart
纯ftpd
在 Debian 和 Ubuntu 上保护 pure-ftpd 有点复杂,因为 /usr/sbin/pure-ftpd-wrapper 脚本不支持开箱即用的 -J 开关,pure-ftpd 使用它来设置 SSL 密码套件.第一步是在包装脚本中添加对 -J 选项的支持。打开文件:
nano /usr/sbin/pure-ftpd-wrapper
并向下滚动到该行:
'TLS' => ['-Y %d', \&parse_number_1],
现在立即添加此新行:
'TLSCipherSuite' => ['-J %s', \&parse_string],
然后使用 nano 创建(或编辑)文件 /etc/pure-ftpd/conf/TLSCipherSuite:
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/