root@tpe-zabbix:/usr/sbin# cat /etc/issue
Ubuntu 20.04.3 LTS \n \l
/usr/sbin/zabbix_server -V
zabbix_server (Zabbix) 5.0.15
Revision 40fb64d970 30 August 2021, compilation time: Jul 28 2021 13:09:54
Copyright (C) 2021 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.
This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/).
Compiled with OpenSSL 1.1.1f 31 Mar 2020
Running with OpenSSL 1.1.1f 31 Mar 2020
/etc/zabbix# apache2 -v
Server version: Apache/2.4.52 (Ubuntu)
Server built: 2021-09-28T11:00:45
这里的用户涉及到Zabbix前端用户、Zabbix 服务器和 Zabbix 代理之间进程用户(默认的zabbix用户),在前端用户的设置根据"权限最小化原则"进行设定。
TLS/SSL 使用公共证书和私钥的组合进行协同工作。SSL 密钥的作用是对服务端发送给客户端的数据进行加密。对于像 Apache、Postfix、Dovecot 等应用通常使用不带密码的密钥。没有密码可以让服务在没有人工干预的情况下自动启动,这通常是我们首选的方式。
openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
..........................++++++
.......++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
会要求输入密钥的保护密码(两次),正确输入后,生成的带密码的服务器密钥并将会存放在server.key文件中。
openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.secure
mv server.key.insecure server.key
不安全(没有密码)的密钥现在命名为server.key,有密码的密钥被命名成了server.key.secure
要创建没有密码保护的 CSR,请在终端提示符处运行以下命令:
openssl req -new -key server.key -out server.csr
创建过程将会要求输入密码(上面输入过的密码)。输入正确将会提示要求输入国家、省份、城市、公司、组织、域名(必填项)、电子邮箱地址。这些详细信息将会存储在server.csr文件中。
要创建自签名证书,请在终端提示符处运行以下命令:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
上述命令将提示输入之前输入过的密码。输入正确的密码后,证书将被创建并存储在server.crt
您可以通过在终端提示符下运行以下命令来安装密钥文件server.key和证书文件server.crt,或 CA 颁发的证书文件:
sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private
步骤 2 – 配置 Apache 以使用 SSL
我们已经在/etc/ss目录下创建了密钥和证书文件。现在我们只需要修改 Apache的配置使其生效。
首先,我们将为 Apache 设置 SSL/TLS 密码套件,并启用一些有助于服务器安全的高级功能,比如在 Web 服务器上启用 HTTP 严格传输安全 (HSTS),可以保护 Zabbix 前端免受协议降级攻击。设置的参数可供任何启用 SSL 的虚拟主机使用。
在/etc/apache2/conf-available
中创建文件ssl-params.conf
sudo vim /etc/apache2/conf-available/ssl-params.conf
添加以下内容到ssl-params.conf
中:
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off
接下来,让我们修改/etc/apache2/sites-available/default-ssl.conf
默认的 Apache SSL 虚拟主机文件。在修改之前,请备份原始 SSL 虚拟主机文件:
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak
现在,打开 SSL Virtual Host 文件进行调整:
sudo vim /etc/apache2/sites-available/default-ssl.conf
/etc/apache2/sites-available/default-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
根据需要对ServerAdmin 电子邮件地址、ServerName ,证书和密钥文件的路径进行调整。
修改后的配置文件应该类似于这样:
/etc/apache2/sites-available/default-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin your_email@example.com
ServerName server_domain_or_IP
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
完成后保存并关闭文件。
就目前而言,服务器提供未加密的 HTTP 和加密的 HTTPS 访问。为了更好的安全性,需要设定访问 HTTP自动重定向到 HTTPS。打开/etc/apache2/sites-available/000-default.conf
文件:
sudo vim /etc/apache2/sites-available/000-default.conf
在VirtualHost
配置块中,添加Redirect
指令,:
/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
. . .
Redirect permanent "/" "https://your_domain_or_IP/"
. . .
</VirtualHost>
启用 mod_ssl 和 mod_headers 模块:
$ sudo a2enmod ssl
$ sudo a2enmod headers
启用读取之前创建的 SSL 配置:
sudo a2enconf ssl-params
检查配置文件是否存在语法错误:
sudo apache2ctl configtest
一切就绪后,重新启动 Apache 使其生效:
sudo systemctl restart apache2
打开浏览器,https://
在地址栏中输入服务器的域名或 IP:
https://server_domain_or_IP
作为 Web 服务器强化过程的一部分,建议禁用所有 Web 服务器签名。编辑 /etc/apache2/apache2.conf, 在配置文件未尾添加如下内容:
ServerSignature Off
ServerTokens Prod
默认是禁用的,如果没有禁用可以修改/etc/php/7.4/apache2下的 php.ini 配置文件。
expose_php = Off
删除web服务器测试页,避免信息泄露。默认情况下, index.html 的测试页面在/var/www/html路径下
解决方法:
sudo hostnamectl set-hostname ubuntu.mydomain.com
SSL/TLS Strong Encryption: How-To,Best practices for secure Zabbix setup,Strong Ciphers for Apache, nginx and Lighttpd,
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。