gongxiangp2/FRP服务器诊断修复报告.md
chenpei 383772d39f 🛡️ 服务器安全加固和FRP问题修复
主要更新:
1. FRP服务器诊断与修复
   - 发现并修复文件描述符耗尽问题(65,536 → 1,048,576)
   - 分析并解决用户上传失败问题
   - 确认SSH服务器安全未被攻破

2. 安全防护系统部署
   - 部署IP黑名单防火墙(封禁20+攻击者)
   - 设置SSH端口速率限制
   - 配置自动化定时任务(每小时更新)
   - 安装Fail2ban实时防护系统
   - 添加白名单保护机制

3. 内网访问优化
   - 改进内网检测逻辑
   - 添加网络状态API
   - 优化钉钉登录流程
   - 完善信息补充功能

4. 文档完善
   - FRP服务器诊断修复报告
   - SSH安全评估报告
   - Fail2ban使用指南
   - 文件描述符详解
   - 用户上传失败原因分析
   - 防火墙配置说明
   - 内网检测改进报告

修复的问题:
- ✅ 文件描述符耗尽导致的服务异常
- ✅ 用户上传失败(影响9.5小时)
- ✅ SSH暴力破解攻击(91,299+次)
- ✅ 第三方项目攻击影响
- ✅ 127.0.0.1误封禁问题

部署的安全措施:
- 三重防护体系(Fail2ban + 防火墙 + 强密码)
- 自动化监控和封禁
- 实时攻击拦截(秒级响应)
- 完整的管理和监控工具

测试环境:开发环境
影响范围:服务器安全、用户上传、系统稳定性
当前状态:✅ 所有问题已修复,系统运行正常
2025-11-06 13:42:36 +08:00

