【我的Linux,我做主!】Linux防火墙核心概念全面解读

系统运维

目录:
(一)tcpwraps的配置
(二)Firewalld的概念
(三)配置防火墙
(四)使用man firewalld.richlanguage

创新互联服务项目包括宣汉网站建设、宣汉网站制作、宣汉网页制作以及宣汉网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,宣汉网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到宣汉省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

众所周知,相较于企业内网,外部的公网环境更加恶劣,罪恶丛生。在公网与企业内网之间充当保护屏障的防火墙虽然有软件和硬件之分,但主要功能都是依据策略对穿越防火墙自身的流量进行过滤。防火墙策略可以基于流量的源地址、目的地址、端口号、协议、应用等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃。这样一来,就可以保证仅有合法的流量在企业内网和外部公网之间流动了。

(一)tcpwraps的配置
(1.1)在RHEL 7系统中有多种防火墙,其中一种是tcpwraps。Tcpwraps主要涉及到两个配置文件:/etc/hosts.allow文件和/etc/hosts.deny配置文件。在配置文件中的配置语法主要为:“daemon : 客户端”,例如在我们系统中有sshd服务,当这个服务运行的时候,本质上是有一个程序在后台一直在运行(图1-3),如果在hosts.allow文件中进行配置,那么就是允许指定的客户端访问这个服务,如果在hosts.deny文件中进行配置,那么就是不允许指定的客户端访问这个服务。其中我们在指定客户端的时候,如果是填写子网掩码,是不支持直接写/24的表示方法的,必须要完整的写成/255.255.255.0的表示方法(图1-2)。
# ps aux | grep -v grep | grep sshd


(1.2)接着我们看一下tcpwraps的匹配规则,首先到hosts.allow里去匹配,如果匹配成功了则系统允许通过这个匹配的地址访问,此后就不再到hosts.deny里去匹配了;如果在hosts.allow里没有匹配成功,则才会到hosts.deny里去匹配,如果在hosts.deny里匹配成功了,则系统会拒绝这个匹配的地址访问;如果在hosts.deny里也没有匹配成功,则系统默认是允许通过这个地址进行访问的,和没有指定这个条目的效果是一致的。
(1.3)默认情况下,在没有设置任何tcpwraps规则时,vms002主机是可以正常的使用ssh服务连接到vms001主机的。

(1.4)我们在vms001主机的hosts.allow中配置允许192.168.26.0网段中的所有主机可以访问vms001主机的ssh服务,此时我们发现vms002主机仍然是可以访问vms001主机的ssh服务的。
注意:hosts.allow配置文件中修改的条目在修改完后是立即自动生效的


(1.5)我们在vms001主机的/etc/hosts.allow配置文件和/etc/hosts.deny配置文件中都添加上允许192.168.26.102主机的条目,此时由于系统中先通过了hosts.allow配置文件中的条目,所以hosts.deny配置文件中的条目便不会再执行了,所以vms002主机是可以正常的访问vms001主机的ssh服务的。

(1.6)接着我们在vms001主机的/etc/hosts.allow配置文件中设置允许192.168.26.即26.0网段中所有的主机都允许通过,在/etc/hosts.deny配置文件中设置不允许192.168.26.102主机,此时由于是先执行了hosts.allow文件的比对,再执行hosts.deny文件的比对,所以vms002主机仍然是可以正常的访问vms001主机的ssh服务的。

(1.7)下面的一种情况是,我们在vms001主机的/etc/hosts.allow配置文件中设置允许192.168.26.0网段中所有的主机,但是除了192.168.26.102,在/etc/hosts.deny配置文件中没有做任何的配置,此时虽然排除了192.168.26.102主机允许通过,但是系统默认也是允许通过,所以此时vms002主机仍然是可以正常的访问vms001主机的ssh服务的(图1-9)。而当我们在/etc/hosts.deny配置文件中设置了192.168.26.102主机时,此时vms002主机就不可以访问vms001主机的ssh服务了(图1-10和图1-11)。



