温馨提示×

Ubuntu iptables如何添加端口转发

小樊
57
2025-07-27 11:46:50
栏目: 智能运维

在 Ubuntu 系统中,使用 iptables 添加端口转发(也称为端口映射)可以通过设置 NAT(网络地址转换)规则来实现。以下是详细的步骤和示例,帮助你在 Ubuntu 上配置端口转发。

前提条件

  1. 具有管理员权限:执行 iptables 命令需要超级用户权限,因此建议使用 sudo

  2. 已安装 iptables:大多数 Ubuntu 版本默认已安装 iptables。如果未安装,可以使用以下命令安装:

    sudo apt update
    sudo apt install iptables
    

基本概念

  • PREROUTING 链:用于修改数据包的目标地址,常用于 DNAT(目标地址转换)。
  • POSTROUTING 链:用于修改数据包的源地址,常用于 SNAT(源地址转换)。
  • FORWARD 链:用于控制数据包的转发。

示例:将外部端口 8080 转发到内部 IP 192.168.1.100 的端口 80

假设你有一台运行 Ubuntu 的服务器,具有公网 IP 地址 203.0.113.5,你想将外部访问 203.0.113.5:8080 的流量转发到内网 IP 192.168.1.100:80

步骤 1:启用 IP 转发

首先,确保内核允许 IP 转发。编辑 /etc/sysctl.conf 文件:

sudo nano /etc/sysctl.conf

找到并取消注释(或添加)以下行:

net.ipv4.ip_forward=1

保存文件后,应用更改:

sudo sysctl -p

步骤 2:配置 iptables 规则

使用以下命令添加 DNAT 和 SNAT 规则:

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
sudo iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.100 --dport 80 -j MASQUERADE

解释:

  1. PREROUTING 规则

    • -t nat:指定使用 nat 表。
    • -A PREROUTING:在 PREROUTING 链添加规则。
    • -p tcp --dport 8080:匹配目标端口为 8080 的 TCP 流量。
    • -j DNAT --to-destination 192.168.1.100:80:将流量目标地址修改为 192.168.1.100:80
  2. POSTROUTING 规则

    • -t nat:指定使用 nat 表。
    • -A POSTROUTING:在 POSTROUTING 链添加规则。
    • -p tcp -d 192.168.1.100 --dport 80:匹配目标地址为 192.168.1.100 且目标端口为 80 的 TCP 流量。
    • -j MASQUERADE:进行源地址伪装,使返回流量能够正确路由回客户端。

步骤 3:保存 iptables 规则

iptables 规则在重启后会丢失,因此需要保存规则。Ubuntu 使用 iptables-persistent 来持久化规则。

  1. 安装 iptables-persistent

    sudo apt install iptables-persistent
    

    在安装过程中,系统会提示是否保存当前规则,选择“是”。

  2. 手动保存规则(如果已安装):

    sudo netfilter-persistent save
    sudo netfilter-persistent reload
    

验证规则

使用以下命令查看当前的 iptables 规则,确保规则已正确添加:

sudo iptables -t nat -L -n -v

你应该能看到类似以下的输出,表示端口转发规则已生效:

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            203.0.113.5           tcp dpt:8080 to:192.168.1.100:80

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      *       192.168.1.0/24        0.0.0.0/0           

删除端口转发规则

如果需要删除之前添加的端口转发规则,可以使用以下命令:

sudo iptables -t nat -D PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
sudo iptables -t nat -D POSTROUTING -p tcp -d 192.168.1.100 --dport 80 -j MASQUERADE

使用 ufw(Uncomplicated Firewall)进行端口转发

如果你的系统使用 ufw 作为防火墙管理工具,可以通过以下步骤添加端口转发:

  1. 启用 IP 转发(同上)。

  2. 添加端口转发规则

    sudo ufw route add 8080/tcp to 192.168.1.100:80
    
  3. 重新加载 ufw 规则

    sudo ufw reload
    
  4. 验证规则

    sudo ufw status numbered
    

注意ufw 的端口转发功能在某些版本中可能需要额外的配置或插件支持,具体请参考 ufw 的官方文档。

总结

通过以上步骤,你可以在 Ubuntu 系统中使用 iptablesufw 成功设置端口转发。确保在进行配置前备份现有规则,并在生产环境中谨慎操作,以避免不必要的网络中断。

0