Linux firewalld案例

案例1

如果你对防火墙的知识模糊,或没有学过防火墙,那可以点击这里进行学习防火墙

如何在REJECT默认行为的情况下,允许icmp协议的通讯。

复习

  1. REJECT默认行为下,区域配置中如果没有明确指出允许哪些流量,则禁止这些流量,换句话说这相当于白名单。只标记允许,不标记不允许
  2. ping 命令就是使用icmp协议进行通讯,他发出的报文时 echo-request 接受的报文是 echo-reply

通过上面的条件,大致实现思路就是明确允许 echo-request 报文的流量,这涉及到两个配置
icmp-block-inversion 这个配置是用来反转 icmp-blocks 的,相当于如果它的值为 yes的话,icmp-blocks组织的icmp报文就会被允许,也就实现了明确允许流量的通过。

代码

  1. 准备两台虚拟机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-inversionicmp-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_已经添加了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值