Linux服务器安全加固实战:从入门到防黑的完整指南

很多新手买了服务器后第一件事就是赶紧部署网站或应用,却忽略了最基础也是最重要的安全配置。实际上,互联网上每时每刻都有大量扫描工具在自动寻找存在漏洞的服务器,如果你的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服务器实战教学,我会持续输出建站、运维方向的干货内容,帮助新手少走弯路。记住,花半小时做安全加固,可能为你节省好几天处理入侵事故的时间,这笔账怎么算都值。

评论区: