很多新手买了服务器后第一件事就是赶紧部署网站或应用,却忽略了最基础也是最重要的安全配置。实际上,互联网上每时每刻都有大量扫描工具在自动寻找存在漏洞的服务器,如果你的Linux服务器裸奔上路,可能几个小时就会被入侵。这篇文章将用最通俗的方式,带你完成一套完整的服务器安全加固,从SSH防护到防火墙策略再到备份方案,全部都有可直接复制运行的命令,帮你把服务器打造成一块难啃的硬骨头。
一、SSH安全设置:把大门锁好
SSH是管理Linux服务器的主要通道,也是最常被暴力破解的目标。网上有大量脚本在轮番尝试破解弱密码。我的建议是:修改默认端口、禁用root直接登录、使用密钥认证,这三步能挡掉90%的破解尝试。
首先修改SSH默认端口。编辑配置文件:
# 备份原始配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 修改端口(去掉#注释并改为高位端口,如22000)
vim /etc/ssh/sshd_config
# 找到 #Port 22,改为 Port 22000
# 重启SSH服务
systemctl restart sshd
注意:改完端口后,一定要先在本地测试能否用新端口连接,确认无误后再退出当前会话,否则可能出现连不上的尴尬局面。
接下来禁用root直接登录并启用密钥认证,这样即使密码泄露,攻击者也无法直接用root登录:
# 生成密钥对(在本地电脑执行)ssh-keygen -t ed25519 -C "your_email@example.com"
将公钥上传到服务器(在本地电脑执行)
ssh-copy-id -p 22000 user@your_server_ip
编辑sshd_config,修改以下配置
vim /etc/ssh/sshd_config
找到并修改为:
PermitRootLogin no # 禁止root直接登录
PasswordAuthentication no # 禁用密码登录(务必在密钥验证成功后再改)
PubkeyAuthentication yes # 启用密钥认证
重启服务生效
systemctl restart sshd
除了以上基本操作,还可以安装fail2ban来自动封禁暴力破解的IP。fail2ban会监控SSH日志,对多次尝试失败的IP自动添加防火墙规则进行封禁:
# 安装fail2ban(Ubuntu/Debian)
apt install fail2ban -y创建配置文件
vim /etc/fail2ban/jail.local
添加以下内容:
[sshd]
enabled = true
port = 22000
maxretry = 3
bantime = 3600
启动并设为开机自启
systemctl restart fail2ban
systemctl enable fail2ban
二、防火墙配置:为服务器装上护栏
防火墙是服务器的第二道防线,能精确控制哪些端口对外暴露。最常用的工具是iptables和ufw(Ubuntu的简化版)。使用ufw更简单直观,适合新手使用:
# 启用ufw(Ubuntu/Debian)
ufw allow 22000/tcp # SSH端口
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw deny 3306/tcp # 关闭MySQL远程访问(数据库不需要对外暴露)
ufw enable
如果是CentOS/RHEL系统,则使用firewalld:
# 查看当前端口开放情况
firewall-cmd --list-all开放SSH、HTTP、HTTPS端口
firewall-cmd --permanent --add-port=22000/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
重新加载配置
firewall-cmd --reload
核心原则就是:只开放业务必需端口,其余一律关闭。很多新手把数据库端口、Redis端口直接暴露公网,等于把自家保险柜的密码贴在大门上。
三、定期备份策略:数据是服务器最宝贵的资产
无论安全措施做得多么到位,总有意外情况发生——比如被勒索病毒加密文件,或者误删数据库。因此定期备份是安全体系中不可忽视的一环。
推荐使用cron定时任务配合tar打包,将数据备份到远程存储。这里以备份网站目录和数据库为例:
# 创建备份脚本
vim /root/backup.sh!/bin/bash
备份网站文件
tar czf /backup/www_$(date +%F).tar.gz /var/www/html
备份MySQL数据库(需提前安装mysqldump)
mysqldump -u root -p'密码' --all-databases | gzip > /backup/db_$(date +%F).sql.gz
保留7天备份,删除更早的文件
find /backup -mtime +7 -exec rm -f {} \;
赋予执行权限
chmod +x /root/backup.sh
添加到cron,每天凌晨2点执行
(crontab -l; echo "0 2 * /root/backup.sh") | crontab -
建议将备份文件同步到异地存储(如对象存储或另一台服务器),避免服务器宕机时备份也跟着丢失。如果用的是雨云服务器,也可以考虑利用其自带的快照功能,定期做系统盘快照,作为额外保险。雨云服务器支持云快照,操作起来非常方便。
四、常见攻击防护要点
除了上面提到的暴破攻击,我们还会经常遇到DDoS流量攻击和Web应用攻击。DDoS主要依靠高防IP,普通配置能做的有限,但起码要注意:避免把不必要的服务端口向公网暴露,减少被攻击面。
对于网站类服务器,还可以做这几个简单加固:
- 定期更新系统和软件:
apt update && apt upgrade -y(Ubuntu/Debian)或yum update -y(CentOS),及时修复已知漏洞; - 删除无用服务:用
systemctl list-units --type=service检查运行中的服务,关闭不需要的; - 设置复杂密码或直接禁用密码登录,前面已经提过;
- 定期检查登录日志:
journalctl -u sshd | grep "Failed password",看是否有异常尝试。
五、总结与思考
服务器安全不是一个一次性的工作,而是持续运营的日常。上面提到的几点只是入门基础,真正的安全建设还包括定期渗透测试、日志分析、入侵检测等等。但把这几个基础做好,你的服务器就已经超越了至少70%的互联网裸奔机器。
安全不是绝对状态,而是一个持续优化的过程。不要因为一开始做不好就放弃——先锁好门,再考虑装监控,逐步完善。
如果你觉得这篇文章有帮助,也欢迎看看我之前分享的其它Linux服务器实战教学,我会持续输出建站、运维方向的干货内容,帮助新手少走弯路。记住,花半小时做安全加固,可能为你节省好几天处理入侵事故的时间,这笔账怎么算都值。
评论区: