禁用 root 登录,创建普通用户
很多教程一上来就让你改 SSH 端口,其实那都是次要的。最危险的就是直接用 root 登录。一旦被爆破成功,对方就是服务器的上帝。
# 创建新用户(把 laoli 换成你喜欢的名字)adduser laolipasswd laoli# 给新用户 sudo 权限usermod -aG sudo laoli# 测试新用户能正常登录后,再编辑 SSH 配置sudo vim /etc/ssh/sshd_config
找到这几行,改成这样:
PermitRootLogin noPasswordAuthentication noPubkeyAuthentication 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/tcpsudo ufw allow 443/tcp# 查看状态sudo ufw status verbose
CentOS/RHEL 用 firewalld:
sudo systemctl enable firewalldsudo systemctl start firewalldsudo firewall-cmd --permanent --add-service=sshsudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --reload
老生常谈:关于数据库默认的端口(3306)尽可能本地使用,不用公网IP,因为数据库可以用“127.0.0.1/hostlocal”,千万别对外网开放!如果应用需要连数据库,开启吧,可以的话弄个IP白名单也好,再或者使用 SSH 隧道也是不错的选择呢。
按装 fail2ban 防暴力破解
这个就简单了,如果你安装的宝塔面板,那么在软件商店里,搜索安装即可,如下图:
如果没有安装可以试着用代码安装。因为就算你改了端口、禁了密码,攻击者还是会试。fail2ban 能自动把频繁尝试的 IP 关进小黑屋。
# Ubuntu/Debiansudo apt updatesudo apt install fail2ban# CentOSsudo yum install fail2ban# 启动服务sudo systemctl enable fail2bansudo systemctl start fail2ban
安装完成后,一般不需要配置什么,默认的配置就能挡住大部分攻击。想自定义的话也可以,你得先备份,然后复制配置文件:
sudocp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localsudo vim /etc/fail2ban/jail.local
我一般把 SSH 的 bantime 改成 24 小时,maxretry 改成 3 次。意思是:试错 3 次,封你一天。
定期更新
这个最简单,但也最容易被忽略。但也有很多人觉得,现在系统或者软件没有问题,为什么要去更新啊?很多漏洞都是旧版本里的,更新一下就能解决。还有别忘记了更新会打漏洞补丁的,亲~~~
# Ubuntu/Debiansudo apt update && sudo apt upgrade -y# CentOSsudo 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)
老李自己用轻量云服务器加固检查清单(建议收藏):
按照教程做完后,照着打勾,做完你的服务器就算不能说是铜墙铁壁,至少也不是随便能捏的软柿子了。
如果觉得有用,转发给身边还在用 123456 当服务器密码的朋友。救“机”一命,胜造七级浮屠。