红帽秘笈,第二十五章防火墙

本章主要介绍RHEL8中的firewalld的配置。
firewalld中的名词介绍
firewalld的基本配置配置
firewalld的规则添加
firewalld的富规则
在RHEL8中用的防火墙是firewalld,在 firewalld中又涉及zone的概念。首先来了解一下
什么是zone。
如在进地铁或高铁时需要安检,安检有不同的入口,
不同的入口严格度不一样,有的入口大包小包都要检测;有的入口只要检测大包即可,背
包或单肩包就不用检测了;有的入口是绿色通道,不用检测直接通过。这里不同的安检入口制
定了不同的规则。
同理,firewalld中的zone我们就理解为如上的安检入口,不同的zone中制定了不同的规
则。某网卡要和某一个zone进行关联,ens160和 zone2进行关联,这样从
网卡ens160进来的数据包都要使用zone2中的过滤规则。
网卡是不能同时和多个 zone关联的,最多只能和一个 zone关联。如果网卡没有和任何
zone关联,则使用默认的zone中的规则。
查看系统中有多少个 zone,命令如下
 

 

在这许多的zone中,其中 block拒绝所有的数据包通过,trusted允许所有的数据包通
过。所以,如果把网卡和 trusted关联,则来自这张网卡的数据包都能通过。
查看系统默认的 zone,命令如下

 

可以看到,默认的zone是 public。
把默认的zone修改为trusted,命令如下。

 再次把默认的zone改成public,命令如下。

 查看网卡ens160和哪个zone关联,命令如下

如果不指定zone名,则是默认的zone。
把ens160和home这个 zone关联,命令如下。

 

一张网卡只能在一个zone中,这里可以看到ens160已经属于一个zone了,所以发生了冲
突。
可以先把网卡从public中删除,然后重新添加,这里把ens160 从 public中删除,命令如

 

 

这样ens160就不属于任何zone了,如果不属于任何zone,则使用默认的zone中的规
则。
然后把 ens160加入 home中,命令如下

 

以后ens160会使用home中的规则,不再使用public中的规则。先从 zone中删除,然后
再添加到其他的zone 中,这个过程可以用一条命令替换,命令如下。
这里的意思是把ens160切换到public这个zone,如果不指定zone,则是默认的zone,
命令如下。

 

网卡在哪个zone中就使用那个zone 中的规则,如果网卡不属于任何zone,则使用默认
的zone中的规则。
一个zone中的规则可以通过“firewall-cmd --list-all --zone=zone名”来查看,如果不
指定zone,则是默认的zone.
现在查看 public这个 zone中的规则,命令如下。

 

 

因为默认的zone就是 public,所以这里即使不加--zone=public选项,显示的也是
public这个zone中的规则。
我们看一下最常用的一些设置。

 

平时测试网络通或不通是用ping进行测试的,使用
的是 icmp 协议,
icmp有很多类型的数据包,ping的时候用的是以
下两种。
(1)echo-request:我ping对方时发出去的包。
(2)echo-reply:对方回应我的包。
一共有多少种类型的icmp包,可以通过“firewall-cmd --get-icmptypes”来查看。
在server 上执行 tcpdump命令进行抓包,命令如下

 

 在server2 上ping server的IP两次,命令如下。

 然后到server上查看,命令如下。

 

 

这里server2往server发送了两个echo-request包,server均回应了echo-reply包。
在server上用防火墙设置拒绝别人发过来的echo-request包,命令如下。

 如果要想继续ping操作,就取消对应的设置,命令如下。

 

 

两台主机通信必须使用某个协议,例如,浏览器访问网站用的是http,远程登录到Linux
服务器用的是ssh 协议等。
默认情况下,public这个 zone只允许很少的服务通过,如下所示。

 

 

 再次验证http是否被firewall允许,命令如下。

 

在server上通过yum install httpd -y安装httpd包,启动服务并写一些测试数据,命令如
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# echo "hello rhce" > /var/www/html/index.html
[root@localhost ~]# cat /var/www/html/index.html
可以看到,现在根本访问不了,这是因为server上的防火墙并不允许http的数据包通过,然
后在防火墙中开放http,命令如下。
[root@localhost ~]# firewall-cmd --add-service=http
[root@localhost ~]# firewall-cmd --query-service=http

 

此时可以正常打开了。如果要从防火墙中把此服务删除,则可用--remove-service选项,
命令如下。

 

前面介绍了对服务进行过滤与放行,这些服务使用的都是标准端口,例如,http对应的是
端口80,ssh对应的是端口22等。
但有时服务使用的是一个非标准端口,例如,把服务httpd的端口更改为8080。如果在防
火墙中只是放行http这个服务,本质上就是放行了端口80,此时用户肯定是访问不到Web服
务的,因为只能通过端口8080才能访问到Web 服务。下面做一下这个实验。
先临时关闭SELinux,命令如下。

 

确保SELinux是处在Permissive模式的。
用如下命令把 httpd的端口替换为8080,并重启httpd服务,命令如下。
[root@localhost ~]# sed -i '/^Listen/cListen 8080'
[root@localhost ~]# systemctl restart httpd

 首先在防火墙中放行http,命令如下。

 

 这里用单引号或双引号均可,先查看现在是否有富规则。

 

现在还没有任何富规则,下面开始创建富规则。
练习1:允许192.168.26.1访问本机的 http服务,其他客户端都不能访问。
先确保在防火墙的services中没有添加 http,否则所有的客户端都能访问了。
[root@localhost ~]# firewall-cmd --query-service=http

 可以看到,访问不了。查看现有富规则,命令如下。

[root@localhost ~]# firewall-cmd --list-rich-rules

 富规则的命令只要把添加时的add换成remove即可删除此富规则,命令如下。

[root@localhost ~]# firewall-cmd --remove-rich-rule="rule family=ipv4 source address=192.168.149.2 service name=http accept"

 

可以看到,能正常访问了。
此时,防火墙的规则如下。

删除此规则,命令如下

[root@localhost ~]# firewall-cmd --remove-rich-rule="fule family=ipv4 source address=192.168.149.67  port port=80 protocol=tcp accept" 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值