主要更新: 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 + 防火墙 + 强密码) - 自动化监控和封禁 - 实时攻击拦截(秒级响应) - 完整的管理和监控工具 测试环境:开发环境 影响范围:服务器安全、用户上传、系统稳定性 当前状态:✅ 所有问题已修复,系统运行正常
280 lines
6.4 KiB
Markdown
280 lines
6.4 KiB
Markdown
# 🔧 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
|
||
**状态**:✅ 已修复并验证
|
||
|