Linux iptables 端口转发:让外部访问内网 SQL Server

📅 2026/7/2 12:51:05
Linux iptables 端口转发:让外部访问内网 SQL Server
为什么需要端口转发业务场景在企业内网中数据库服务器通常位于核心网络区域不直接对外暴露。而应用服务器或堡垒机位于接入层网络可以同时访问外网和内网。外网/本地 → 堡垒机接入层→ 数据库服务器核心层具体场景数据库服务器172.21.1.***只能被内网特定机器访问堡垒机172.21.1.***可以访问数据库也能被外部访问需要让外部开发人员通过堡垒机连接到内网数据库进行调试为什么不用其他方案方案问题直接开放数据库端口安全风险高违反企业安全策略VPN配置复杂需要额外设备或软件SSH隧道需要SSH权限且不稳定应用层代理需要额外软件配置复杂iptables转发✅ 系统自带无需安装性能好稳定可靠适用场景开发调试开发人员需要连接内网数据库临时开放运维人员需要临时开放数据库访问端口映射需要将一个端口映射到另一个地址资源受限内网环境无法安装额外软件 环境说明角色IP地址说明堡垒机转发服务器172.21.1.***可同时访问外网和内网数据库服务器172.21.1.***内网SQL Server不对外暴露数据库端口1433SQL Server默认端口本地客户端外网IP开发人员本地电脑 操作步骤第一步开启IP转发Linux默认未开启IP转发需要手动开启# 临时开启立即生效 echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward # 验证是否开启 cat /proc/sys/net/ipv4/ip_forward # 输出应为 1⚠️ 这个配置重启后会失效如需永久生效编辑/etc/sysctl.conf添加textnet.ipv4.ip_forward 1然后执行sudo sysctl -p生效。第二步配置iptables转发规则2.1 添加NAT转发规则bash# PREROUTING处理从外部进入的请求 sudo iptables -t nat -I PREROUTING 1 -p tcp --dport 1433 -j DNAT --to-destination 数据库服务器IP:1433 # OUTPUT处理本机访问本机的请求 sudo iptables -t nat -I OUTPUT 1 -p tcp --dport 1433 -j DNAT --to-destination 数据库服务器IP:1433 # POSTROUTING让返回包能正确路由 sudo iptables -t nat -A POSTROUTING -p tcp -d 数据库服务器IP --dport 1433 -j MASQUERADE2.2 开放防火墙端口bash# INPUT允许外部访问本机1433端口 sudo iptables -I INPUT 1 -p tcp --dport 1433 -j ACCEPT # FORWARD允许转发数据包到数据库 sudo iptables -I FORWARD 1 -p tcp -d 数据库服务器IP --dport 1433 -j ACCEPT sudo iptables -I FORWARD 1 -p tcp -s 数据库服务器IP --sport 1433 -j ACCEPT第三步验证配置3.1 查看规则是否生效bash# 查看NAT表规则 sudo iptables -t nat -L -n -v --line-numbers # 查看INPUT链 sudo iptables -L INPUT -n -v # 查看FORWARD链 sudo iptables -L FORWARD -n -v3.2 测试端口连通性bash# 在堡垒机上测试本机端口 nc -vz 127.0.0.1 1433 # 或 nc -vz 172.21.1.*** 1433 # 期望输出Connected3.3 从远程客户端测试在本地电脑上bashtelnet 堡垒机IP 1433 # 或 nc -vz 堡垒机IP 1433 快速恢复命令重启后执行如果重启后规则丢失执行以下命令快速恢复# 设置变量替换为实际IP DB_IP172.21.1.*** # 开启IP转发 echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward # 添加转发规则 sudo iptables -t nat -I PREROUTING 1 -p tcp --dport 1433 -j DNAT --to-destination $DB_IP:1433 sudo iptables -t nat -I OUTPUT 1 -p tcp --dport 1433 -j DNAT --to-destination $DB_IP:1433 sudo iptables -t nat -A POSTROUTING -p tcp -d $DB_IP --dport 1433 -j MASQUERADE # 开放端口 sudo iptables -I INPUT 1 -p tcp --dport 1433 -j ACCEPT sudo iptables -I FORWARD 1 -p tcp -d $DB_IP --dport 1433 -j ACCEPT sudo iptables -I FORWARD 1 -p tcp -s $DB_IP --sport 1433 -j ACCEPT # 验证 nc -vz 127.0.0.1 1433