firewall防火墙--rhel8

软防火墙注意点!!!

iptablesfirewad,ufw等Linux防火墙都属于软防火墙;
软防火墙只能控制内核管理的流量,有些网卡如果不受内核管理,那么软防火墙的规则无法应用.
例如:云生态环境下,有些网卡的流量非常大,甚至可能高达千G万G,内核处理不过来,云厂商可能会不让内核管理网卡,而使用专门的应用程序来管理,比较流行的解决方案是dpdk.
如果想了解dpdk,可以参考 https://cloud.tencent.com/developer/article/1198333


禁用iptables

# 注销iptables服务
systemctl mask --now iptables

# # 注销ip6tables服务
systemctl mask --now ip6tables

# 注销ebtables服务
systemctl mask --now ebtables

# 开机自启firewalld服务并现在启动
systemctl enable --now firewalld

firewall-config图形化工具–没必要

RHEL8默认不提供firewall-config图形化工具.可以自己行安装

# 安装firewall-config图形化工具
## 生产环境下连GUI都不用,怎么会用firewall-config
yum install firewall-config -y

firewall-cmd防火墙特性

firewall 多了一个 zone 的概念,可以理解为模板.
zone的边界取决于网卡,一个网卡只能使用一个zone,zone的边界就是属于该zone的网卡.
firewalldzone里面有网卡,有规则(rule),如果一个网卡属于firewalld的某个zone,那么这个zone里面的所有规则都会应用到该zone的网卡.

Centos7firewalld的底层是调用iptables实现的;
rhel8firewalld的底层是调用xtables-nft-multi实现的,rhel8iptables实际上是xtables-nft-multi的软链接。
在这里插入图片描述
在这里插入图片描述

RHEL8关掉firewalld服务后,iptables -L 是没内容的.
在这里插入图片描述


firealld概念关键词

网卡. zone, 规则
zone包含网卡规则
网卡在zone里面就应用这个zone的规则


firewalld的区域(zone)

区域: 防火墙守护进程使用称为“区域” 的实体管理规则组。区域基本上是一组规则,根据计算机连接到的网络的信任级别,规定应允许哪些网络流量。网络接口被分配一个区域,以指示防火墙应允许的行为。从最不信任到最受信任的顺序,防火墙中的预定义区域是:

drop(丢弃) :最低信任级别。所有传入连接在没有回复的情况下丢弃,并且只能进行传出连接。

block(限制) :与上述类似,但传入请求不是简单地丢弃连接,而是使用 或 消息被拒绝。

public(公共) :表示公共、不受信任的网络。您不信任其他计算机,但可能会根据情况允许选定的传入连接。

external(外部) :使用防火墙作为网关时的外部网络。它配置为 NAT 伪装,以便你的内部网络保持私有但可访问。

internal(内部) :外部区域的另一侧,用于网关的内部部分。计算机是相当值得信赖的,一些额外的服务是可用的。

dmz: 用于位于 DMZ 中的计算机(无法访问网络其余部分的隔离计算机)。仅允许某些传入连接。

work(工作) :用于工作机器。信任网络中的大多数计算机。可能允许使用更多服务。

home(家) :家庭环境。它通常意味着你信任大多数其他计算机,并且将接受更多服务。

trusted(受信任) :信任网络中的所有计算机。最开放的可用选项,应谨慎使用。
在这里插入图片描述


firewalld防火墙服务基本操作

firewall-cmd常用参数: https://wangchujiang.com/linux-command/c/firewall-cmd.html

# 显示当前防火墙是否运行
firewall-cmd --state

# 防火墙服务开机自启
systemctl enable --now firewalld.service

# 关闭防火墙服务
systemctl stop firewalld.service

# 关闭防火墙开机自启服务
systemctl disable --now firewalld.service

# 重载防火墙规则
firewall-cmd --reload

防火墙的几种动作

常见的4种动作:

  • ACCEPT 放行
  • REJECT 拒绝
  • DROP 丢弃流量,不响应
  • LOG 记录日志

zone的基本操作

一个网卡不可以配置多个zone
每个网卡只能绑定一个zone

查看zone

# 查看当前zone
firewall-cmd --get-default-zone

在这里插入图片描述

# 查看活动的zone
firewall-cmd --get-active-zones

在这里插入图片描述

# 查看指定网卡的当前zone
firewall-cmd --get-zone-of-interface=eth0

在这里插入图片描述

# 查看public zone的所有规则(rule)
firewall-cmd --zone=public --list-all

