管理防火墙

目标

  使用防火墙规则界首或拒绝系统服务的网络连接。

名词解释

  • 防火墙架构概念

  linux内核中包含netfilter,它是网络流量操作(数据包过滤、网络地址转换和端口转换)的框架。通过在内核中实现拦截函数调用和消息的处理程序,netfilter允许其他内核模块直接与内核的网络堆栈进行接口连接。防火墙软件使用Hook来注册过滤规则和数据包修改功能,以便对经过的网络数据包都可以通过变成方式来检查、修改、丢弃或路由。Netfilter是红帽企业linux8防火墙的主要组件。

  • Nftabls增强了netfilter

  Linux内核中还包含nftables,这是一个新的过滤器和书包分类子系统,其增强了netfilter的部分代码,但仍保留了netfilter的架构,如网络堆栈Hook、连接跟踪系统及日志记录功能。nftables更新的优势在于更快的的数据包处理、更快的规则集更新,以及以相同的规则同时处理ipv4和ipv6。nftables与原始netfilter之间的另一个主要区别是它们的接口。netfilter通过多个实用程序框架进行配置,其中包括iptables\ip6tables\arptables和ebtables,这些框架现在已被弃用。nftables则使用单个Nft用户空间实用程序,通过一个接口来管理所有协议,由此消除了以往不同前端和多个netfilter接口引起的争用问题。

  • firewalld

  firewalld是一个动态防火墙管理器,它是nftables框架的前端。在推出nftables之前,作为一种改进iptables服务的替代方案,firewalld曾使用iptables命令来直接配置netfilter。rhel8中,firewalld任然是推荐的前端,它使用nft来管理防火墙规则集。firewalld仍可以读取和管理iptables配置文件和规则集,并使用xtables-nft-multi将iptables对象直接装换为nftables规则和对象。对于nft装换过程无法正确处理现有iptables规则集的复杂用例,您可以对firewalld进行配置,使之恢复为iptables后端,但不建议这样做。

  应用会使用d-bus接口查询子系统。firewalld子系统未包含在最小安装包中,但包含在基本安装中。借助firewalld,可以将所有网络流量分为多个区域,从而简化防火墙管理。根据数据包源IP地址或传入网络接口等条件,流量将转入相应区域的防火墙规则。每个取悦都有自己的端口和服务列表,他们处于打开或关闭状态。

注意

对于笔记本电脑或经常更改网络的其他计算机,可以使用networkmanager自动设置连接的防火墙区域。这些区域适用于特定连接的规则进行自定义。

当您经常在家庭、办公网络和公共无线网络间切换时,此功能尤为实用。当连接到佳通网络和企业网络时,用户可能希望系统的sshd服务可访问,但当用户连接到当地咖啡厅的公共无线网络时则无法使用。

  firewalld会检查进入系统的每个数据包的源地址。如果该源地址被分配给特定区域,则应用该区域的规则。如果出于某种原因,网络接口未与某个区域关联,则firewalld会将数据包与默认区域相关联。

  默认区域不是一个单独的区域,而是指代现有的区域。最初,firewalld指定public区域为默认区域,并将lo回环接口映射至trusted区域。

  大多数区域会允许与特定端口和协议或预定义服务的列表匹配的流量通过防火墙。如果流量不与允许的端口和协议或服务匹配,则通常会被拒绝。(trusted区域默认情况下允许所有流量,它是此规则的一个例外。)

  • 预定义区域

  firewalld上有一些预定义区域,可分别进行自定义。默认情况下,如果转入流量属于系统启动的通信一部分,则所有区域都允许这些传入流量和所有传出流量。

  • firewalld区域默认配置