(1.8)一般我们为了保证安全性,在/etc/hosts.allow文件中指定了可以访问的主机后,同时也应该在/etc/hosts.deny文件中指定其他的所有主机都不能访问,从而提高系统的安全。此时我们在vms002主机上仍然可以正常的登录到vms001主机的ssh服务,但是其他IP地址的主机就无法登录vms001主机的ssh服务了。此时我们如果希望其他的主机也能够访问到vms001主机的ssh服务,可以先登录到vms002主机,再通过vms002主机跳板登录到vms001主机,此时vms002主机便实现了“堡垒机”的作用。
在/etc/hosts.allow中配置:
# sshd : 192.168.26.102/255.255.255.0
在/etc/hosts.deny中配置:
# sshd : ALL


(1.9)tcpwraps可以很好的进行访问控制的作用,我们使用ldd命令,可以查看tcpwraps是可以对sshd服务进行访问控制的(图1-14);我们安装好vsftpd服务后,使用ldd命令查看,发现tcpwraps也是可以对vsftpd服务进行访问控制的(图1-15);安装完httpd服务后发现,tcpwraps并不能对httpd服务进行访问控制,因为httpd服务并没有链接到tcpwraps模块(图1-16)。
注意:如果我们想要知道关于hosts allow更详细的用法,可以使用# man hosts.allow进行查询。
# ldd which sshd| grep wrap
# yum install vsftpd -y
# ldd which vsftpd| grep wrap
# yum install httpd -y



(二)Firewalld的概念
(2.1)在RHEL 7系列的系统中,firewalld防火墙取代了iptables防火墙。对于接触Linux系统比较早或学习过RHEL 6系统的读者来说,当他们发现曾经掌握的知识在RHEL 7中不再适用,需要全新学习firewalld时,难免会有抵触心理。其实,iptables与firewalld都不是防火墙的真面目,它们都只是用来定义防火墙策略的的防火墙管理工具而已,或者说,它们只是一种服务。iptables服务会把配置好的防火墙策略交给内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交给内核层面的nftables包过滤框架来处理。换句话说,当前在Linux系统中其实存在多个防火墙管理工具,旨在方便运维人员管理Linux系统中的防火墙策略,我们只需要配置妥当其中的一个就足够了。虽然这些工具各有优劣,但它们在防火墙策略的配置思路上是保持一致的。大家只要在多个防火墙管理工具中选择一款并将其学透,就足以满足日常的工作需求了。
(2.2)在RHEL 7系统中是同时存在多个防火墙的,例如firewalld、iptables、ebtables、ipv6tables等,但是RHEL 7系统默认是使用firewalld防火墙的。我们在使用Firewalld防火墙主要可以通过图形化界面和命令行这两种方式来进行配置,此处我们使用两种方式配合使用。

(三)配置防火墙
(3.1)通过图形化的界面我们发现,在区域部分展示的是防火墙所有的区域(zone)。在命令行,我们通过get-zones可以获得防火墙所有区域的信息(图1-19)。
# firewall-config &
# firewall-cmd --get-zones


(3.2)我们知道每个网卡都会需要和某个zone进行关联,如果某网卡没有和任何的zone关联,则会使用默认的zone,通过图形化界面我们可以知道,默认的zone是trusted,默认情况下所有的数据包都是允许通过的。
# firewall-cmd --get-default-zone


(3.3)而如果我们想修改防火墙的默认区域,可以通过“选项”--“改变默认区域”操作(图1-22和图1-23)。如果我们想要通过命令行的方式进行修改,则可以通过set-default-zone的参数进行设置,可以设置默认的区域为public(图1-24)
# firewall-cmd --set-default-zone=public



(3.4)默认情况下,所有的网卡都是和默认的zone进行关联的,此时我们默认的zone是public,所以网卡eno16777728显示是和public关联的;接着我们尝试将默认的zone修改为trusted,可以发现此时网卡eno16777728也会自动和修改为默认zone的trusted进行关联。
# firewall-cmd --get-zone-of-interface=eno16777728
# firewall-cmd --set-default-zone=trusted

