判断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以外的 UID - 运行
find /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 登录与提权操作的最小可行配置
允许 root 直接登录是多数入侵链路的起点;而 sudo 配置不当则让普通用户一步提权。必须切断这两条通路。
- 禁用 root 密码登录:编辑
/etc/ssh/sshd_config,确保PermitRootLogin no,然后systemctl restart sshd - 禁止空密码登录:
PermitEmptyPasswords no和UsePAM yes必须同时存在 - 限制 sudo 权限:用
visudo删除%wheel ALL=(ALL) NOPASSWD: ALL这类宽泛规则;只给必要命令加NOEXEC(如/bin/systemctl start nginx) - 启用
requiretty(默认开启),防止 cron 或 webshell 中的 sudo 绕过 TTY 检查
sysctl 级防护中真正起效的 4 个参数
网上流传的 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 配置不生效的三个硬伤点
fail2ban 不是装上就自动防爆破,日志路径错、正则不匹配、jail 未启用,三者任一出问题都会导致完全静默。
- 确认日志路径真实存在且可读:
grep "auth.log\|secure" /etc/fail2ban/jail.local,然后手动tail -f /var/log/auth.log看是否有 SSH 登录失败记录(如Failed password for.*from) - 检查 filter 正则是否匹配实际日志格式:用
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf测试,输出中Lines: 12345 (12345), match: 123表示命中率达标 - 确认 jail 启用状态:
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。










