
核心要点(TL;DR)
- 服务器防护是边界防火墙、系统加固、进程与权限控制的多层链路,缺一层就等于开了后门。
- 先收敛暴露面:只放行必要端口,默认拒绝入站,再谈主机层加固。
- SSH 是最高频入口,禁用密码登录并限制来源 IP 的收益远大于装一堆扫描器。
- 主机层防护的核心是最小权限加可审计:进程降权、文件只读、日志集中。
很多站长把服务器防护等同于「云控制台里配了安全组」,结果端口随手放开、SSH 允许密码登录、进程用 root 裸跑,一旦被扫到就整台沦陷。服务器防护本质是一条从边界防火墙到主机层的完整链路,任何一层失守,其他层都只是摆设。下面按「边界 → 系统 → 进程与权限 → 审计」逐层拆解,每一步都给可执行的命令和检查项。
一、先理清链路:服务器防护到底包含哪几层
把防护拆成四层,比笼统说「注意安全」有用得多:
- 边界层:云安全组、机房硬件防火墙、系统内 firewalld/nftables,负责决定哪些流量能进来。
- 系统层:内核参数、补丁版本、账号与 SSH 配置,决定攻击者拿到入口后能走多远。
- 进程与权限层:服务以什么身份运行、能读哪些文件、能否提权,决定失陷后的爆炸半径。
- 审计层:日志、基线核查、入侵检测,决定你多久能发现异常。
四层是串联关系,边界被绕过就看系统层,系统层被突破就看权限层,权限层失守就只能靠审计层止损。
二、边界层:默认拒绝,只放行必要端口
第一步永远是收敛暴露面。先看清当前开了什么:
ss -tulnp
firewall-cmd --list-all
nft list ruleset对照业务只保留 22(或自定义 SSH 端口)、80、443 等必要项,其余全部关闭。以 firewalld 为例:
firewall-cmd --permanent --set-default-zone=drop
firewall-cmd --permanent --zone=drop --add-service=ssh
firewall-cmd --permanent --zone=drop --add-service=https
firewall-cmd --reload云安全组同样遵循「默认拒绝入站、按需放行、限制来源 IP」。数据库端口(3306/6379/27017)绝不要对 0.0.0.0/0 开放,只允许应用服务器内网地址访问。这一步做完,扫描器能看到的攻击面会大幅缩小。
三、系统层:SSH 与补丁是最容易被突破的口子
SSH 是最高频入口。编辑 /etc/ssh/sshd_config,至少落实四项:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3改完先用 sshd -t 校验语法,保留一个已登录会话再 systemctl restart sshd,避免配置错误把自己锁在门外。同时安装 fail2ban 限制暴力破解:
dnf install -y fail2ban
systemctl enable --now fail2ban
fail2ban-client status sshd补丁方面,Debian/Ubuntu 用 unattended-upgrades,RHEL 系用 dnf-automatic,至少保证安全更新自动安装,内核更新后安排重启窗口。
四、进程与权限层:最小权限决定失陷后的爆炸半径
服务不要用 root 跑。以 Nginx 为例,确认 user nginx; 生效,工作进程为低权限账号;应用目录属主设为运行用户,权限收紧到 750:
chown -R app:app /var/www/app
chmod -R 750 /var/www/app
find /var/www/app -type f -perm -o+w -print最后一条用于揪出「所有人可写」的文件,这类文件是 webshell 落地的高发点。再检查 SUID 文件,非必要的去掉执行位:
find / -perm -4000 -type f 2>/dev/null同时确认关键目录不可写:/etc、/usr/bin、/root 不应被业务账号写入,可用 ls -ld 逐个核对。
五、审计层:没有日志的防护等于没有防护
至少开启三处日志:SSH 登录(/var/log/secure 或 auth.log)、系统审计(auditd)、应用访问日志。开启 auditd 监控关键文件变更:
auditctl -w /etc/passwd -p wa -k passwd_change
auditctl -w /root/.ssh -p wa -k ssh_key_change
aureport -k passwd_change日志建议集中到独立节点或日志服务,避免攻击者清日志后无从追溯。配合定期基线核查(端口、账号、SUID、计划任务、authorized_keys),把「配置漂移」当成告警项处理。
六、上线前自查清单
| 检查项 | 通过标准 |
|---|---|
| 入站端口 | 仅业务必需端口,来源受限 |
| SSH | 禁 root、禁密码、限尝试次数 |
| 补丁 | 安全更新自动安装 |
| 运行身份 | 服务非 root,目录无全局可写 |
| 日志 | 登录与关键文件变更可追溯 |
| 备份 | 异地备份可用且验证过恢复 |
在防护建议上,可借助 AegisX 的主机入侵检测与基线核查能力,把上述端口、账号、文件变更做成持续监控,减少人工巡检遗漏。行动建议:今天就按「边界收敛 → SSH 加固 → 权限收紧 → 日志开启」的顺序做一遍,每完成一层用对应命令复核,把结果记录成你自己的基线,后续每次上线对照检查。
常见问题(FAQ)
服务器已经开了云安全组,还需要装防火墙吗?
需要。安全组只保护云平台边界,一旦实例被横向访问、内网互访或误配规则,主机层就完全裸露。建议在系统内启用 firewalld 或 nftables 做第二道入站过滤,默认拒绝、按需放行,并保留日志便于审计,形成边界与主机双层防护。
怎么快速判断服务器有没有被入侵?
先看异常连接和进程:用 ss -tunp 查对外连接,ps aux 找高 CPU 或可疑路径进程,last 与 lastb 看登录记录。再核对 crontab、systemd 服务与 ~/.ssh/authorized_keys 是否被篡改,最后用 rpm -Va 或 debsums 校验关键文件完整性,异常项逐一确认。
SSH 加固最有效的几步是什么?
优先做四件事:禁用 root 直接登录、关闭密码认证改用密钥、限制来源 IP 或改非默认端口、开启失败锁定。改完先保留一个已登录会话再重启 sshd,避免把自己锁在门外,随后用 sshd -t 校验配置语法。
主机层防护要长期维护吗?
要。防护不是一次性配置,需定期更新补丁、复核开放端口与账号权限、检查日志告警。建议每月做一次基线核查,每次上线新服务后同步更新防火墙规则与最小权限,把变更纳入记录,才能持续有效。
小团队没有专职安全人员怎么落地?
按清单化推进即可:先收敛端口和 SSH,再开自动安全更新与日志集中,最后定期跑一次基线脚本。借助 AegisX 这类主机安全能力做入侵检测与基线核查,可减少人工巡检成本,把精力放在业务上。