1. 项目概述:从合规压力到实战落地
最近两年,我经手了不下二十台服务器的等保测评整改工作,从金融、医疗到政务云,CentOS和Ubuntu这两大Linux阵营的服务器是绝对的主力。每次测评前,客户那边总是弥漫着一种既紧张又茫然的气氛——安全扫描报告一出来,几十上百条“中危”、“高危”项,看着就头疼。很多人以为整改就是照着测评机构的“整改建议”一条条执行命令,但实操下来你会发现,盲目执行常常导致服务异常、权限混乱,甚至系统崩溃。真正的等保整改,是一个理解安全基线、平衡业务连续性与安全性、并形成可持续运维策略的系统工程。
这篇内容,就是把我这些年踩过的坑、总结出的流程和核心操作,进行一次彻底的梳理。它不仅仅是一份命令清单,更是一套适用于CentOS(以7.x、8.x为例)和Ubuntu(以20.04 LTS、22.04 LTS为例)服务器的整改思维框架和实操手册。无论你是面临迫在眉睫的等保测评,还是想系统性提升服务器安全水位,都可以从这里找到可落地的方案。我们会绕过那些华而不实的理论,直接切入认证中心最常检查、也最容易出问题的关键点,手把手带你完成从初检到复测的全流程。
2. 等保整改核心思路与前置准备
在动手敲第一条命令之前,理清思路比什么都重要。等保测评(尤其是二级和三级)不是简单的安全加固,它遵循“一个中心,三重防护”的体系框架,对应到单台服务器上,我们的整改工作也需要有清晰的逻辑层次。
2.1 理解整改的底层逻辑:不是屏蔽,是治理
很多工程师的第一个误区,是试图用最粗暴的方式“解决”告警。比如,看到端口扫描告警就直接用iptables或firewalld屏蔽所有非业务端口;看到弱口令告警就强制所有用户使用20位复杂密码且30天更换。结果往往是业务调用失败、用户频繁锁帐号,安全性和可用性彻底失衡。
正确的逻辑应该是“最小化原则”和“审计溯源原则”。
- 最小化原则:关闭不必要的服务、卸载非必需的软件、限制非法的权限。每一项操作前都要问:这个服务/端口/权限,业务真的需要吗?如果不需要,就坚决关闭;如果需要,则通过白名单、跳板机等更安全的方式提供。
- 审计溯源原则:所有重要的操作和行为都必须有记录、可追溯。这意味着不仅要对
sudo、su登录进行审计,对关键文件的修改、特权命令的执行,甚至网络连接的变化,都需要有完整的日志记录,并确保日志不被篡改。
基于这两个原则,我们的整改流程应该是:信息收集 -> 风险分析 -> 制定策略 -> 分步实施 -> 验证测试 -> 文档记录。绝不可一上来就执行网上搜来的“等保加固脚本”。
2.2 至关重要的前置检查与备份
在开始任何整改操作前,以下两步是保命的底线,务必执行:
1. 全面系统快照与业务备份
- 物理机/云服务器:务必在业务低峰期,为整个系统盘创建快照。在阿里云、腾讯云等平台,这通常只需要几分钟。这是你操作失误后最快速的回滚手段。
- 关键业务数据备份:使用
mysqldump、pg_dump或对应的数据库工具,备份所有业务数据库。使用tar或rsync备份重要的应用配置文件(如/etc/目录下)、网站代码、日志目录等。 - 备份验证:备份完成后,不要假设它成功了。最好能在一个测试环境尝试恢复部分数据,确保备份有效。
2. 建立安全的运维通道整改过程中,你极有可能修改SSH端口、禁用root远程登录、配置防火墙。如果顺序错了,你会把自己关在服务器外面。
- 推荐操作顺序:
- 先添加一个具有
sudo权限的普通运维用户(如secadmin)。 - 测试用新用户通过SSH密钥方式登录,并验证
sudo权限可用。 - 保持至少两个独立的SSH连接会话,一个用于执行整改命令,另一个作为“保险丝”,在配置出错时用于修复。不要依赖图形界面或单一终端。
- 在所有整改完成后,最后再考虑修改默认的SSH端口(22)。
- 先添加一个具有
注意:我曾有一次在修改
sshd_config后,忘记重启SSH服务就关闭了会话,导致所有新连接都无法建立。幸亏提前保留了另一个已认证的会话,才避免了去机房接显示器的尴尬。永远给自己留一条后路。
3. 身份鉴别与访问控制整改详解
这是等保测评的“开门第一关”,也是丢分的高发区。主要围绕口令复杂度、登录失败处理、权限分离等方面。
3.1 口令复杂度与生存周期策略
CentOS和Ubuntu都使用PAM(Pluggable Authentication Modules)来管理密码策略,但配置文件位置和默认模块略有不同。
CentOS 7/8 配置:核心文件是/etc/pam.d/system-auth(CentOS 7)和/etc/security/pwquality.conf(CentOS 8+也通过system-auth调用)。
# 安装密码强度检查模块(通常已默认安装) sudo yum install -y libpwquality # 编辑密码策略配置文件 sudo vim /etc/security/pwquality.conf在pwquality.conf中,建议设置如下:
minlen = 10 # 密码最小长度10位 minclass = 3 # 至少包含大写字母、小写字母、数字、特殊字符中的3类 dcredit = -1 # 至少包含1位数字 ucredit = -1 # 至少包含1位大写字母 lcredit = -1 # 至少包含1位小写字母 ocredit = -1 # 至少包含1位特殊字符 maxrepeat = 3 # 同一字符最多连续出现3次Ubuntu 20.04/22.04 配置:Ubuntu使用/etc/pam.d/common-password,并通常通过pam_pwquality.so模块调用/etc/security/pwquality.conf。
# 安装pwquality模块 sudo apt install -y libpam-pwquality # 配置同样修改 /etc/security/pwquality.conf,参数与上述CentOS示例一致。配置密码生存周期:修改/etc/login.defs文件,此配置对两系统均适用。
PASS_MAX_DAYS 90 # 密码最长使用90天 PASS_MIN_DAYS 1 # 密码最小使用间隔1天(防止频繁更改) PASS_MIN_LEN 10 # 密码最小长度(此处设置,但PAM模块优先级更高) PASS_WARN_AGE 7 # 密码过期前7天开始警告设置完成后,此策略仅对新创建的用户生效。对于已存在用户,必须使用chage命令手动更新:
# 查看root用户的密码策略 sudo chage -l root # 强制所有已存在用户遵守新策略(谨慎操作,会影响所有用户) sudo chage -M 90 -m 1 -W 7 root # 批量修改示例(修改系统用户,通常UID>=1000的为普通用户) for user in $(awk -F: '$3>=1000 {print $1}' /etc/passwd); do sudo chage -M 90 -m 1 -W 7 $user; done3.2 登录失败处理与超时锁定
防止暴力破解的关键配置。
配置登录失败锁定:同样通过PAM模块pam_tally2(CentOS 7)或pam_faillock(CentOS 8/Ubuntu)实现。
CentOS 7 示例 (pam_tally2):在
/etc/pam.d/password-auth和/etc/pam.d/system-auth文件中,在auth部分添加:auth required pam_tally2.so deny=5 unlock_time=600 even_deny_root root_unlock_time=300在
account部分添加:account required pam_tally2.so含义:连续失败5次后锁定账户600秒,root账户也受此限制但300秒后可解锁。
Ubuntu / CentOS 8 示例 (pam_faillock):配置更统一,编辑
/etc/pam.d/common-auth:auth required pam_faillock.so preauth silent deny=5 unlock_time=600 auth required pam_faillock.so authfail deny=5 unlock_time=600然后编辑
/etc/security/faillock.conf进行更细致的控制。
配置会话超时自动退出:这是一个非常容易被忽略但测评必查的项。需要全局环境变量和SSH双重配置。
- 全局配置:在
/etc/profile或/etc/bash.bashrc(Ubuntu)文件末尾添加,对所有Shell生效。export TMOUT=900 # 设置无操作超时时间为900秒(15分钟) readonly TMOUT # 设置为只读,防止用户修改 - SSH超时:修改
/etc/ssh/sshd_config,确保有以下配置:ClientAliveInterval 600 # 服务器每600秒向客户端发送一次保活消息 ClientAliveCountMax 2 # 客户端连续2次无响应则断开连接注意:
TMOUT和ClientAliveInterval是互补关系。TMOUT作用于服务器本地的Shell会话,而ClientAliveInterval作用于远程SSH连接。两者都配置才能覆盖所有场景。
3.3 权限分离与最小特权原则
- 禁用Root远程SSH登录:这是铁律。修改
/etc/ssh/sshd_config,设置PermitRootLogin no,然后使用sudo进行特权操作。 - 使用SSH密钥登录:彻底禁用密码登录,使用密钥对认证。在
sshd_config中设置PasswordAuthentication no和PubkeyAuthentication yes。 - 配置sudo权限审计:不仅要用
sudo,还要记录谁在什么时候执行了什么命令。在/etc/sudoers文件或/etc/sudoers.d/目录下的自定义文件中,为运维用户添加权限时,使用NOPASSWD标签需极其谨慎,并建议开启日志。# 在 /etc/sudoers.d/90-secadmin 文件中 secadmin ALL=(ALL) ALL # 允许secadmin在所有主机上执行所有命令,但需要输入自己的密码 Defaults logfile="/var/log/sudo.log" # 自定义sudo日志路径(需确保目录权限) - 检查SUID/SGID特殊权限文件:这些文件在运行时拥有文件所有者的权限,是提权的高风险点。定期检查并清理非必要的SUID文件。
# 查找所有SUID/SGID文件 find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \; # 对于确认为非必要的(如旧版的vim、find等),移除特殊权限 sudo chmod u-s /path/to/unnecessary_file
4. 安全审计与入侵防范整改实战
安全审计是事后追溯的“眼睛”,入侵防范是事中防御的“盾牌”。这一部分是等保三级要求的重点。
4.1 系统审计服务(auditd)深度配置
auditd是Linux内核级的审计框架,功能强大但配置复杂。测评主要关注对重要文件、目录和系统调用的监控。
1. 安装与启动(通常默认已安装):
# CentOS sudo yum install -y audit audit-libs # Ubuntu sudo apt install -y auditd audispd-plugins sudo systemctl enable --now auditd2. 关键审计规则配置:规则配置文件在/etc/audit/rules.d/audit.rules(或/etc/audit/audit.rules)。以下是一些核心规则示例:
# 审计所有对passwd文件的写、属性更改操作 -w /etc/passwd -p wa -k identity -w /etc/shadow -p wa -k identity -w /etc/gshadow -p wa -k identity -w /etc/group -p wa -k identity # 审计所有对sudoers文件的任何访问 -w /etc/sudoers -p wa -k privilege_escalation -w /etc/sudoers.d/ -p wa -k privilege_escalation # 审计所有对SSH相关配置的修改 -w /etc/ssh/sshd_config -p wa -k ssh_config # 审计系统调用(例如,监控所有删除文件的行为) -a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete -a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete # 审计特权命令的执行(例如,su、sudo的使用) -a always,exit -F arch=b64 -S execve -C uid!=euid -F euid=0 -k setuid_exec -a always,exit -F arch=b64 -S execve -C gid!=egid -F egid=0 -k setgid_exec-k后面的参数是“键值”(key),用于在查询日志时快速过滤相关事件。
3. 审计日志管理与轮转:auditd的日志默认在/var/log/audit/audit.log。需要配置日志轮转防止磁盘爆满。编辑/etc/audit/auditd.conf:
max_log_file = 50 # 单个审计日志文件最大50MB num_logs = 5 # 保留5个轮转的日志文件 max_log_file_action = ROTATE # 达到最大尺寸后轮转 space_left = 100 # 磁盘剩余空间低于100MB时触发动作 space_left_action = email # 发送邮件告警(需配置mail命令) admin_space_left = 50 admin_space_left_action = SUSPEND # 空间低于50MB时暂停审计4. 常用审计日志查询命令:
# 查看所有审计日志 sudo ausearch -k delete # 查看键值为“delete”的审计事件 sudo ausearch -m ADD_USER -i # 查看添加用户的事件(-i 表示解释化输出) sudo ausearch -ts today # 查看今天的所有事件 # 生成审计报告 sudo aureport -u # 用户登录报告 sudo aureport -f # 文件访问报告 sudo aureport -au # 所有用户事件报告4.2 入侵防范:文件完整性校验与Rootkit检测
1. 文件完整性校验(AIDE):AIDE(Advanced Intrusion Detection Environment)像是一个文件的“指纹库”,定期比对文件变化,用于检测是否被篡改。
# 安装 sudo yum install -y aide # CentOS sudo apt install -y aide # Ubuntu # 初始化数据库(在系统干净、刚部署完时执行) sudo aide --init # 将初始数据库复制为标准数据库 sudo cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz # 进行完整性检查 sudo aide --check # 更新数据库(当确认系统变更合法后,如升级软件包) sudo aide --update sudo cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz实操心得:AIDE的配置文件/etc/aide.conf决定了监控哪些文件、忽略哪些变化(如日志文件)。初次配置时,建议先从关键目录开始(/bin,/sbin,/usr/bin,/usr/sbin,/etc),排除掉频繁变化的/var/log,否则误报会非常多。可以将aide --check加入crontab,每天执行并将结果邮件发送给管理员。
2. Rootkit检测(rkhunter & chkrootkit):这两个是经典的工具,用于检测已知的rootkit、后门和可疑文件。
# 安装 sudo yum install -y rkhunter # CentOS sudo apt install -y rkhunter chkrootkit # Ubuntu # 更新特征库 sudo rkhunter --update # 执行检测 sudo rkhunter --check --skip-keypress # 查看日志 sudo cat /var/log/rkhunter.log # 使用chkrootkit检测 sudo chkrootkit注意:这些工具主要基于特征库,对于未知的、新型的恶意软件可能无效。它们更适用于定期巡检和基线检查,不能替代实时的入侵检测系统(IDS)。
4.3 恶意代码防范
对于Linux服务器,恶意代码防范主要依赖于最小化安装、严格的权限控制和定期的漏洞扫描与补丁更新。
- 软件源管理:只使用官方或可信的软件源。定期更新
yum或apt的源列表。 - 自动安全更新:对于非核心生产环境,可以考虑启用自动安全更新。
- Ubuntu:安装
unattended-upgrades并配置/etc/apt/apt.conf.d/50unattended-upgrades。 - CentOS:使用
yum-cron服务,配置/etc/yum/yum-cron.conf,设置apply_updates = yes(生产环境慎用,建议先测试)。
- Ubuntu:安装
- 漏洞扫描:使用如
lynis(开源安全审计工具)、OpenVAS或商业漏洞扫描器定期对服务器进行扫描。
5. 资源控制与剩余信息保护
这部分主要涉及系统资源限制、访问控制以及数据清除,防止资源滥用和信息泄露。
5.1 资源控制:限制用户进程与会话
通过PAM模块pam_limits进行配置,文件是/etc/security/limits.conf或/etc/security/limits.d/目录下的文件。
# 限制所有用户的最大进程数,防止fork炸弹 * hard nproc 1000 * soft nproc 500 # 限制特定用户组(如web用户)的最大打开文件数 @www-data hard nofile 65535 @www-data soft nofile 10240 # 限制root用户的SSH最大会话数(在 /etc/ssh/sshd_config 中配置更佳) # 但也可以在limits中设置 root hard maxlogins 3修改后,需要用户重新登录才能生效。对于已存在的服务进程,可能需要重启服务。
5.2 剩余信息保护:确保数据不残留
等保要求系统在释放存储空间前,必须清除其中的信息。对于内存,这通常由内核管理;对于存储,关键点在于交换分区(swap)。
确保交换分区加密:如果使用了交换分区,未加密的swap可能包含敏感内存页的镜像。最安全的方式是在系统安装时就创建加密的swap。对于已存在的系统,如果重做swap成本太高,退而求其次的方案是在关闭服务后,清空swap。
# 临时清空swap(会将被换出的数据写回内存,如果内存不足可能导致问题,请在业务低峰期操作) sudo swapoff -a && sudo swapon -a更根本的解决方案是,在新的服务器规划中,使用LUKS等磁盘加密技术对包含swap的分区进行全盘加密。
文件删除安全:普通的rm命令只是删除文件的索引,数据仍可能被恢复。对于需要彻底删除的敏感文件,应使用shred或wipe工具。
# 使用shred覆盖文件3次后删除 sudo shred -u -z -n 3 sensitive_file.txt-u表示覆盖后删除,-z表示最后用零覆盖以隐藏覆盖行为,-n 3表示覆盖3次。
6. 网络与防火墙策略精细化配置
网络层面的整改是边界防护的关键,主要工具是firewalld(CentOS/RHEL 7+ 推荐)或ufw(Ubuntu 推荐),底层依然是iptables/nftables。
6.1 使用Firewalld(CentOS)进行区域化管理
Firewalld的核心概念是“区域”(zone)和“服务”(service)。将网卡绑定到不同安全级别的区域,再定义该区域允许的服务或端口。
1. 基础配置流程:
# 查看默认区域和活动区域 sudo firewall-cmd --get-default-zone sudo firewall-cmd --get-active-zones # 将接口(如eth0)绑定到内部区域(internal) sudo firewall-cmd --zone=internal --change-interface=eth0 --permanent # 在internal区域开放服务(如SSH、HTTP、HTTPS) sudo firewall-cmd --zone=internal --add-service=ssh --permanent sudo firewall-cmd --zone=internal --add-service=http --add-service=https --permanent # 如果业务需要特定端口,如TCP 8080 sudo firewall-cmd --zone=internal --add-port=8080/tcp --permanent # 设置默认区域为drop(拒绝所有未明确允许的流量),这是最安全的策略 sudo firewall-cmd --set-default-zone=drop --permanent # 重载配置使其生效 sudo firewall-cmd --reload # 查看指定区域的详细规则 sudo firewall-cmd --zone=internal --list-all2. 配置富规则(Rich Rules)实现更精细控制:富规则允许你设置源IP、目的IP、端口、协议甚至时间等复杂条件。
# 示例:只允许IP段 192.168.1.0/24 访问本机的3306端口(MySQL) sudo firewall-cmd --zone=internal --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept' --permanent # 示例:拒绝来自特定IP 10.0.0.100 的所有流量 sudo firewall-cmd --zone=internal --add-rich-rule='rule family="ipv4" source address="10.0.0.100" reject' --permanent sudo firewall-cmd --reload6.2 使用UFW(Ubuntu)简化防火墙管理
UFW(Uncomplicated Firewall)是iptables的前端,对新手更友好。
1. 基础配置:
# 启用UFW sudo ufw enable # 设置默认策略:拒绝所有入站,允许所有出站 sudo ufw default deny incoming sudo ufw default allow outgoing # 允许SSH(非常重要,否则可能锁死自己) sudo ufw allow ssh # 或指定端口 sudo ufw allow 22/tcp # 允许HTTP/HTTPS sudo ufw allow http sudo ufw allow https # 允许来自特定IP的访问 sudo ufw allow from 192.168.1.100 to any port 22 # 允许一个IP段访问特定端口 sudo ufw allow from 192.168.1.0/24 to any port 3306 # 查看规则状态 sudo ufw status numbered verbose # 删除一条规则(先用status numbered查看编号) sudo ufw delete 22. 配置限制连接速率(防暴力破解):
# 限制SSH端口每分钟最多连接6次,超过则拒绝 sudo ufw limit ssh/tcp # 或者对特定端口 sudo ufw limit 22/tcplimit规则会使用iptables的recent模块,非常有效。
6.3 内核网络参数加固
通过修改/etc/sysctl.conf文件来调整内核网络参数,提升抗攻击能力。以下是一些关键参数:
# 编辑配置文件 sudo vim /etc/sysctl.conf # 添加或修改以下内容 # 禁用ICMP重定向(防止中间人攻击) net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 # 启用源地址验证(防止IP欺骗) net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # 禁用源路由 net.ipv4.conf.all.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0 # 开启SYN Cookie保护,防范SYN Flood攻击 net.ipv4.tcp_syncookies = 1 # 减少TIME_WAIT状态的等待时间,加快连接回收(高并发服务可调整) net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 # 注意:在NAT环境下此参数可能导致问题,Linux 4.12+内核已移除 # 控制ICMP请求(避免被用作放大攻击) net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 # 使配置立即生效 sudo sysctl -p重要提示:
net.ipv4.tcp_tw_recycle参数在存在NAT的网络环境中(比如公司出口或云服务器)可能导致连接不稳定,在新版内核中已废弃。生产环境建议只设置tcp_tw_reuse。
7. 服务与端口最小化实践
这是“最小化原则”最直接的体现。一台干净的服务器,暴露的端口越少,攻击面就越小。
7.1 系统服务排查与禁用
1. 查看所有启动的服务:
# systemd系统(CentOS 7+, Ubuntu 16.04+) sudo systemctl list-unit-files --type=service | grep enabled # 查看监听端口的服务 sudo ss -tulnp # 推荐,更清晰 # 或 sudo netstat -tulnp2. 常见可禁用服务举例(根据业务需要判断):
bluetooth.service:蓝牙服务(服务器通常不需要)。cups.service:打印服务。avahi-daemon.service:零配置网络发现服务(常被用于内网探测)。postfix.service/sendmail.service:邮件服务(如果不需要本地发信)。rpcbind.service:RPC端口映射(除非有NFS等需求)。telnet.service:明文传输的远程登录(绝对禁用)。
禁用服务命令:
sudo systemctl stop servicename # 停止服务 sudo systemctl disable servicename # 禁止开机启动 sudo systemctl mask servicename # 屏蔽服务(防止被其他服务意外启动)7.2 端口扫描自检与隐藏
在整改完成后,使用工具从外部和内部两个角度扫描自己,验证效果。
# 1. 使用nmap扫描本地(检查监听) sudo nmap -sT -sU -p- 127.0.0.1 # 2. 从同一内网的另一台机器扫描目标服务器(检查防火墙规则是否生效) nmap -sS -p- 目标服务器IP # 3. 使用netcat或telnet测试特定端口是否真正开放 nc -zv 目标服务器IP 22 telnet 目标服务器IP 80端口隐藏技巧:对于必须开放但不想被扫描器轻易发现的端口,可以配置防火墙只允许特定的源IP访问,或者使用端口敲门(Port Knocking)等更高级的技术,但这会增加运维复杂度。对于等保测评,只要做到“非必要不开放”并有效记录即可。
8. 测评前后关键事项与持续运维
8.1 测评前自检清单
在提交给测评机构前,建议按照以下清单进行最终自查:
- [ ]身份鉴别:口令策略已生效(
chage -l检查);root远程登录已禁用;SSH密钥登录已配置;登录失败锁定已配置;会话超时已配置。 - [ ]安全审计:
auditd服务已启动,关键规则(文件、权限变更、用户登录)已配置并生成日志;aide数据库已初始化并完成首次检查。 - [ ]入侵防范:防火墙(
firewalld/ufw)已启用,默认策略为DROP,仅开放必要端口;sysctl安全参数已优化;不必要的服务已禁用。 - [ ]资源控制:
/etc/security/limits.conf已配置进程和文件数限制。 - [ ]漏洞与补丁:已使用
yum update --security或apt list --upgradable检查并安装所有安全更新;使用lynis或rkhunter进行了基线扫描,无高危发现。 - [ ]文档:所有整改操作均有记录(命令、时间、原因);当前运行的防火墙规则、监听端口、启动服务列表已导出备份。
8.2 测评常见问题与应对
- 问题:测评扫描器发现“SSH版本信息泄露”或“TLS/SSL弱加密套件”。
- 应对:修改
/etc/ssh/sshd_config中的Banner为无或自定义信息。对于Web服务(如Nginx/Apache),修改SSL配置,禁用SSLv2、SSLv3和已知不安全的加密套件(如RC4、DES、MD5)。
- 应对:修改
- 问题:测评要求“日志应保存180天以上”,但
/var/log空间不足。- 应对:配置
logrotate进行日志轮转和压缩,并将历史日志归档到其他存储或日志服务器。对于audit.log,在auditd.conf中设置num_logs和max_log_file。对于journald(系统日志),编辑/etc/systemd/journald.conf,设置SystemMaxUse=和MaxRetentionSec=。
- 应对:配置
- 问题:测评提出“应提供数据有效性校验功能”。
- 应对:这通常指应用层功能。在系统层面,可以强调我们使用了
aide进行文件完整性校验,并定期检查。同时,确保业务应用(如数据库)自身开启了校验和(checksum)功能。
- 应对:这通常指应用层功能。在系统层面,可以强调我们使用了
8.3 整改后持续运维建议
等保整改不是一次性项目,而是持续安全运营的起点。
- 自动化检查:将
aide --check、rkhunter --check、关键文件权限检查(如/etc/passwd、/etc/shadow的权限应为644和400)、可疑进程排查等命令编写成脚本,通过crontab每周或每月自动执行,并将报告发送邮箱。 - 集中日志管理:部署如
ELK(Elasticsearch, Logstash, Kibana)或Graylog等日志集中分析平台,将服务器上的audit.log、secure、应用日志等统一收集、分析和告警。 - 定期漏洞扫描:每月或每季度使用专业的漏洞扫描工具对服务器进行一次深度扫描,及时修复中高危漏洞。
- 配置变更管理:任何对系统配置、防火墙规则、用户权限的变更,都必须经过申请、审批、记录、验证的流程。可以使用
Git对/etc目录进行版本控制,或者使用Ansible、SaltStack等自动化工具管理配置,确保可追溯和可回滚。
最后,我想强调的是,等保整改的真正价值不在于那一纸测评报告,而在于通过这个过程,迫使团队建立起一套系统性的安全运维规范和意识。技术手段总会过时,但基于“最小权限”和“纵深防御”的安全思维,是应对未来未知威胁最可靠的保障。每次整改,都是一次对系统架构和安全理解的深化。把每次测评发现的问题,都当作优化自身安全水位的一次契机,这样的整改才有长远的意义。