Linux 服务器刚装好别急着跑生产!这 5 个安全加固步骤少一个都危险
最近忙着“养虾”都快忘了自己是干什么的了,先不说养虾折腾个什么结果,单说token真的心有力而力不足啊,抽空利用闲暇时间把小程序算是搭建完成了,测试了一轮又一轮,总算是达到了自己的比较满意的程序,使用的是猫贝的开源小程序代码,改动了太多,有点吃紧啊,等待新版上线看看效果吧。

为啥要写这个?
因为最近调试小程序,期间遇到了服务器被黑导致CPU和负载爆满,原因嘛都是因为懒得做基础加固,服务器上忽略了也开放了部分权限,被人植入了恶意脚本,CPU 偶现 90%。我一查,好家伙,受不鸟啊,趁着小程序上线完成,赶紧加固起来顺便水一篇文章。
禁用 root 登录,创建普通用户
很多教程一上来就让你改 SSH 端口,其实那都是次要的。最危险的就是直接用 root 登录。一旦被爆破成功,对方就是服务器的上帝。
# 创建新用户(把 laoli 换成你喜欢的名字) adduser laoli passwd laoli # 给新用户 sudo 权限 usermod -aG sudo laoli # 测试新用户能正常登录后,再编辑 SSH 配置 sudo vim /etc/ssh/sshd_config
找到这几行,改成这样:
PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes
划重点:改之前一定要先测试新用户的 SSH 密钥登录能成功!不然改完连自己都进不去了,只能找云服务商重置。
配置 SSH 密钥登录
密码登录被爆破的风险太高了。我有个服务器,改完密钥登录那天,日志里还有几百次密码尝试。用密钥,直接让攻击者无从下手。
# 本地生成密钥(如果还没有的话) ssh-keygen -t ed25519 -C "your_email@example.com" # 把公钥传到服务器 ssh-copy-id laoli@你的服务器 IP # 测试密钥登录 ssh laoli@你的服务器 IP
能免密登录成功后,再按第一步说的禁用密码登录。
防火墙只开必要的端口
默认的防火墙策略往往是全部放行,这等于把家门钥匙挂门把手上。
Ubuntu/Debian 用 ufw:
# 启用防火墙 sudo ufw enable # 默认拒绝所有入站 sudo ufw default deny incoming # 只开 SSH(如果你改了端口,记得改数字) sudo ufw allow 22/tcp # 开 Web 服务端口 sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 查看状态 sudo ufw status verbose
CentOS/RHEL 用 firewalld:
sudo systemctl enable firewalld sudo systemctl start firewalld sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
老生常谈:关于数据库默认的端口(3306)尽可能本地使用,不用公网IP,因为数据库可以用“127.0.0.1/hostlocal”,千万别对外网开放!如果应用需要连数据库,开启吧,可以的话弄个IP白名单也好,再或者使用 SSH 隧道也是不错的选择呢。
按装 fail2ban 防暴力破解
这个就简单了,如果你安装的宝塔面板,那么在软件商店里,搜索安装即可,如图。如果没有安装可以试着用代码安装。因为就算你改了端口、禁了密码,攻击者还是会试。fail2ban 能自动把频繁尝试的 IP 关进小黑屋。

代码参考:
# Ubuntu/Debian sudo apt update sudo apt install fail2ban # CentOS sudo yum install fail2ban # 启动服务 sudo systemctl enable fail2ban sudo systemctl start fail2ban
安装完成后,一般不需要配置什么,默认的配置就能挡住大部分攻击。想自定义的话也可以,你得先备份,然后复制配置文件:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo vim /etc/fail2ban/jail.local
我一般把 SSH 的 bantime 改成 24 小时,maxretry 改成 3 次。意思是:试错 3 次,封你一天。
定期更新
这个最简单,但也最容易被忽略。但也有很多人觉得,现在系统或者软件没有问题,为什么要去更新啊?很多漏洞都是旧版本里的,更新一下就能解决。还有别忘记了更新会打漏洞补丁的,亲~~~
# Ubuntu/Debian sudo apt update && sudo apt upgrade -y # CentOS sudo yum update -y
建议:可以在宝塔后台设置一个设个 cron 任务,每周日凌晨(每周/月)自动更新。
sudo crontab -e # 添加这行(每周日 3 点) 0 3 * * 0 apt update && apt upgrade -y
监控和日志
以上步骤做好就差不多了,一般攻击也就这样了,除非你的服务器资源费用诱人,当然你加固做完也不是万事大吉,还得盯着点相关的监控和日志文件,查看运行是否出现异常。推荐几个轻量级工具:
logwatch:每天给你发一封日志摘要邮件
Monit:监控服务状态,挂了自动重启
GoAccess:实时分析 Nginx/Apache 日志,能看到谁在访问
这些以后老李再单独写文章细说(能不能有时间写那是另外的事~~~)。
唠叨两句
安全这事儿没有终点。今天做的这些只是基础防护,能挡住大部分自动化攻击和新手黑客。如果你的服务器跑的是重要业务,还得考虑:
定期备份(异地备份!)
intrusion detection system(IDS)
Web 应用防火墙(WAF)
安全审计日志
老李自己用轻量云服务器加固检查清单(建议收藏):
创建普通用户,禁用 root 登录
配置 SSH 密钥,禁用密码登录
防火墙只开必要端口
安装 fail2ban 防爆破
设置自动更新
配置日志监控
按照教程做完后,照着打勾,做完你的服务器就算不能说是铜墙铁壁,至少也不是随便能捏的软柿子了。
如果觉得有用,转发给身边还在用 123456 当服务器密码的朋友。救“机”一命,胜造七级浮屠。