在这里插入图片描述


查看所有的zone

# 查看所有的zone
firewall-cmd --list-all-zones

在这里插入图片描述


列出缺省zone的规则

# 列出缺省zone的规则
firewall-cmd --list-all

在这里插入图片描述


列出zone中的网卡

# 列出缺省zone中的网卡
firewall-cmd --list-interfaces

在这里插入图片描述


修改zone

许多的场景都可以直接切换zone实现,而不需要太多的操作。


修改网卡的所属zone

# 修改网卡的所属zone
# 将ens3从public修改为external
firewall-cmd --zone=external --change-interface=ens3

从zone中移除/添加网卡

# 从zone中移除网卡
[rhel8 root ~]# firewall-cmd --remove-interface=ens224
success

# 列出zone中的网卡
[rhel8 root ~]# firewall-cmd --list-interfaces
ens160

# 添加网卡到zone中
[rhel8 root ~]# firewall-cmd --add-interface=ens224
success

# 查看zone中的网卡列表
[rhel8 root ~]# firewall-cmd --list-interfaces
ens160 ens224

设置默认zone

# 切换默认zone

## 将zone切换到白名单模式,会放行所有流量
firewall-cmd --set-default-zone=trusted


## 将默认zone修改为drop,不响应人和数据包
firewall-cmd --set-default-zone=drop

# 查看默认zone
firewall-cmd --get-default-zone

在这里插入图片描述


切换默认zonetrusted–放行所有流量

Firewall默认zonepublic,只放行了sshhttphttps等常用服务的端口;
切换默认zonetrusted,会放行所有端口

# 将zone切换到白名单模式,会放行所有流量
firewall-cmd --set-default-zone=trusted

# 持久化配置
firewall-cmd --set-default-zone=trusted --per

当前生效(默认模式)和永久生效


Runtime(当前生效,默认模式)

默认是当前生效:配置完后立即会生效,但是重启防火墙服务和重载防火墙规则后会丢失该规则(rule)


Premanent(永久生效)

永久生效:当前不会生效,重启防火墙后才一直生效
设置Premanent后,可以用–reload 使其立即生效。

# 重载防火墙规则
firewall-cmd --reload

panic(紧急模式)

紧急模式就是立即断网

# 查看是否紧急模式
firewall-cmd --query-panic

# 启动紧急模式--立即断网
firewall-cmd --panic-on

# 停止紧急模式
firewall-cmd --panic-off

将当前生效的规则修改永久生效(慎用)

建议的操作是敲一遍临时规则,确认无误后再敲一边规则.

# 将当前运行的临时规则设置为永久规则
firewall-cmd --runtime-to-permanent

查看规则(rule)

查看zone的所有规则

# 不加zone就是查看缺省zone
firewall-cmd --list-all

# 查看home zone的所有规则
firewall-cmd --list-all --zone=home
## interfaces: ens160 ens224

# 如果一个zone中没有网卡,这个zone就是非active状态,就没有意义
# zone中有网卡才会处于active状态

在这里插入图片描述


查看zone中的端口号规则(rule)

# 查看public zone中有哪些端口号规则(rule)
firewall-cmd --zone=public --list-ports
## 打印8000-8888/tcp

配置配置

添加80端口到当前zone–永久生效

# 添加80端口到当前zone
firewall-cmd --add-port=80/tcp

# 添加80端口到当前zone--永久生效
firewall-cmd --add-port=80/tcp --permanent

添加一组端口号到指定zone

# 添加8000---8888 端口到 pulic zone
firewall-cmd --zone=public --add-port=8000-8888/tcp

# 添加8000---8888 端口到 pulic zone 并永久生效
firewall-cmd --zone=public --add-port=8000-8888/tcp --permanent

放行ip/网段

# 放行192.168.1.1单个源IP的访问
firewall-cmd --add-source=192.168.1.1
firewall-cmd --add-source=192.168.1.1 --per

# 移除上述规则
firewall-cmd --remove-source=192.168.1.1
firewall-cmd --remove-source=192.168.1.1 --per

放行一个网段

# 放行一个网段
firewall-cmd --add-source=192.168.1.0/24
firewall-cmd --add-source=192.168.1.0/24 --per

# 移除一个网段规则
firewall-cmd --remove-source=192.168.1.0/24
firewall-cmd --remove-source=192.168.1.0/24 --per

从zone中删除规则(rule)

从默认zone中删除service规则(rule)

