Linux服务器安全加固实战指南:10个必做的安全配置,让你的服务器固若金汤

YUKE
昨天发布 /正在检测是否收录...

AI摘要

本文提供Linux服务器安全加固的10个必做配置,包括修改SSH端口、禁用root登录、启用密钥认证、配置防火墙、安装fail2ban、更新系统、关闭不必要服务、设置密码策略、日志审计及定期备份。这些措施能有效抵御常见攻击。

前言

很多新手站长买了服务器,搭好网站就完事了,根本没做安全加固。结果过不了多久就被黑了,数据被删、网站被挂马,欲哭无泪。

根据统计,互联网上的服务器平均每3分钟就会遭受一次暴力破解尝试。如果你的服务器还是默认配置,那基本就是在"裸奔"。

今天这篇文章,我就给大家分享10个Linux服务器必做的安全配置。照着做,能挡住99%的常见攻击。

一、修改默认SSH端口

默认的SSH端口是22,这是黑客扫描的首选目标。改成一个不常用的端口,能大幅减少被暴力破解的概率。

操作步骤:

# 编辑SSH配置文件
vim /etc/ssh/sshd_config

# 找到 #Port 22 这一行,改成你想要的端口,比如:
Port 22222

# 保存退出后,重启SSH服务
systemctl restart sshd

注意事项:

  • 端口号建议选10000以上的
  • 修改后记得在防火墙里放行新端口
  • 不要急着关闭当前SSH窗口,新开一个窗口测试能否正常登录,确认没问题再关

二、禁用root用户直接登录

root是Linux的超级管理员,也是黑客最常尝试的账号。禁用root直接登录,让黑客连账号都猜不到。

操作步骤:

# 先创建一个普通用户,用于日常登录
useradd yuke
passwd yuke

# 给这个用户添加sudo权限
usermod -aG wheel yuke  # CentOS/RHEL
# 或者
usermod -aG sudo yuke   # Ubuntu/Debian

# 编辑SSH配置文件
vim /etc/ssh/sshd_config

# 找到 PermitRootLogin yes 改成 no
PermitRootLogin no

# 重启SSH服务
systemctl restart sshd

注意: 一定要先测试普通用户能否正常登录并使用sudo,再禁用root登录,不然你就把自己锁在外面了。

三、使用SSH密钥登录

密码登录再复杂也有被破解的可能,密钥登录才是更安全的选择。

操作步骤:

# 在你的本地电脑上生成密钥对
ssh-keygen -t rsa -b 4096

# 把公钥上传到服务器
ssh-copy-id -p 22222 yuke@你的服务器IP

# 测试密钥登录是否成功
ssh -p 22222 yuke@你的服务器IP

# 确认没问题后,禁用密码登录
vim /etc/ssh/sshd_config

# 修改以下配置
PasswordAuthentication no
PubkeyAuthentication yes

# 重启SSH
systemctl restart sshd

密钥登录是目前最安全的SSH登录方式,强烈建议所有人都配置。

四、配置防火墙(firewalld/ufw)

很多人服务器买回来,防火墙都是关的,所有端口都对外开放,这非常危险。

CentOS/RHEL 系列(firewalld):

# 启动防火墙
systemctl start firewalld
systemctl enable firewalld

# 放行SSH端口(改成你的端口)
firewall-cmd --permanent --add-port=22222/tcp

# 放行网站常用端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp

# 重新加载配置
firewall-cmd --reload

# 查看已放行的端口
firewall-cmd --list-ports

Ubuntu/Debian 系列(ufw):

# 启用防火墙
ufw enable

# 放行SSH端口
ufw allow 22222/tcp

# 放行网站端口
ufw allow 80/tcp
ufw allow 443/tcp

# 查看规则
ufw status

原则: 只放行真正需要的端口,其他全部关闭。

五、安装 fail2ban 防暴力破解

就算改了端口、用了密钥,还是会有人不断尝试登录。fail2ban可以自动检测多次登录失败的IP,然后把它拉黑。

安装配置:

# CentOS
yum install epel-release -y
yum install fail2ban -y

# Ubuntu
apt install fail2ban -y

# 配置SSH防护
vim /etc/fail2ban/jail.local

# 添加以下内容
[sshd]
enabled = true
port = 22222
maxretry = 3
findtime = 10m
bantime = 1d

# 启动服务
systemctl start fail2ban
systemctl enable fail2ban

# 查看被封禁的IP
fail2ban-client status sshd

这个配置的意思是:10分钟内连续输错3次密码,就把这个IP封禁1天。效果非常显著。

