Zabbix服务器安全基础加固
环境概览
系统环境:
root@tpe-zabbix:/usr/sbin# cat /etc/issue
Ubuntu 20.04.3 LTS
l
Zabbix Server版本:
/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
Apache2版本:
/etc/zabbix# apache2 -v
Server version: Apache/2.4.52 (Ubuntu)
Server built: 2021-09-28T11:00:45
Zabbix用户最小权限
这里的用户涉及到Zabbix前端用户、Zabbix 服务器和 Zabbix 代理之间进程用户(默认的zabbix用户),在前端用户的设置根据"权限最小化原则"进行设定。
为 Zabbix 前端设置 HTTPS访问
TLS/SSL 使用公共证书和私钥的组合进行协同工作。SSL 密钥的作用是对服务端发送给客户端的数据进行加密。对于像 Apache、Postfix、Dovecot 等应用通常使用不带密码的密钥。没有密码可以让服务在没有人工干预的情况下自动启动,这通常是我们首选的方式。
步骤 1 – 创建 SSL 证书
- 为证书签名请求 (CSR)生成密钥,在终端提示符运行以下命令:
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
- 现在我们用不安全(没有密码)的密钥server.key来生成没有密码的签名请求CSR。
要创建没有密码保护的 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的配置使其生效。
- 创建SSL/TLS Cipher Suites(密码套件)
- 修改 Apache 虚拟主机文件以指向后面生成的 SSL 证书
- 设定访问HTTP自动跳转HTTPS
步骤3 – 创建SSL/TLS Cipher Suites(密码套件)
首先,我们将为 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
步骤4 – 修改默认的 Apache SSL 虚拟主机文件
接下来,让我们修改/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>
完成后保存并关闭文件。
步骤5 – 修改访问 HTTP永久重定向到HTTPS
就目前而言,服务器提供未加密的 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
步骤 6 – 测试
打开浏览器,https://
在地址栏中输入服务器的域名或 IP:
https://server_domain_or_IP
禁用 / 删除 Web 服务器信息
作为 Web 服务器强化过程的一部分,建议禁用所有 Web 服务器签名。编辑 /etc/apache2/apache2.conf, 在配置文件未尾添加如下内容:
ServerSignature Off
ServerTokens Prod
禁用PHP 签名(X-Powered-By HTTP 标头)
默认是禁用的,如果没有禁用可以修改/etc/php/7.4/apache2下的 php.ini 配置文件。
expose_php = Off
删除 Web 服务器测试页
删除web服务器测试页,避免信息泄露。默认情况下, index.html 的测试页面在/var/www/html路径下
遇到的问题:
- 检查安全模块启用状态 “apachectl -M| grep security”,提示“apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘ServerName’ directive globally to suppress this message”
解决方法:
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,
相关文章
- 《互联网信息服务算法推荐管理规定》发布,3月1日起施行
- 机器人编程趣味实践07-信息交互(主题)
- 使用pydantic进行接口校验
- 工具篇:apache-httpClient 和 jdk11-HttpClient的使用
- 绿盟科技“一体化安全运营解决方案”荣获“2021年度数字化转型优秀解决方案奖”
- 机器人编程趣味实践08-任务请求回复(服务)
- 启明星辰“天阗欺骗防御系统”荣获“2021年度商业价值跃升产品奖”
- 技能篇:关于缓存数据的一致性探讨
- 启明星辰“网络安全机器人自动化平台”荣获“2021年度中国IT行业人工智能创新产品奖”
- 机器人编程趣味实践09-多彩背景(参数)
- 机器人编程趣味实践10-做个任务(行动)
- 商汤上市、虚拟员工首摘新人奖、百度“希壤”面世、鸿蒙迈入3.0…
- 机器人编程趣味实践11-图形化调试工具(rqt)
- 看完 GitHub 官方的 2021 年度报告,才发现原来全球程序员好像都在卷呐
- 机器人编程趣味实践12-启动工具(launch)
- 新型微型液体机器人:只要有“食物”就能连续自主地运转
- 机器人编程趣味实践13-数据保存和播放(bag)
- 机器人编程趣味实践14-机器人三维仿真(Gazebo+TurtleBot3)
- 机器人编程趣味实践15-遥控到自动(AutoAvoidObstacles)
- 芯片设计的超高门槛,正在被AI「粉碎」