AI摘要
前言
很多新手站长买了服务器,搭好网站就完事了,根本没做安全加固。结果过不了多久就被黑了,数据被删、网站被挂马,欲哭无泪。
根据统计,互联网上的服务器平均每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-portsUbuntu/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已安装配置
- 系统已更新到最新稳定版
- 不必要的服务已关闭
- 密码策略已配置
- 日志服务正常运行
- 自动备份已配置
写在最后
服务器安全是一个持续的过程,不是一劳永逸的。今天做了这些配置,不代表以后就高枕无忧了。
- 定期检查系统和软件更新
- 时不时看看日志有没有异常
- 关注最新的安全漏洞和新闻
- 重要操作前先做备份
安全这件事,怎么重视都不为过。希望这篇文章能帮大家把服务器的安全基础打牢。
你的服务器做了哪些安全配置?还有什么实用的安全技巧?欢迎在评论区分享!