个人站长必看:Linux 服务器安全加固完整清单

前言

很多个人站长觉得自己的网站小、没什么价值,黑客不会盯上,于是服务器装好之后就直接裸奔上线:root 密码是弱口令、SSH 端口用默认的 22、防火墙没开、系统补丁几个月不更新。这种心态非常危险,因为互联网上大量的攻击都是脚本化的:扫描器全天候扫描全网 IP 的开放端口,只要发现 22 端口可连,就会用常见密码字典疯狂爆破。你的网站可能没有人工黑客专门攻击,但绝对逃不过自动化扫描的洗礼。本文整理了一份个人站长可以直接照着做的 Linux 服务器安全加固清单,按顺序操作,能挡住绝大多数常见攻击。

一、SSH 安全加固(最重要的一步)

SSH 是管理服务器的唯一入口,也是被攻击最多的服务,所以先把它加固好。第一步,修改默认端口,把 22 改成其他端口,比如 2222,可以有效避开大量针对默认端口的扫描爆破。编辑 /etc/ssh/sshd_config:

Port 2222

第二步,禁用 root 直接登录,改用普通用户登录后再通过 sudo 提权。因为 root 用户名是公开的,爆破 root 密码是黑客最常用的手段,禁掉 root 直接登录能直接断掉这条路:

PermitRootLogin no

第三步,也是最关键的,配置 SSH 密钥登录并禁用密码登录。先在本地生成密钥对,再把公钥传到服务器:

ssh-keygen -t ed25519
ssh-copy-id -p 2222 user@your-server-ip

确认公钥登录没问题之后,把 sshd_config 里的 PasswordAuthentication 改为 no,然后重启 SSH 服务:

systemctl restart sshd

这里要特别提醒:修改 SSH 配置前,一定要先开一个新的 SSH 会话保持连接,再执行重启操作,否则一旦配置写错,你可能会被锁在服务器外面,到时候只能去服务商的控制台用 VNC 救援,非常麻烦。

二、安装 fail2ban 防暴力破解

即使禁用了密码登录,SSH 的爆破尝试依然会消耗服务器资源,而且如果还有其他服务用密码认证(比如 FTP、Web 后台登录),暴力破解的威胁依然存在。这时候就需要 fail2ban 出场了。fail2ban 会监控日志文件,发现某个 IP 在短时间内多次登录失败,就自动用防火墙规则封禁这个 IP 一段时间:

apt install -y fail2ban
systemctl enable --now fail2ban

默认配置已经包含 sshd 的防护规则,也可以按需自定义。比如把 /etc/fail2ban/jail.local 里 sshd 的 maxretry 设为 3、bantime 设为 3600,表示同一 IP 尝试失败 3 次就封禁 1 小时。查看当前封禁情况用:

fail2ban-client status sshd

三、配置防火墙:只开放必要的端口

防火墙的原则很简单:默认拒绝,只放行真正需要的端口。Debian/Ubuntu 用 ufw,CentOS 用 firewalld。以 ufw 为例:

ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp   # 你的 SSH 端口
ufw allow 80/tcp     # HTTP
ufw allow 443/tcp    # HTTPS
ufw enable

配置完成后,用 ufw status 确认规则生效。如果网站还要用其他端口(比如 FTP 的 21、数据库的 3306),再按需放行,但数据库端口建议只允许内网访问,不要对公网开放。很多服务器被入侵,就是 3306、6379(Redis)这类数据库端口裸奔在公网上,被扫描器直接连上,连密码都没设。

四、及时更新系统补丁

系统软件的安全漏洞是黑客最常用的突破口,而补丁修复往往滞后于漏洞公开,所以及时更新非常重要。养成定期更新的习惯:

apt update && apt upgrade -y

手动更新容易忘记,可以配置自动安全更新。Debian/Ubuntu 安装 unattended-upgrades 并启用即可:

apt install -y unattended-upgrades
dpkg-reconfigure unattended-upgrades

