Linux服务器安全加固完整实操方案
一、引言
在互联网时代,服务器安全是每个运维工程师必须面对的核心课题。随着网络攻击手段的不断升级,一台未经过安全加固的Linux服务器平均存活时间不超过24小时。本文将从系统层面、网络层面、应用层面全方位讲解Linux服务器安全加固的完整实操方案,帮助你构建一道坚实的安全防线。
安全加固不是一次性工作,而是一个持续迭代的过程。我们需要遵循最小权限原则、纵深防御原则和安全审计原则,从多个维度构建安全体系。
二、系统基础加固
2.1 系统更新与补丁管理
保持系统最新是安全加固的第一步。及时安装安全补丁可以修复已知漏洞,大幅降低被攻击的风险。
# Debian/Ubuntu系统
apt update && apt upgrade -y
apt autoremove -y
# CentOS/RHEL系统
yum update -y
yum clean all
# 配置自动安全更新
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades2.2 关闭不必要的服务和端口
系统默认开启的很多服务实际上并不需要,每多一个开放的端口就多一个攻击面。
# 查看当前监听的端口
netstat -tlnp
ss -tlnp
# 关闭不必要的服务(以CentOS为例)
systemctl disable postfix
systemctl disable avahi-daemon
systemctl disable cups
systemctl stop postfix
systemctl stop avahi-daemon
systemctl stop cups2.3 内核参数优化
通过调整内核参数可以有效防范常见的网络攻击,如SYN洪水攻击、IP欺骗等。
# 编辑sysctl配置
vim /etc/sysctl.conf
# 开启SYN cookies,防范SYN洪水攻击
net.ipv4.tcp_syncookies = 1
# 禁用IP源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# 开启反向路径过滤,防范IP欺骗
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 禁用ping广播
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 使配置生效
sysctl -p三、SSH安全配置
SSH是服务器管理的主要入口,也是攻击者最常尝试突破的目标。
3.1 修改默认端口
修改SSH默认端口可以减少被扫描和暴力破解的概率。
# 编辑SSH配置文件
vim /etc/ssh/sshd_config
# 修改端口(建议选择10000以上的端口)
Port 22222
# 禁用root用户直接登录
PermitRootLogin no
# 禁用密码登录(配置好密钥后开启)
PasswordAuthentication no
# 限制最大认证尝试次数
MaxAuthTries 3
# 登录超时时间
ClientAliveInterval 300
ClientAliveCountMax 2
# 只允许指定用户登录
AllowUsers admin deploy
# 重启SSH服务
systemctl restart sshd3.2 配置密钥登录
密钥登录比密码登录更安全,建议禁用密码登录,只允许密钥登录。
# 在本地生成密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 将公钥上传到服务器
ssh-copy-id -p 22222 admin@your_server_ip
# 测试密钥登录
ssh -p 22222 admin@your_server_ip3.3 安装fail2ban防暴力破解
fail2ban可以监控登录日志,自动封禁频繁尝试登录失败的IP。
# 安装fail2ban
apt install fail2ban -y
# 配置jail
vim /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 300
bantime = 86400
# 启动fail2ban
systemctl enable fail2ban
systemctl start fail2ban
# 查看封禁状态
fail2ban-client status sshd四、防火墙配置
防火墙是网络安全的第一道防线,必须严格配置。
4.1 iptables基础配置
# 清空现有规则
iptables -F
iptables -X
iptables -Z
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许回环接口
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许SSH端口
iptables -A INPUT -p tcp --dport 22222 -j ACCEPT
# 允许HTTP和HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许ping(可选)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# 保存规则
iptables-save > /etc/iptables.rules4.2 使用ufw简化配置
# 安装ufw
apt install ufw -y
# 设置默认策略
ufw default deny incoming
ufw default allow outgoing
# 允许SSH
ufw allow 22222/tcp
# 允许Web服务
ufw allow 80/tcp
ufw allow 443/tcp
# 启用防火墙
ufw enable
# 查看状态
ufw status verbose五、用户权限管理
5.1 sudo配置
日常操作应使用普通用户,需要管理员权限时通过sudo提权。
# 创建新用户
useradd -m -s /bin/bash admin
passwd admin
# 添加sudo权限
usermod -aG sudo admin
# 配置sudo免密(谨慎使用)
visudo
admin ALL=(ALL) NOPASSWD: ALL5.2 密码策略
设置强密码策略,防止弱密码被暴力破解。
# 安装密码质量检查模块
apt install libpam-pwquality -y
# 配置密码策略
vim /etc/pam.d/common-password
password requisite pam_pwquality.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
# 配置密码过期策略
vim /etc/login.defs
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 14六、日志与审计
6.1 日志集中管理
# 配置rsyslog
vim /etc/rsyslog.conf
# 记录所有认证日志
auth,authpriv.* /var/log/auth.log
# 记录内核日志
kern.* /var/log/kern.log
# 重启rsyslog
systemctl restart rsyslog6.2 安装auditd进行系统审计
# 安装auditd
apt install auditd -y
# 配置审计规则
vim /etc/audit/rules.d/audit.rules
# 监控密码文件修改
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes
# 监控sudo使用
-w /usr/bin/sudo -p x -k sudo_usage
# 重启auditd
systemctl restart auditd
# 查看审计日志
ausearch -k passwd_changes七、最佳实践
定期备份:配置自动备份策略,确保数据安全。建议使用3-2-1备份原则:3份备份、2种介质、1份异地。
最小权限原则:每个服务、每个用户只分配必要的权限,避免过度授权。
定期安全扫描:使用nmap、OpenVAS等工具定期对服务器进行安全扫描,及时发现漏洞。
监控告警:配置Zabbix、Prometheus等监控系统,对异常登录、资源异常使用等情况及时告警。
安全更新:及时关注安全公告,在测试环境验证后尽快应用到生产环境。
禁用不必要的SUID/SGID文件:
# 查找所有SUID文件 find / -perm -4000 -type f 2>/dev/null
移除不必要的SUID权限
chmod u-s /usr/bin/xxx
7. **配置文件权限**:
```bash
# 关键目录权限设置
chmod 700 /root
chmod 700 /home/*
chmod 600 /etc/shadow
chmod 600 /etc/ssh/sshd_config八、总结
Linux服务器安全加固是一个系统性工程,需要从多个层面综合施策。本文介绍的系统基础加固、SSH安全配置、防火墙配置、用户权限管理、日志审计等措施,构成了一套完整的安全防护体系。
安全是一个持续的过程,没有一劳永逸的解决方案。建议建立定期安全审计机制,关注最新的安全漏洞和攻击手段,不断优化和完善安全策略。只有保持警惕、持续改进,才能在日益复杂的网络安全环境中保护好我们的服务器。
最后提醒:在生产环境实施任何安全加固措施前,请务必在测试环境充分验证,避免因配置错误导致服务不可用。