拾光札记

服务器安全加固清单

一台新 Linux 服务器上线前该做的安全配置:SSH 加固、防火墙、最小权限账号、自动更新、防爆破,可照着做。

买了一台云服务器,很多人装完环境就直接对外跑了。但公网上的机器,从开机第一分钟就在被扫描、被尝试爆破。这篇是一份能照着做的加固清单,适合刚拿到一台全新 Linux 服务器(Ubuntu / Debian / CentOS 类似)时过一遍。

说明:下面命令以 Ubuntu / Debian 为例。执行前请确认你还有另一个能连上服务器的方式(比如云厂商的网页控制台 / VNC),万一 SSH 配置改错被关在门外,还能进去救。

一、第一件事:更新系统

新系统往往带着一堆已知漏洞的旧软件包,先全部更到最新:

sudo apt update && sudo apt upgrade -y

CentOS / 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 防爆破
  • 开启自动安全更新
  • 关掉用不到的服务
  • 数据库等敏感端口不对公网开放
  • 重要数据定期异地备份

相关文章

本页目录