CentOS作为企业环境中常见的Linux发行版,其默认安装虽然稳定,但面对互联网上的自动化扫描和恶意程序投放并不足够安全。要从系统层面防范恶意软件和病毒入侵,需要结合网络隔离、权限约束、文件查杀与定期审计多种机制,形成纵深防御。
一、使用firewalld限制网络暴露面
恶意软件通常借助开放的服务端口入侵系统,因此第一步是缩小攻击面。CentOS 7及以上版本默认使用firewalld作为动态防火墙管理工具,相比传统的iptables脚本,它支持运行时与永久配置分离,降低误操作风险。
我们可以先查看当前开放的端口与服务,然后仅保留业务必需的入口。例如Web服务器只需开放80与443,其余如22端口应限制来源IP。下面的命令演示了如何关闭不必要的服务并放行特定地址的SSH:
# 查看当前活跃区域及允许的服务 firewall-cmd --list-all # 移除默认ssh服务(避免对所有IP开放) 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调整策略而非关闭。比如Web目录若需写入上传文件,应打上正确的httpd_sys_rw_content_t类型,而不是放宽全局规则:
# 确认当前模式 getenforce # 若需临时调试可设为permissive,但生产应回归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安装后,应配置定时任务更新病毒库并扫描关键路径。以下示例展示了基础用法与计划任务设置:
# 安装软件 yum install -y clamav clamav-update chkrootkit # 手动更新病毒库 freshclam # 扫描/home目录并输出报告 clamscan -r /home --log=/var/log/clamav/scan.log # 运行rootkit检测 chkrootkit
为避免每次手动操作,可将更新与扫描写入cron。注意病毒库体积较大,更新应选在流量低谷。扫描时若发现已知恶意特征,ClamAV能隔离而非直接删除,防止误删业务文件。
chkrootkit结果需人工核对,因为某些正常内核模块可能被误报。结合两者输出,可形成对持久化恶意程序的发现能力,尤其适合多用户共享的编译机或跳板机。
四、建立账号与定时任务审计机制
入侵者常通过添加后门账号或植入cron任务维持权限。系统管理员应定期检查/etc/passwd中UID为0的账户,以及/var/spool/cron下异常条目。
可用简单脚本汇总风险点,并接入日志平台。示例如下:
# 列出具有root权限的账号
awk -F: '($3==0){print $1}' /etc/passwd
# 检查所有用户的cron任务
for u in $(cut -f1 -d: /etc/passwd); do
crontab -l -u $u 2>/dev/null
done除了人工检查,建议启用auditd监控敏感文件修改,当/etc/cron.d或ssh密钥被改动时触发告警。对于不再使用的测试账号,及时用userdel清除并移走家目录,缩小内部威胁面。
综合来看,CentOS的防护不是单一工具能解决的。从防火墙到SELinux,再到查杀与审计,每一层都填补了不同维度的缺口。按照上述配置实践,即便面对自动化攻击浪潮,也能将绝大多数恶意软件阻挡在系统之外。