如何保护您的Debian或Ubuntu服务器免受Logjam攻击

本教程介绍了为保护Ubuntu或Debian Linux服务器免受最近检测到的Logjam攻击而需要采取的步骤。日志...

本教程介绍了如何保护您的Ubuntu或Debian Linux Server免受最近检测到的Logjam攻击的步骤。 Logjam是针对Diffie-Hellman密钥交换的攻击,用于流行的加密原型如HTTPS,TLS,SMTPS,SSH等。 详细的描述可以在这里找到https://weakdh.org/

本教程与Debian和Ubuntu上的ISPConfig 3设置兼容。

以下步骤必须以root用户身份执行。

生成独特的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

Apache

首先,我将根据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服务器上的输出是:

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

所以我不能在这个服务器上设置DH组。 第一部分和第二部分是彼此独立的,第一部分已经禁用弱密码来保护您的服务器,并且将在没有DH组的情况下工作。 如果您的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

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

编辑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

最后重新启动dovecot

service dovecot restart

纯ftpd

在Debian和Ubuntu上保护纯ftpd有点复杂,因为/ usr / sbin / pure-ftpd-wrapper脚本不支持纯ftpd用于设置SSL密码套件的-J开关。 第一步是在包装器脚本中添加对-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