Linux使用firewall-cmd命令设置端口转发(CentOS 7)

艾宁
2023-12-01

端口转发的概念:

它是指当访问指定的ip+端口时,可以将流量转发至指定其他指定的ip+端口。端口转发操作必须启用区域的ip伪装功能,将私有网络的ip地址隐藏并映射到一个公有ip地址。

这是地址转换的一种形式,常用于路由。由于受内核限制,端口转发功能仅可用于 IPv4。

转发的目的ip和端口,可以是本机或其他主机,协议可以为TCP或UDP。当转发时不指定ip时,则默认为转发目的ip为本机ip。当转发时指定了ip,却没有指定端口,则默认使用来源端口。


使用以下三种方式其一,对firewalld服务(防火墙)进行增加区域、以及修改配置。

1、工具有例如firewall-config图形界面工具,

2、firewall-cmd命令行工具,

3、在配置文件目录/etc/firewalld/zones中创建、或者拷贝系统默认的/usr/lib/firewalld/zones区域(zone)中的服务配置文件(XML),然后使用vim直接做出相应修改。

      其中,/usr/lib/firewalld/zones被用于默认和备用的服务,服务是 firewalld 所使用的有关端口和选项的规则集合,被启动的服务会在 firewalld 服务开启或者运行时自动加载,默认情况下,这里的很多服务是有效的。

      但是,/etc/firewalld/zones被用于用户创建的,可以自定义其中的服务配置文件(XML),想要创建自己的服务,需要在该目录下自定相关服务。


 

一、使用firewall-cmd命令,配置防火墙public区域中的端口转发。

1、使用firewall-cmd命令,查询系统当前使用的区域(zone)是否为public,否则,将其设置public。

[root@centos7 ~]# firewall-cmd --get-active-zones 
public
  interfaces: ens33
[root@centos7 ~]# firewall-cmd --get-default-zone 
public
[root@centos7 ~]# firewall-cmd --set-default-zone=public
success

2、在centos7中开启ip伪装有以下2中方式:

      a、使用firewall-cmd命令,开启防火墙public区域中的ip伪装,不开启ip伪装是不能设置端口转发的。

[root@centos7 ~]# firewall-cmd --zone=public --add-masquerade 
success
[root@centos7 ~]# firewall-cmd --zone=public --query-masquerade 
yes

       b、使用vim编辑/proc/sys/net/ipv4/ip_forward文件,将其中的0改为1,其中0:不开启ip伪装,1:开启ip伪装

[root@centos7 ~]# vim /proc/sys/net/ipv4/ip_forward
0

3、转发的目的ip和端口,可以是本机或其他主机。当转发时不指定ip时,则默认为转发目的ip为本机ip。当转发时指定了ip,却没有指定端口,则默认使用来源端口。

     端口转发分为以下3中情况:

     a、将本机端口8080的流量,转发至本机端口8088

[root@centos7 ~]# firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=8088
success

     b、将本机端口8080的流量,转发至指定ip192.168.22.55,同时继续使用端口8080

[root@centos7 ~]# firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toaddr=192.168.22.55
success

     c、将本机端口8080的流量,转发至指定ip192.168.22.55,同时,指定端口8088

[root@centos7 ~]# firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=8088:toaddr=192.168.22.55
success

4、使用firewall-cmd命令,查询、或移除指定区域(zone)中的端口转发配置。

[root@y460a ~]# firewall-cmd --zone=public --list-forward-ports 
port=8080:proto=tcp:toport=8088:toaddr=192.168.22.55

[root@y460a ~]# firewall-cmd --zone=public --remove-forward-port=port=8080:proto=tcp:toport=8088:toaddr=192.168.22.55
success

 

二、使用vim编辑/etc/firewalld/zones/public.xml文件,配置防火墙public区域中的端口转发。

1、使用vim编辑/etc/firewalld/zones/public.xml文件,在<zone></zone>标签中添加多个对应的子标签<forward-port />

      <forward-port to-port="3366" protocol="tcp" port="3306"/>,将本机端口3306的流量,转发至本机端口3366,

      <forward-port to-addr="192.168.22.55" to-port="8088" protocol="tcp" port="8080"/>,将本机端口8080的流量,转发至指定ip192.168.22.55,同时,指定端口8088。

      假如,开启其他区域(zone)中的端口,只需要修改对应的XML配置文件即可,对应配置(public.xml  dmz.xml  home.xml)文件的模板可以从/usr/lib/firewalld/zones目录下拷贝

[root@y460a ~]# vim /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <service name="http"/>
  <port protocol="tcp" port="80"/>
  <port protocol="tcp" port="8080"/>
  <forward-port to-port="3366" protocol="tcp" port="3306"/>
  <forward-port to-addr="192.168.22.55" to-port="8088" protocol="tcp" port="8080"/>
</zone>

2、最后,重载(reload)防火墙服务。

[root@centos7 ~]# firewall-cmd --reload 
success

 

端口转发的作用:

1、当需要把某个端口隐藏起来时,就可以在防火墙上阻止那个端口访问,然后,再开一个其他的端口,之后,配置防火墙的端口转发,将流量转发到其他端口。
2、端口转发可以做流量分发,当一个防火墙管理多台运行着不同服务的服务器时,可以使用防火墙将不同端口的流量转发至不同服务器。


 

配置好端口转发后出现无法转发时,请检查以下两个问题:

1、首先,检查是否已经开启允许伪装ip,没允许的话,请先开启伪装ip。

2、比如,将80端口转发至8080端口,请检查本地的80端口和目标的8080端口是否开放监听了。

 类似资料: