CentOS服务器默认安装后,很多端口、服务、认证策略都处于相对宽松的状态。直接把业务部署上去,等于把主机暴露在扫描器和自动化攻击脚本的射程内。高安全级别环境搭建不是装一个防火墙或者改个SSH端口那么简单,它是一套从系统分区、账户体系、服务裁剪、内核参数、审计日志到入侵检测的连贯动作。下面直接按生产环境可落地的顺序展开。
安装阶段就做安全隔离如果条件允许,不要在旧系统上做加固,而是重新安装CentOS 7或CentOS Stream 8/9时直接规划安全分区。/boot、/、/tmp、/var、/var/log、/home分开挂载,并给/tmp加上noexec,nosuid,nodev挂载选项。/tmp经常被用来放置提权脚本或webshell,禁止执行能直接阻断一大类攻击。示例挂载参数:
# /etc/fstab 中 /tmp 行示例 UUID=xxxx-xxxx /tmp xfs defaults,noexec,nosuid,nodev 0 0
安装包选择“最小安装”,不要装图形界面。每多一个软件包就多一块攻击面。CentOS最小化安装后连wget、telnet、net-tools都可能没有,按需安装即可。
第一时间锁定引导和内核物理机或虚拟机都要设置GRUB密码,防止有人通过单用户模式重置root密码。执行grub2-setpassword生成密码哈希,并更新配置。同时限制内核参数,在/etc/sysctl.conf中加入以下硬核配置:
# 禁止IP转发,除非做网关 net.ipv4.ip_forward = 0 # 开启反向路径过滤 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # 忽略ICMP重定向 net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 # 记录可疑包 net.ipv4.conf.all.log_martians = 1 # 开启SYN Cookie防护 net.ipv4.tcp_syncookies = 1 # 减少TIME_WAIT和SYN重试 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_keepalive_time = 300 net.ipv4.tcp_max_syn_backlog = 2048 net.ipv4.tcp_synack_retries = 2
执行sysctl -p立即生效。内核参数加固是防DDoS和中间人攻击的基础,很多教程只提防火墙,忽略了这一层。
账户和认证策略必须收紧CentOS默认允许root通过SSH密码登录,这是最危险的一点。先创建普通用户并加入wheel组,然后修改/etc/ssh/sshd_config:
PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes MaxAuthTries 3 LoginGraceTime 30 ClientAliveInterval 300 ClientAliveCountMax 2 AllowUsers youruser
重启sshd后,root无法直接登录,只能先以普通用户登录再su切换。密码认证关闭后,必须提前把公钥写入~/.ssh/authorized_keys,否则自己会被锁在外面。同时用chage命令设置密码复杂度和过期策略:
chage -M 90 -m 7 -W 14 youruser
系统账户方面,用awk -F: '$3==0 {print $1}' /etc/passwd检查UID为0的账户,除root外不应有其他。用userdel和groupdel清理不需要的账户和组,特别是games、ftp、operator这类默认账户。
服务裁剪比装防护软件更有效用ss -tulnp查看当前监听端口,只保留业务必需的。CentOS最小化安装一般只有sshd和chronyd,如果发现多余服务,用systemctl disable --now 服务名停用。特别注意以下几点:
1. 关闭postfix本地邮件服务,除非业务需要发信。很多扫描器会探测25端口。
2. 关闭avahi-daemon、cups、rpcbind,这些在服务器上毫无必要。
3. 如果必须开放Web端口,不要用系统自带的firewalld默认区域,而是创建自定义zone,只放行80和443。
firewall-cmd --permanent --new-zone=webzone firewall-cmd --permanent --zone=webzone --add-service=http firewall-cmd --permanent --zone=webzone --add-service=https firewall-cmd --permanent --zone=webzone --add-source=0.0.0.0/0 firewall-cmd --permanent --zone=public --remove-service=ssh firewall-cmd --permanent --zone=public --add-source=你的管理IP firewall-cmd --reload
这样SSH端口只对指定管理IP开放,Web端口对所有来源开放,其他全部丢弃。防火墙策略要默认拒绝,而不是默认允许再逐条封禁。
SSH加固再深入一层除了禁止root和密码登录,还可以做端口变更和访问控制。把默认22端口改成高位端口,比如22022,能过滤掉大部分自动化扫描。但端口变更不能替代密钥认证,只算额外一层。结合TCP Wrappers或firewalld的rich rule,只允许特定IP段访问SSH。如果有多台服务器,建议中间加一台跳板机,所有服务器SSH只对跳板机IP开放。
另外启用SSH日志详细记录,在sshd_config中设置LogLevel VERBOSE。检查/var/log/secure中是否有大量失败尝试,配合fail2ban自动封禁。fail2ban安装后创建jail.local,对sshd和httpd做监控:
[sshd] enabled = true port = 22022 maxretry = 3 bantime = 3600 findtime = 600
这样连续3次失败就封禁1小时,对暴力破解非常有效。
文件系统权限和完整性监控CentOS默认的umask是022,可以改为027,让新建文件默认去掉其他用户的读权限。在/etc/profile和/etc/bashrc中设置umask 027。对关键目录和文件做权限锁定:
chmod 600 /etc/shadow chmod 644 /etc/passwd chmod 600 /etc/ssh/sshd_config chmod 700 /root chmod 750 /var/log
安装AIDE做文件完整性监控。初始化数据库aide --init,然后定期执行aide --check。任何对/bin、/sbin、/usr/bin、/etc的非法改动都能被发现。把AIDE检查加入cron,每天凌晨执行并邮件通知。
对于Web目录,如果运行nginx或apache,确保Web进程用户对网站文件只有读权限,上传目录单独设置写权限且禁止执行PHP。用find命令查找所有可写目录:
find /var/www -type d -perm -o+w -exec ls -ld {} \;
发现权限过宽的目录立即收紧。
SELinux必须开启并正确配置很多教程为了方便直接关掉SELinux,这是高安全环境的大忌。SELinux是CentOS自带的最强访问控制机制,能有效限制服务被攻破后的横向移动。保持SELinux为enforcing模式,检查/etc/selinux/config:
SELINUX=enforcing SELINUXTYPE=targeted
如果业务程序因为SELinux报错,不要直接setenforce 0,而是用audit2allow分析日志,生成正确的策略模块。例如nginx需要访问非标准目录时:
grep nginx /var/log/audit/audit.log | audit2allow -M nginx_custom semodule -i nginx_custom.pp
这样既保留了SELinux的防护,又解决了业务兼容问题。对于Web服务,还可以用semanage设置httpd只能访问指定目录,进一步缩小攻击面。
审计和日志集中管理高安全环境必须有完整的审计记录。安装auditd并配置规则,监控关键文件和系统调用:
# /etc/audit/rules.d/audit.rules -w /etc/passwd -p wa -k identity -w /etc/shadow -p wa -k identity -w /etc/sudoers -p wa -k sudoers -w /var/log/ -p wa -k logs -a always,exit -F arch=b64 -S execve -k exec
重启auditd后,所有关键文件改动和命令执行都会被记录。日志不要只存在本机,用rsyslog转发到独立的日志服务器,防止入侵者清理痕迹。在/etc/rsyslog.conf中配置:
*.* @日志服务器IP:514
日志服务器同样做加固,并设置日志轮转和保留周期。审计日志是事后溯源的关键,没有日志的安全环境等于裸奔。
定期更新和漏洞扫描CentOS 7已经停止维护,如果还在使用,应尽快迁移到CentOS Stream或Rocky Linux、AlmaLinux等替代发行版。对于仍在维护的版本,配置yum-cron或dnf-automatic自动安装安全更新。执行yum update --security只更新安全补丁,减少业务中断风险。
安装lynis或使用OpenSCAP做合规扫描。lynis audit system能检查系统配置、权限、补丁状态,并给出加固建议。OpenSCAP可以对照PCI-DSS、CIS等安全基线生成报告,适合有合规要求的场景。扫描结果中的高危项要逐条处理,不能只看不修。
入侵检测和响应准备防火墙和权限控制是预防,入侵检测是最后一道防线。安装rkhunter和chkrootkit,定期扫描rootkit和可疑文件。配置ossec或wazuh做主机入侵检测,监控文件变化、日志异常、暴力破解。一旦检测到入侵迹象,要有明确的响应流程:隔离主机、保留证据、分析日志、修复漏洞、恢复业务。
高安全级别环境不是一次配置完就结束了,它是一个持续的过程。每次业务变更、每次系统更新、每次新增服务,都要重新评估安全策略。把上面的配置写成脚本或Ansible playbook,新装服务器直接套用,避免手工操作遗漏。安全加固的深度决定服务器在真实攻击面前的存活时间,这些配置每一条都有实际防御价值,不是纸面文章。
