案例1
如果你对防火墙的知识模糊,或没有学过防火墙,那可以点击这里进行学习防火墙。
如何在REJECT默认行为的情况下,允许icmp协议的通讯。
复习
- REJECT默认行为下,区域配置中如果没有明确指出允许哪些流量,则禁止这些流量,换句话说这相当于白名单。只标记允许,不标记不允许
- ping 命令就是使用icmp协议进行通讯,他发出的报文时
echo-request接受的报文是echo-reply。
通过上面的条件,大致实现思路就是明确允许 echo-request 报文的流量,这涉及到两个配置
icmp-block-inversion 这个配置是用来反转 icmp-blocks 的,相当于如果它的值为 yes的话,icmp-blocks组织的icmp报文就会被允许,也就实现了明确允许流量的通过。
代码
- 准备两台虚拟机A和B,将一台虚拟机切换为
REJECT并检测不修改配置的情况下ping的连通性
A的测试IP是 192.168.197.133
B的测试IP是 192.168.197.101
==修改前的icmp连通性测试==
虚拟机A
[root@localhost xwang]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: cockpit dhcpv6-client http ssh
ports: 9091/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
虚拟机B
[root@localhost xike_]# ping 192.168.197.133 -c 5
PING 192.168.197.133 (192.168.197.133) 56(84) 比特的数据。
64 比特,来自 192.168.197.133: icmp_seq=1 ttl=64 时间=1.53 毫秒
64 比特,来自 192.168.197.133: icmp_seq=2 ttl=64 时间=1.69 毫秒
64 比特,来自 192.168.197.133: icmp_seq=3 ttl=64 时间=1.51 毫秒
64 比特,来自 192.168.197.133: icmp_seq=4 ttl=64 时间=1.06 毫秒
64 比特,来自 192.168.197.133: icmp_seq=5 ttl=64 时间=1.74 毫秒
--- 192.168.197.133 ping 统计 ---
已发送 5 个包, 已接收 5 个包, 0% packet loss, time 4008ms
rtt min/avg/max/mdev = 1.061/1.505/1.737/0.238 ms
==修改后的icmp连通性测试
虚拟机A
[root@localhost xwang]# firewall-cmd --permanent --set-target=REJECT --zone=public
success ;把防火墙的默认行为设置为 `REJECT`
[root@localhost xwang]# firewall-cmd --reload ;重新加载防火墙配置
success
[root@localhost xwang]# firewall-cmd --permanent --get-target
REJECT ;查看防火墙设备的默认行为是否修改成功。
虚拟机B
[root@localhost xike_]# ping 192.168.197.133 -c 5
PING 192.168.197.133 (192.168.197.133) 56(84) 比特的数据。
来自 192.168.197.133 icmp_seq=1 数据包被过滤
来自 192.168.197.133 icmp_seq=2 数据包被过滤
来自 192.168.197.133 icmp_seq=3 数据包被过滤
来自 192.168.197.133 icmp_seq=4 数据包被过滤
来自 192.168.197.133 icmp_seq=5 数据包被过滤
--- 192.168.197.133 ping 统计 ---
已发送 5 个包, 已接收 0 个包, +5 错误, 100% packet loss, time 4009
原因分析
REJECT 的行为是没有明确指定的流量都会被拦截,在REJECT的默认行为中,没有明确允许icmp协议的流量所以ping 发起的包就会被过滤。而default 的默认行为虽然与REJECT一样但是区别就是允许icmp协议的流量。
修改配置在REJECT模式下允许icmp协议的流量
法一,直接通过在 protocols 配置中添加icmp协议
shell:
虚拟机B:
[root@localhost ~]# firewall-cmd --permanent --add-protocol=icmp
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-protocols
icmp
虚拟机A:
[root@localhost ~]# ping -c 5 192.168.197.133
PING 192.168.197.133 (192.168.197.133) 56(84) 比特的数据。
64 比特,来自 192.168.197.133: icmp_seq=1 ttl=64 时间=1.28 毫秒
64 比特,来自 192.168.197.133: icmp_seq=2 ttl=64 时间=1.11 毫秒
64 比特,来自 192.168.197.133: icmp_seq=3 ttl=64 时间=1.40 毫秒
64 比特,来自 192.168.197.133: icmp_seq=4 ttl=64 时间=3.12 毫秒
64 比特,来自 192.168.197.133: icmp_seq=5 ttl=64 时间=1.22 毫秒
--- 192.168.197.133 ping 统计 ---
已发送 5 个包, 已接收 5 个包, 0% packet loss, time 4011ms
rtt min/avg/max/mdev = 1.109/1.625/3.118/0.752 ms
法二,通过icmp-block-inversion 和 icmp-blocks 配合来允许icmp流量
shell:
虚拟机B:
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: %%REJECT%%
icmp-block-inversion: no
interfaces: ens160
sources:
services: cockpit dhcpv6-client http ssh
ports: 9091/tcp
protocols: icmp
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@localhost ~]# firewall-cmd --permanent --remove-protocol=icmp
success
[root@localhost ~]# firewall-cmd --permanent --add-icmp-block=echo-request
success
[root@localhost ~]# firewall-cmd --permanent --add-icmp-block-inversion
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: %%REJECT%%
icmp-block-inversion: yes
interfaces: ens160
sources:
services: cockpit dhcpv6-client http ssh
ports: 9091/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks: echo-request
rich rules:
虚拟机A:
[root@localhost ~]# ping -c 5 192.168.197.133
PING 192.168.197.133 (192.168.197.133) 56(84) 比特的数据。
64 比特,来自 192.168.197.133: icmp_seq=1 ttl=64 时间=1.59 毫秒
64 比特,来自 192.168.197.133: icmp_seq=2 ttl=64 时间=0.684 毫秒
64 比特,来自 192.168.197.133: icmp_seq=3 ttl=64 时间=1.85 毫秒
64 比特,来自 192.168.197.133: icmp_seq=4 ttl=64 时间=1.29 毫秒
64 比特,来自 192.168.197.133: icmp_seq=5 ttl=64 时间=1.83 毫秒
--- 192.168.197.133 ping 统计 ---
已发送 5 个包, 已接收 5 个包, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 0.684/1.448/1.847/0.433 ms
案例二
手动创建zone
zone相关的配置文件介绍
firewalld 自带的分区存储在目录/usr/lib/firewalld/zones目录中,该目录中的每个.xml文件中存储了这个分区的配置信息
[root@localhost xike_]# ll /usr/lib/firewalld/zones/
总用量 40
-rw-r--r--. 1 root root 312 12月 14 2022 block.xml
-rw-r--r--. 1 root root 306 12月 14 2022 dmz.xml
-rw-r--r--. 1 root root 304 12月 14 2022 drop.xml
-rw-r--r--. 1 root root 317 12月 14 2022 external.xml
-rw-r--r--. 1 root root 410 12月 14 2022 home.xml
-rw-r--r--. 1 root root 425 12月 14 2022 internal.xml
-rw-r--r--. 1 root root 729 10月 10 2022 nm-shared.xml
-rw-r--r--. 1 root root 356 12月 14 2022 public.xml
-rw-r--r--. 1 root root 175 12月 14 2022 trusted.xml
-rw-r--r--. 1 root root 352 12月 14 2022 work.xml
[root@localhost xike_]# cat /usr/lib/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="cockpit"/>
<forward/>
</zone>
管理员创建的分区存储在 /etc/firewalld/zones中分区文件中的内容的写法是一样的
[root@localhost xike_]# ll /etc/firewalld/zones/
总用量 8
-rw-r--r--. 1 root root 412 5月 13 22:08 public.xml
-rw-r--r--. 1 root root 438 5月 13 22:04 public.xml.old
创建自己的分区 xike_
从系统/usr/lib/firewalld/zones中拷贝配置文件到/etc/firewalld/zones 并改名为xike
[root@localhost xike_]# cp /usr/lib/firewalld/zones/public.xml /etc/firewalld/zones/xike_.xml
修改/etc/firewalld/zones/xike_.xml文件为下面的配置
[root@localhost xike_]# cat /etc/firewalld/zones/xike_.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>xike_</short>
<description>For use in xike_ 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="cockpit"/>
<forward/>
</zone>
查看效果
······
······
public (active)
target: %%REJECT%%
icmp-block-inversion: no
interfaces: ens160
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks: echo-request
rich rules:
trusted
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
work
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
xike_
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
显然,xike_已经添加了。
470

被折叠的 条评论
为什么被折叠?



