Linux 服务器刚装好别急着跑生产!这 5 个安全加固步骤少一个都危险

李洋博客今天56阅读0评论

最近忙着“养虾”都快忘了自己是干什么的了,先不说养虾折腾个什么结果,单说token真的心有力而力不足啊,抽空利用闲暇时间把小程序算是搭建完成了,测试了一轮又一轮,总算是达到了自己的比较满意的程序,使用的是猫贝的开源小程序代码,改动了太多,有点吃紧啊,等待新版上线看看效果吧。

Linux 服务器刚装好别急着跑生产!这 5 个安全加固步骤少一个都危险 第1张

为啥要写这个?

因为最近调试小程序,期间遇到了服务器被黑导致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 关进小黑屋。

Linux 服务器刚装好别急着跑生产!这 5 个安全加固步骤少一个都危险 第2张

代码参考:

# 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 当服务器密码的朋友。救“机”一命,胜造七级浮屠。

文章版权声明:除非注明,否则均为李洋博客原创文章,转载或复制请以超链接形式并注明出处。
取消
微信二维码
微信二维码
支付宝二维码