Linux iptables 实战:配置 NAT 端口转发访问内网 MySQL
📚 运维配置文档:Linux NAT 端口转发配置
文档编号:OPS-NET-2025-016
维护人:[Freed]
创建日期:2025年8月27日
适用系统:CentOS / RHEL / Ubuntu / Debian 等主流 Linux 发行版
目标功能:通过 iptables 配置 NAT 端口转发,实现公网端口13306
映射到内网 MySQL 服务192.168.0.80:3306
,并限制访问来源 IP。
一、配置目标
项目 | 值 |
---|---|
公网访问端口 | 13306 |
内网目标地址 | 192.168.0.80:3306 |
允许访问的源 IP | 办公网络IP1 , 办公网络IP2 |
安全策略 | 拒绝其他所有 IP 访问 13306 |
二、前置条件
- 当前服务器具备公网 IP,作为跳板机(NAT 网关)
- 内网服务器
192.168.0.80
已开启 MySQL 服务并监听3306
端口 - 操作需使用
root
权限或sudo
- 云平台(如阿里云、腾讯云)安全组已放行
TCP 13306
端口
三、配置步骤
1. 开启 IP 转发(IP Forwarding)
IP 转发是实现 NAT 的基础功能,必须开启。
临时生效(立即生效,重启后失效):
echo 1 > /proc/sys/net/ipv4/ip_forward
永久生效(写入系统配置):
sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
验证是否开启:
cat /proc/sys/net/ipv4/ip_forward
正常输出应为:1
2. 配置 iptables NAT 规则
(1) 添加 SNAT 规则(MASQUERADE)
确保内网服务器返回的数据包能正确回传到客户端。
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
说明:
MASQUERADE
会自动使用出站接口的公网 IP 做源地址转换,适合动态 IP 环境。
(2) 添加 DNAT 规则(端口转发)
将公网 13306
端口流量转发至内网 MySQL 服务。
sudo iptables -t nat -A PREROUTING -p tcp --dport 13306 -j DNAT --to-destination 192.168.0.80:3306
3. 配置访问控制规则(INPUT 链)
允许指定 IP 访问:
sudo iptables -A INPUT -p tcp -s 办公网络IP1 --dport 13306 -j ACCEPT
sudo iptables -A INPUT -p tcp -s 办公网络IP2 --dport 13306 -j ACCEPT
拒绝其他所有 IP 访问:
sudo iptables -A INPUT -p tcp --dport 13306 -j DROP
⚠️ 注意:规则顺序重要!先允许,再拒绝。
4. 保存规则(防止重启丢失)
保存到自定义备份文件(推荐):
sudo iptables-save > /root/iptables_backup.txt
推荐:保存到系统标准路径(支持开机自动恢复)
# 创建目录(如不存在)
sudo mkdir -p /etc/iptables# 保存 IPv4 规则
sudo iptables-save > /etc/iptables/rules.v4
建议安装持久化服务:
Ubuntu/Debian:
sudo apt install iptables-persistent netfilter-persistent
CentOS/RHEL:
sudo yum install iptables-services sudo systemctl enable iptables
四、验证配置
1. 查看 NAT 转发规则
sudo iptables -t nat -L PREROUTING -n -v --line-numbers
应包含:
tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:13306 to:192.168.0.80:3306
2. 查看 MASQUERADE 规则
sudo iptables -t nat -L POSTROUTING -n -v
应包含:
MASQUERADE all -- * * 0.0.0.0/0 0.0.0.0/0
3. 查看访问控制规则
sudo iptables -L INPUT -n --line-numbers | grep 13306
应显示两条 ACCEPT
和一条 DROP
规则。
五、测试连接
从白名单 IP(如 办公网络IP1
)执行:
telnet <公网IP> 13306
若连接成功,说明配置生效。
六、恢复与清理
如需清除所有相关规则:
# 清除 DNAT 规则
sudo iptables -t nat -D PREROUTING -p tcp --dport 13306 -j DNAT --to-destination 192.168.0.80:3306# 清除 MASQUERADE(谨慎操作)
sudo iptables -t nat -D POSTROUTING -j MASQUERADE# 清除 INPUT 规则
sudo iptables -D INPUT -p tcp -s 183.62.113.98 --dport 13306 -j ACCEPT
sudo iptables -D INPUT -p tcp -s 183.62.113.101 --dport 13306 -j ACCEPT
sudo iptables -D INPUT -p tcp --dport 13306 -j DROP# 重新保存
sudo iptables-save > /etc/iptables/rules.v4
七、注意事项
项目 | 说明 |
---|---|
安全性 | 仅允许指定 IP 访问,防止端口暴露 |
云平台 | 务必在安全组中放行 13306 端口 |
持久化 | 使用 iptables-persistent 或类似工具确保重启后规则生效 |
服务依赖 | 确保 192.168.0.80:3306 服务正常运行 |
测试建议 | 从白名单 IP 测试连接,避免被 DROP 规则拦截 |
✅ 文档状态:已审核
📌 维护人:[Freed]
🔄 最后更新:2025年9月11日