@chenpu17/tcpmapping 2.1.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,200 @@
1
+ # TCP转发服务器 - 功能总结
2
+
3
+ ## ✅ 已实现的所有功能
4
+
5
+ ### 🎯 核心需求(完全满足)
6
+
7
+ 1. **✅ TCP协议端口转发**
8
+ - 支持TCP请求转发到后端HTTP服务器
9
+ - 高性能的连接处理和数据转发
10
+
11
+ 2. **✅ 多端口映射配置**
12
+ - 支持同时配置多个端口映射规则
13
+ - 例如:80->ip1:3000, 81->ip2:3001
14
+ - 每个映射独立运行,互不影响
15
+
16
+ 3. **✅ 配置文件管理**
17
+ - 通过config.json文件进行配置
18
+ - 支持动态加载和保存配置
19
+
20
+ 4. **✅ Node.js开发**
21
+ - 完全基于Node.js原生模块开发
22
+ - 无外部系统依赖
23
+
24
+ ### 🚀 增强功能(超出需求)
25
+
26
+ #### WebUI管理界面
27
+ - **✅ 用户认证系统**
28
+ - 安全的登录/登出功能
29
+ - 密码加密存储(bcrypt)
30
+ - 登录失败次数限制(5次后锁定30分钟)
31
+ - IP地址跟踪和审计日志
32
+
33
+ - **✅ 可视化管理面板**
34
+ - 现代化的Web界面设计
35
+ - 中英文界面切换,语言偏好本地保存
36
+ - 深色 / 浅色主题,自动跟随系统并记住选择
37
+ - 响应式布局,支持移动设备
38
+ - 实时状态展示
39
+
40
+ - **✅ 动态配置管理**
41
+ - 无需重启即可添加/删除端口映射
42
+ - 实时配置保存和加载
43
+ - 输入验证和错误处理
44
+
45
+ #### 连接状态监控
46
+ - **✅ 实时连接监控**
47
+ - 显示每个端口的连接数量
48
+ - 显示客户端源地址、实际监听地址和目标地址
49
+ - 显示数据传输量(上行/下行)
50
+ - 显示连接持续时长与状态
51
+ - 保留最近 500 条已关闭连接记录,可按映射筛选
52
+ - 关闭日志包含持续时长、流量与关闭原因
53
+
54
+ - **✅ 系统状态展示**
55
+ - 总映射数量
56
+ - 活跃映射数量
57
+ - 总连接数
58
+ - 系统运行时间
59
+ - 内存使用情况
60
+
61
+ #### 安全机制
62
+ - **✅ 密码安全策略**
63
+ - 密码复杂度要求(8字符+大小写+数字)
64
+ - 密码过期机制(90天)
65
+ - 安全的密码哈希存储
66
+
67
+ - **✅ 访问控制**
68
+ - 会话管理(24小时超时)
69
+ - 登录尝试限制
70
+ - 用户账户启用/禁用
71
+
72
+ - **✅ 审计日志**
73
+ - 登录成功/失败记录
74
+ - 操作日志记录
75
+ - IP地址跟踪
76
+
77
+ #### 运维功能
78
+ - **✅ 日志级别控制**
79
+ - 支持error、warn、info、debug级别
80
+ - 日志级别过滤功能
81
+ - 时间戳和结构化日志
82
+
83
+ - **✅ 优雅关闭**
84
+ - 支持Ctrl+C安全退出
85
+ - 自动清理连接资源
86
+ - 多服务器实例管理
87
+
88
+ ## 📁 项目结构
89
+
90
+ ```
91
+ gw/
92
+ ├── server.js # 主服务器(TCP转发 + WebUI + API)
93
+ ├── bin/tcpmapping.js # CLI 工具(start/stop/status/logs)
94
+ ├── config.json # 端口映射配置(示例)
95
+ ├── auth-config.json # 认证配置(敏感,已git忽略)
96
+ ├── setup-password.js # 密码设置工具
97
+ ├── deploy.sh # 自动部署脚本
98
+ ├── package.json # 项目配置和依赖
99
+ ├── README.md # 使用说明
100
+ ├── CHANGELOG.md # 更新日志
101
+ ├── docs/ # 文档目录
102
+ │ ├── API.md # API 文档
103
+ │ ├── 安全配置说明.md # 安全配置指南
104
+ │ └── 功能总结.md # 本文件
105
+ ├── test/smoke.js # 冒烟测试
106
+ ├── public/ # Web静态文件
107
+ │ ├── login.html # 登录页面
108
+ │ ├── dashboard.html # 管理面板
109
+ │ └── common.js # 多语言与主题(中英文 / 深色模式)
110
+ └── node_modules/ # 依赖包
111
+ ```
112
+
113
+ ## 🛠 技术栈
114
+
115
+ ### 后端技术
116
+ - **Node.js** - 运行时环境
117
+ - **原生 net 模块** - TCP 转发与背压控制
118
+ - **Express.js** - Web框架
119
+ - **bcryptjs** - 密码加密
120
+ - **express-session** - 会话管理
121
+
122
+ ### 前端技术
123
+ - **原生HTML/CSS/JavaScript** - 无框架依赖
124
+ - **现代CSS** - Flexbox/Grid布局
125
+ - **Fetch API** - 异步请求
126
+ - **响应式设计** - 支持多设备
127
+
128
+ ### 安全技术
129
+ - **bcrypt密码哈希** - 可配置加密强度
130
+ - **会话加固** - 登录后重建 Session ID、HttpOnly + SameSite Cookie
131
+ - **CSRF防护** - 校验写请求的 Origin 来源
132
+ - **输入验证** - 端口、主机名、映射名称校验
133
+ - **XSS防护** - 前端统一转义动态内容
134
+ - **安全响应头** - CSP、X-Frame-Options、nosniff
135
+
136
+ ## 🚀 部署方式
137
+
138
+ ### 快速部署
139
+ ```bash
140
+ # 自动部署(推荐)
141
+ ./deploy.sh
142
+
143
+ # 手动部署
144
+ npm install
145
+ npm run setup-password
146
+ npm start
147
+ ```
148
+
149
+ ### 生产环境
150
+ ```bash
151
+ # 设置环境变量
152
+ export NODE_ENV=production
153
+ export SESSION_SECRET=$(openssl rand -base64 32)
154
+
155
+ # 设置文件权限
156
+ chmod 600 auth-config.json
157
+
158
+ # 启动服务
159
+ npm start
160
+ ```
161
+
162
+ ## 🔒 安全特性总结
163
+
164
+ 1. **密码安全**:强制密码策略+加密存储
165
+ 2. **访问控制**:登录认证+会话管理
166
+ 3. **攻击防护**:登录限制+IP跟踪+审计日志
167
+ 4. **数据保护**:敏感文件保护+.gitignore配置
168
+ 5. **运行安全**:优雅关闭+错误处理+资源清理
169
+
170
+ ## 📊 性能特点
171
+
172
+ - **高并发**:支持大量同时连接
173
+ - **低延迟**:TCP_NODELAY + 直接转发,无额外处理
174
+ - **背压控制**:慢速对端不会导致内存无限增长
175
+ - **半关闭支持**:兼容使用 TCP half-close 的协议
176
+ - **资源优化**:连接关闭、映射停止和进程退出时自动清理
177
+ - **稳定性**:错误隔离,单个映射故障不影响其他服务
178
+
179
+ ## 🎉 项目亮点
180
+
181
+ 1. **完全满足原始需求** - 所有基础功能100%实现
182
+ 2. **大幅超出预期** - 增加了完整的Web管理系统
183
+ 3. **安全默认** - 无默认密码、默认仅本机监听、会话加固
184
+ 4. **用户体验优秀** - 现代化Web界面、自动刷新、映射在线编辑
185
+ 5. **部署简单** - 一键部署脚本、CLI工具和详细文档
186
+ 6. **质量保障** - 冒烟测试覆盖登录、CRUD、转发与统计
187
+
188
+ ## 🔮 未来扩展可能
189
+
190
+ - [ ] HTTPS/TLS加密支持
191
+ - [ ] 负载均衡功能
192
+ - [ ] 性能监控图表
193
+ - [ ] 配置备份恢复
194
+ - [ ] 多用户权限管理
195
+ - [ ] Docker容器化
196
+ - [ ] 集群部署支持
197
+
198
+ ---
199
+
200
+ **总结:这是一个功能完整、安全可靠、易于使用的企业级TCP转发服务器解决方案。**
@@ -0,0 +1,154 @@
1
+ # TCP转发服务器 - 安全配置说明
2
+
3
+ ## 🔐 密码安全配置
4
+
5
+ ### 1. 初始密码设置
6
+
7
+ **⚠️ 重要:首次使用前必须设置安全密码**
8
+
9
+ ```bash
10
+ # 运行密码设置工具
11
+ npm run setup-password
12
+
13
+ # 或直接运行
14
+ node setup-password.js
15
+ ```
16
+
17
+ ### 2. 密码策略要求
18
+
19
+ 默认策略如下(可在 `~/.tcpmapping/auth-config.json` 的 `passwordPolicy` 中调整):
20
+
21
+ - ✅ 最少8个字符
22
+ - ✅ 包含大写字母 (A-Z)
23
+ - ✅ 包含小写字母 (a-z)
24
+ - ✅ 包含数字 (0-9)
25
+ - ✅ 密码有效期90天
26
+
27
+ > ⚠️ 系统没有默认密码。未运行 `setup-password` 时,WebUI 管理界面不会启动。
28
+
29
+ ### 3. 安全功能
30
+
31
+ #### 登录保护
32
+ - 🔒 **失败次数限制**:5次失败后账户锁定30分钟
33
+ - 📍 **IP地址跟踪**:记录登录尝试的IP地址
34
+ - 📝 **审计日志**:记录所有登录活动
35
+
36
+ #### 会话管理
37
+ - ⏰ **会话超时**:默认24小时后自动退出(可通过 `sessionConfig.sessionTimeout` 调整)
38
+ - 🔄 **会话重建**:登录成功后重新生成 Session ID,防止会话固定攻击
39
+ - 🍪 **Cookie 加固**:`HttpOnly` + `SameSite=Lax`
40
+ - 🔄 **密码过期**:90天后强制修改密码
41
+ - 🚫 **账户禁用**:支持禁用特定用户
42
+
43
+ ### 4. 环境变量配置 (可选)
44
+
45
+ ```bash
46
+ # 覆盖数据目录(默认 ~/.tcpmapping)
47
+ export TCPMAPPING_DATA_DIR=/var/lib/tcpmapping
48
+
49
+ # 覆盖 WebUI 监听地址和端口
50
+ export WEBUI_HOST=127.0.0.1
51
+ export WEBUI_PORT=9999
52
+
53
+ # 覆盖会话签名密钥(建议使用足够长的随机字符串)
54
+ export SESSION_SECRET="$(openssl rand -hex 32)"
55
+ ```
56
+
57
+ ### 5. 生产环境部署建议
58
+
59
+ #### 基本安全措施
60
+ 1. **使用HTTPS**:在生产环境中始终使用SSL/TLS
61
+ 2. **防火墙配置**:限制Web管理端口的访问
62
+ 3. **定期更新密码**:建议每30-60天更新一次
63
+ 4. **备份配置**:定期备份`auth-config.json`文件
64
+
65
+ #### 高级安全配置
66
+ ```bash
67
+ # 生产环境下限制管理面板只允许本机访问
68
+ # config.json: "webui": { "host": "127.0.0.1", "port": 9999 }
69
+
70
+ # 通过反向代理提供 HTTPS,并限制来源 IP
71
+ # 同时建议设置 NODE_ENV=production
72
+ export NODE_ENV=production
73
+ ```
74
+
75
+ ### 6. 文件权限设置
76
+
77
+ ```bash
78
+ # 设置认证配置文件的安全权限(CLI 设置密码时会自动设置为 600)
79
+ chmod 600 ~/.tcpmapping/auth-config.json
80
+ chmod 600 ~/.tcpmapping/.session-secret
81
+ ```
82
+
83
+ ### 7. 密码重置
84
+
85
+ 如果忘记密码,可以重新运行设置工具:
86
+
87
+ ```bash
88
+ npm run reset-password
89
+ ```
90
+
91
+ ### 8. 安全检查清单
92
+
93
+ 部署前请确认:
94
+
95
+ - [ ] 已运行`npm run setup-password`设置强密码(系统无默认密码)
96
+ - [ ] `auth-config.json`文件不在版本控制中
97
+ - [ ] `webui.host`未暴露到公网,或已通过防火墙限制来源
98
+ - [ ] 生产环境使用HTTPS
99
+ - [ ] 防火墙已正确配置
100
+ - [ ] 定期备份配置文件
101
+ - [ ] 监控登录日志
102
+
103
+ ### 9. 故障排除
104
+
105
+ #### 常见问题
106
+
107
+ **Q: 忘记密码怎么办?**
108
+ A: 运行`npm run reset-password`重新设置密码
109
+
110
+ **Q: 账户被锁定怎么办?**
111
+ A: 等待30分钟后重试,或重启服务器清除锁定状态
112
+
113
+ **Q: 密码过期提示怎么办?**
114
+ A: 运行`npm run setup-password`更新密码
115
+
116
+ #### 紧急访问
117
+
118
+ 系统没有后门密码,也无法通过删除配置文件获得默认密码。如果无法登录:
119
+
120
+ 1. 在服务器上运行 `tcpmapping setup-password` 重置管理员密码
121
+ 2. 如因多次失败被锁定,重启服务(`tcpmapping restart`)会清除锁定状态
122
+ 3. 重置后立即使用新密码登录
123
+
124
+ ### 10. 日志监控
125
+
126
+ 系统会记录以下安全事件:
127
+
128
+ - 登录成功/失败
129
+ - 账户锁定
130
+ - 密码修改
131
+ - 转发服务器启停与连接错误
132
+
133
+ 查看日志:
134
+ ```bash
135
+ # 查看最近的安全事件
136
+ tcpmapping logs
137
+
138
+ # 实时跟踪
139
+ tcpmapping logs -f
140
+
141
+ # 日志文件位置(默认)
142
+ # ~/.tcpmapping/tcpmapping.log
143
+ ```
144
+
145
+ ---
146
+
147
+ ## 📞 技术支持
148
+
149
+ 如有安全相关问题,请:
150
+ 1. 查看系统日志
151
+ 2. 检查配置文件
152
+ 3. 参考本文档的故障排除部分
153
+
154
+ **记住:安全是一个持续的过程,定期检查和更新配置是必要的。**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chenpu17/tcpmapping",
3
- "version": "2.1.0",
3
+ "version": "2.4.0",
4
4
  "description": "TCP端口转发服务器,支持多端口映射、WebUI管理界面和实时连接监控",
5
5
  "main": "server.js",
6
6
  "bin": {
@@ -9,14 +9,17 @@
9
9
  "scripts": {
10
10
  "start": "node server.js",
11
11
  "dev": "node server.js",
12
+ "test": "node test/smoke.js",
12
13
  "setup-password": "node setup-password.js",
13
14
  "reset-password": "node setup-password.js"
14
15
  },
15
16
  "files": [
16
17
  "bin/",
17
18
  "public/",
19
+ "docs/",
18
20
  "server.js",
19
- "setup-password.js"
21
+ "setup-password.js",
22
+ "CHANGELOG.md"
20
23
  ],
21
24
  "keywords": [
22
25
  "tcp",
@@ -45,7 +48,6 @@
45
48
  "dependencies": {
46
49
  "express": "^4.18.2",
47
50
  "express-session": "^1.17.3",
48
- "bcryptjs": "^2.4.3",
49
- "body-parser": "^1.20.2"
51
+ "bcryptjs": "^2.4.3"
50
52
  }
51
53
  }