(3.5)如果我们想将默认的public区域中的接口网卡eno16777728更改为和home区域的zone进行关联,此时如果我们直接在home区域添加eno16777728网卡,那么系统会弹出区域冲突的信息(图1-26)。由于每张网卡只能和一个区域进行关联,所以此时我们应该先将eno16777728从public区域中移除,然后再添加至home区域中,此时我们通过图形化界面便可以正常的将网卡和home区域进行关联了(图1-27和图1-28)。
# firewall-cmd --remove-interface=eno16777728---从public区域中移除网卡



(3.6)如果我们使用remove-interface参数从区域中删除网卡时,是从默认的区域中删除网卡的,此时防火墙默认的区域是public,但是网卡关联的是在home区域中,所以我们在删除时也需要指定区域。如果我们使用add-interface添加eno16777728网卡,没有指定区域时,那么系统会在默认的区域public中添加网卡。
# firewall-cmd --remove-interface=eno16777728 --zone=home
# firewall-cmd --add-interface=eno16777728

(3.7)现在我们的网卡eno16777728是在public区域中,如果我们想将网卡修改到其他的区域的zone中则可以使用change-interface,例如我们将网卡直接修改到home区域中。
# firewall-cmd --change-interface=eno16777728 --zone=home---将网卡直接修改到home区域中
# firewall-cmd --get-zone-of-interface=eno16777728

(3.8)现在我们仍然设置网卡eno16777728是在public区域中,首先我们将httpd服务启动起来,并设置主页信息,此时我们在vms002主机上尝试登录vms001主机的主页发现无法登录(图1-32)。接着我们在public区域中勾选http服务可以通过,此时便可以正常的登录到vms001的主页了(图1-34)。接着我们通过命令行的方式实现,首先通过get-services获取系统中所有的服务(图1-35),接着我们查询默认的public区域中http服务是否有勾选,并使用add-service添加http服务,使用remove-service去除http服务(图1-36)。
# firewall-cmd --get-services | grep http---获取系统中所有的服务并查询http服务是否有包含
# firewall-cmd --query-service=http---查询http服务是否有勾选
# firewall-cmd --add-service=http---将默认区域的http服务勾选
# firewall-cmd --remove-service=http---将默认区域的http服务去除






(3.9)以上的防火墙的设置都只是临时生效,如果将防火墙的服务重启后,会发现http服务便没有勾选了,此时就无法正常的访问http服务了。通过图形化界面设置,我们可以选择永久生效,然后在public区域中将http服务勾选,此时防火墙服务重启后,也仍然可以正常的访问http服务了(图1-38)。如果我们只是在永久配置中勾选了http服务,但是运行时配置中并没有勾选http服务,由于永久配置必须要重启后才会生效,所以此时当前运行的环境中并没有生效允许访问http服务,通过命令行的方式,我们应该通过加上“--permanent”写入持久态的参数处理(图1-39)。
# firewall-cmd --query-service=http
# systemctl restart firewalld.service---将服务重启一下
# firewall-cmd --add-service=http---设置防火墙允许http服务访问
# firewall-cmd --add-service=http --permanent---将配置写入持久态
# firewall-cmd --remove-service=http---删除防火墙允许http服务访问
# firewall-cmd --remove-service=http --permanent---将配置写入持久态




