判断Linux系统是否被入侵需通过行为审计和基线比对:检查异常进程(ps auxf)、非标端口监听(ss -tulnp)、近期配置变更(find /etc)、非常规登录(last/journalctl);同时禁用root直接登录、收紧sudo权限、启用4个关键sysctl防护参数,并正确配置fail2ban。
Linux 上没有传统“杀毒软件”概念,靠的是行为审计和基线比对。关键不是找木马文件,而是发现异常进程、网络连接和权限变更。
ps auxf --sort=-%cpu | head -20 快速看 CPU 占用异常的进程,特别注意路径含 /tmp、/dev/shm 或无名二进制(如 [kthreadd] 伪装)ss -tulnp 查监听端口,重点检查非标准端口(如 :31337、:6666)是否绑定到未知用户或 root 以外的 UIDfind /etc -type f -mtime -1 -ls 2>/dev/null 找近期被修改的系统配置,比如 /etc/passwd、/etc/crontab、/etc/pam.d/ 下文件last -n 30 和 journalctl -u sshd --since "2 weeks ago" | grep "Accepted",留意非常规时间或 IP 的成功登录允许 root 直接登录是多数入侵链路的起点;而 sudo 配置不当则让普通用户一步提权。必须切断这两条通路。
/etc/ssh/sshd_config,确保 PermitRootLogin no,然后 systemctl restart sshd
PermitEmptyPasswords no 和 UsePAM yes 必须同时存在visudo 删除 %wheel ALL=(ALL) NOPASSWD: ALL 这类宽泛规则;只给必要命令加 NOEXEC(如 /bin/systemctl start nginx)requiretty(默认开启),防止 cron 或 webshell 中的 sudo 绕过 TTY 检查网上流传的 sysctl.conf 优化清单里 70% 对现代内核无效或自相矛盾。以下四个在 CentOS 8+/Ubuntu 20.04+ 实测可阻断常见利用手法:
net.ipv4.conf.all.rp_filter = 1:启用反向路径过滤,大幅降低 IP 欺骗成功率kernel.exec-shield = 1(仅 RHEL/CentOS)或 kernel.randomize_va_space = 2(通用):强制 ASLR,让栈溢出利用失败率提升 90%+fs.suid_dumpable = 0:禁止 SUID 程序生成 core dump,避免敏感内存泄露vm.mmap_min_addr = 65536:抬高用户空间 mmap 起始地址,封死 NULL 指针解引用类漏洞利用路径设置后执行 sysctl -p 生效,但需确认应用无 mmap(0) 调用(极少见)。
fail2ban 不是装上就自动防爆破,日志路径错、正则不匹配、jail 未启用,三者任一出问题都会导致完全静默。
grep "auth.log\|secure" /etc/fail2ban/jail.local,然后手动 tail -f /var/log/auth.log 看是否有 SSH 登录失败记录(如 Failed password for.*from)fail2ban-regex /var/log/auth.log /e
tc/fail2ban/filter.d/sshd.conf 测试,输出中 Lines: 12345 (12345), match: 123 表示命中率达标fail2ban-client status sshd 返回 Status for the jail: sshd 且 Number of jail matches > 0;若为 0,检查 enabled = true 是否写在 [sshd] 段下而非全局段别忽略 SELinux —— 如果系统启用了 enforcing 模式,fail2ban 的 iptables 规则可能被拦截,此时要加 setsebool -P fail2ban_iptables on。