场景描述
上个星期处理了一回客户的紧急求助状况:他们所拥有的一台三级域名服务器,也就是那个代码为 api.szxx.com 的服务器,被网安大队通报指出存在高危漏洞,并且要求在限定的期限之内完成整改。
客户感到极为委屈,说道:“这仅仅是个三级域名,难道也要去做等保?” 你瞧,这便是典型的认知误区。

今天,我们拿这台服务器当作例子,完整地走上一回,从最开始着手搭建契合等保2.0三级要求的LNMP环境的整个流程,这里面涵盖了域名解析,服务器配置,安全加固,CDN接入,还有故障排查。
准备工作
一部云服务器呢这里是以CentOS 7.9作为例子,其配置是4核8G,系统盘是40G,数据盘是100G。
一个已经完成备案流程的一级域名,举例来说像szxx.com这样的,而三级域名api.szxx.com会朝着该服务器的方向进行指向。
那已安装了宝塔面板,其官方一键安装命令是,yum install -y wget,并且,wget -O install.sh http://download.bt.cn/install/install_6.0.sh,然后,sh install.sh。
本地电脑:Xshell或类似终端工具,用于远程连接
第一步:域名解析配置
登录DNS服务商后台,为三级域名添加A记录:
主机记录:api

记录类型:A
记录值:服务器公网IP
TTL:600(测试阶段可短一些,上线后建议3600)
注意:TTL不是越小越好,频繁变更会增加DNS服务器压力。
第二步:服务器基础加固
1. 修改SSH端口(等保要求必须更改默认端口):
sed -i 's/#Port 22/Port 2222/g' /etc/ssh/sshd_config
systemctl restart sshd
2. 创建普通用户并禁用root远程登录:
useradd szxxops
echo "Szxx@2026" | passwd --stdin szxxops
echo 'szxxops ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
systemctl restart sshd
3. 配置防火墙(仅开放必要端口):
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
第三步:宝塔面板安装LNMP环境
进行宝塔面板的登录操作,于该面板的软件商店之中,以一键的方式去安装,Nginx 1.20 ,还有MySQL 5.7 ,以及PHP 7.4。
安装完成后,进行以下安全配置:
在MySQL中,将root密码修改成那种具备大小写字母、数字以及特殊符号,且长度大于或等于12的强密码模式,把默认的匿名用户给删除掉,同时禁止root进行远程登录。
PHP:将危险函数(也就是exec、shell_exec、system等这些)进行禁用。
Nginx,使得版本号被隐藏起来,具体做法是在配置文件里添加server_tokens off;。
第四步:配置三级域名网站及SSL证书
1. 在宝塔面板添加站点:
域名:api.szxx.com

根目录:/www/wwwroot/api.szxx.com
创建FTP和数据库(按需)
2. 申请并部署SSL证书(等保三级要求通信加密):
借助宝塔面板的Let‘s Encrypt免费凭证,通过一键操作去申请,进而开启强制的HTTPS。
SSL配置中勾选“开启HSTS”和“开启OCSP装订”
留神:在开启HSTS之前一定要切实保证HTTPS的访问处于正常状态,不然的话就会致使网站没办法进行访问。

第五步:接入CDN并配置访问控制
以Cloudflare来作为例子,在国内能够使用阿里云或者腾讯云CDN:
于CDN控制台当中,添加域名,此域名乃是api.szxx.com,而源站之处,需填写服务器IP。
先是开启CDN,接着把DNS解析记录修改成CNAME去往CDN所提供的域名。
3. 在CDN配置WAF规则:
拦截常见的SQL注入、XSS攻击
设置IP黑白名单(仅允许公司出口IP访问后台管理路径)
4. 在服务器防火墙上设置仅允许CDN节点IP访问:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="CDN节点IP段" port port="80" protocol="tcp" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="CDN节点IP段" port port="443" protocol="tcp" accept'
firewall-cmd --permanent --remove-port=80/tcp
firewall-cmd --permanent --remove-port=443/tcp
firewall-cmd --reload
第六步:系统安全加固(等保三级重点)
1. 安装并配置fail2ban防止暴力破解:
yum install -y epel-release && yum install -y fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
systemctl enable fail2ban && systemctl start fail2ban
2. 配置日志审计:
着手开启rsyslog远程日志传输,此传输是要把日志发送至专用日志服务器。
设置日志保留时间≥180天(等保要求)
echo '$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"' >> /etc/rsyslog.conf
echo '. @192.168.1.100:514' >> /etc/rsyslog.conf
systemctl restart rsyslog

3. 文件完整性校验:
rpm -Va > /var/log/rpm_check_$(date +%Y%m%d).log
第七步:数据库备份策略
撰写,具备自动备份功能的脚本,其路径为/root/mysql_backup.sh:
#!/bin/bash
backup_dir="/data/backup/mysql"
date=$(date +%Y%m%d_%H%M%S)
mysqldump -uroot -p'密码' --all-databases | gzip > ${backup_dir}/backup_${date}.sql.gz
find ${backup_dir} -type f -mtime +7 -name ".sql.gz" -delete
添加定时任务(每天凌晨2点执行):
crontab -e
0 2 /bin/bash /root/mysql_backup.sh >/dev/null 2>&1
第八步:故障排查与应急响应模拟
某天,网站忽然无法打开,出现“502 Bad Gateway”的提示。

排查步骤:
查看Nginx状态,通过执行:systemctl status nginx,其态势为正常运行。
2. 去查看有关错误的日志,tail -f /www/wwwlogs/api.szxx.com.error.log,并且会发现连接php-fpm出现超时的情况。
3. 对php - fpm状态予以检查,通过执行:systemctl status php-fpm,进而发现进程呈现挂掉的状况。
4. 去查看php - fpm的慢日志,tail -f /var/log/php-fpm/slow.log,从中发现有某个SQL查询执行了30秒。
4. 暂时重新启动php-fpm,即执行:systemctl restart php-fpm,随后网站能够恢复可被访问的状态。
6. 根本原因分析:数据库索引缺失,执行效率低。
优化SQL并添加索引后,问题解决。
总结
三级域名是否需要做等保,关键看它承载的业务。
像在本例所呈现的情况里,其中的api.szxx.com,它是涉及到用户数据交互这一范畴的,那么随之而来的要求便是,必须依照等保三级的相关规定,进行全方位的加固操作。
从网络层的相关操作,到主机层的对应设置,再到应用层的具体配置,以上的这些操作全都有所包含,并且是严格依照等保2.0标准来执行的。

提议每隔半年开展一回等保自我检查,迅速修复漏洞,如此方可切实守住网络安全的底线。

Comments NOTHING