Linux服务器安全防护完全指南:从0到1构建铜墙铁壁
前言:作为一名运维工程师,我见过太多因为安全配置不当而被攻破的服务器。本文将分享我多年来积累的实战经验,教你如何构建一套完整的Linux服务器安全防护体系。
真实案例:一次惊心动魄的入侵事件
去年某个深夜,我接到监控告警:公司一台Web服务器CPU使用率异常飙升。登录后发现系统中运行着可疑进程,进一步排查发现服务器已被植入挖矿木马。这次事件让我深刻意识到服务器安全防护的重要性。
攻击路径复盘:
• 攻击者通过SSH暴力破解获得root权限
• 植入后门程序并建立持久化连接
• 下载挖矿程序消耗服务器资源
• 尝试横向渗透内网其他主机
核心防护策略:多层安全防线
第一层:SSH安全加固
1. 修改默认端口
# 编辑SSH配置文件 vim /etc/ssh/sshd_config # 修改端口(建议使用10000-65535范围) Port 22022 # 重启SSH服务 systemctl restart sshd
2. 禁用root直接登录
# 在sshd_config中设置 PermitRootLogin no # 创建普通用户并加入sudo组 useradd -m -s /bin/bash admin usermod -aG sudo admin
3. 配置密钥认证
# 生成SSH密钥对 ssh-keygen -t ed25519 -C "your_email@example.com" # 在服务器上创建authorized_keys mkdir -p ~/.ssh chmod 700 ~/.ssh echo "your_public_key" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys # 禁用密码认证 echo "PasswordAuthentication no" >> /etc/ssh/sshd_config systemctl restart sshd
第二层:Fail2Ban防暴力破解
安装配置Fail2Ban
# Ubuntu/Debian apt update && apt install fail2ban -y # CentOS/RHEL yum install epel-release -y && yum install fail2ban -y
自定义SSH防护规则
# 创建本地配置文件 cat > /etc/fail2ban/jail.local << 'EOF' [DEFAULT] bantime = 3600 findtime = 600 maxretry = 3 ignoreip = 127.0.0.1/8 192.168.0.0/16 [sshd] enabled = true port = 22022 filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 86400 EOF # 启动服务 systemctl enable fail2ban && systemctl start fail2ban
查看封禁状态
# 查看被封IP fail2ban-client status sshd # 手动解封IP fail2ban-client set sshd unbanip 192.168.1.100
第三层:防火墙配置
UFW简单防火墙
# 启用UFW ufw enable # 设置默认策略 ufw default deny incoming ufw default allow outgoing # 允许SSH连接(使用自定义端口) ufw allow 22022/tcp # 允许Web服务 ufw allow 80/tcp ufw allow 443/tcp # 查看规则 ufw status verbose
iptables高级配置
#!/bin/bash # 清空现有规则 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 INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # SSH限速(防暴力破解) iptables -A INPUT -p tcp --dport 22022 -m state --state NEW -m recent --set --name SSH iptables -A INPUT -p tcp --dport 22022 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP iptables -A INPUT -p tcp --dport 22022 -j ACCEPT # Web服务 iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 保存规则 iptables-save > /etc/iptables/rules.v4
第四层:入侵检测系统
部署OSSEC-HIDS
# 下载安装OSSEC wget https://github.com/ossec/ossec-hids/archive/3.6.0.tar.gz tar -xzf 3.6.0.tar.gz && cd ossec-hids-3.6.0 ./install.sh # 配置监控规则 vim /var/ossec/etc/ossec.conf
自定义监控脚本
#!/bin/bash
# 系统异常检测脚本
LOG_FILE="/var/log/security_check.log"
# 检查异常进程
check_suspicious_processes() {
echo"[$(date)] 检查可疑进程..." >> $LOG_FILE
# 检查CPU使用率异常的进程
ps aux --sort=-%cpu | head -10 | whileread line; do
cpu=$(echo$line | awk '{print $3}')
if (( $(echo "$cpu > 80" | bc -l) )); then
echo"警告:发现高CPU使用率进程: $line" >> $LOG_FILE
fi
done
}
# 检查异常网络连接
check_network_connections() {
echo"[$(date)] 检查网络连接..." >> $LOG_FILE
# 检查异常端口监听
netstat -tlnp | grep -E ':(1234|4444|5555|8080)' && {
echo"警告:发现可疑端口监听" >> $LOG_FILE
}
}
# 执行检查
check_suspicious_processes
check_network_connections
第五层:文件完整性监控
使用AIDE工具
# 安装AIDE apt install aide -y # Ubuntu/Debian yum install aide -y # CentOS/RHEL # 初始化数据库 aide --init mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db # 创建检查脚本 cat > /usr/local/bin/aide_check.sh << 'EOF' #!/bin/bash aide --check | tee /var/log/aide_check.log if [ $? -ne 0 ]; then echo"文件完整性检查发现异常,请查看日志文件" # 可以在这里添加邮件通知 fi EOF chmod +x /usr/local/bin/aide_check.sh # 添加定时任务 echo"0 2 * * * /usr/local/bin/aide_check.sh" | crontab -
高级防护技巧
1. 端口敲门技术
# 安装knockd apt install knockd -y # 配置端口敲门 cat > /etc/knockd.conf << 'EOF' [options] UseSyslog [openSSH] sequence = 7000,8000,9000 seq_timeout = 5 command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22022 -j ACCEPT tcpflags = syn [closeSSH] sequence = 9000,8000,7000 seq_timeout = 5 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22022 -j ACCEPT tcpflags = syn EOF # 启动服务 systemctl enable knockd && systemctl start knockd
2. 蜜罐部署(迷惑攻击者)
# 安装Cowrie SSH蜜罐 pip3 install cowrie # 配置虚假SSH服务监听22端口 # 真实SSH服务使用非标准端口
3. 日志分析自动化
#!/bin/bash # 自动日志分析脚本 LOGFILE="/var/log/auth.log" ALERT_EMAIL="admin@yourdomain.com" # 分析SSH登录失败 failed_attempts=$(grep "Failed password"$LOGFILE | grep "$(date '+%b %d')" | wc -l) if [ $failed_attempts -gt 50 ]; then echo"警告:今日SSH登录失败次数达到 $failed_attempts 次" | mail -s "SSH安全警报 - $(hostname)"$ALERT_EMAIL fi # 检查新用户创建 new_users=$(grep "new user" /var/log/auth.log | grep "$(date '+%b %d')") if [ ! -z "$new_users" ]; then echo"警告:检测到新用户创建:$new_users" | mail -s "用户管理警报 - $(hostname)"$ALERT_EMAIL fi
监控与告警系统
搭建轻量级监控
# 安装Netdata实时监控 bash <(curl -Ss https://my-netdata.io/kickstart.sh) # 配置告警 vim /etc/netdata/health_alarm_notify.conf # 设置邮件通知 SEND_EMAIL="YES" DEFAULT_RECIPIENT_EMAIL="admin@yourdomain.com"
自定义告警脚本
#!/usr/bin/env python3
import psutil
import smtplib
from email.mime.text import MIMEText
import time
defcheck_system_health():
alerts = []
# CPU使用率检查
cpu_percent = psutil.cpu_percent(interval=1)
if cpu_percent > 80:
alerts.append(f"CPU使用率过高: {cpu_percent}%")
# 内存使用率检查
memory = psutil.virtual_memory()
if memory.percent > 85:
alerts.append(f"内存使用率过高: {memory.percent}%")
# 磁盘使用率检查
for partition in psutil.disk_partitions():
disk_usage = psutil.disk_usage(partition.mountpoint)
if disk_usage.percent > 90:
alerts.append(f"磁盘 {partition.mountpoint} 使用率过高: {disk_usage.percent}%")
return alerts
defsend_alert(alerts):
ifnot alerts:
return
msg = MIMEText('
'.join(alerts))
msg['Subject'] = f'服务器健康告警 - {time.strftime("%Y-%m-%d %H:%M")}'
msg['From'] = 'monitor@yourdomain.com'
msg['To'] = 'admin@yourdomain.com'
# 发送邮件逻辑
print("发送告警:", '
'.join(alerts))
if __name__ == "__main__":
alerts = check_system_health()
send_alert(alerts)
应急响应预案
发现入侵后的处理步骤
1. 立即隔离
# 断网隔离(保留SSH连接) iptables -A INPUT -j DROP iptables -I INPUT 1 -s YOUR_IP -j ACCEPT
2. 保存证据
# 备份关键日志 tar -czf evidence_$(date +%Y%m%d_%H%M).tar.gz /var/log/auth.log /var/log/syslog /var/log/messages
3. 清理后门
# 检查计划任务 crontab -l cat /etc/crontab ls -la /etc/cron.* # 检查启动项 systemctl list-unit-files --state=enabled ls -la /etc/init.d/
实战演练
模拟攻击测试
# 使用Nmap扫描自己的服务器 nmap -sS -O YOUR_SERVER_IP # 使用Hydra测试SSH暴力破解防护 hydra -l admin -P /usr/share/wordlists/rockyou.txt ssh://YOUR_SERVER_IP:22022 -t 4
性能优化
# 优化SSH配置性能 echo "ClientAliveInterval 60" >> /etc/ssh/sshd_config echo "ClientAliveCountMax 3" >> /etc/ssh/sshd_config echo "MaxAuthTries 3" >> /etc/ssh/sshd_config echo "MaxSessions 5" >> /etc/ssh/sshd_config
进阶技巧分享
1. 使用PAM增强认证
# 配置Google Authenticator双因子认证 apt install libpam-google-authenticator -y google-authenticator # 修改PAM配置 echo "auth required pam_google_authenticator.so" >> /etc/pam.d/sshd
2. 自动化安全检查
# 创建安全检查清单脚本
cat > /usr/local/bin/security_audit.sh << 'EOF'
#!/bin/bash
echo"=== Linux服务器安全检查报告 ==="
echo"检查时间: $(date)"
echo""
# 检查用户账户
echo"1. 用户账户检查:"
awk -F: '$3==0{print "警告: " $1 " 具有root权限"}' /etc/passwd
# 检查空密码账户
echo"2. 空密码账户检查:"
awk -F: '$2==""{print "警告: " $1 " 密码为空"}' /etc/shadow
# 检查文件权限
echo"3. 关键文件权限检查:"
ls -l /etc/passwd /etc/shadow /etc/sudoers
# 检查网络监听
echo"4. 网络监听端口:"
netstat -tlnp | grep LISTEN
echo"=== 检查完成 ==="
EOF
chmod +x /usr/local/bin/security_audit.sh
总结与建议
通过以上多层防护措施,可以显著提升Linux服务器的安全性:
安全等级评估:
• 基础级:修改SSH端口 + 密钥认证
• 标准级:+ Fail2Ban + 防火墙配置
• 高级:+ 入侵检测 + 文件监控
• 专家级:+ 蜜罐 + 自动化响应
最佳实践建议:
1. 定期更新系统和软件包
2. 最小化权限原则
3. 定期审计和日志分析
4. 制定应急响应预案
5. 定期进行安全演练
全部0条评论
快来发表一下你的评论吧 !