服务器安全加固清单
一台新 Linux 服务器上线前该做的安全配置:SSH 加固、防火墙、最小权限账号、自动更新、防爆破,可照着做。
买了一台云服务器,很多人装完环境就直接对外跑了。但公网上的机器,从开机第一分钟就在被扫描、被尝试爆破。这篇是一份能照着做的加固清单,适合刚拿到一台全新 Linux 服务器(Ubuntu / Debian / CentOS 类似)时过一遍。
说明:下面命令以 Ubuntu / Debian 为例。执行前请确认你还有另一个能连上服务器的方式(比如云厂商的网页控制台 / VNC),万一 SSH 配置改错被关在门外,还能进去救。
一、第一件事:更新系统
新系统往往带着一堆已知漏洞的旧软件包,先全部更到最新:
sudo apt update && sudo apt upgrade -yCentOS / RHEL 系用 sudo yum update -y 或 sudo dnf update -y。
二、别用 root 干活:建一个普通用户
直接用 root 跑一切,是最常见也最危险的习惯。一旦这个账号被攻破,整台机器就没了。正确做法是建一个普通用户,需要管理员权限时用 sudo。
# 新建用户(把 deploy 换成你想要的名字)
sudo adduser deploy
# 把它加入 sudo 组,让它能用 sudo
sudo usermod -aG sudo deploy之后日常都用 deploy 登录,root 只在必要时通过 sudo 临时提权。
三、SSH 加固(重点)
SSH 是公网机器被爆破最多的入口,这一节最关键。
1. 改用密钥登录,关掉密码登录
密码再复杂也怕被慢慢猜,密钥基本无法暴力破解。
先在你自己的电脑上生成密钥(如果还没有):
ssh-keygen -t ed25519 -C "your-email@example.com"再把公钥传到服务器(把用户名和 IP 换成你的):
ssh-copy-id deploy@你的服务器IP确认能用密钥登录成功之后,再去关掉密码登录(顺序别搞反,否则会把自己锁在外面)。
2. 修改 SSH 配置
编辑 /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config找到并修改这几项(没有就加一行):
# 禁止 root 直接用 SSH 登录
PermitRootLogin no
# 关闭密码登录,只允许密钥
PasswordAuthentication no
# 改掉默认 22 端口,减少一大半自动扫描(换成 1024-65535 里的一个数)
Port 2222改完保存,重启 SSH 服务:
sudo systemctl restart ssh⚠️ 改端口后,下次连接要带上端口号:
ssh -p 2222 deploy@你的IP。先开一个新终端测试能连上,再关掉旧连接,别一步到位把自己关外面。
四、配置防火墙:只开需要的端口
默认情况下机器上一堆端口是敞开的。原则是默认全关,只放行你真正用到的。Ubuntu 上用 ufw 最省事:
# 默认拒绝所有入站,放行所有出站
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 放行你改过的 SSH 端口(一定要先放这个,否则开启防火墙后连不上)
sudo ufw allow 2222/tcp
# 如果跑网站,放行 80 和 443
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 开启防火墙
sudo ufw enable
# 查看当前规则
sudo ufw status verbose记住:每多开一个端口,就多一个被攻击的面。数据库端口(如 MySQL 3306)绝大多数情况不该对公网开放,只在本机或内网访问。
五、防爆破:装 fail2ban
fail2ban 会盯着登录日志,发现某个 IP 反复尝试失败,就自动把它封一段时间。
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban它默认就会保护 SSH。想查看被封的 IP:
sudo fail2ban-client status sshd六、开启自动安全更新
漏洞天天有,靠人手动更新很难跟上。让系统自动装安全补丁:
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades七、其它好习惯
- 关掉用不到的服务:跑得越少,暴露面越小。用
sudo systemctl list-units --type=service看看开着哪些,不用的关掉。 - 定期看登录记录:
last(成功登录)、sudo lastb(失败尝试)能帮你发现异常。 - 重要数据定期备份,并且异地存一份:安全做得再好也可能出意外,备份是最后的保险。
- 不要在服务器上明文存密码 / 密钥:尤其是代码仓库里,别把数据库密码、API Key 直接写进去提交上去。
一页速查清单
- 系统更新到最新
- 建普通用户,日常不用 root
- SSH 改密钥登录、关密码登录、禁 root 登录、改默认端口
- 防火墙默认拒绝,只放行必要端口
- 装 fail2ban 防爆破
- 开启自动安全更新
- 关掉用不到的服务
- 数据库等敏感端口不对公网开放
- 重要数据定期异地备份