Firewalld防火墙详解

Firewalld防火墙

什么是防火墙

防火墙:防范一些网络攻击。有软件防火墙、硬件防火墙之分。

硬件防火墙和软件防火墙的主要区别在于它们的工作原理和应用场景。

工作原理

硬件防火墙是一种独立的网络设备,通常由专门的硬件和软件组成。它工作在网络层或传输层,通过过滤和分析网络流量来保护网络安全。硬件防火墙通常具有更高的处理能力和速度,可以处理大量的网络流量,同时也可以提供更强的安全性能和可靠性。

软件防火墙则是一种基于软件的安全解决方案,通过在主机上运行防火墙软件来保护网络安全。软件防火墙通常工作在操作系统内核层,通过监测网络流量和应用程序行为来实现防护。软件防火墙的处理能力和速度通常较低,但它可以提供更灵活、更细致的安全控制和配置,同时也可以在多种操作系统平台上运行。

应用场景

硬件防火墙通常应用于企业级网络或大型数据中心等场景,可以提供全面的安全防护和管理。硬件防火墙可以对入侵尝试、恶意攻击、病毒和蠕虫等进行检测和防护,同时也可以支持多种安全协议和 VPN 连接。硬件防火墙通常需要专业人员进行配置和管理,成本较高。

软件防火墙则适用于小型企业或个人用户的网络安全保护。软件防火墙可以在个人计算机或服务器上运行,提供基本的网络安全防护和管理。软件防火墙可以对网络连接和应用程序进行检测和防护,同时也可以进行更灵活的安全控制和配置。软件防火墙通常易于安装和配置,成本较低。

Linux 防火墙_加载

防火墙有很好的保护作用,入侵者首先必须穿越防火墙的安全防线,才能接触目标计算机。

Firewalld防火墙的概念

firewalld是Linux系统上的一种动态防火墙管理工具。它是Red Hat公司开发的,现在已经被很多Linux发行版广泛采用。相比于传统的iptables防火墙,firewalld具有更加灵活和易用的特点,可以实现更加细粒度的网络访问控制。

firewalld防火墙主要包括如下几个方面:

  • 区域(zone)

firewalld将网络的不同部分分为若干个区域,每个区域都有一组预定义的规则集合。例如,public区域适用于公共互联网环境下的主机,internal区域适用于内部网络环境下的主机。

区域 默认策略
trusted 允许所有数据包
home 拒绝流入的流量,除非与流出的流量相关,允许ssh、mdns、ippclient、amba-client、dhcpv6-client服务通过
internal 等同于home
work 拒绝流入的流量,除非与流出的流量相关,允许ssh、ipp-client、dhcpv6-client服务通过
public 拒绝流入的流量,除非与流出的流量相关,允许ssh、dhcpv6-client服务通过
external 拒绝流入的流量,除非与流出的流量相关,允许ssh服务通过
dmz 拒绝流入的流量,除非与流出的流量相关,允许ssh服务通过
block 拒绝流入的流量,除非与流出的流量相关,非法流量采取拒绝操作
drop 拒绝流入的流量,除非与流出的流量相关,废了流量采取丢弃操作
  • 服务(Service)

在firewalld中,防火墙服务是一组预定义的规则,用于允许或拒绝对特定端口的访问。每个服务都有一个名称,并与一个或多个端口相关联。例如,HTTP服务通常使用端口80,可以定义一个HTTP服务规则来允许对该端口的访问

  • 端口(Port)

firewalld防火墙的端口规则是一种基于端口号的规则,用于控制特定端口的访问。它可以允许或拒绝特定端口的进出流量。firewalld中的端口规则可以应用于指定的区域或服务,也可以直接应用于所有区域。

Firewalld防火墙运行模式

firewalld防火墙有两种运行模式:(运行时模式)runtime模式(永久模式)permanent模式

runtime模式runtime模式是指firewalld防火墙在内存中的运行模式。在这种模式下,所有的防火墙规则都是临时的,它们只会在系统重新启动前保持有效。可以使用firewall-cmd命令在runtime模式下添加、删除、修改防火墙规则,但是这些更改在系统重新启动后会被清除。