(3.10)有时候我们可能会使用非标准的端口去运行服务,第二个我们来了解“端口”,例如使用808端口运行http服务,此时我们在服务配置中勾上http会发现也是仍然不能正常的访问到vms001主机的主页。我们首先在http服务中开放808端口,并修改好端口的上下文,然后将httpd服务重启后,我们会发现由于防火墙并没有设置808端口允许通过,所以此时仍然是无法访问vms001主页的(图1-42),此时我们可以使用端口解决这个问题,我们在端口中添加808端口,使用的协议是tcp,这样我们便可以正常的访问到vms001主机在808端口开放的主页了(图1-44)。接着我们还可以使用命令行的方式实现添加808端口的操作,同时要记住添加端口完毕后需要添加“--permanent”参数,可以实现配置在重启后也仍然生效的效果。
# vim /etc/httpd/conf/httpd.conf
# vim /etc/ssh/sshd_config ---可以使用ssh配置文件中的修改端口上下文的模板
# semanage port -a -t http_port_t -p tcp 808---更改端口的上下文
# systemctl restart httpd.service
# firewall-cmd --query-port=808/tcp---查询808端口在防火墙中是否有开启
# firewall-cmd --remove-port=808/tcp---删除防火墙中开启的808端口,删除端口
# firewall-cmd --add-port=808/tcp---添加808端口





(3.11)第三个我们来了解“ICMP过滤器”,其中ICMP表示的是互联网控制报文协议,主要用于在联网的计算机之间发送出错信息,但也发送类似ping请求及回应等信息。此处ICMP过滤器和我们遇到的第一个“服务”在表示的时候是相反的,此处ICMP类型中的选项,如果勾上表示的是不允许通过,不打勾代表的是允许通过,而在“服务”中,勾上表示的是服务允许通过,而不打勾代表的是不允许通过。我们在ICMP过滤器中勾选上“echo-request”,此时vms001主机就不允许其他主机对自己发送ping的请求了,我们在vms002主机上向vms001主机发送ping的请求,发现并不能ping成功(图1-47)。接着我们再使用命令行的方式操作,使用add-icmp-block参数,此时就可以实现禁止其他主机ping当前vms001主机的要求了(图1-48)。不过需要注意的是有时候设置了ICMP后并不能禁止Windows类型的客户端的ping请求,此时我们可以在内核参数中进行相关的设置,从而实现禁ping的需求,/proc/sys/net/ipv4/目录下的icmp_echo_ignore_all内核参数默认是0,表示的允许其他主机ping的请求,此时任何类型的客户端都是无法ping通vms001主机的(图1-49和图1-50)
# firewall-cmd --get-icmptypes---查询当前防火墙中ICMP所有的类型
# firewall-cmd --add-icmp-block=echo-request---勾选ICMP请求的选项,拒绝其他机器的访问禁ping





(3.12)第四个我们来了解“来源”,由于我们的网卡是关联在public区域的,而且http服务并没有勾选,所以在vms002主机使用http://192.168.26.101 的方式访问时是无法打开vms001主机的主页的(图1-51至图1-53),我们在vms001主机的home区域中的来源添加192.168.26.0网段,同时在home区域的“服务”中添加了允许访问http服务后,此时虽然是在public区域中,但是仍然可以正常的访问vms001主机的主页(图1-54至图1-56)。这是由于我们在home区域的的“来源”设置了允许192.168.26.0网段后,那么访问的客户端IP地址只要是包含在这个网段中,那么即使此时使用的是public区域,但是仍然可以匹配到home区域中服务的设置规则,而home区域中允许了http服务,所以vms002主机可以正常的访问到vms001主机的主页。






(3.13)如果我们想了解当前的防火墙中包含有哪些的“来源”,我们可以使用query-source参数来验证指定的区域是否包含来源的信息,例如我们测试出在home区域中包含192.168.26.0网段的“来源”信息(图1-57)。不过我们还是可以通过“list-all”参数来查询未知网段的情况下设置“来源”的区域信息(图1-58)。我们可以通过命令行的方式对区域中的“来源”网段进行添加和删除操作。
# firewall-cmd --query-source=192.168.26.0/24
# firewall-cmd --query-source=192.168.26.0/24 --zone=home
# firewall-cmd --list-all---查询public区域是否有包含“来源”信息
# firewall-cmd --list-all --zone=home---查询home区域是否有包含“来源”信息
# firewall-cmd --remove-source=192.168.26.0/24 --zone=home---删除home区域的“来源”信息
# firewall-cmd --add-source=192.168.26.0/24 --zone=home---在home区域添加“来源”信息