区域名称 默认配置
trusted 允许所有传入流量。
home 除非与传出流量相关,或与ssh、mdns、ipp-client、samba-client或dhcpv6-client预定义服务匹配,否则拒绝传入流量。
内部 除非与传出流量相关,或与ssh、mdns、ipp-client、samba-client或dhcpv6-client预定义服务匹配,否则拒绝传入流量。
工作 除非与传出流量相关,或与ssh、ipp-client、dhcpv6-client预定义服务匹配,否则拒绝传入流量。
公共 除非与传出流量相关,或与ssh、dhcpv6-client预定义服务匹配,否则拒绝传入流量。
external 除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝传入流量。通过区域转发的ipv4传出流量将进行伪装,以使其看起来像是来自自传出网络接口的ipv4地址。
dmz 除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝传出流量。
block 除非与传出流量相关,否则拒绝所有传入流量。
drop 除非与传出流量相关,否则丢弃所有出入流量(甚至不产生包含icmp错误的响应)

实操演示

  • 使用firewall-config命令进行配置

防火墙管理界面

 


修改防火墙配置

 

  • 使用firewall-cmd配置
##查看当前使用的zone规则
[root@sinfotek ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:
  • 使用firewall-web配置
[root@sinfotek ~]# systemctl start cockpit.service 
##启动cockpit服务

登陆web端配置防火墙规则

 


登陆web端配置防火墙规则

 

  • 使用命令行进行查看配置
[root@sinfotek ~]# firewall-cmd --get-default-zone 
public
##查看当前zone

[root@sinfotek ~]# firewall-cmd --get-zones
block dmz drop external home internal libvirt public trusted work
##查看zone的类型

[root@sinfotek ~]# firewall-cmd --set-default-zone=home
success
##修改默认的zone

[root@sinfotek ~]# firewall-cmd --list-all
home (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: cockpit dhcpv6-client mdns samba-client ssh
  ports: 
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
##查看当前所有规则

[root@sinfotek ~]# firewall-cmd --add-service=mysql
success
[root@sinfotek ~]# firewall-cmd --remove-service=mysql
success
##添加与删除当前活动的zone中的服务规则

[root@sinfotek ~]# firewall-cmd --remove-service=http --zone=public 
success
##删除public zone中的http服务规则

[root@sinfotek ~]# firewall-cmd --add-port=8080/tcp
success
[root@sinfotek ~]# firewall-cmd --add-port=8090/udp
success
[root@sinfotek ~]# firewall-cmd --remove-port=8090/udp
success
##添加与删除当前活动的zone中的端口规则

[root@sinfotek ~]# firewall-cmd --add-port=8090/udp --zone=public 
success
##删除指定public中的8090/udp端口

[root@sinfotek ~]# firewall-cmd --zone=public --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: cockpit dhcpv6-client https ssh
  ports: 8090/udp
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
##查询指定zone的规则

[root@sinfotek ~]# firewall-cmd --add-port=9999/tcp --permanent 
success
[root@sinfotek ~]# firewall-cmd --list-all
home (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: cockpit dhcpv6-client mdns mysql samba-client ssh
  ports: 8080/tcp
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
##添加一个永久的防火墙规则,使用permanent选项直接添加到配置文件中

[root@sinfotek ~]# firewall-cmd --reload 
success
[root@sinfotek ~]# firewall-cmd --list-all
home (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: cockpit dhcpv6-client mdns mysql samba-client ssh
  ports: 8080/tcp 9999/tcp
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
##读取配置文件中的内容加载到内存中

[root@sinfotek ~]# firewall-cmd --list-all
home (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: cockpit dhcpv6-client mdns mysql samba-client ssh
  ports: 8080/tcp 9999/tcp
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
[root@sinfotek ~]# firewall-cmd --remove-port=8080/tcp
success
[root@sinfotek ~]# firewall-cmd --runtime-to-permanent
success
[root@sinfotek ~]# firewall-cmd --reload 
[Asuccess]
[root@sinfotek ~]# firewall-cmd --list-all
home (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: cockpit dhcpv6-client mdns mysql samba-client ssh
  ports: 9999/tcp
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
##将当前设置的规则保存到配置文件中
文档更新时间: 2022-12-14 15:49   作者:xiubao yan