permanent模式permanent模式是指firewalld防火墙在硬盘上的运行模式。在这种模式下,所有的防火墙规则都是永久的,它们会被保存在硬盘上,并在系统重新启动后仍然有效。可以使用firewall-cmd命令的--permanent选项将防火墙规则添加、删除、修改到permanent模式中。

Firewalld防火墙的命令

查看,开启和停止firewalld服务

语法:
systemctl [选项] firewalld
status:检查指定服务的运行状况
start:启动指定服务
stop:停止指定服务
restart:重启指定服务
reload:重新加载指定服务的配置文件

管理firewall配置

firewall-cmd [参数选项1] ... [参数选项n]

常用选项

  • 查看防火墙规则:firewall-cmd --list-all
[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens34
  sources: 
  services: dhcpv6-client  ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  • 查看可用的zone:firewall-cmd --get-zones
[root@localhost ~]# firewall-cmd --get-zones
block dmz docker drop external home internal public trusted work
  • 查看当前zone:firewall-cmd --get-default-zone
[root@localhost ~]# firewall-cmd  --get-default-zone
public
  • 设置默认的zone:firewall-cmd --set-default-zone=public
[root@localhost ~]# firewall-cmd --set-default-zone=public
Warning: ZONE_ALREADY_SET: public   # 默认就是public,所以再次设置会告诉当前状态已经是public
success  # 执行成功
[root@localhost ~]# firewall-cmd --reload   # 设置完成后一定要重新加载防火墙规则才会生效
success
  • 查看zone的详细信息:firewall-cmd --zone=public --list-all
[root@localhost ~]# firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens34
  sources: 
  services: dhcpv6-client  ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  • 开放端口:firewall-cmd --zone=public --add-port=80/tcp --permanent
[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success          # 设置成功会显示 success
[root@localhost ~]# firewall-cmd --reload   # 设置完成后一定要重新加载防火墙规则才会生效
success
[root@localhost ~]# firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens34
  sources: 
  services: dhcpv6-client  ssh
  ports: 80/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:   
# 设置成功
  • 关闭端口:firewall-cmd --zone=public --remove-port=80/tcp --permanent
[root@localhost ~]# firewall-cmd --zone=public --remove-port=80/tcp --permanent
success   # 设置成功会显示 success
[root@localhost ~]# firewall-cmd --reload   # 设置完成后一定要重新加载防火墙规则才会生效
success
[root@localhost ~]# firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens34
  sources: 
  services: dhcpv6-client  ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  • 开放服务:firewall-cmd --zone=public --add-service=http --permanent
[root@localhost ~]# firewall-cmd --zone=public --add-service=http --permanent
success
[root@localhost ~]# firewall-cmd  --reload
success
[root@localhost ~]# firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens34
  sources: 
  services: dhcpv6-client http ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  • 关闭服务:firewall-cmd --zone=public --remove-service=http --permanent
[root@localhost ~]# firewall-cmd --zone=public --remove-service=http --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens34
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:
  • 允许源IP访问:firewall-cmd --zone=public --add-source=192.168.200.0/24 --permanent
[root@localhost ~]# firewall-cmd --zone=public --add-source=192.168.200.0/24 --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens34
  sources: 192.168.200.0/24
  services: dhcpv6-client  ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:
  • 拒绝源IP访问:firewall-cmd --zone=public --remove-source=192.168.200.0/24 --permanent
[root@localhost ~]# firewall-cmd --zone=public --remove-source=192.168.200.0/24 --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens34
  sources: 
  services: dhcpv6-client  ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  • 重新加载防火墙规则:firewall-cmd --reload

Firewalld防火墙的高级规则

在使用防火墙时,基础规则通常可以满足大多数情况下的需求,例如简单的端口和服务控制等。但是在一些更加复杂的场景下,基础规则的灵活性和细粒度控制就显得有限,这时需要使用高级规则来实现更加精细的流量控制,而 rich rule 就是 firewalld 防火墙中的一种高级规则。

在使用 firewall-cmd 命令设置 rich rule 高级规则时,可以参考以下常用参数:

  1. family:指定网络协议族,可选值为 ipv4ipv6inetinet6arp。例如:family="ipv4"
  2. source address:指定源 IP 地址,可以为单个 IP、IP 段或 CIDR 网段,例如 source address="192.168.1.1"source address="192.168.1.1-192.168.1.10"source address="192.168.1.0/24"
  3. port port:指定端口号,可以为单个端口、端口段或者逗号分隔的多个端口,例如 port port="8080"
  4. protocol:指定协议,可以为 tcpudpicmp 等协议。
  5. service name:指定服务名,可以为 /etc/services 中定义的服务名称,如 httpftp 等。
  6. action:指定动作,可以为 acceptdroprejectmasqueraderedirect 等动作。

要注意的是,在使用 rich-rules 规则时,必须使用双引号将参数值括起来,例如:source address="192.168.1.0/24"。还有就是,不能同时设置portservice name

测试案例

  1. 启动一个简单的HTTP服务器,可以通过浏览器访问到主机上的文件
[root@localhost ~]# nohup python -m SimpleHTTPServer 8080 > ceshil.log 2>&1 &
# python -m SimpleHTTPServer 8080
# 这行命令的意思是在本地主机上启动一个简单的HTTP服务器
# 监听8080端口,可以通过浏览器访问本地主机上的文件。
  1. 设置规则
[root@localhost ~]# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.200.0/24" port port="8080" protocol="tcp"  accept' --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens34
  sources: 
  services: dhcpv6-client  ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
        rule family="ipv4" source address="192.168.200.0/24" port port="8080" protocol="tcp" accept
# 我这里仅是展示了高级规则的使用方法,也可以使用基础规则设置。
  1. 访问浏览器

已经访问到了当前目录下的文件

[root@localhost ~]# ls -al
总用量 522640
dr-xr-x---.  6 root root      4096 66 14:42 .
dr-xr-xr-x. 17 root root       239 528 21:21 ..
-rw-r--r--.  1 root root       254 529 12:17 0520source
drwx------.  4 root root        27 526 13:11 .ansible
-rw-r--r--.  1 root root       113 61 21:15 ansible.yaml
-rwxr-xr-x.  1 root root      8472 529 10:19 a.out
-rw-------.  1 root root      5792 66 13:47 .bash_history
-rw-r--r--.  1 root root        18 1229 2013 .bash_logout
-rw-r--r--.  1 root root       176 1229 2013 .bash_profile
-rw-r--r--.  1 root root       176 1229 2013 .bashrc
drwxr-xr-x.  4 root root        55 62 12:53 ceshi
-rw-r--r--.  1 root root       233 66 14:57 ceshil.log
-rw-r--r--.  1 root root       254 529 10:19 cos_value.c
-rw-r--r--.  1 root root       100 1229 2013 .cshrc
-rw-r--r--.  1 root root 535099919 530 12:21 DjangoBlog.tar.gz
-rw-r--r--.  1 root root        86 529 09:23 haha.c
-rw-r--r--.  1 root root       319 529 09:31 main.c
-rw-r--r--.  1 root root       160 529 11:43 makefile
-rw-r--r--.  1 root root       273 529 12:18 ntp-4.2.8p3.tar.gz
drwxr-----.  3 root root        19 526 12:00 .pki
-rw-r--r--.  1 root root       237 529 10:16 sin_value.c
drwx------.  2 root root        57 527 08:50 .ssh
-rw-r--r--.  1 root root       129 1229 2013 .tcshrc
-rw-------.  1 root root         0 64 15:08 .viminfo

在一个局域网的小伙伴们就可以使用这个命令一起共享文件,下载到本地上

image-20230606145850328

更多的firewall-cmd命令请查看

[root@localhost ~]# firewall-cmd  --help

此内容参考B站Linux超哥讲解的Firewalld防火墙

猜你喜欢

转载自blog.csdn.net/qq_52089863/article/details/131070033