(3.14)第五个是“伪装”,第六个是“端口转发”。目前IPv4的地址出现了资源短缺不够用,我们的解决方案除了使用IPv6以外,还可以使用NAT方案来进行缓解。在我们的环境中存在内网,内网中存在一个交换机,这个交换机会连接到一个对外访问的路由器,这个路由器连接到外部互联网的某主机(2.2.2.2),我们内网的主机IP地址是内网私有地址(10.0.0.2),而私有地址的网关是10.0.0.1在路由器的一个接口上,路由器的公网地址是1.1.1.1,现在我们内网的主机(10.0.0.2)需要发送一个数据包到外部互联网的某主机上(2.2.2.2),此时发送的源地址:10.0.0.2,目的地址:2.2.2.2,到达路由器后,会进行网络地址转换,此时源地址:1.1.1.1,目的地址:2.2.2.2,这种转换就称之为SNAT(source nat)。而有时候我们内网会有一个主机对外提供服务,此时我们内网的IP地址是10.0.0.3,而外部互联网主机希望访问内部的Web服务器时,首先是通过源地址:2.2.2.2,目的地址:1.1.1.1,通过路由器后,会进行网络地址转换,此时源地址:2.2.2.2,目的地址:10.0.0.3,这种转换就称之为DNAT(destination nat)。而对应到防火墙中SNAT就是“伪装”,而DNAT就是“端口转发”。


(3.15)现在我们的系统的环境是有三台主机,其中server主机的IP地址是10.0.0.2,vms002主机的IP地址是192.168.26.102,vms001主机的IP地址是192.168.26.101。其中vms001主机的网卡是eno16777728,而vms002主机的网卡其中一块是eno16777728对应的IP地址是192.168.26.102,接着我们在vms002主机上添加一块新的网卡eno33554968,此网卡对应的IP地址是10.0.0.1。我们在vms002主机上进行防火墙的设置,我们先将vms002主机的第二张网卡eno33554968添加我们自己设置的LAN区段中,接着我们在网卡eno33554968上配置相应的IP地址和子网掩码信息,最后将网络重启一下。
# nmcli connection---查询网卡的连接情况
# systemctl restart network---将网络重启一下






(3.16)接着我们将server主机的网卡添加到LAN区段aa网段中,在server主机中,我们编辑网卡ens32,同时注意需要设置自动连接网络的选项,我们在server主机上设置好IP地址10.0.0.2,掩码和网关的信息,其中网关指向vms002主机eno33554968网卡的IP地址10.0.0.1,并将服务重启一下。我们在server主机上ping向vms002主机的网卡地址10.0.0.1时,是可以正常ping通的,我们使用server主机ping向vms002主机的网卡地址192.168.26.102时也是可以正常ping通的。





(3.17)而我们尝试从server主机ping向vms001主机的时候,发现是无法ping通的(图1-72),这是由于server主机向vms001主机通信的时候会需要vms002主机开启转发的功能,但是此时vms002主机的转发功能并没有开启,我们设置ip_forward的值为1(图1-73至图1-75)。
# cat /proc/sys/net/ipv4/ip_forward---查询vms002主机的转发功能是否有开启
# echo 1 > /proc/sys/net/ipv4/ip_forward---将vms002主机的转发功能开启
# sysctl -a | grep forward---查询系统中关于转发的所有功能
# echo \'net.ipv4.ip_forward = 1\' >> /etc/sysctl.conf---将转发功能写入到配置文件中




