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 -aGsudoadmin
3. 配置密钥认证
# 生成SSH密钥对 ssh-keygen -t ed25519 -C"your_email@example.com" # 在服务器上创建authorized_keys mkdir-p ~/.ssh chmod700 ~/.ssh echo"your_public_key">> ~/.ssh/authorized_keys chmod600 ~/.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-clientsetsshd unbanip 192.168.1.100
第三层:防火墙配置
UFW简单防火墙
# 启用UFW ufwenable # 设置默认策略 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 &&cdossec-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 |whilereadline;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 importpsutil importsmtplib fromemail.mime.textimportMIMEText importtime defcheck_system_health(): alerts = [] # CPU使用率检查 cpu_percent = psutil.cpu_percent(interval=1) ifcpu_percent >80: alerts.append(f"CPU使用率过高:{cpu_percent}%") # 内存使用率检查 memory = psutil.virtual_memory() ifmemory.percent >85: alerts.append(f"内存使用率过高:{memory.percent}%") # 磁盘使用率检查 forpartitioninpsutil.disk_partitions(): disk_usage = psutil.disk_usage(partition.mountpoint) ifdisk_usage.percent >90: alerts.append(f"磁盘{partition.mountpoint}使用率过高:{disk_usage.percent}%") returnalerts defsend_alert(alerts): ifnotalerts: 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. 定期进行安全演练
-
Web
+关注
关注
2文章
1290浏览量
71712 -
Linux
+关注
关注
87文章
11531浏览量
214671 -
服务器
+关注
关注
13文章
9844浏览量
88302
原文标题:Linux服务器安全防护完全指南:从0到1构建铜墙铁壁
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
租用服务器后如何进行服务器安全防护
基于ARM和Linux的嵌入式Web服务器的构建及应用
基于Linux系统的FTP服务器的实现
工业物联网安全防护体系研究

评论