它会自动安装安全相关的更新,内核更新则会在重启后生效。个人站长每月手动执行一次完整的 apt upgrade,加上自动安全更新兜底,基本就够用了。注意升级前最好先备份,或者至少在流量低峰期操作,避免依赖冲突导致服务异常。另外,不只是系统要更新,网站程序、主题、插件同样要及时升级,WordPress 这类 CMS 的插件漏洞是被入侵的重灾区,很多攻击事件都是因为插件长期不更新被利用的,这一点和系统补丁同样重要。

五、Web 目录与文件权限加固

网站被入侵后,攻击者往往会在 Web 目录里写入后门文件(常见的是一句话木马),通过 HTTP 就能远程执行命令。所以文件权限设置要遵循最小权限原则:目录设为 755,普通文件设为 644,只有属主可以写:

find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;

如果网站有上传目录(比如 WordPress 的 wp-content/uploads),要禁止 PHP 在目录里执行。Nginx 下可以在对应 location 里加一行:

location ~* /uploads/.*\.(php|php5)$ { deny all; }

另外要定期检查 Web 目录里有没有可疑文件,比如最近被修改过的 PHP 文件:

find /var/www -name "*.php" -mtime -7

看到不认识的、修改时间异常的文件就要提高警惕,立刻检查内容。

六、入侵检测与日志审计

安全防护不可能 100% 拦截所有攻击,所以监控和审计不能少。先看登录记录,检查有没有异常的登录成功或失败:

last -20        # 最近登录记录
lastb -20       # 登录失败记录
journalctl -u ssh -n 50

如果发现大量来自陌生 IP 的登录成功记录,说明服务器可能已经被入侵,要立即改密码、查后门。其次可以用 Rootkit 扫描工具做定期体检:

apt install -y rkhunter chkrootkit
rkhunter --check --skip-keypress
chkrootkit

这两个工具会检查系统里是否被植入了 Rootkit(一种隐藏后门的恶意程序)。最后,检查定时任务和启动项,这是后门常驻的地方:

crontab -l
ls -la /etc/cron.d/
systemctl list-units --type=service --state=running

看到可疑的定时任务或陌生服务,先用 systemctl disable 停掉,再排查它的来源。另外建议把 /var/log/auth.log 的日志单独保存一份,万一服务器被入侵,日志是定位入侵途径的唯一线索。

七、常见入侵路径自查与应急处理

最后分享几条自查和应急的经验,万一网站真的被入侵了,不至于手忙脚乱。常见的入侵路径无非几条:一是弱口令被爆破,尤其是 SSH、数据库、后台管理入口;二是网站程序漏洞,比如 WordPress 插件漏洞、文件上传漏洞被利用;三是中间件漏洞,比如老版本 Nginx、PHP、Tomcat 的已知 CVE。所以自查时重点检查这几处:所有账号的密码强度、网站程序及插件是否最新、有没有陌生的 PHP 文件落地。

一旦确认被入侵,按以下顺序处理:第一步立刻断开外网或至少修改所有密码,包括 SSH、数据库、后台、服务商控制台密码;第二步在 Web 目录和定时任务里查找并删除后门文件,注意查 /tmp、/var/tmp、/dev/shm 这些常见藏身处;第三步用 rkhunter 和 chkrootkit 全面扫描,同时查看 auth.log 里有没有异常登录记录;第四步检查网站代码有没有被篡改,和备份对比差异;第五步清理干净后升级所有软件、重置权限,最后恢复数据。整个过程保持冷静,千万别急着直接重装系统,先保留日志和现场,很多信息一旦丢失就再也找不回来了。

八、总结

服务器安全没有一劳永逸的解决方案,而是一个持续的过程。对个人站长来说,把基础打牢就赢了九成:SSH 用密钥登录并禁 root、开 fail2ban、防火墙最小开放、及时打补丁、Web 目录权限收紧、定期检查日志和后门。这套组合拳的成本几乎为零,但能把绝大多数自动化攻击挡在门外。最后再啰嗦一句:安全加固做得再好,也别忘了定期备份数据,备份才是应对一切灾难的最终保险。

Last modification:August 1st, 2026 at 08:16 am

Leave a Comment