(3.18)如果我们希望server主机能够访问成功vms001主机,此时有两种方案可以实现,第一种是配置路由的方式,我们设置vms001主机的网关是指向vms002主机的IP地址192.168.26.102,并重启网络服务,在vms001主机设置完路由信息后,此时server主机可以正常的ping通vms001主机了,但是vms001主机在抓包过程中是可以看到server主机的IP地址信息的(图1-76至图1-79);第二种方式是通过配置NAT的方式来进行操作,我们在vms002主机上开启防火墙,然后设置默认的区域为public并将“伪装区域”勾选起来,此时server主机是可以正常的访问vms001主机的IP地址的,此时由于我们在vms002主机上设置了NAT,所以此时可以接收到server主机发送的信息,但是只能看到是vms002.example.com,无法获取具体的IP地址信息,从而起到了伪装的作用(图1-80至图1-82)。
# systemctl restart network---重启网络服务
# tcpdump -i eno16777728 icmp---查询抓包信息







(3.19)接着我们来了解第六个“端口转发”,我们首先在内网的server主机上搭建一个Web服务器,此时我们需求是vms001主机可以访问访问server主机提供的Web服务,此时我们的做法就是设置端口转发,当访问到vms002主机的80端口的时候,自动转发到server主机的80端口,所以可以正确的看到server主机的Web主页(图1-86)。我们也可以通过命令行的方式来实现,我们在vms002主机上操作,我们在vms002主机上查询发现端口转发并没有任何的设置,此时我们在vms002主机上设置端口port为80,协议proto为tcp,转发的地址toaddr为10.0.0.2,转发的端口为80,此时我们从vms001主机访问192.168.26.102主机的80端口的时候,会转发到server主机的80端口(图1-88)。
# firewall-cmd --list-all---查询当前防火墙默认区域的所有配置信息
# firewall-cmd --add-forward-port="port=80:proto=tcp:toaddr=10.0.0.2:toport=80"






(3.20)我们还可以设置如果访问本机端口80的时候,会转发到本机的22端口的条目(图1-89和图1-90)。我们也可以设置如果访问本机的80端口会转发到10.0.0.2主机的22端口(图1-91和图1-92)。
# firewall-cmd --remove-forward-port="port=80:proto=tcp:toaddr=10.0.0.2:toport=80"---删除端口转发的条目
# firewall-cmd --add-forward-port="port=80:proto=tcp:toport=22"---添加转发端口的条目,如果访问本机端口80的时候,会转发到本机的22端口
# firewall-cmd --remove-forward-port="port=80:proto=tcp:toport=22"---删除端口转发的条目
# firewall-cmd --add-forward-port="port=80:proto=tcp:toaddr=10.0.0.2:toport=22"---添加转发端口的条目,如果访问本机的80端口会转发到10.0.0.2主机的22端口




(四)使用man firewalld.richlanguage
(4.1)第七个我们来了解“富规则”,首先我们在vms002主机安装http服务,然后我们将“端口转发”中的转发配置删除后,在“服务”中将http服务勾选,此时我们会发现此时如果允许http服务通过,那么所有主机都是可以访问,如果禁止http服务通过,那么所有主机都是无法进行访问,无法按照我们的需求进行精确控制(图4-3)。
# echo vms002 > /var/www/html/index.html---设置主页信息
# systemctl start httpd



(4.2)有时候很我们的需求是某些客户端可以访问vms002主机的主页,但同时也会拒绝某些客户端访问vms002主机的主页,此时我们可以使用设置富规则的方式处理,不过如果我们启用富规则进行Web网页的控制,那么“服务”和“端口”我们就不能做任何的勾选控制。如果我们想要以图形化界面进行配置,我们需要选用英文版的比较好,我们选择“Rich_Rules”,选择对ipv4进行控制,选的service服务是http,选择accept表示允许访问的客户端,其中Source源允许的客户端我们填写的是192.168.26.1(图4-4)。此时我们的192.168.26.1客户端是可以正常的访问vms002主机的主页的(图4-6),而vms001主机的客户端的IP地址为192.168.26.101,不符合富规则的要求,是无法访问vms002主机的主页的(图4-7)。
# LANG=C firewall-config &




