Linux安全加固新手实操指南:从登录保护到防火墙配置
很多刚接触Linux的朋友买了云服务器后,第一步就是安装软件,却忽略了最基础的安全加固。
这篇教程围绕 Linux安全加固 展开,我会从登录环节开始,一步步把服务器的漏洞补上。
整个过程不需要你懂太多原理,跟着命令敲就能完成。
准备工作:一台能连上的Linux机器
你需要一台已经安装好CentOS 7/8、Ubuntu 20.04/22.04或Debian的服务器。
如果你是使用云厂商(阿里云、腾讯云、华为云等)的实例,通常已经开启了root密码登录。
请确保你能通过终端工具(如Xshell、Putty或系统自带终端)用root账号和密码连上服务器。
重要提醒:在开始加固之前,请先检查系统是否已更新到最新的安全补丁。
执行以下命令:
# CentOS / RHEL
yum update -y
# Ubuntu / Debian
apt update && apt upgrade -y
更新完成后重启一次,让内核补丁生效。
第一步:禁用root直接登录,创建普通用户
root是Linux的最高权限账号,直接暴露给外网非常危险。
正确的做法是创建一个普通用户,赋予sudo权限,然后禁止root通过SSH登录。
- 用root登录服务器,创建新用户并设置密码:
useradd -m -s /bin/bash admin
passwd admin
*注意:把admin替换成你喜欢的用户名,密码要足够复杂。
*
- 将新用户加入sudo组(Ubuntu/Debian)或wheel组(CentOS/RHEL):
# Ubuntu/Debian
usermod -aG sudo admin
# CentOS/RHEL
usermod -aG wheel admin
- 测试新用户能否正常登录并用sudo执行命令:
su - admin
sudo whoami
如果返回root,说明sudo权限生效。
第二步:配置SSH密钥登录,修改默认端口
密码登录容易被暴力破解,密钥登录更安全。
同时修改SSH默认的22端口也能减少很多扫描。
生成并上传SSH密钥对
(如果你已经有一对密钥,可以跳过生成步骤,直接用ssh-copy-id上传)
- 在本地电脑上(Windows可以用PowerShell或Git Bash,Mac/Linux直接用终端)生成密钥:
ssh-keygen -t ed25519 -C "your_email@example.com"
一路回车即可。
- 将公钥上传到服务器的普通用户家目录下:
ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@你的服务器IP
如果提示权限问题,先用root执行chown -R admin:admin /home/admin再试。
修改SSH配置
编辑SSH服务端配置文件:
sudo vim /etc/ssh/sshd_config
找到并修改以下几行:
Port 2222 # 将22改成其他数字(如2222)
PasswordAuthentication no # 禁用密码登录
PubkeyAuthentication yes # 确保启用密钥验证
PermitRootLogin no # 禁止root直接登录
避坑提示:在修改前,建议先不退出当前SSH连接,另开一个终端测试新配置是否生效,避免把自己锁在外面。
如果要使用新端口(如2222),一定要记住先开放防火墙规则(下一步)。
保存后重启SSH服务:
sudo systemctl restart sshd
现在,用root直接连接会失败,只能通过普通用户+密钥登录。
第三步:配置防火墙,只开放必要端口
很多服务器默认没有启用防火墙,或者只是简单放行所有流量。
我们需要用UFW(Ubuntu)或firewalld(CentOS)来设置规则。
Ubuntu/Debian使用UFW
- 安装并启用UFW:
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
- 开放SSH新端口(比如2222)以及其他服务端口(如HTTP 80、HTTPS 443):
sudo ufw allow 2222/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
- 启动防火墙:
sudo ufw enable
输入y确认。
查看状态:sudo ufw status verbose。
CentOS/RHEL使用firewalld
- 安装并启动firewalld(一般已预装):
sudo systemctl start firewalld
sudo systemctl enable firewalld
- 开放端口并重新加载:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
- 查看已开放端口:
sudo firewall-cmd --list-ports。
避坑提醒:如果你在云厂商控制台也配置了安全组,记得同步放行新SSH端口(2222),否则防火墙规则再精确,流量也进不来。
第四步:安装Fail2ban,防御暴力破解
即使你用密钥登录,但其他服务(比如Web后台)可能暴露密码接口。
Fail2ban能自动识别异常登录并临时封禁IP。
- 安装Fail2ban:
# Ubuntu/Debian
sudo apt install fail2ban -y
# CentOS/RHEL
sudo yum install epel-release -y
sudo yum install fail2ban -y
- 创建自定义配置,避免被更新覆盖:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local
找到[sshd]部分,确保以下内容:
[sshd]
enabled = true
port = ssh # 如果你的SSH端口是2222,这里改为2222
filter = sshd
logpath = /var/log/auth.log # Ubuntu路径;CentOS是/var/log/secure
maxretry = 5 # 5次失败就封禁
bantime = 3600 # 封禁1小时
- 启动Fail2ban并设置开机自启:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
- 检查状态和封禁列表:
sudo fail2ban-client status sshd
如果看到Banned IP list有IP,说明防护生效。
验证加固效果与高频问题
验证方法
- 用普通用户和密钥登录新端口:
ssh -p 2222 admin@你的服务器IP
能成功登录则第一步到第三步正确。
- 尝试用密码登录root:系统应拒绝。
- 故意输错几次密码,然后查看Fail2ban是否封禁IP:
sudo fail2ban-client status sshd | grep Banned
常见问题
- Q:修改SSH端口后,不小心退出了无法连接怎么办? A:如果你在云厂商控制台还有“VNC”或“救援模式”,可以从那里登录将端口改回22。如果没有任何备用通道,下次一定先测试再重启sshd。
- Q:UFW或firewalld开启后,SSH连接中断? A:大概率是防火墙没有放行你新设的SSH端口。通过云厂商的VNC登录,添加对应端口规则再重启网络。
- Q:Fail2ban没生效/不记录日志? A:检查
/etc/fail2ban/jail.local中的logpath是否正确,不同系统日志位置不同。
写在最后
到这里,你的Linux服务器已经完成了基础的安全加固:禁止root远程登录、使用密钥认证、修改SSH端口、防火墙白名单放行,以及Fail2ban防护。
这些都是Linux安全加固中性价比最高的操作,能挡住绝大多数自动化攻击。
后续可以进一步配置SELinux、定期审计日志、安装ClamAV杀毒等,但先把这几步做好,服务器就能安心跑服务了。
如果你在操作中遇到问题,欢迎在评论区留言,我会尽量回复。