# 删除service
firewall-cmd --remove-service=https

在这里插入图片描述


从默认zone中删除端口规则

# 查看端口规则
[rhel8 root ~]# firewall-cmd --list-ports
333/tcp 333/udp

# 删除端口规则
[rhel8 root ~]# firewall-cmd --remove-port=333/tcp
success
[rhel8 root ~]# firewall-cmd --remove-port=333/udp
success

# 查看删除后的端口规则
[rhel8 root ~]# firewall-cmd --list-ports

从指定zone中删除规则(rule)

# 从zone中删除规则(rule)
firewall-cmd --zone=public --remove-serivce=https

# 查看zone中是否有对应规则(rule)
[rhel8 root ~]# firewall-cmd --query-service=https
# 打印no
no

services规则

services规则只能放行默认端口的服务.这取决于/usr/lib/firewalld/services目录下的xml文件中如何定义端口

[rhel8 root /usr/lib/firewalld/services]# cat http.xml

防火墙服务规则文件http.xml的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>WWW (HTTP)</short>
  <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
  <port protocol="tcp" port="80"/>
</service>

servicesxml文件可以自行修改创建,修改创建完后需要重启firewalld才能加载新的services

# 重启firewalld服务
systemctl restart firewalld

查看services规则

# 查看services规则
[rhel8 root ~]# firewall-cmd --list-services
cockpit dhcpv6-client mdns samba-client ssh

在这里插入图片描述


查看zone当中是否放行指定services

# 查看zone当中是否放行http services
firewall-cmd --zone=public --query-service=http
## 打印yes 或no

# 查看永久生效规则(rule)中是允许https services
firewall-cmd --premanent --zone=public --query-service=https
## 打印 yes/no

在指定zone中添加services

# 将http services添加到zone中 到放行列表中
firewall-cmd --zone=public --add-service=http

# 添加services后 查看zone当中是否放行http services
firewall-cmd --zone=public --query-service=http
## 打印 yes

删除servers规则

# 删除services规则ftp
[rhel8 root ~]# firewall-cmd --remove-service=ftp
success

在指定zone中添加services并永久生效

# 将ftp services添加到zone中的永久生效 允许列表中
[rhel8 root ~]# firewall-cmd --list-services
cockpit dhcpv6-client ftp mdns samba-client ssh

# 更新防火墙规则
firewall-cmd --reload

# 添加完services后,在永久生效规则(rule)中查看是否允许ftp services
firewall-cmd --premanent --zone=public --query-service=ftp
## 打印 yes

端口规则

查看端口规则

[rhel8 root ~]# firewall-cmd --list-ports
333/tcp 333/dup

添加端口规则

# 放行tcp协议的333端口
[rhel8 root ~]# firewall-cmd --add-port=333/tcp
success

# 放行udp协议的333端口
[rhel8 root ~]# firewall-cmd --add-port=333/udp
success

