端口转发的概念:
它是指当访问指定的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),想要创建自己的服务,需要在该目录下自定相关服务。
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
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端口是否开放监听了。