本文系统讲解Linux防火墙端口映射从基础到实践的全流程,首先介绍端口映射核心概念(如DNAT/SNAT)及防火墙原理,再分工具详解操作:iptables通过-t nat -A PREROUTING等规则实现转发,firewalld则利用portforwarding服务简化配置,实践部分涵盖规则添加、保存配置、端口冲突处理及服务重启等关键步骤,同时提供telnet、curl等验证方法,并常见问题如防火墙未启动、权限不足的排查方案,助用户快速掌握端口映射配置与排错,实现服务安全访问。
在Linux服务器运维中,端口映射(Port Mapping)是常见的需求,它允许将外部网络的请求转发到内网服务器的特定端口,实现服务的对外暴露,无论是搭建Web服务器、远程访问服务,还是部署内部应用,端口映射都扮演着关键角色,随着业务需求变化(如服务端口调整、安全策略更新),我们经常需要修改已有的防火墙端口映射规则,本文将以Linux主流防火墙工具(iptables和firewalld)为例,详细讲解端口映射修改的完整流程,涵盖基础概念、实操步骤及常见问题解决。
基础概念:防火墙与端口映射
什么是端口映射?
端口映射是一种网络地址转换(NAT)技术,通过将外部IP地址和端口映射到内部IP地址和端口,实现内外网通信,将公网服务器的80端口映射到内网Web服务器的8080端口,外部用户访问公网IP:80时,实际访问的是内网服务器的8080端口。
Linux主流防火墙工具
Linux系统常用的防火墙工具包括:

- iptables:传统的Linux防火墙工具,基于内核的netfilter框架,通过“表(Table)”和“链(Chain)”管理规则,功能强大但配置复杂。
- firewalld:CentOS/RHEL 7+、Ubuntu 18.04+等系统默认的动态防火墙管理工具,支持区域(Zone)和服务(Service)概念,配置更灵活。
- nftables:iptables的 successor,提供更简洁的语法,但普及度较低,本文暂不展开。
本文重点:以iptables和firewalld为例,讲解端口映射的修改方法。
环境准备
在修改端口映射前,需确认以下信息:
-
当前防火墙类型:通过以下命令检查系统使用的防火墙:
# 检查iptables是否运行 systemctl status iptables # 检查firewalld是否运行 systemctl status firewalld
若两者均未运行,需先启动并启用(如
systemctl start iptables && systemctl enable iptables)。 -
已有端口映射规则:查看当前生效的端口映射,避免冲突:
- iptables:
# 查看NAT表的PREROUTING链(端口映射主要在此链配置) iptables -t nat -L PREROUTING -n -v
- firewalld:
# 查看已启用的端口转发规则 firewall-cmd --list-forward-ports
- iptables:
-
权限要求:修改防火墙规则需root权限,建议使用
sudo或直接su -切换至root用户。
iptables端口映射修改
iptables的端口映射主要通过nat表的PREROUTING(目标DNAT)和POSTROUTING(源SNAT)链实现,以下是修改步骤:
步骤1:备份现有规则
重要! 修改前务必备份规则,避免误操作导致服务中断:
# 备份iptables规则至文件 iptables-save > /etc/iptables/rules.v4
步骤2:删除旧端口映射规则
假设旧规则为:将公网100.100.1:80映射到内网168.1.100:8080,删除规则需匹配“协议、源IP/端口、目标IP/端口”等条件:
# 删除旧规则(根据实际规则参数调整) iptables -t nat -D PREROUTING -p tcp -d 202.100.100.1 --dport 80 -j DNAT --to-destination 192.168.1.100:8080
提示:若不确定规则参数,可通过iptables -t nat -L PREROUTING --line-numbers -n -v查看规则行号,再用iptables -t nat -D PREROUTING 行号删除(如iptables -t nat -D PREROUTING 3删除第3条规则)。
步骤3:添加新端口映射规则
假设新需求为:将公网100.100.1:8080映射到内网168.1.100:9000,添加规则如下:
# 添加DNAT规则(PREROUTING链:修改目标地址和端口) iptables -t nat -A PREROUTING -p tcp -d 202.100.100.1 --dport 8080 -j DNAT --to-destination 192.168.1.100:9000 # 添加SNAT规则(POSTROUTING链:修改源地址,确保内网

