本教程介绍了如何保护您的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