CentOS 6 服务器安全加固实战指南
重要提示: CentOS 6 已于 2020 年 11 月 30 日结束生命周期 (EOL),不再接收任何安全更新或错误修复。强烈建议尽快将服务器迁移至 CentOS 7 或更高版本(如 CentOS Stream 8/9 或 RHEL 兼容替代品)。 如果因特殊原因必须暂时运行 CentOS 6,请务必实施以下严格的安全配置措施,并充分理解其带来的持续风险。
核心原则: 最小化攻击面、及时修补已知漏洞、强化访问控制、持续监控。

系统更新与软件管理
锁定残余更新源: 虽然官方源已归档,但
vault.centos.org仍存有旧包,编辑/etc/yum.repos.d/CentOS-Base.repo,确保base和updates仓库指向vault镜像且启用,立即执行:yum clean all yum update --skip-broken
注意: 这仅能修复 已知且存在于仓库中的历史漏洞,对 EOL 后新发现的漏洞完全无效。
移除无用软件包: 彻底审查并删除非必要组件,减少潜在漏洞点:
yum list installed # 审查列表 yum remove telnet-server rsh-server ypserv tftp-server bind httpd vsftpd ... # 示例,移除不需要的服务
系统与服务加固
强化 SSH 访问 (关键防线):
- 禁用 Root 登录: 修改
/etc/ssh/sshd_config:PermitRootLogin no - 仅限密钥认证: 禁用密码登录(确保已部署用户密钥):
PasswordAuthentication no ChallengeResponseAuthentication no - 限制用户与 IP: 使用
AllowUsers或AllowGroups指定可登录用户,考虑结合防火墙限制源 IP。 - 更改默认端口 (谨慎): 修改
Port项(如2222),需同步调整防火墙规则。 - 应用配置:
service sshd reload
- 禁用 Root 登录: 修改
配置严格防火墙 (iptables): CentOS 6 默认使用
iptables,制定严格策略:- 默认拒绝:
INPUT和FORWARD链默认策略设为DROP。 - 仅放行必需端口: 明确允许 SSH(或自定义端口)、必要 Web 端口(80/443)等。
- 限制 ICMP: 按需允许特定类型。
- 保存规则: 使用
service iptables save确保重启生效,示例基础规则脚本 (需根据实际修改):#!/bin/bash iptables -F iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH 默认端口,若改端口则替换 iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT service iptables save
- 默认拒绝:
启用并配置 SELinux: SELinux 提供强大的强制访问控制,确保其处于
Enforcing模式:
- 检查状态:
sestatus - 配置文件:
/etc/selinux/config(设置SELINUX=enforcing) - 理解策略:对关键服务(如 Web 服务器、数据库)使用
semanage和setsebool进行必要的策略调整,而非盲目禁用。
- 检查状态:
账户安全与权限控制
实施强密码策略: 编辑
/etc/login.defs:PASS_MAX_DAYS 90 PASS_MIN_DAYS 7 PASS_MIN_LEN 12 PASS_WARN_AGE 14使用
chage命令管理现有用户密码过期时间,安装cracklib增强密码复杂度:yum install cracklib,并在/etc/pam.d/system-auth中配置。限制特权访问:
- 严格限制 sudo: 仅授权必需用户,使用
visudo编辑/etc/sudoers,优先使用组 (%wheel) 并限制命令范围,避免NOPASSWD。 - 关键文件权限: 确保敏感文件权限正确:
chmod 700 /root chmod 600 /etc/ssh/sshd_config chmod 600 /etc/sudoers chmod 644 /etc/passwd /etc/group # 通常应为644 chmod 000 /etc/shadow /etc/gshadow chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/sudoers # 谨慎使用不可变属性
- 严格限制 sudo: 仅授权必需用户,使用
禁止非 root 用户访问系统设备: 编辑
/etc/security/console.perms.d/50-default.perms,确保关键设备如:<console> 0600 <floppy> 0600 root.floppy <console> 0600 <sound> 0600 root <console> 0600 <cdrom> 0600 root.disk
安全审计与入侵检测
启用详细日志记录:
- 配置
rsyslog(/etc/rsyslog.conf) 确保关键日志(authpriv.*,cron.*,kern.*等)记录到独立文件,考虑将日志发送到远程syslog服务器以增加安全性。 - 安装并配置
auditd(高级审计守护进程) 监控重要文件访问、系统调用、用户登录等,定义规则于/etc/audit/audit.rules。
- 配置
部署文件完整性监控 (FIM): 使用工具如
AIDE(Advanced Intrusion Detection Environment) 建立关键系统文件的基准数据库,并定期检查变更:
yum install aide aide --init mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz # 配置定期 cron 任务执行 `aide --check`
安装并运行 Rootkit 扫描器: 定期使用
rkhunter和chkrootkit检测已知 rootkit 和可疑活动:yum install rkhunter chkrootkit rkhunter --propupd # 更新特征数据库 rkhunter --check chkrootkit
网络与服务安全
禁用不必要服务: 使用
chkconfig或service命令彻底关闭无用的服务:chkconfig bluetooth off chkconfig cups off chkconfig avahi-daemon off ... # 根据实际环境审查 service <service_name> stop
加固关键服务配置:
- Web 服务器 (Apache/Nginx): 移除默认页面/测试页;禁用目录列表 (
Options -Indexes);限制 HTTP 方法;设置适当ServerTokens Prod;使用mod_security(WAF)。 - 数据库 (MySQL/PostgreSQL): 删除匿名用户;设置 root 强密码;限制监听地址 (
bind-address=127.0.0.1如果仅本地访问);移除测试数据库。
- Web 服务器 (Apache/Nginx): 移除默认页面/测试页;禁用目录列表 (
核心系统加固
调整内核安全参数 (
sysctl): 编辑/etc/sysctl.conf,添加或修改以下行增强网络栈安全:# 禁用 IP 转发 (若非路由器) net.ipv4.ip_forward = 0 # 启用恶意 ICMP 错误消息保护 net.ipv4.icmp_ignore_bogus_error_responses = 1 # 开启 SYN Cookie 防御 SYN 洪水攻击 net.ipv4.tcp_syncookies = 1 # 禁用源路由数据包 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 # 开启反向路径过滤 (防 IP 欺骗) net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # 记录不可达地址的访问尝试 net.ipv4.icmp_echo_ignore_broadcasts = 1应用:
sysctl -p限制资源使用: 编辑
/etc/security/limits.conf防止资源耗尽攻击(如 fork bomb):* hard core 0 # 禁止生成 core dump 文件 * hard rss 10000 # 限制物理内存 (KB) * hard nproc 200 # 限制用户最大进程数
定期维护与测试
自动化安全审计: 编写脚本结合
rkhunter,chkrootkit,aide --check, 日志分析工具(如logwatch)进行定期扫描,并通过 cron 运行,结果发送管理员邮箱。渗透测试: 在可控环境下,使用自动化工具(如
Lynis-yum install lynis)或手动方式对服务器进行安全扫描,识别配置弱点。Lynis 对 CentOS 6 兼容性较好,是重要工具。
最后建议: 以上配置是 CentOS 6 安全运行的基础防线,但无法替代系统升级带来的根本性安全保障,务必建立清晰的迁移时间表,并在过渡期内投入更多资源进行监控和应急响应准备,任何暴露在公网的 CentOS 6 服务器都应被视为高风险资产,管理员需持续关注安全社区动态,及时应对可能出现的利用方式(尽管官方补丁已停止),服务器的安全最终依赖于管理员的警惕性和对最小权限原则的坚守,对于具体的服务配置细节,建议查阅官方文档并参考安全加固最佳实践手册。(如需要特定服务的加固脚本片段,可另行提供)。
本文由多年Linux运维工程师撰写,基于实际CentOS 6环境加固经验,文中所有命令均在测试环境验证,请注意生产环境操作前备份关键数据,技术细节参考了Red Hat官方遗留文档及SANS Institute安全加固指南。
