Linux服务器安全加固实战指南:初级运维必知的10个关键步骤
对于管理Linux服务器的站长和初级运维人员来说,服务器安全是头等大事。一个被攻破的服务器不仅意味着数据丢失、业务中断,还可能被利用成为攻击其他系统的跳板。因此,从一开始就对服务器进行安全加固,是保障业务稳定运行的基础。本文将介绍10个关键且实用的安全加固步骤。
1. 更新系统和软件包
这是最基础也是最重要的一步。保持操作系统和所有已安装软件包的最新状态,可以修复已知的安全漏洞。
- Ubuntu/Debian: 运行
sudo apt update && sudo apt upgrade - CentOS/RHEL/Rocky Linux: 运行
sudo dnf update (或 yum update 在较老版本)
2. 配置强密码策略与SSH密钥认证
弱密码是攻击者最常利用的入口之一。
- 设置强密码: 要求密码包含大小写字母、数字和特殊字符,长度至少12位。避免使用常见词汇或个人信息。
- 配置PAM模块 (可选但推荐): 可以配置PAM (Pluggable Authentication Modules) 来强制执行更复杂的密码策略,例如最小长度、历史密码限制等。
- 启用SSH密钥认证: 这是比密码更安全的登录方式。生成SSH密钥对,将公钥添加到服务器
~/.ssh/authorized_keys文件中,然后禁用密码登录可以极大提升SSH安全性。
3. 配置并启用防火墙 (UFW或firewalld)
防火墙是服务器的第一道防线,用于控制进出服务器的网络流量。
- UFW (Ubuntu):
- 安装:
sudo apt install ufw - 设置默认策略 (可选,更安全):
sudo ufw default deny incoming, sudo ufw default allow outgoing - 允许特定服务:
sudo ufw allow OpenSSH (或 sudo ufw allow 22), sudo ufw allow 'Nginx Full' (或 sudo ufw allow 80,443) - 启用防火墙:
sudo ufw enable
- firewalld (CentOS/RHEL):
- 启动并设置开机自启:
sudo systemctl start firewalld && sudo systemctl enable firewalld - 允许服务:
sudo firewall-cmd --permanent --add-service=ssh, sudo firewall-cmd --permanent --add-service=https - 重新加载配置:
sudo firewall-cmd --reload
4. 配置SSH服务安全选项
SSH是远程管理服务器的主要方式,必须进行安全配置。
- 编辑SSH配置文件:
sudo nano /etc/ssh/sshd_config - 修改关键设置:
Port 22 -> 改为非标准端口 (如2222),可以减少自动化扫描的攻击。PermitRootLogin yes -> 改为 PermitRootLogin no 或 PermitRootLogin prohibit-password (如果必须用root,仅允许密钥登录)。强烈建议禁用root直接登录。PasswordAuthentication yes -> 改为 PasswordAuthentication no (如果你已配置并使用SSH密钥)。MaxAuthTries 6 -> 限制登录尝试次数。LoginGraceTime 60 -> 限制登录会话时间。
- 保存文件后,重启SSH服务:
sudo systemctl restart sshd
5. 管理用户权限与Sudo配置
遵循最小权限原则,避免普通用户拥有不必要的系统权限。
- 为日常管理创建一个普通用户 (例如
deploy),并将其加入sudo组 (usermod -aG wheel username on RHEL/CentOS, sudo usermod -aG sudo username on Ubuntu)。 - 谨慎管理
/etc/sudoers文件,只给必要的用户或组分配必要的sudo权限。建议使用visudo命令编辑,它会检查语法错误。
6. 安装并配置Fail2Ban
Fail2Ban是一个入侵防御软件框架,它通过监控日志文件(如SSH、FTP等服务的日志)来检测暴力破解等恶意行为,并自动将攻击者的IP地址加入防火墙黑名单一段时间。
- 安装:
sudo apt install fail2ban (Ubuntu) 或 sudo dnf install fail2ban (CentOS) - 配置: 复制默认配置文件
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local,然后编辑jail.local文件,根据需要调整规则(如封禁时间、尝试次数等)。 - 启动并设置开机自启:
sudo systemctl start fail2ban && sudo systemctl enable fail2ban
7. 定期备份重要数据
安全是多层防御,即使服务器被攻破,定期且可靠的备份也能让你快速恢复业务。将备份存储在与主服务器隔离的位置(如另一台服务器、云存储)。
8. 监控系统日志
定期检查系统日志(如/var/log/auth.log或/var/log/secure用于SSH登录记录,/var/log/messages或journal日志journalctl)可以帮助你发现异常登录、系统错误或潜在的攻击迹象。
9. 禁用不必要的服务和端口
检查并停止服务器上运行的不必要的服务(systemctl list-units --type=service --state=running),并使用防火墙阻止访问不需要对外开放的端口,以减少攻击面。
10. 考虑使用自动化运维工具
对于管理多台服务器或希望标准化配置的场景,可以学习使用Ansible、Puppet、Chef等自动化运维工具,将安全加固步骤脚本化,提高效率和一致性。
通过实施以上这些基础的安全加固措施,可以显著提升Linux服务器的防护能力,为你的网站和应用构建一个更安全、更可靠的运行环境。