六、定期更新系统和软件

很多黑客攻击都是利用已知的系统漏洞,而这些漏洞往往早就有补丁了,只是你没更。

定期更新:

# CentOS
yum update -y

# Ubuntu
apt update && apt upgrade -y

建议:

  • 每周至少检查一次更新
  • 重要的安全补丁要及时更
  • 更新前最好先做快照或备份
  • 生产环境不要盲目更到最新版,先在测试环境验证

七、关闭不必要的服务和端口

服务器上跑的服务越多,攻击面就越大。把不用的服务都关掉。

查看正在监听的端口:

netstat -tulnp
# 或者
ss -tulnp

查看已启动的服务:

systemctl list-units --type=service --state=running

关闭不需要的服务:

# 比如关闭Postfix(如果不用邮件服务)
systemctl stop postfix
systemctl disable postfix

常见的可以关闭的服务:Postfix、Avahi、CUPS(打印服务)等,根据你的实际需求来。

八、设置密码策略

如果你的服务器上有多个用户,或者必须使用密码登录,那一定要设置严格的密码策略。

安装密码质量检查工具:

# CentOS
yum install pam_pwquality -y

# Ubuntu
apt install libpam-pwquality -y

配置密码策略:

vim /etc/security/pwquality.conf

# 常用配置
minlen = 12        # 密码最小长度12位
dcredit = -1       # 至少1个数字
ucredit = -1       # 至少1个大写字母
lcredit = -1       # 至少1个小写字母
ocredit = -1       # 至少1个特殊字符
maxrepeat = 3      # 最多3个重复字符

另外还可以设置密码过期时间:

vim /etc/login.defs

PASS_MAX_DAYS   90    # 密码90天过期
PASS_MIN_DAYS   7     # 7天内不能改密码
PASS_WARN_AGE   7     # 过期前7天提醒

九、配置日志审计

安全事件发生后,日志是你排查问题的唯一依据。一定要确保日志服务正常运行。

确保rsyslog运行:

systemctl start rsyslog
systemctl enable rsyslog

重要的日志文件:

  • /var/log/messages - 系统日志
  • /var/log/secure - 安全相关日志(CentOS)
  • /var/log/auth.log - 认证日志(Ubuntu)
  • /var/log/nginx/ - Nginx日志
  • /var/log/audit/ - 审计日志

建议:

  • 定期检查日志,看看有没有异常登录
  • 重要服务器可以考虑把日志同步到远程日志服务器
  • 日志至少保留30天

十、定期备份数据

安全做得再好,也不能保证100%不被攻破。数据备份是最后一道防线。

备份什么:

  • 网站代码
  • 数据库
  • 配置文件
  • 重要日志

备份策略建议:

  • 每日自动备份
  • 保留最近7天的备份
  • 每周做一次全量备份
  • 备份文件不要只存在服务器本地,要同步到其他地方(比如对象存储)

简单的备份脚本示例:

#!/bin/bash
# 备份网站和数据库

DATE=$(date +%Y%m%d)
BACKUP_DIR=/backup

# 备份网站文件
tar -czf $BACKUP_DIR/web_$DATE.tar.gz /www/wwwroot

# 备份MySQL数据库
mysqldump -u用户名 -p密码 数据库名 > $BACKUP_DIR/db_$DATE.sql

# 删除7天前的备份
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete

然后把这个脚本加到crontab里每天自动执行。

安全检查清单

做完以上配置后,用这个清单检查一下:

  • SSH端口已修改,不是默认22
  • root用户已禁止直接登录
  • 已配置SSH密钥登录,禁用密码登录
  • 防火墙已启用,只放行必要端口
  • fail2ban已安装配置
  • 系统已更新到最新稳定版
  • 不必要的服务已关闭
  • 密码策略已配置
  • 日志服务正常运行
  • 自动备份已配置

写在最后

服务器安全是一个持续的过程,不是一劳永逸的。今天做了这些配置,不代表以后就高枕无忧了。

  • 定期检查系统和软件更新
  • 时不时看看日志有没有异常
  • 关注最新的安全漏洞和新闻
  • 重要操作前先做备份

安全这件事,怎么重视都不为过。希望这篇文章能帮大家把服务器的安全基础打牢。


你的服务器做了哪些安全配置?还有什么实用的安全技巧?欢迎在评论区分享!

© 版权声明
THE END
喜欢就支持一下吧
点赞 0 分享 赞赏
评论 抢沙发
OωO
取消
SSL