一 : 介绍

1.1

防⽕墙是保护机器不受来⾃外部的、不需要的⽹络数据的⼀种⽅式。它允许⽤⼾通过定义⼀组防

⽕墙规则来控制主机上的⼊站⽹络流量。这些规则⽤于对进⼊的流量进⾏排序,并可以阻断或允

许流量。

1.2

firewalld 是⼀个防⽕墙服务守护进程,其提供⼀个带有 D-Bus 接⼝的、动态可定制的、

基于主机的防⽕墙。如果是动态的,它可在每次修改规则时启⽤、修改和删除规则,⽽不需要在

每次修改规则时重启防⽕墙守护进程。

1.3(区别)

1.3.1

firewalld :使⽤ firewalld 实⽤程序进⾏简单防⽕墙⽤例。此⼯具易于使⽤,并

涵盖了这些场景的典型⽤例

1.3.2

nftables :使⽤ nftables 实⽤程序设置复杂和⾼性能的防⽕墙,如为整个⽹络设

置。

1.3.3

iptables :Red Hat Enterprise Linux 上的 iptables ⼯具使⽤ nf_tables 内

核 API ⽽不是 legacy 后端。 nf_tables API 提供了向后兼容性,以便使⽤

iptables 命令的脚本仍可在 Red Hat Enterprise Linux 上⼯作。对于新的防⽕墙脚

本,红帽建议使⽤ nftables

1.4(联系)

RHEL 7 中使⽤ firewalld 服务作为⽤⼾配置防⽕墙规则的⼯具,iptables 作为实现防⽕墙规则的⽤⼾空间实现,因此通过 firewall-cmd 与 iptables 命令⾏均可实现防⽕墙的配置。RHEL 8 中也使⽤ firewalld 服务,但其后端默认通过 nftables 实现防⽕墙规则,iptables也可作为其后端,但为⾮默认配置可通过⼿动⽣效

1.5(Zones 分区)

可以根据⽤⼾对该⽹络中的接⼝和流量设置的信任程度,使⽤ fi rewalld 来将⽹络划分为不同的区。⼀个连接只能是⼀个区的⼀部分,但⼀个区可以被⽤来进⾏很多⽹络连接。

1.5.1(分区工具)

NetworkManager 通知接⼝区的 firewalld 。您可以为接⼝分配区:

fi rewall- confi g 图形化⼯具

fi rewall- cmd 命令⾏⼯具

后 三 个 只 能 编 辑 适 当 的 NetworkManager 配 置 ⽂ 件 。 如 果 您 使 ⽤ web 控 制 台

fi rewall- cmd 或 fi rewall- confi g 来 更 改 接 ⼝ 的 区 , 则 请 求 将 被 转 发 到

NetworkManager ,且不是由 fi rewalld 来处理。

预定义的区存储在 /usr/lib/fi rewalld/zones/ ⽬录中,并可⽴即应⽤到任何可⽤的⽹

络接⼝。只有在修改后,这些⽂件才会被拷⻉到 /etc/fi rewalld/zones/ ⽬录中

预定区默认配置有:

block :任 何 传 ⼊ 的 ⽹ 络 连 接 都 会 被 拒 绝 , 并 报 IPv4 的 icmp-host-prohibited 消息和

IPv6 的 icmp6-adm-prohibited 消息 。只有从系统启动的⽹络连接才能进⾏。

dmz :对于您的⾮企业化区⾥的计算机来说,这些计算机可以被公开访问,且有限访问您的内部

⽹络。只接受所选的⼊站连接。

drop :所有传⼊的⽹络数据包都会丢失,没有任何通知。只有外发⽹络连接也是可⾏的。

external :适⽤于启⽤了伪装的外部⽹络,特别是路由器。您不信任⽹络中的其他计算机不会损害您

的计算机。只接受所选的⼊站连接。

home :⽤于家⽤,因为您可以信任其他计算机。只接受所选的⼊站连接。

internal :当您主要信任⽹络中的其他计算机时,供内部⽹络使⽤。只接受所选的⼊站连接。

public :可⽤于您不信任⽹络中其他计算机的公共区域。只接受所选的⼊站连接。

trusted :所有⽹络连接都被接受。

work :可⽤于您主要信任⽹络中其他计算机的⼯作。只接受所选的⼊站连接。

二:防火墙的使用

2.1防火墙的启用

