CentOS作为企业环境中常见的Linux发行版,其默认安装虽然具备基础的安全配置,但面对互联网上大量自动化扫描、漏洞利用和恶意程序投放,仅靠默认设置远远不够。要从系统层面防范恶意软件和病毒入侵,需要将网络隔离、权限约束、文件查杀以及定期审计等机制结合起来,形成纵深防御。下文将从防火墙、强制访问控制、反恶意软件工具和账号审计四个方面展开说明。
一、使用firewalld限制网络暴露面
恶意软件在入侵服务器时,通常会先扫描常见服务端口,寻找弱口令或已知漏洞。因此,降低服务器对外的网络暴露面积是防护的第一步。CentOS 7及以上版本默认使用firewalld作为动态防火墙管理工具,它支持运行时配置与永久配置相互分离,管理员可以先用运行时规则测试,确认无误后再写入永久配置,减少因错误规则导致服务中断的风险。
在实际操作中,首先需要查看当前活跃区域中已放行的服务与端口,然后仅保留业务必需的入口。例如,一台Web服务器通常只需要对外开放80与443端口,22端口的SSH服务不应向全部地址开放,而应限制为特定的管理IP。下面的命令演示了如何移除默认的ssh服务,并利用rich rule为指定来源地址放行22端口:
# 查看当前活跃区域及允许的服务 firewall-cmd --list-all # 移除默认ssh服务,避免对所有IP开放22端口 firewall-cmd --permanent --remove-service=ssh # 允许指定管理IP访问22端口 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.1" port protocol="tcp" port="22" accept' # 重新加载配置使规则生效 firewall-cmd --reload
这种基于区域的规则管理方式,可以让服务器在公网环境下面临的探测行为大幅减少。需要注意,修改永久规则之后必须执行reload,否则重启后配置不会生效。对于数据库、缓存等内部服务,建议直接绑定到127.0.0.1,不要通过防火墙对外暴露,从源头上避免意外开放。
此外,还可以启用firewalld的日志记录功能,将被拒绝的连接记录下来,便于事后分析是否存在针对性扫描。配合fail2ban一类的工具自动识别并封禁暴力破解来源,可以进一步降低攻击者通过弱口令植入恶意程序的概率。
二、开启并正确配置SELinux
SELinux是CentOS自带的安全子系统,许多管理员为了省事会将其直接设置为disabled,这种做法等同于卸掉了进程权限隔离的护栏。SELinux通过强制访问控制(MAC)机制,使进程只能访问被明确标记为允许访问的资源,即使某个服务被恶意利用,攻击者也很难进一步读取系统敏感文件或执行提权操作。
建议始终保持enforcing模式,并使用semanage命令调整具体的策略规则,而不是为了解决问题直接关闭SELinux。例如,Web服务器的上传目录需要写入文件时,应当为该目录添加httpd_sys_rw_content_t类型,而不是放宽全局规则。下面的命令展示了模式查看、临时调试以及目录标记的基本方法:
# 确认当前SELinux模式 getenforce # 生产环境保持enforcing模式 setenforce 1 # 为上传目录添加可写类型 semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/uploads(/.*)?" restorecon -Rv /var/www/uploads
当恶意脚本试图越权读取/etc/shadow或者发起异常网络连接时,SELinux会进行拦截,并将相关记录写入/var/log/audit/audit.log。借助audit2why工具可以快速定位被拒绝的原因,从而判断是攻击行为还是业务配置遗漏,避免误判。
对于使用容器或自定义服务的场景,可以通过创建自定义策略模块,在保障安全的同时不阻碍业务正常运行。虽然SELinux的学习成本不低,但从长期来看,它是抵御提权类恶意软件和遏制漏洞利用深入的重要屏障。
三、部署ClamAV与chkrootkit进行文件查杀
Linux系统中传统意义上的文件病毒感染较少,但木马、挖矿脚本和rootkit等恶意程序并不罕见。ClamAV是一款开源的杀毒引擎,支持命令行扫描和定时更新病毒库;chkrootkit则专注于检测系统级后门以及被替换的关键命令。两者结合使用,可以覆盖文件感染与持久化后门两个主要风险面。
通过yum安装之后,应当先更新病毒库,再对关键目录进行扫描。ClamAV的clamscan命令支持递归扫描并输出报告,chkrootkit则可以直接运行。下面的示例展示了安装、更新、扫描和rootkit检测的基础流程:
# 安装ClamAV与chkrootkit yum install -y clamav clamav-update chkrootkit # 手动更新ClamAV病毒库 freshclam # 递归扫描/home目录并输出报告 clamscan -r /home --log=/var/log/clamav/scan.log # 运行rootkit检测 chkrootkit
为了避免每次都手动操作,可以将病毒库更新和扫描任务写入cron定时执行。病毒库体积较大,更新过程应安排在流量低谷时段进行,避免影响正常业务。ClamAV在发现已知恶意特征时通常可以先隔离而不是直接删除,这样能够防止误删重要业务文件。
chkrootkit的检测结果需要人工核对,因为部分正常的内核模块或环境特征可能被误报。综合ClamAV与chkrootkit的输出,可以形成对持久化恶意程序的有效发现能力,特别适合多用户共享的编译机、跳板机等容易成为攻击中转站的环境。
四、建立账号与定时任务审计机制
入侵者在获取系统权限后,通常会通过添加后门账号或者植入cron定时任务来维持长期访问。因此,系统管理员应当定期检查/etc/passwd中UID为0的账户,以及/var/spool/cron目录下是否存在异常条目。仅靠人工检查效率较低,可以借助简单脚本汇总风险点,并接入日志平台实现自动化告警。
下面的脚本示例用于列出具有root权限的账号,并遍历系统用户查看其crontab任务。通过定期运行,可以快速发现可疑的后门账号和计划任务:
# 列出UID为0的账户
awk -F: '($3==0){print $1}' /etc/passwd
# 遍历系统用户,检查其crontab任务
for u in $(cut -f1 -d: /etc/passwd); do
crontab -l -u "$u" 2>/dev/null
done
除了人工检查账号和cron任务之外,建议启用auditd服务,对敏感文件修改进行监控。例如,当/etc/passwd、/etc/cron.d或者SSH密钥文件发生变更时,auditd可以记录操作者与时间,便于事后追踪。下面的命令演示了如何添加审计规则:
# 监控/etc/passwd文件的写操作与属性变更 auditctl -w /etc/passwd -p wa -k passwd_change # 监控/etc/cron.d目录的变更 auditctl -w /etc/cron.d -p wa -k cron_change
对于不再使用的测试账号,应及时使用userdel命令清除,并移走其家目录,缩小内部威胁面。综合来看,CentOS的防护不是单一工具能够完成的。从防火墙到SELinux,再到反恶意软件查杀与账号审计,每一层都填补了不同维度的安全缺口。按照上述配置实践,即便面对自动化攻击浪潮,也能将绝大多数恶意软件阻挡在系统之外。