280 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔧 FRP 公网服务器诊断与修复报告
**服务器信息:**
- IP地址:180.97.221.140
- 用户名:root
- 检查时间:2025年11月5日 13:48
---
## 📊 问题诊断
### ❌ 发现的问题
**严重错误:文件描述符数量耗尽**
1. **错误日志**:
```
[proxy.go:196] met temporary error: accept tcp: accept4: too many open files
```
2. **根本原因**:
- FRP 进程的文件描述符限制:**65,536**
- 当前已打开的文件数:**65,536**(达到上限!)
- 无法接受新的连接请求
3. **影响范围**:
- ❌ youyidian-3d (2320端口) - 无法接受连接
- ❌ nas-ssh (2322端口) - 无法接受连接
- ❌ 其他所有代理服务都受影响
---
## 🔧 修复步骤
### 1. 备份原配置
```bash
cp /etc/systemd/system/frps.service /etc/systemd/system/frps.service.backup-20251105-134828
```
### 2. 修改 systemd 服务配置
**修改前:**
```ini
[Service]
LimitNOFILE=65536
```
**修改后:**
```ini
[Service]
LimitNOFILE=1048576
```
### 3. 应用配置并重启服务
```bash
# 重新加载 systemd 配置
systemctl daemon-reload
# 重启 frps 服务
systemctl restart frps
```
---
## ✅ 修复验证
### 1. 进程状态
- **新进程 ID**:4826
- **文件描述符限制**:1,048,576(100万)✅
- **当前打开文件数**:22(非常健康)✅
- **运行状态**:active (running) ✅
### 2. 端口监听状态
| 端口 | 状态 | 用途 |
|------|------|------|
| 7000 | ✅ 正常监听 | FRP 服务端主端口 |
| 7500 | ✅ 正常监听 | Dashboard 管理界面 |
| 2320 | ✅ 正常监听 | youyidian-3d 穿透 |
| 2322 | ✅ 正常监听 | NAS SSH 穿透 |
### 3. 客户端连接状态
所有客户端在服务重启后自动重新连接:
| 客户端 ID | 来源 IP | 代理服务 | 状态 |
|-----------|---------|----------|------|
| d5789e601269f688 | 58.216.227.194 | nas-ssh, youyidian-3d | ✅ 已连接 |
| 3b9182d7c7dc5e78 | 180.111.177.153 | ssh-dao02 | ✅ 已连接 |
| 1be0c673e19ea24a | 36.153.91.234 | bi2-* 系列 | ✅ 已连接 |
### 4. 外部连接测试
```bash
# NAS SSH 穿透测试
nc -z -v -w5 180.97.221.140 2322
✅ Connection succeeded!
# Web应用穿透测试
nc -z -v -w5 180.97.221.140 2320
✅ Connection succeeded!
```
### 5. 最新日志(无错误)
```
2025/11/05 13:48:28 [I] frps started successfully
2025/11/05 13:48:31 [I] new proxy [nas-ssh] type [tcp] success
2025/11/05 13:48:31 [I] new proxy [youyidian-3d] type [tcp] success
```
**✅ 没有再出现 "too many open files" 错误**
---
## 📝 当前 FRP 配置
### 服务端配置 (/etc/frp/frps.ini)
```ini
[common]
bind_addr = 0.0.0.0
bind_port = 7000
dashboard_addr = 127.0.0.1
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = Admin@frp2024
authentication_method = token
token = LiuYunKu_NAS_2024_SecureToken
log_file = /var/log/frps.log
log_level = info
log_max_days = 7
allow_ports = 2320-2400,5238,6000-6100,8000-8100
max_pool_count = 50
# 上传优化配置
heartbeat_timeout = 300
tcp_mux = true
tcp_mux_keepalive_interval = 60
max_ports_per_client = 0
transport_buffer_size = 16777216
```
### Systemd 服务配置 (/etc/systemd/system/frps.service)
```ini
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
```
---
## 🎯 系统状态总结
### 硬件资源
- **系统**:CentOS 7 (内核 3.10.0-957)
- **FRP 版本**:0.52.3 (服务端)
- **内存占用**:约 360MB
- **运行时间**:重启后运行正常
### 系统限制
- **系统级文件描述符限制**:1,000,000
- **FRP进程限制**:1,048,576(已优化)✅
- **当前使用**:22 / 1,048,576(0.002%)
### 网络连接
- **活跃客户端**:3个
- **活跃代理**:7个(nas-ssh, youyidian-3d, ssh-dao02, bi2-*)
- **7000端口**:正常监听并接受连接
---
## 🔍 根本原因分析
### 为什么会出现 "too many open files"?
1. **限制过低**:原始限制 65,536 对于长时间运行的 FRP 服务器来说不足
2. **连接累积**:FRP 作为穿透服务,会维持大量长连接
3. **没有及时清理**:某些僵死连接可能没有被及时释放
### 为什么达到 65,536?
根据日志文件大小判断:
- 每天日志约 15-27MB
- 说明有大量的连接和传输活动
- 多个客户端(至少3个)长期连接
- 可能存在频繁的连接建立和断开
---
## 💡 后续建议
### 1. 定期监控
建议设置监控脚本,定期检查文件描述符使用情况:
```bash
#!/bin/bash
# 保存为 /usr/local/bin/check-frps-health.sh
PROCESS_ID=$(pgrep frps)
if [ -z "$PROCESS_ID" ]; then
echo "❌ FRP服务未运行"
exit 1
fi
FD_LIMIT=$(cat /proc/$PROCESS_ID/limits | grep "open files" | awk '{print $4}')
FD_CURRENT=$(ls /proc/$PROCESS_ID/fd | wc -l)
FD_PERCENT=$((FD_CURRENT * 100 / FD_LIMIT))
echo "文件描述符使用情况:"
echo " 当前:$FD_CURRENT"
echo " 限制:$FD_LIMIT"
echo " 使用率:$FD_PERCENT%"
if [ $FD_PERCENT -gt 80 ]; then
echo "⚠️ 警告:文件描述符使用率超过80%"
fi
```
### 2. 设置定时任务
```bash
# 每小时检查一次
echo "0 * * * * /usr/local/bin/check-frps-health.sh >> /var/log/frps-health.log 2>&1" | crontab -
```
### 3. 日志轮转
当前日志每天自动分割,保留 7 天,配置合理 ✅
### 4. 升级建议
服务端配置文件使用的是 `.ini` 格式,官方已弃用。建议未来升级到 `.toml` 或 `.yaml` 格式。
---
## ✅ 结论
**FRP 穿透服务已完全恢复正常!**
- ✅ 文件描述符限制已从 65,536 提升到 1,048,576
- ✅ 服务成功重启,所有客户端自动重连
- ✅ 所有代理服务正常工作
- ✅ 不再出现 "too many open files" 错误
- ✅ 外部端口连接测试全部通过
**您的 3D 共享平台(youyidian-3d)和 NAS SSH 穿透服务现已正常运行。**
---
## 📞 维护信息
### 相关命令
```bash
# 查看服务状态
systemctl status frps
# 查看实时日志
tail -f /var/log/frps.log
# 查看文件描述符使用
ls /proc/$(pgrep frps)/fd | wc -l
# 重启服务
systemctl restart frps
```
### 备份文件位置
- 配置备份:`/etc/systemd/system/frps.service.backup-20251105-134828`
- 日志目录:`/var/log/frps*.log`
---
**报告生成时间**:2025年11月5日 13:50
**操作人员**:AI 自动诊断与修复
**服务器**:180.97.221.140
**状态**:✅ 已修复并验证