SSH端口转发参考工具

SSH端口转发教程与命令生成器,支持本地转发、远程转发、动态转发三种模式,常用端口参考表,安全注意事项与防火墙规则参考。

SSH命令生成器

生成的SSH命令将在此显示

1. 本地端口转发(-L)

将本地端口映射到远程服务器可以访问的目标。适用于访问内网服务。

ssh -L [本地端口]:[目标主机]:[目标端口] 用户名@SSH服务器

示例:将本地8080端口转发到远程MySQL

ssh -L 8080:localhost:3306 root@db-server.com
数据流:本地:8080 -> SSH隧道 -> db-server.com:3306。只有SSH服务器需要公网可访问。

2. 远程端口转发(-R)

将远程服务器端口映射到本地可以访问的目标。适用于内网穿透。

ssh -R [远程端口]:[本地目标]:[本地端口] 用户名@SSH服务器

示例:将远程8080端口转发到本地3000端口(内网穿透)

ssh -R 8080:localhost:3000 root@public-server.com
数据流:public-server.com:8080 -> SSH隧道 -> 本地:3000。需要在SSH服务器配置中启用GatewayPorts。

3. 动态端口转发(SOCKS代理 -D)

创建SOCKS代理服务器,通过SSH隧道转发所有TCP流量。

ssh -D [本地端口] 用户名@SSH服务器

示例:在本地1080端口创建SOCKS5代理

ssh -D 1080 root@proxy-server.com
注意:动态转发会转发所有通过代理的流量,请谨慎使用。浏览器中配置SOCKS5代理为socks5://127.0.0.1:1080。

常用端口参考表

服务默认端口协议说明
SSH22TCP安全 Shell 远程登录
HTTP80TCPWeb 服务
HTTPS443TCP安全 Web 服务
FTP21TCP文件传输
SSH/SFTP22TCP安全文件传输
MySQL3306TCPMySQL 数据库
PostgreSQL5432TCPPostgreSQL 数据库
MongoDB27017TCPMongoDB 数据库
Redis6379TCPRedis 缓存
RabbitMQ5672TCPRabbitMQ 消息队列
Docker Registry5000TCPDocker 私有仓库
Jenkins8080TCPCI/CD 服务
Tomcat8080TCPJava Web 服务器
VNC5900TCP远程桌面
RDP3389TCPWindows 远程桌面
SMTP25TCP邮件发送
DNS53UDP/TCP域名解析
Elasticsearch9200TCP搜索引擎
Kafka9092TCP消息流平台

安全注意事项

1. 使用密钥认证
生成SSH密钥对:ssh-keygen -t ed25519 -C "your@email.com"
将公钥复制到服务器:ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
2. 禁用密码认证
编辑 /etc/ssh/sshd_config,设置 PasswordAuthentication no,然后 systemctl restart sshd
3. 限制端口转发
sshd_config 中设置 AllowTcpForwarding yes(按需开启),PermitOpen localhost:3306(限制转发目标)
4. 不要转发到低端口
避免将远程转发绑定到特权端口(1-1023),除非必要且经过安全评估。
5. 监控连接
使用 ss -tlnp 检查监听端口,netstat -anp | grep ssh 查看 SSH 连接状态。

防火墙规则参考

iptables

# 允许SSH连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许特定端口的转发
iptables -A FORWARD -p tcp --dport 3306 -j ACCEPT

# 限制SSH连接速率(防暴力破解)
iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

firewalld

# 开放SSH端口
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --reload

# 开放转发端口
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload

ufw (Ubuntu)

# 允许SSH
ufw allow 22/tcp

# 允许特定端口
ufw allow 8080/tcp
ufw enable