你的服务器安全吗?很多人买回来服务器就直接部署应用,从来不做安全加固。殊不知,一台暴露在公网的服务器平均每天会遭受上千次暴力破解尝试,被入侵只是时间问题。本文整理了20个必做的Linux服务器安全配置项,从SSH、防火墙到内核参数,全方位保护你的服务器。
为什么要做安全加固
服务器暴露在公网上,每天都会面临无数次扫描和攻击。根据统计,一台公网服务器平均每天会受到上千次SSH暴力破解尝试。不做安全加固的服务器,被入侵只是时间问题。本文整理了20个必做的安全配置项,覆盖SSH、防火墙、权限、内核等各个层面。
SSH安全配置
修改默认端口
编辑/etc/ssh/sshd_config,将Port改为非标准端口(如22222),减少被扫描的概率:
Port 22222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
同时禁用root登录和密码登录,强制使用密钥认证。修改后重启sshd服务。
配置fail2ban
安装fail2ban自动封禁暴力破解IP:
yum install -y fail2ban
systemctl enable --now fail2ban
配置jail.local,设置SSH失败5次即封禁1小时:
[sshd]
enabled = true
port = 22222
maxretry = 5
bantime = 3600
防火墙配置
使用firewalld或iptables只开放必要端口:
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --permanent --add-port=22222/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
原则:只开放80、443和SSH端口,其余全部关闭。数据库、Redis等服务只监听127.0.0.1,不暴露公网。
用户与权限管理
- 创建普通用户——日常操作用普通用户,需要root权限时用sudo
- 禁用空密码账户——检查/etc/shadow,确保所有账户都有密码或被锁定
- 删除无用账户——删除系统默认的无用账户,如games、ftp等
- 文件权限检查——确保重要配置文件权限不超过644,可执行文件不超过755
系统内核加固
编辑/etc/sysctl.conf,添加以下内核参数:
# 禁止IP转发
net.ipv4.ip_forward = 0
# 禁止源路由
net.ipv4.conf.all.accept_source_route = 0
# 禁止ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
# 开启SYN洪水攻击保护
net.ipv4.tcp_syncookies = 1
# 减小超时时间
net.ipv4.tcp_fin_timeout = 30
# 禁止响应ping
net.ipv4.icmp_echo_ignore_all = 1
执行sysctl -p使配置生效。
服务安全
| 服务 | 安全措施 |
| MySQL | 只监听本地、删除test库、设置强密码、禁用远程root |
| Redis | 设置密码、只监听本地、禁用危险命令 |
| Nginx | 隐藏版本号、限制请求大小、添加安全头 |
| PHP | 禁用危险函数、关闭错误显示、open_basedir限制 |
监控与日志
- 登录审计——记录所有SSH登录日志,配置邮件告警通知异常登录
- 文件完整性——用AIDE或Tripwire监控系统文件变化
- 日志集中——将关键日志发送到远程日志服务器,防止被入侵后删除日志
- 资源监控——用Prometheus+Grafana监控CPU、内存、磁盘、网络,异常时告警
定期维护
- 每周检查系统更新,及时安装安全补丁
- 每月审查用户账户和SSH密钥
- 每季度进行一次安全扫描(用Nessus、OpenVAS等工具)
- 定期备份重要数据,并验证备份可恢复
安全是一个持续的过程,没有一劳永逸的方案。以上配置可以防御绝大多数自动化攻击,但针对定向攻击还需要更深入的安全策略。保持系统更新、监控异常行为、及时响应,才是服务器安全的核心。