CentOS系统的安全防护,本质上是一场持久战。攻击者手中的exploit工具不断更新换代,但防御的核心思路始终不变:尽可能缩小攻击面,严格执行最小权限原则,并将监控覆盖到每一个细节。以下十条措施是经过实战反复验证的基础防线,每一条都值得认真执行。
1. 及时更新系统与软件 – 这是最基础但最容易忽略的一环。保持CentOS系统及所有软件包处于最新状态,相当于为系统接种了疫苗。定期运行sudo yum update或sudo dnf update,并优先安装安全补丁(使用sudo yum --security update单独更新)。更省心的做法是启用自动更新:安装yum-cron,编辑/etc/yum/yum-cron.conf,将apply_updates=yes和update_cmd=security配置好,系统就能自动获取最新安全修复,免除人工监控的麻烦。
2. 强化SSH安全 – SSH是远程管理的“大门”,如果门没锁好,其他防御都形同虚设。以下三条必须落实:
- 禁用root登录:修改
/etc/ssh/sshd_config,设置PermitRootLogin no,禁止直接以root身份远程登录; - 修改默认端口:将22端口改为非标准端口(例如2222),可大幅降低被自动化扫描工具发现的风险;
- 采用密钥认证:生成SSH密钥对(
ssh-keygen -t rsa),将公钥复制到服务器(ssh-copy-id user@server),然后禁用密码登录(PasswordAuthentication no)。这样一来,暴力破解基本失效。
3. 配置防火墙限制访问 – CentOS自带的firewalld正是为此而生,别让它闲置:
- 只开放必要的服务端口,例如HTTP的80、HTTPS的443、SSH的22(或自定义端口),通过
sudo firewall-cmd --permanent --add-service=http或--add-port=80/tcp添加; - 默认区域设为
public(sudo firewall-cmd --set-default-zone=public),拒绝所有未明确允许的流量; - 对敏感端口(如SSH)可限制特定IP访问,使用
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept',仅允许信任的IP连接; - 修改后记得执行
sudo firewall-cmd --reload使规则生效。
4. 启用SELinux强制访问控制 – 很多管理员嫌麻烦直接关闭SELinux,这是危险的习惯。SELinux通过强制访问控制(MAC)限制进程权限,能有效降低exploit成功后的破坏范围。确保它处于enforcing模式(sudo setenforce 1),并修改/etc/selinux/config中的SELINUX=enforcing使其永久生效。当然,根据应用需求调整策略(例如允许Apache访问特定目录),避免过于严格导致服务无法正常运行。
5. 安装安全工具辅助防护 – 仅靠系统自带功能还不够,几个经典辅助工具值得部署:
- Fail2Ban:自动封禁多次登录失败的IP,是防暴力破解的利器。安装命令
sudo yum install fail2ban,启动并设置开机自启sudo systemctl enable --now fail2ban; - rkhunter:扫描系统中是否存在rootkit(恶意软件),定期运行
sudo rkhunter --update && sudo rkhunter --check更新数据库并检查系统; - Auditd:记录系统审计日志,监控关键操作(如文件修改、用户登录)。安装命令
sudo yum install audit,启动服务sudo systemctl enable --now auditd,查看日志用sudo ausearch -m a vc -ts recent。
6. 限制用户权限 – 最小权限原则是安全界的铁律。避免使用root账户进行日常操作,创建普通用户并通过usermod -aG wheel username将其加入wheel组(这样可以使用sudo提权)。定期检查用户权限(通过sudo visudo查看sudoers文件,确保没有过度授权)。同时审查文件和目录权限(ls -l查看),利用chmod和chown确保敏感文件(如/etc/passwd、/etc/shadow)仅能被授权用户访问。
7. 监控与审计系统活动 – 系统出事后,日志是还原现场的唯一证据。启用审计守护进程(auditd),记录关键系统活动(用户登录、文件修改、服务启动等),通过ausearch分析日志。还可以使用Logwatch这类工具自动汇总日志信息,定期查看(sudo systemctl enable --now logwatch)。日常检查/var/log/messages和/var/log/secure,重点关注异常登录(例如陌生IP的SSH登录)和未授权的进程启动。
8. 定期备份重要数据 – 这不是防御手段,而是最后一道保险。遭受exploit攻击(如勒索软件加密文件)后,如果能快速恢复,损失会小得多。使用rsync(增量备份)或tar(全量备份)将数据备份至安全位置(外部存储设备或云存储),并定期测试备份的可恢复性——不要等到真出事了才发现备份无法使用。
9. 禁用不必要的服务与端口 – 每多开一个服务,就多一个被攻击的可能。通过systemctl命令禁用不需要的服务(如FTP、Telnet、Samba等),减少攻击面。查看运行中的服务:systemctl list-units --type=service,停止并禁用:sudo systemctl stop servicename && sudo systemctl disable servicename。同时通过firewalld删除未使用的端口规则,避免攻击者利用开放端口发起攻击。
10. 定期进行安全审计与漏洞扫描 – 安全不是一劳永逸,需要定期“体检”。使用漏洞扫描工具(如Nessus、OpenVAS)扫描系统,发现未修复的漏洞和配置错误。有条件的话,请专业团队做渗透测试,模拟攻击场景验证系统安全性。同时定期审查安全策略(密码策略、访问控制策略等),根据最新威胁情报调整防护措施。
这十条措施,每条都不复杂,但组合起来能形成一道有效的防线。关键在于坚持执行,不要等到出事了才想起补漏。