(4.3)如果以上的操作我们希望通过命令行的方式实现,则首先使用man -k命令查询所有符合firewall的条目,然后进入到firewalld.richlanguage条目中,在firewalld.richlanguage条目中,我们可以关注Example 3和Example 5。首先我们通过service进行访问控制,我们在vms002主机设置只允许192.168.26.1主机可以访问http服务,此时192.168.26.1主机可以正常的访问vms002主机的主页了(图4-10至图4-12)。
# man -k firewall---查询所有符合firewall的条目
# man firewalld.richlanguage---查询这个条目的具体解释
# firewall-cmd --add-rich-rule \'rule family="ipv4" source address="192.168.26.1/24" service name="http" accept\'---在vms002主机设置只允许192.168.26.1主机可以访问http服务
# firewall-cmd --remove-rich-rule \'rule family="ipv4" source address="192.168.26.1" service name="http" accept\'---删除vms002主机设置只允许192.168.26.1主机可以访问http服务





(4.4)然后我们尝试使用port端口进行访问控制,我们指定地址为192.168.26.101主机,访问本机vms002主机的80端口时可以通过,此时我们发现使用192.168.26.1主机访问vms001主机的Web服务时无法正常的访问主页,而使用192.168.26.101主机可以正常的访问vms001主机的主页(图4-14和图4-15)。
# firewall-cmd --add-rich-rule \'rule family="ipv4" source address="192.168.26.101" port port="80" protocol="tcp" accept\'---指定当地址为192.168.26.101主机,访问本机vms002主机的80端口的时候可以通过
# firewall-cmd --remove-rich-rule \'rule family="ipv4" source address="192.168.26.101" port port="80" protocol="tcp" accept\'---将指定的地址为192.168.26.101主机,端口为80端口的访问可以通过的条目删除



(4.5)现在我们的需求是当192.168.26.101主机访问vms002主机的88端口时会自动转发到server主机的22端口。我们先使用图形化的界面进行操作,我们选择forward-port,当访问本机的88端口时,自动转发到10.0.0.2主机的22端口上,同时填写允许访问的主机地址,此时我们发现只有vms001主机可以正常的ssh连接到10.0.0.2主机上。
# ssh 192.168.26.102 -p 88---在vms001主机上连接,其中-p指明端口




(4.6)如果我们想用命令行的方式实现当192.168.26.1主机访问vms002主机的88端口时会自动转发到server主机的22端口,我们可以使用man firewalld.richlanguage查询到Example 5的示例,此时我们就可以正常的连接到server主机的22端口了(图4-21和图4-22)。
# firewall-cmd --list-all
# firewall-cmd --add-rich-rule \'rule family="ipv4" source address="192.168.26.1" forward-port to-addr="10.0.0.2" to-port="22" protocol="tcp" port="88"\'---其中port表示本机的端口,to-port表示转发的端口



(4.7)有时候我们在企业内部可能需要对特定的网段开放NAT地址转换,例如我们只允许公司市场部网段的主机可以访问外网,但是开发部和财务部的网段主机不能访问外网,此时我们就可以在vms002主机上使用富规则(Rich Rules)的伪装(masquerade)功能,同时我们需要保证在第三栏伪装(masquerading)没有勾选。我们的server主机的IP是10.0.0.2,此时我们使用server主机ping向vms001主机的时候是无法ping通的(图4-24),接着我们修改server主机的IP地址和默认网关,使其符合富规则中主机IP的要求,默认的网关指向vms002主机eno33554968网卡(10.0.0.1),此时我们便可以正常的使用NAT实现内网IP访问外部主机的需求了(图4-25)。
# ifconfig ens32 10.0.0.3 netmask 255.255.255.0;route add default gw 10.0.0.1---修改IP地址为10.0.0.3,修改掩码为255.255.255.0,修改默认网关为10.0.0.1
# route delete default gw 10.0.0.1---删除默认的网关

—————— 本文至此结束,感谢阅读 ——————


网站名称:【我的Linux,我做主!】Linux防火墙核心概念全面解读
网页网址:http://ybzwz.com/article/cjccos.html