# 查看所有规则
[rhel8 root ~]# firewall-cmd --list-all
home (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160 ens224
  sources:
  services: cockpit dhcpv6-client mdns samba-client ssh
  ports: 333/tcp 333/udp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

端口转发规则

查看端口转发规则列表

# 查看端口规则列表
firewall-cmd --list-forward-ports

# 查看永久端口规则列表
firewall-cmd --list-forward-ports --per

在这里插入图片描述


添加DNAT端口转发规则

端口转发,在路由器里一般叫端口映射
将访问本机的指定端口转发到远端IP的指定端口

# 将本机的888端口转发到192.168.10.10:22端口
firewall-cmd --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10

firewall-cmd --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10 --per

# 将来源为网段192.168.20.0/24访问的80/tcp端口转发到192.168.20.1:3128
firewall-cmd --add-forward-port=port=80:proto=tcp:source=192.168.20.0/24:toaddr=192.168.20.1:toport=3128

firewall-cmd --add-forward-port=port=80:proto=tcp:source=192.168.20.0/24:toaddr=192.168.20.1:toport=3128 –per

删除DNAT端口转发规则

# 删除转发
firewall-cmd --remove-forward-port=port=222:proto=tcp:toport=22:toaddr=192.168.32.129

firewall-cmd --remove-forward-port=port=222:proto=tcp:toport=22:toaddr=192.168.32.129 --per

# 查看端口规则列表
firewall-cmd --list-forward-ports
port=222:proto=tcp:toport=22:toaddr=192.168.32.129

# 查看永久端口规则列表
firewall-cmd --list-forward-ports
port=222:proto=tcp:toport=22:toaddr=192.168.32.129 --per

允许SNAT(源地址转换)

# 允许防火墙伪装IP
## masquerade SNAT源地址转换
firewall-cmd --add-masquerade
firewall-cmd --add-masquerade --permanent

# iptable等价命令
iptables -t nat -A POSTROUTING -j MASQUERADE

SNAT(源地址转换)富规则

# 内部访问外部,将source ip为src_net网段来的数据包伪装成external(即ens0)的地址
firewall-cmd --zone=external --add-rich-rule='rule family="ipv4" source address="<src_net/mask>" masquerade'

# 永久策略
firewall-cmd --zone=external --add-rich-rule='rule family="ipv4" source address="<src_net/mask>" masquerade' --per

Firewall创建iptables规则

# 开启直接
## --direct 直接向底层iptables防火墙添加规则
## --passthrough ipv4  指示iptables使用IPv4协议。
## -t nat 指示iptables使用nat表。
## -A POSTROUTING  -A 追加,将规则添加到POSTROUTING链的末尾。
## -o eth0    将规则应用于出口网卡eth0的数据包。
## -j MASQUERADE 将source add源地址进行Masquerade(NAT)转换
firewall-cmd --direct --passthrough ipv4 -t nat -A POSTROUTING -o eth0 -j MASQUERADE

firewall-cmd --direct --passthrough ipv4 -t nat -A POSTROUTING -o eth0 -j MASQUERADE --permanent

Firewalld富规则(rich rules)

Firewalld最高级的规则。
相比于基本规则,富规则能够更准确匹配网络流量,可以根据源地址目标地址端口协议服务类型等更精细地控制网络访问。

另外,富规则还支持更复杂的逻辑操作,如ANDORNOTMATCH等,可以将多个条件组合起来进行强大的网络过滤


富规则保存目录

Firewalld富规则默认主目录/usr/lib/firewalld/,将其中的规则应用到防火墙应用程序。而Firewalld富规则默认配置文件目录/etc/firewalld, 用户创建的富规则可以放置在该目录下,再通过xml #include方式加载。


查看富规则

[rhel8 root ~]# firewall-cmd --list-rich-rules 

## 打印结果
rule family="ipv4" source address="192.168.32.0/24" port port="22" protocol="tcp" reject

添加富规则

拒绝指定网段访问某个服务

# 添加一条富规则
## --add-rich-rule 表示添加一条富规则
## rule family="ipv4" 表示协议组是IPV4
## source address="192.168.10.0/24"   表示源ip地址/源ip地址段
## service name="ssh"  services名称是ssh
# 拒绝32网段访问ssh服务
firewall-cmd --add-rich-rule="rule family='ipv4' source address='192.168.32.0/24' service name='ssh' reject"

放行指定网段访问某个端口

## --add-rich-rule 表示添加一条富规则
## rule family="ipv4" 表示协议组是IPV4
## source address="192.168.10.0/24"   表示源ip地址/源ip地址段
## service name="ssh"  services名称是ssh
# 放行10.89.64.0/24的53/udp端口
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.89.64.0/24" port port="53" protocol="udp" accept'

允许指定IP访问本地指定端口

## --add-rich-rule 表示添加一条富规则
## rule family="ipv4" 表示协议组是IPV4
## source address="192.168.10.0/24"   表示源ip地址/源ip地址段
## service name="ssh"  services名称是ssh
# 允许指定IP访问本机8080端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="8080" accept'

# 允许指定IP段访问本机8080-8090端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="8080-8090" accept'

禁止指定IP访问本机指定端口

## --add-rich-rule 表示添加一条富规则
## rule family="ipv4" 表示协议组是IPV4
## source address="192.168.10.0/24"   表示源ip地址/源ip地址段
## service name="ssh"  services名称是ssh
# 禁止指定IP访问本机8080端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="8080" reject'

更新防火墙规则

# 更新防火墙规则
firewall-cmd --reload

删除富规则

## --add-rich-rule 表示添加一条富规则
## rule family="ipv4" 表示协议组是IPV4
## source address="192.168.10.0/24"   表示源ip地址/源ip地址段
## service name="ssh"  services名称是ssh

# 先查看富规则
firewall-cmd --list-rich-rules

# 删除富规则
## 要删除的富规则格式与富规则列表中的格式一致
firewall-cmd --remove-rich-rule='rule family="ipv4" source address="192.168.32.0/24" port port="22" protocol="tcp" reject'
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值