十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

等保整改实战:从合规到健壮的服务器安全基线建设

等保整改实战:从合规到健壮的服务器安全基线建设 1. 从“过检”到“好用”等保整改的真实价值最近帮几个朋友的公司做等保测评的服务器整改从CentOS到Ubuntu从云上到物理机几乎跑了个遍。我发现一个挺普遍的现象很多运维兄弟一听到“等保整改”第一反应就是去网上搜一堆命令然后照着清单一条条执行改完密码策略、配个审计日志、关几个服务就以为万事大吉了。测评时可能勉强过了但回头服务器不是性能卡顿就是业务莫名其妙报错运维自己都一头雾水。这其实完全搞错了方向。等保整改的核心从来不是一份可以无脑执行的“命令清单”。它的真正价值是借着测评这个外力系统地梳理一遍服务器的安全基线并确保这些安全措施能与你的业务长期、稳定、高效地共存。整改不是给服务器“上枷锁”而是为它建立一套可持续的“安全作息表”。今天我就结合最近处理的几个CentOS 7.9和Ubuntu 22.04 LTS的实战案例把从准备、核查、整改到验证的完整流程以及那些容易踩坑的细节掰开揉碎了讲清楚。目标就一个让你改完的服务器不仅合规更要健壮、易维护。2. 整改前的核心准备厘清资产与业务基线在动任何一条命令之前准备工作决定了整改是事半功倍还是事倍功半。这一步没做好后面全是坑。2.1 建立服务器资产与业务清单千万别一上来就登录服务器。首先你需要一张表。这张表至少包含以下信息服务器标识主机名、IP地址管理IP、业务IP、操作系统及具体版本如 CentOS 7.9.2009, Ubuntu 22.04.3 LTS。业务归属这台服务器承载的核心业务是什么例如Nginx Web服务、PostgreSQL 14数据库、Redis 7缓存、自定义Java应用。记录下业务进程的名称、启动用户、监听的端口。关键路径业务的主程序目录、配置文件目录、数据目录、日志目录。例如你的应用日志是写在/opt/your-app/logs/还是/var/log/your-app/。网络策略当前防火墙firewalld/iptables/ufw开放的端口列表以及这些端口对应服务的简要说明。我习惯用Markdown表格来整理清晰明了主机名业务角色OS 版本业务关键路径业务端口管理端口负责人web-prod-01Nginx 负载均衡CentOS 7.9/usr/share/nginx/html,/etc/nginx/conf.d/80, 44322张三db-master-01PostgreSQL 主库Ubuntu 22.04/var/lib/postgresql/14/main/,/etc/postgresql/14/main/543222李四redis-cache-01Redis 缓存CentOS 7.9/var/lib/redis/,/etc/redis.conf637922王五注意这个清单不是一次性的。整改过程中任何可能影响业务的操作如重启服务、修改端口都需要对照此清单评估影响。2.2 制定可回滚的备份策略“改错了能瞬间恢复”是敢于动手的底气。备份分三个层次系统级快照如果服务器在云上阿里云、腾讯云等或支持VMware快照在重大修改前务必创建一个系统盘快照。这是最彻底的后悔药。关键配置备份对即将修改的配置文件使用cp命令复制一个带日期后缀的副本。# CentOS/Ubuntu 通用示例 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup.$(date %Y%m%d) sudo cp /etc/pam.d/system-auth /etc/pam.d/system-auth.backup.$(date %Y%m%d) # CentOS sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.backup.$(date %Y%m%d) # Ubuntu业务数据备份确保数据库如PostgreSQL、MySQL、应用上传的文件等业务数据有最近的可靠备份。整改通常不直接动业务数据但以防万一。2.3 选择安全的操作通道与审计起点所有整改操作必须通过审计日志可追溯的方式进行。禁止直接在生产服务器桌面环境操作。必须通过SSH等远程管理协议登录并且确保你的操作会被记录。在开始整改前先确认系统审计服务auditd或系统日志rsyslog是正常运行的。这样你所有的sudo命令都会被记录方便后续溯源。# 检查 auditd 状态 sudo systemctl status auditd # 检查 rsyslog 状态 sudo systemctl status rsyslog3. 身份鉴别与访问控制不止于复杂密码这是等保测评的“必考题”也是最容易流于形式的地方。我们得让它既安全又实用。3.1 密码复杂度策略的可持续设置网上很多教程直接让你改/etc/pam.d/system-auth或/etc/security/pwquality.conf把密码规则设得极其复杂大小写数字符号12位以上结果就是用户要么记不住要么写在便利贴上贴在显示器旁。我的做法是平衡安全与可用性并强制启用密码历史记录防止用户只在旧密码后加个“1”了事。对于 CentOS 7/RHEL 7主要修改/etc/security/pwquality.conf。sudo vim /etc/security/pwquality.conf# 将最小长度设置为9而不是常见的12降低初始抵触情绪 minlen 9 # 要求包含至少一种大写字母 minclass 1 # 但要求密码包含四类字符大小写、数字、符号中的至少三类 minclass 3 # 拒绝包含用户名 usercheck 1 # 拒绝包含连续或重复字符如‘aaa’ ‘123’ maxsequence 3 maxrepeat 3然后修改/etc/pam.d/system-auth中关于pam_pwquality.so的配置启用密码历史记住最近5次密码# 在 password 部分找到 pam_pwquality.so 的行确保类似下面这样 password requisite pam_pwquality.so try_first_pass local_users_only retry3 authtok_type remember5对于 Ubuntu 22.04Ubuntu使用pam_pwquality但配置文件路径不同且通常与pam_unix配合。sudo vim /etc/security/pwquality.conf配置内容与CentOS类似。接着修改/etc/pam.d/common-password# 找到以‘password requisite pam_pwquality.so’开头的行修改为类似 password requisite pam_pwquality.so retry3 minlen9 difok3 remember5实操心得remember5这个参数非常关键。很多测评机构会检查是否禁止使用近期用过的密码。设置后系统会保存在/etc/security/opasswd文件中。首次设置可能不生效需要用户下次修改密码时才会触发历史检查。3.2 SSH安全加固告别密码拥抱密钥与堡垒机默认的SSH密码登录是巨大的风险源。整改方向是禁用密码登录强制使用密钥对并尽可能通过堡垒机跳板机访问。生成并分发SSH密钥对在运维人员自己的电脑上操作ssh-keygen -t rsa -b 4096 -C your_emailexample.com -f ~/.ssh/id_rsa_prod # 将公钥上传到服务器 ssh-copy-id -i ~/.ssh/id_rsa_prod.pub userserver_ip备份并修改SSH服务端配置sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup sudo vim /etc/ssh/sshd_config关键修改项# 禁止root用户直接登录 PermitRootLogin no # 禁用密码认证 PasswordAuthentication no # 启用密钥认证 PubkeyAuthentication yes # 使用更安全的协议版本 Protocol 2 # 可选限制监听IP、修改默认端口需同步防火墙 # Port 22222 # ListenAddress 192.168.1.100重启SSH服务并保持连接测试这是高危操作务必在重启前打开另一个终端窗口用密钥登录测试一次确保公钥已生效。# 在新窗口测试登录 ssh -i ~/.ssh/id_rsa_prod userserver_ip -p 22 # 测试成功后再在原来的管理会话中重启 sudo systemctl restart sshd # CentOS 7 可能是 sshd sudo systemctl restart ssh # Ubuntu 22.04 服务名通常是 ssh千万不要关闭当前正在操作的窗口重启后用新窗口的登录测试是否成功。成功后再关闭旧窗口。3.3 权限最小化与sudo审计清理无用账户检查/etc/passwd锁定或删除测试账户、默认账户如gamesftp。sudo usermod -L username # 锁定账户 sudo userdel -r username # 删除账户及家目录配置sudo日志与权限确保所有sudo命令都被记录到独立的日志文件或系统日志中。# 在 /etc/sudoers 或 /etc/sudoers.d/ 下的自定义文件中 Defaults logfile/var/log/sudo.log Defaults log_input, log_output为运维人员配置精细的sudo权限而不是简单的ALL(ALL) ALL。例如只允许重启某个特定服务# 在 /etc/sudoers.d/ops 文件中 user_alias OPS zhangsan, lisi Cmnd_Alias NGINX_CTL /bin/systemctl restart nginx, /bin/systemctl status nginx OPS ALL(root) NGINX_CTL4. 安全审计与入侵防范让日志“会说话”日志不是用来占磁盘的而是要能在出事时快速定位问题。很多部署了审计但从不分析等于没做。4.1 配置并调优auditdLinux审计子系统auditd功能强大但配置不当会瞬间拖垮磁盘。关键不是记录所有而是记录关键。安装与启动CentOS通常已安装Ubuntu可能需要安装# Ubuntu sudo apt update sudo apt install auditd audispd-plugins -y sudo systemctl enable --now auditd定义关键审计规则规则写在/etc/audit/rules.d/audit.rules或通过auditctl添加。重点关注用户登录、认证事件。特权命令执行su sudo。关键文件访问如/etc/passwd/etc/shadow/etc/ssh/sshd_config 业务核心配置文件。系统调用如文件删除、进程执行。示例规则# 监控 /etc/passwd 文件的写、属性更改 -w /etc/passwd -p wa -k identity # 监控 /etc/shadow 文件的所有访问权限非常敏感 -w /etc/shadow -p wa -k identity # 监控 sshd_config 的更改 -w /etc/ssh/sshd_config -p wa -k sshd_config # 监控所有sudo命令的执行 -a always,exit -F archb64 -S execve -C uid!euid -F euid0 -k sudo_exec # 监控用户登录相关事件 -w /var/log/faillog -p wa -k logins -w /var/log/lastlog -p wa -k logins配置日志轮转与磁盘空间警报编辑/etc/audit/auditd.conf。# 设置最大日志文件大小例如 50MB max_log_file 50 # 保留日志文件数量 num_logs 10 # 当磁盘空间低于此百分比时触发动作如发送邮件、执行脚本 space_left 25% space_left_action email action_mail_acct root admin_space_left 10% admin_space_left_action halt4.2 集中日志收集与分析可选但推荐对于服务器集群本地日志排查是灾难。推荐使用rsyslog或syslog-ng将关键日志authauthpriv*.crit等转发到一台独立的日志服务器。在这台服务器上可以使用Elasticsearch Logstash Kibana (ELK)或Grafana Loki等方案进行集中存储、索引和可视化分析。即使暂时不搭建完整方案也至少应该养成定期如每天手动检查关键日志的习惯# 查看认证相关日志 sudo tail -f /var/log/auth.log # Ubuntu sudo tail -f /var/log/secure # CentOS # 查看auditd日志 sudo ausearch -k sshd_config --start recent # 查看关于sshd_config的审计事件5. 服务与端口最小化安全不是“一刀切”“关闭不需要的服务和端口”是安全常识但什么是“不需要”这需要结合你的业务清单来判断。5.1 基于业务的端口与服务梳理使用netstat或ss命令查看所有监听端口sudo ss -tulnp # 或 sudo netstat -tulnp输出示例State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((sshd,pid1234,fd3)) LISTEN 0 100 0.0.0.0:80 0.0.0.0:* users:((nginx,pid5678,fd6)) LISTEN 0 128 127.0.0.1:6379 0.0.0.0:* users:((redis-server,pid9012,fd6))对照你的业务清单识别每一个监听端口对应的服务。例如22是SSH80是Nginx6379是Redis但注意它监听在127.0.0.1表示只允许本机访问这通常是安全的配置。识别并禁用非必要系统服务# 查看所有开机自启服务 sudo systemctl list-unit-files --typeservice | grep enabled # 对于明显不需要的如打印服务cups、蓝牙bluetooth、桌面环境相关gdm sudo systemctl disable --now cups bluetooth gdm关键原则如果不确定某个服务的作用先systemctl status service_name查看描述或者上网搜索不要盲目禁用。例如dbus、network、rsyslog通常是必需的。5.2 防火墙策略精细化配置使用防火墙firewalld或ufw将“允许访问”的策略细化到“谁在什么条件下可以访问什么”。CentOS 7 (firewalld)# 假设业务需要开放80 443 和自定义的管理端口22222 sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --permanent --add-servicehttps sudo firewall-cmd --permanent --add-port22222/tcp # 设置默认区域为drop拒绝所有但上面添加的规则是例外 sudo firewall-cmd --set-default-zonedrop # 重载配置 sudo firewall-cmd --reload # 查看生效规则 sudo firewall-cmd --list-allUbuntu 22.04 (ufw)# 启用ufw sudo ufw enable # 设置默认策略拒绝所有入站允许所有出站 sudo ufw default deny incoming sudo ufw default allow outgoing # 允许SSH如果改了端口用 sudo ufw allow 22222/tcp sudo ufw allow OpenSSH # 允许HTTP/HTTPS sudo ufw allow Nginx Full # 如果安装了Nginx或者用 sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 查看状态 sudo ufw status verbose踩坑实录有一次整改后监控系统无法从外部采集数据了。排查发现是防火墙默认策略改成了drop但忘了放行监控代理如Zabbix Agent的10050端口。教训修改防火墙前必须梳理所有需要与服务器通信的外部系统监控、备份、跳板机、业务上下游服务器。6. 内核与系统参数安全加固这部分涉及系统稳定性需要谨慎测试。主要依据CIS互联网安全中心基准等安全规范。6.1 网络参数加固/etc/sysctl.conf编辑/etc/sysctl.conf或/etc/sysctl.d/下的文件应用以下常见安全参数sudo vim /etc/sysctl.d/99-security-hardening.conf# 禁止IP源路由转发防止IP欺骗 net.ipv4.conf.all.accept_source_route 0 net.ipv6.conf.all.accept_source_route 0 # 启用反向路径过滤防止IP欺骗 net.ipv4.conf.all.rp_filter 1 net.ipv4.conf.default.rp_filter 1 # 禁止ICMP重定向防止路由表被恶意修改 net.ipv4.conf.all.accept_redirects 0 net.ipv4.conf.default.accept_redirects 0 net.ipv4.conf.all.secure_redirects 0 net.ipv4.conf.default.secure_redirects 0 # 禁止发送ICMP重定向 net.ipv4.conf.all.send_redirects 0 net.ipv4.conf.default.send_redirects 0 # 开启SYN Cookie防御SYN Flood攻击 net.ipv4.tcp_syncookies 1 # 减少time_wait连接提高服务器处理能力高并发业务需重点调优 net.ipv4.tcp_tw_reuse 1 net.ipv4.tcp_fin_timeout 30使配置生效sudo sysctl -p /etc/sysctl.d/99-security-hardening.conf6.2 文件系统与资源限制加固禁用不安全的文件系统在/etc/modprobe.d/下创建黑名单文件禁用如cramfsfreevxfsjffs2hfshfsplus等。echo install cramfs /bin/false | sudo tee /etc/modprobe.d/disable-filesystems.conf配置用户资源限制编辑/etc/security/limits.conf防止单个用户进程耗尽系统资源如fork炸弹。* hard core 0 # 禁止生成core文件 * hard nproc 1000 # 最大进程数 * hard nofile 65535 # 最大打开文件数可根据业务调整7. 漏洞扫描与修复建立持续免疫整改不是一劳永逸系统漏洞会不断出现。需要建立持续的漏洞管理流程。使用自动化工具进行基线扫描OpenSCAP强大的开源合规扫描工具内置CIS、STIG等基准。可以生成详细的合规报告和修复脚本。# CentOS 7 安装 sudo yum install openscap-scanner scap-security-guide -y # 扫描并生成HTML报告 sudo oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_cis --results scan-results.xml --report scan-report.html /usr/share/xml/scap/ssg/content/ssg-centos7-ds.xmlLynis轻量级的安全审计工具提供清晰的检查点和建议。sudo lynis audit system定期更新与补丁管理建立定期的安全更新计划如每周一次。对于核心业务系统更新前需在测试环境验证。使用yum-cron(CentOS) 或unattended-upgrades(Ubuntu) 进行自动安全更新。# Ubuntu 配置自动安全更新 sudo dpkg-reconfigure unattended-upgrades # 编辑 /etc/apt/apt.conf.d/50unattended-upgrades 进行精细控制8. 整改后的验证与持续监控所有配置修改完成后必须进行系统性验证确保安全与业务均正常。8.1 功能性验证清单[ ]业务访问测试通过正常业务渠道如浏览器访问网站、客户端连接数据库验证业务是否正常。[ ]管理通道测试使用配置好的SSH密钥登录服务器验证密码登录是否已禁用。[ ]防火墙测试从外部尝试扫描服务器端口使用nmap确认只有预设端口开放。[ ]审计日志验证执行几个特权操作如sudo ls /root然后检查/var/log/secure/var/log/auth.log或audit.log确认操作被记录。[ ]服务自启验证重启服务器检查所有必需的业务服务如nginx postgresql redis是否正常启动。8.2 建立简单的持续监控点日志监控配置日志监控告警例如针对/var/log/auth.log或/var/log/secure中出现大量“Failed password”的暴力破解行为进行告警。文件完整性监控使用aide或tripwire等工具对/etc/usr/bin/usr/sbin等关键目录建立基线定期检查是否有文件被篡改。# 安装并初始化 aide sudo yum install aide -y # CentOS sudo aide --init sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz # 定期检查 sudo aide --check入侵检测部署fail2ban或denyhosts自动屏蔽多次登录失败的IP地址。sudo yum install fail2ban -y # CentOS sudo apt install fail2ban -y # Ubuntu sudo systemctl enable --now fail2ban整个等保整改流程走下来我的体会是它更像是一次对服务器运维体系的“全身体检”和“健身计划”。死记硬背测评条款和命令清单是最低效的做法。真正有效的整改始于对自身业务和架构的清晰认知成于每一项安全策略与业务需求之间的精细平衡并最终依赖于能够融入日常运维的、可持续的监控与改进习惯。当你不再把整改看作应付检查的负担而是视为提升系统稳定性和可管理性的契机时这项工作才会产生真正的、长期的价值。
返回列表