Linux服务器安全加固实操:从SSH到防火墙的零基础配置清单
Linux服务器安全加固的核心思路是减少暴露面、限制登录来源、及时修补漏洞。
对于刚上手的用户,不需要一次做完所有高级配置,先把下面这几项基础项改好,就能挡掉大部分自动化扫描和弱口令尝试。
操作前需要确认的环境信息
开始前先登录服务器,确认系统版本和当前登录方式,避免改完配置把自己关在门外。
cat /etc/os-release
whoami
ss -tlnp | grep :22
如果输出显示 sshd 监听在 0.0.0.0:22,说明所有IP都能尝试SSH连接。
随后所有修改建议在本地保留一个已登录的SSH窗口,不要关闭,方便出错时回滚。
SSH服务加固:改端口、禁root、限重试
SSH是服务器最常见的入口,先从这里下手。
编辑配置文件:
sudo vi /etc/ssh/sshd_config
找到并修改以下参数,没有的就手动添加:
Port 22022
PermitRootLogin no
MaxAuthTries 3
PasswordAuthentication yes
说明:
Port 22022:把默认22端口改成其他端口,降低被批量扫描的概率。改完记得在防火墙放行新端口。PermitRootLogin no:禁止root用户直接SSH登录,先用普通用户登录再su或sudo。MaxAuthTries 3:密码尝试超过3次断开连接。PasswordAuthentication yes:如果已经配置好密钥登录,可以改为no,完全禁用密码。
改完后检查语法并重启服务:
sudo sshd -t
sudo systemctl restart sshd
验证方式:不要关闭当前窗口,另开一个终端用新端口连接:
ssh -p 22022 你的用户名@服务器IP
能登录说明配置生效。
如果连不上,回到原窗口把端口改回22,检查防火墙是否放行。
防火墙只放行必要端口
以 firewalld 为例(CentOS 7+、Rocky Linux 常见):
sudo firewall-cmd --permanent --add-port=22022/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
如果系统用的是 ufw(Ubuntu/Debian 常见):
sudo ufw allow 22022/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status
放行规则只保留业务需要的端口,数据库端口如3306、6379不要对公网开放,需要时通过内网IP或SSH隧道访问。
用户权限与sudo管理
日常操作不要直接用root。
创建一个普通用户并加入sudo组:
sudo useradd -m -s /bin/bash deploy
sudo passwd deploy
sudo usermod -aG wheel deploy # CentOS/Rocky
# 或
sudo usermod -aG sudo deploy # Ubuntu/Debian
验证sudo权限:
su - deploy
sudo whoami
输出 root 说明sudo配置正常。
之后用 deploy 用户登录,需要提权时加 sudo。
同时检查是否有异常账户:
awk -F: '$3>=1000 && $3<65534 {print $1}' /etc/passwd
除自己创建的用户外,出现不认识的账户要排查来源。
自动安全更新与日志检查
及时打补丁能减少已知漏洞被利用的风险。
CentOS/Rocky 可安装 dnf-automatic:
sudo dnf install -y dnf-automatic
sudo vi /etc/dnf/automatic.conf
将 apply_updates 改为 yes,然后启用:
sudo systemctl enable --now dnf-automatic.timer
Ubuntu/Debian 使用:
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
日志方面,定期查看登录失败记录:
sudo grep 'Failed password' /var/log/secure # CentOS/Rocky
sudo grep 'Failed password' /var/log/auth.log # Ubuntu/Debian
如果同一IP频繁出现失败记录,可以考虑用 fail2ban 自动封禁,但那是进阶项,先把基础加固做完。
容易踩坑的地方
- 改SSH端口前没放行防火墙:重启sshd后新端口连不上,旧端口又关了,只能通过VNC或救援模式进去改。
- 禁用root登录后没有普通用户可sudo:直接把自己锁在外面。改
PermitRootLogin no之前,先确认普通用户能sudo。 - 自动更新在业务高峰期重启服务:生产环境建议先了解更新策略,必要时只下载不自动安装,或设置维护窗口。
- 只改配置不验证:每次修改后都要用新连接测试,不要只看配置文件内容。
加固后怎么确认生效
完成上述步骤后,逐项检查:
ss -tlnp | grep sshd
sudo firewall-cmd --list-all # 或 sudo ufw status
sudo grep -E 'PermitRootLogin|Port|MaxAuthTries' /etc/ssh/sshd_config
再用另一台机器尝试用root和旧端口连接,应该被拒绝。
如果都能按预期拒绝,说明基础加固已经生效。
后续可以再考虑密钥登录、fail2ban、入侵检测等更细的配置。
常见疑问
改SSH端口后宝塔面板还能用吗?
宝塔面板的SSH管理功能依赖SSH服务,只要sshd正常运行,端口变化不影响面板本身。
但面板的“终端”功能如果走SSH连接,需要在面板设置里同步修改端口。
禁用密码登录后忘记密钥怎么办?
如果已经禁用密码且丢失密钥,需要通过云服务商的VNC控制台或救援模式进入系统,重新启用密码登录或添加新密钥。
建议在禁用密码前先确认密钥登录可用。
自动更新会不会导致服务器自动重启?
默认配置下 dnf-automatic 和 unattended-upgrades 通常只更新软件包,不自动重启。
涉及内核更新时,重启需要手动执行或配置维护窗口,具体行为取决于配置文件中的 reboot 相关选项。
防火墙放行了端口但服务还是连不上?
先确认服务本身监听在 0.0.0.0 而不是 127.0.0.1,再检查云服务商的安全组是否放行,最后确认SELinux状态(getenforce)。
这三层都可能拦截连接。
安全加固不是一次性的任务,建议每隔一段时间复查SSH配置、防火墙规则和登录日志。
先把本文的基础项做完,再根据业务需要逐步增加防护措施。