[root@kittod ~ # systemctl unmask firewalld

[root@kittod ~ # systemctl start firewalld

[root@kittod ~ # systemctl enable firewalld (系统启动时自动启用)

2.2防火墙的停止

[root@kittod ~ # systemctl stop firewalld

[root@kittod ~ # systemctl disable firewalld (防止系统启动时自动启动)

2.3 查看防火墙的状态

[root@kittod ~ # firewall- cmd --state

[root@kittod ~ # systemctl status firewalld

2.4查看区的状态:

[root@kittod ~ # firewall- cmd --list- all(列出默认区的相关信息)

[root@kittod ~ # firewall- cmd --list-all-zone=home(列出指定区home的状态)

2.5查看当前区允许哪些服务

[root@kittod ~ # firewall- cmd --list- services

2.6当要禁止网络服务时可以使用以下命令(谨慎使用):

[root@kittod ~ # firewall- cmd --panic-on(启用)

[root@kittod ~ # firewall- cmd --query- panic(是否关闭)

启⽤ panic 模式可停⽌所有⽹络流量。因此,只有当您具有对机器的物理访问权限或使⽤

串⾏控制台登录时,才应使⽤它。

2.7列出所有预定的服务

[root@kittod ~ # firewall- cmd --get-services

2.8检查被允许的服务

[root@kittod ~ # firewall- cmd --get-services

2.9添加允许服务

[root@kittod ~ # firewall- cmd --add-service=http

2.10添加永久服务

[root@kittod ~ # firewall- cmd --runtime- to- permanent

2.11 端口的设置:

2.11.1 列出所有允许端口

[root@kittod ~ # firewall- cmd --list- ports

2.11.2 在允许端口中添加端口

[root@kittod ~ # firewall- cmd --add- port=port- number/port- type

2.11.3删除端口

[root@kittod ~ # firewall- cmd --remove- port=port- number/port- type

2.12 区域

2.12.1 列出可用区域

[root@kittod ~ # firewall- cmd - get- zone

2.12.2 查看所有区的详细信息

[root@kittod ~ # firewall- cmd - list- all- zones

2.12.3 查看特定区的信息

[root@kittod ~ # firewall- cmd - zone=zone- name - list- all

2.12.4 更改特定区的设置

[root@kittod ~ # firewall- cmd --add- service=ssh - zone=public

2.12.5 更改默认区

[root@kittod ~ # firewall- cmd --get- default- zone

2.12.6 设置新的默认区

[root@kittod ~ # firewall- cmd --set- default- zone zone- name

2.13 网络接口分配给区

2.13.1 列出启用区域以及接口

[root@kittod ~]# fi rewall- cmd --get- active- zones

2.13.2 为不同的区分配接口

[root@kittod ~]# firewall- cmd --zone=internal -- change- interface=ens224

[root@kittod ~]# firewall- cmd --get- active- zones(查看)

2.14 使用nmcli为连接分配区域

[root@kittod ~]# nmcli connection modify ens256 connection.zone public

[root@kittod ~]# firewall- cmd - get- active- zones

2.15 创建一个区

[root@kittod ~]# firewall- cmd --new- zone=testzone --permanent

[root@kittod ~]# firewall- cmd --get- zones

[root@kittod ~]# firewall- cmd --reload

[root@kittod ~]# firewall- cmd --get- zones

2.16 配置区文件

区配置⽂件包含区的信息。这些区描述、服务、端⼝、协议、icmp-blocks、

masquerade、forward-ports 和丰富的语⾔规则采⽤ XML ⽂件格式。⽂件名必须是 * zone-

name* .xml , 其 中 zone-name 的 ⻓ 度 限 制 为 17 个 字 符 。 区 配 置 ⽂ 件 位 于/usr/lib/fi rewalld/zones/ 和 /etc/fi rewalld/zones/ ⽬录中

[root@kittod ~]# cd /etc/fi rewalld/zones/

[root@kittod zones]# cp public.xml testzone02.xml

[root@kittod zones]# fi rewall- cmd - get- zones

block dmz drop external home internal nm- shared public testzone trusted

work

[root@kittod zones]# fi rewall- cmd --reload

success

[root@kittod zones]# fi rewall- cmd --get- zones

block dmz drop external home internal nm- shared public testzone

testzone02 trusted work

2.17设定传入区流量的默认行为

ACCEPT :接受除特定规则不允许的所有传⼊的数据包。

REJECT :拒绝所有传⼊的数据包,但特定规则允许的数据包除外。当 fi rewalld

拒绝数据包时,源机器会发出有关拒绝的信息。

DROP :除⾮由特定规则允许,丢弃所有传⼊数据包。当 fi rewalld 丢弃数据包时,

源机器不知道数据包丢弃的信息。

2.17.1 列出特定区的默认目标

[root@kittod ~ # fi rewall- cmd --zone=zone- name --list- all

2.17.2 设置区中的新目标

[root@kittod ~ # fi rewall- cmd --permanent - zone=zone- name --set

target=<default|ACCEPT|REJECT|DROP>

三:题目

定义两个虚拟主机 node1, node2

1、在 node1 主机上配置 chrony 时间服务器,将该主机作为时间服务器。

2、在 node1 主机上创建防火墙区域 testzone, 将 node1 主机网络接口接入该区域,创建新防火墙服务为 timeservice

3、在 node1 将该防火墙服务 timeservice 定义为允许 chrony 服务通过。

4、在 node2 主机上配置 chrony 时间客户端,该主机将 node1 主机作为时间源服务器

5、配置完防火墙服务之后,node1 和 node2 主机的时间服务器可以正常工作。

创建一个新区:

[root@localhost ~]# firewall-cmd --new-zone=testzone --permanent
success
[root@localhost ~]# firewall-cmd --get-zones
block dmz docker drop external home internal nm-shared public trusted work
[root@localhost ~]# firewall-cmd --reload 
success
[root@localhost ~]# firewall-cmd --get-zones
block dmz docker drop external home internal nm-shared public testzone trusted wor

将网络接口划入分区

[root@localhost ~]# nmcli connection modify ens160 connection.zone testzone
[root@localhost ~]# firewall-cmd --get-active-zones 
testzone
  interfaces: ens160

创建新的防火墙服务

[root@localhost ~]# firewall-cmd --new-service=timeservice --permanent
success
[root@localhost ~]# ll /etc/firewalld/services/
total 4
-rw-r--r--. 1 root root 60 Mar 16 00:02 timeservice.xml

vim编辑/etc/firewalld/services/:

查看服务端口的命令

[root@localhost services]# netstat -nultp

将服务timeservice放入public zones 永久放行

public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: cockpit dhcpv6-client ssh timeservice
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

时间配置 vim/etc/chrony.conf:

node1

server ntp1.aliyun.com  iburst
allow 192.168.203.132

node2

server  192.168.203.133  iburst  (node1的ip)

node2

node1

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