RHEL防火墙配置

目录

1.了解firewalld

2.firewalld的基本配置 

3.配置firewalld的规则 

4.icmp-blocks 

 5.Services

6.ports 


1.了解firewalld

在RHEL8中用的防火墙是firewalld,在 firewalld中又涉及zone的概念。首先来了解一下什么是zone

如在进地铁或高铁时需要安检,安检有不同的入口,如图25-1所示。 

不同的入口严格度不一样,有的入口大包小包都要检测;有的入口只要检测大包即可,背包或单肩包就不用检测了;有的入口是绿色通道,不用检测直接通过。这里不同的安检入口制定了不同的规则
同理,firewalld中的zone我们就理解为如上的安检入口,不同的zone中制定了不同的规则。某网卡要和某一个zone进行关联,如图25-2所示,ens160和 zone2进行关联,这样从网卡ens160进来的数据包都要使用zone2中的过滤规则。

网卡是不能同时和多个 zone关联的,最多只能和一个 zone关联。如果网卡没有和任何zone关联,则使用默认的zone中的规则。

2.firewalld的基本配置 

查看系统中有多少个zone,命令如下。 

[root@RHEL813 ~]# firewall-cmd --get-zones
block dmz drop external home internal libvirt nm-shared public trusted work
[root@RHEL813 ~]# 
在这许多的zone中,其中 block拒绝所有的数据包通过,trusted允许所有的数据包通过。所以,如果把网卡和 trusted关联,则来自这张网卡的数据包都能通过

查看系统默认的 zone,命令如下。  

[root@RHEL813 ~]# firewall-cmd --get-default-zone 
public
[root@RHEL813 ~]# 

 可以看到,默认的zone是 public。

把默认的zone修改为trusted,命令如下。 

[root@RHEL813 ~]# firewall-cmd --set-default-zone=trusted 
success
[root@RHEL813 ~]# firewall-cmd --get-default-zone 
trusted
[root@RHEL813 ~]# 

 再次把默认的zone改成public,命令如下。

[root@RHEL813 ~]# firewall-cmd --set-default-zone=public 
success
[root@RHEL813 ~]# 

 查看网卡ens160和哪个zone关联,命令如下。

[root@RHEL813 ~]# firewall-cmd --get-zone-of-interface=ens160 
public
[root@RHEL813 ~]# 

 可以看到,网卡 ens160是和public关联的。

把网卡加入某个 zone,命令如下。  

 firewall‐cmd ‐‐add‐interface=网卡名 ‐‐zone=zone 名

 如果不指定zone名,则是默认的zone。

把ens160和home这个 zone关联,命令如下。 

[root@RHEL813 ~]# firewall-cmd --add-interface=ens160 --zone=home 
Error: ZONE_CONFLICT: 'ens160' already bound to a zone
[root@RHEL813 ~]# 
一张网卡只能在一个zone中,这里可以看到ens160已经属于一个zone了,所以发生了冲突。
可以先把网卡从public中删除,然后重新添加,这里把ens160 从 public中删除,命令如下
[root@RHEL813 ~]# firewall-cmd --remove-interface=ens160 --zone=public 
success
[root@RHEL813 ~]# firewall-cmd --get-zone-of-interface=ens160 
no zone
[root@RHEL813 ~]# 
这样ens160就不属于任何zone了,如果不属于任何zone,则使用默认的zone中的规则

然后把 ens160加入 home中,命令如下。 

[root@RHEL813 ~]# firewall-cmd --add-interface=ens160 --zone=home 
success
[root@RHEL813 ~]# firewall-cmd --get-zone-of-interface=ens160 
home
[root@RHEL813 ~]# 
以后ens160会使用home中的规则,不再使用public中的规则。先从 zone中删除,然后再添加到其他的zone 中,这个过程可以用一条命令替换,命令如下
[root@RHEL813 ~]# firewall-cmd --change-interface=ens160 --zone=public 
success
[root@RHEL813 ~]# 

 后面的练习均是在public 中做。

3.配置firewalld的规则 

网卡在哪个zone中就使用那个zone 中的规则,如果网卡不属于任何zone,则使用默认的zone中的规则
一个zone中的规则可以通过“firewall-cmd --list-all --zone=zone名”来查看,如果不
指定zone,则是默认的zone

现在查看 public这个 zone中的规则,命令如下。  

[root@RHEL813 ~]# firewall-cmd --list-all --zone=public 
public (active)target: defaulticmp-block-inversion: nointerfaces: ens160sources: services: cockpit dhcpv6-client mountd nfs rpc-bind sshports: 123/udp 323/udp 20-21/tcp 10010-10020/tcpprotocols: forward: nomasquerade: noforward-ports: source-ports: icmp-blocks: rich rules: 
[root@RHEL813 ~]# 
因为默认的zone就是 public,所以这里即使不加--zone=public选项,显示的也是
public这个zone中的规则。

4.icmp-blocks 

平时测试网络通或不通是用ping进行测试的,使用的是 icmp 协议,如图25-3所示。

  

icmp有很多类型的数据包,ping的时候用的是以下两种
(1)echo-request:我ping对方时发出去的包。
(2)echo-reply:对方回应我的包

 一共有多少种类型的icmp包,可以通过“firewall-cmd --get-icmptypes”来查看。

在server 上执行 tcpdump命令进行抓包,命令如下 

[root@RHEL813 ~]# tcpdump -i ens160 icmp
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
(此处等待数据包进来)

 在server2 上ping server的IP两次,命令如下。

[root@RHEL8 ~]# ping 192.168.103.17
PING 192.168.103.17 (192.168.103.17) 56(84) bytes of data.
64 bytes from 192.168.103.17: icmp_seq=1 ttl=64 time=0.256 ms
64 bytes from 192.168.103.17: icmp_seq=2 ttl=64 time=0.339 ms
64 bytes from 192.168.103.17: icmp_seq=3 ttl=64 time=0.270 ms

 然后到server上查看,命令如下。

[root@RHEL813 ~]# tcpdump -i ens160 icmp
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
23:20:18.013919 IP 192.168.103.14 > RHEL813: ICMP echo request, id 3374, seq 1, length 64
23:20:18.014021 IP RHEL813 > 192.168.103.14: ICMP echo reply, id 3374, seq 1, length 64
23:20:19.051433 IP 192.168.103.14 > RHEL813: ICMP echo request, id 3374, seq 2, length 64
23:20:19.051518 IP RHEL813 > 192.168.103.14: ICMP echo reply, id 3374, seq 2, length 64
23:20:20.075408 IP 192.168.103.14 > RHEL813: ICMP echo request, id 3374, seq 3, length 64
23:20:20.075452 IP RHEL813 > 192.168.103.14: ICMP echo reply, id 3374, seq 3, length 64
23:20:21.099186 IP 192.168.103.14 > RHEL813: ICMP echo request, id 3374, seq 4, length 64

 这里server2往server发送了两个echo-request包,server均回应了echo-reply包。

在server上用防火墙设置拒绝别人发过来的echo-request包,命令如下。 

[root@RHEL813 ~]# firewall-cmd --add-icmp-block=echo-request 
success
[root@RHEL813 ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: ens160 virbr0sources: services: cockpit dhcpv6-client sshports: protocols: forward: nomasquerade: noforward-ports: source-ports: icmp-blocks: echo-requestrich rules: 
[root@RHEL813 ~]# 
此时,server就不再接收别人发过来的echo-request包了,然后到server2再次 ping,命令如下
[root@RHEL8 ~]# ping 192.168.103.17
PING 192.168.103.17 (192.168.103.17) 56(84) bytes of data.
From 192.168.103.17 icmp_seq=1 Packet filtered
From 192.168.103.17 icmp_seq=2 Packet filtered
From 192.168.103.17 icmp_seq=3 Packet filtered
From 192.168.103.17 icmp_seq=4 Packet filtered
可以看到,在server2上已经 ping不通server 了。

如果要想继续ping操作,就取消对应的设置,命令如下。  

[root@RHEL813 ~]# firewall-cmd --remove-icmp-block=echo-request 
success
[root@RHEL813 ~]# 

 5.Services

两台主机通信必须使用某个协议,例如,浏览器访问网站用的是http,远程登录到Linux服务器用的是ssh 协议等。

默认情况下,public这个 zone只允许很少的服务通过,如下所示。 

[root@RHEL813 ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: ens160 virbr0sources: services: cockpit dhcpv6-client sshports: protocols: forward: nomasquerade: noforward-ports: source-ports: icmp-blocks: rich rules: 
[root@RHEL813 ~]# 
可以看到,这里没有允许http通过。如果要查看防火墙是否开放了某个协议,也可以通过如下语法来查看。
firewall‐cmd ‐‐query‐service=服务名

 要获取系统所支持的所有服务,可以通过如下命令来查看。

firewall‐cmd ‐‐get‐services

 再次验证http是否被firewall允许,命令如下。

[root@RHEL813 ~]# firewall-cmd --query-service=http
no
[root@RHEL813 ~]# 
在server上通过yum install httpd -y安装httpd包,启动服务并写一些测试数据,命令如下
[root@RHEL813 ~]# systemctl start httpd
[root@RHEL813 ~]# echo "Hello rhce" > /var/www/html/index.html
[root@RHEL813 ~]# cat /var/www/html/index.html 
Hello rhce
[root@RHEL813 ~]# 

 然后在宿主机上用浏览器访问server(IP地址是192.168.103.17),如下图所示。

可以看到,现在根本访问不了,这是因为server上的防火墙并不允许http的数据包通过,然后在防火墙中开放http,命令如下。
[root@RHEL813 ~]# firewall-cmd --add-service=http
success
[root@RHEL813 ~]# firewall-cmd --query-service=http
yes
[root@RHEL813 ~]# 

 再次打开浏览器验证,如下图所示

此时可以正常打开了。如果要从防火墙中把此服务删除,则可用--remove-service选项,命令如下。
[root@RHEL813 ~]# firewall-cmd --remove-service=http
success
[root@RHEL813 ~]# firewall-cmd --query-service=http
no
[root@RHEL813 ~]# 

 此时浏览器中是访问不了192.168.103.17的。

6.ports 

前面介绍了对服务进行过滤与放行,这些服务使用的都是标准端口,例如,http对应的是端口80,ssh对应的是端口22等。
但有时服务使用的是一个非标准端口,例如,把服务httpd的端口更改为8080。如果在防火墙中只是放行http这个服务,本质上就是放行了端口80,此时用户肯定是访问不到Web服务的,因为只能通过端口8080才能访问到Web 服务。

先临时关闭SELinux,命令如下。 

[root@RHEL813 ~]# setenforce 0
[root@RHEL813 ~]# getenforce 
Permissive
[root@RHEL813 ~]# 
确保SELinux是处在Permissive模式的。

用如下命令把 httpd的端口替换为8080,并重启httpd服务,命令如下。 

[root@RHEL813 ~]sed ‐i '/^Listen/cListen 8080' /etc/httpd/conf/httpd.conf
[root@RHEL813 ~]# systemctl restart httpd
首先在防火墙中放行http,命令如下。
[root@RHEL813 ~]# firewall-cmd --add-service=http
success
[root@RHEL813 ~]# 
在浏览器中访问192.168.103.17:8080,结果下图所示。

 

可以看到,访问失败,因为放行http也只是允许端口80而非端口8080。 

把 http服务从防火墙中删除,命令如下。 

[root@RHEL813 ~]# firewall-cmd --remove-service=http
success
[root@RHEL813 ~]# 

 下面开始放行端口,常用的语句如下。

(1) firewall-cmd --query-port=N/协议:查询是否开放了端口N。
(2)firewall-cmd --add-port=N/协议:开放端口N。
(3)firewall-cmd --remove-port=N/协议:删除端口N。这里的协议包括TCP、UDP

 

在防火墙中添加端口,也可以添加一个范围。例如,要在防火墙中开放1000~-2000范围的端口,可以用如下命令。
[root@RHEL813 ~]# firewall-cmd --add-port=1000-2000/tcp
success
[root@RHEL813 ~]# 

 这里“-”表示到的意思。

下面把端口8080放行,命令如下 

[root@RHEL813 ~]# firewall-cmd --add-port=8080/tcp
success
[root@RHEL813 ~]# firewall-cmd --query-port=8080/tcp
yes
[root@RHEL813 ~]# 

 然后再次在浏览器中访问,结果如下图所示。

现在已经可以正常访问了 

在防火墙中删除此端口,命令如下 

[root@RHEL813 ~]# firewall-cmd --remove-port=8080/tcp
success
[root@RHEL813 ~]# firewall-cmd --query-port=8080/tcp
no
[root@RHEL813 ~]# 

 下面把环境还原,再次开启SELinux,确保状态为Enforcing模式,命令如下。

[root@RHEL813 ~]# setenforce 1
[root@RHEL813 ~]# getenforce 
Enforcing
[root@RHEL813 ~]# 

 再次把httpd的端口改为80,并重启服务,命令如下

[root@RHEL813 ~]# sed -i '/^Listen/cListen 80' /etc/httpd/conf/httpd.conf
[root@RHEL813 ~]# systemctl restart httpd.service 
[root@RHEL813 ~]# 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/217994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaEE07 定时器的使用和模拟实现

前言 前面我们聊了很多关于阻塞队列,单例模式等的应用,今天我们就来聊聊定时器的功能和模拟实现,其实定时器的实现在我们的日常生活中也很常见,比如说平常创建一些定时任务,定时开关机,定时去发表一篇qq空间等等,今天我们就来简单实现一个定时器. 1.JVM提供的定时器的使用 在自…

现代雷达车载应用——第2章 汽车雷达系统原理 2.3节

经典著作,值得一读,英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.3 信号模型 雷达的发射机通常发出精心设计和定义明确的信号。然而,接收到的返回信号是多个分量的叠加,包括目标的反射、杂波…

数字化转型对企业有什么好处?

引言 数字化转型已经成为当今商业领域中的一股强大力量,它不仅仅是简单的技术更新,更是企业发展的重要战略转变。随着科技的迅猛发展和全球化竞争的加剧,企业们正在积极探索如何将数字化的力量融入到他们的运营和战略中。 数字化转型不仅是传…

9:00面试,9:05就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到12月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40…

抖音发布最新公告,清退所有全国本地生活服务商.

11月27日,抖音发布最新公告,一文公告让本地生活服务商行业鬼哭狼嚎,公告很明确,只保留了区域服务商,全国性的所有服务商被清退。 我们再来看看抖音本地生活的前世今生,最开始的时候抖音本地生活全部是自己部…

QT用户管理效果预览

用户管理效果 QT 用户管理 GITHUB网站 QT版本 CMakeList.txt find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Sql REQUIRED) target_link_libraries(tableView PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql)GitHub代码获取链接 GitHub代码获取链接

Java stream流toMap使用过程中空指针问题

Java8中stream操作list时常见的一个错误: 排查原因: 定位到代码中发现从数据查询是存在数据的 排查stream前对象为null的情况,那问题只能出现在toMap这里了 我们需要知道toMap是怎么帮我们封装数据的,先搞明白toMap的原理&#…

用在半导体CST材料搬运AGV小车的RFID

RFID(RadioFrequencyIdentification),又称无线射频识别技术,可通过射频信号进行非接触式的识别目标,近些年来被广泛应用在半导体制造业中,用于半导体行业的晶圆存储柜、电子货架、硅晶片清洗、半导体天车等…

STM32——超声波传感器

需求: 使用超声波测距,当手离传感器距离小于 5cm 时, LED1 点亮,否则保持不亮状态 接线: 定时器配置: 使用 TIM2 ,只用作计数功能,不用作定时。 将 PSC 配置为 71 ,…

基于K-means与CNN的遥感影像分类方法

基于K-means与CNN的遥感影像分类 一、引言 1.研究背景 航天遥感技术是一种通过卫星对地观测获取遥感图像信息数据的技术,这些图像数据在各领域都发挥着不可或缺的作用。遥感图像分类主要是根据地面物体电磁波辐射在遥感图像上的特征,判断识别地面物体的属…

推荐算法:HNSW【推荐出与用户搜索的类似的/用户感兴趣的商品】

HNSW算法概述 HNSW(Hierarchical Navigable Small Word)算法算是目前推荐领域里面常用的ANN(Approximate Nearest Neighbor)算法了。其目的就是在极大量的候选集当中如何快速地找到一个query最近邻的k个元素。 要找到一个query的…

【1.计算机组成与体系结构】浮点数的表示

目录 1.浮点数的表示2.运算过程3.特点 1.浮点数的表示 N尾数*基数(指数/也称为阶码) 例如:1.25x105 ; 1.255x103 2.运算过程 对阶>尾数计算>结果格式化 3.特点 1、一般尾数用补码,阶码用移码 2、阶码的位数决定数的表示范围,位数越…

Spring Boot 3 整合 Mybatis-Plus 动态数据源实现多数据源切换

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

什么是循环依赖,如何解决

目录 什么是循环依赖? 循环依赖的原因: 如何解决循环依赖问题? 最佳实践和注意事项: 结论: 当在使用 Spring Boot 进行开发时,循环依赖(Circular Dependency)可能会成为一个常见…

广东省工业和信息化厅工业互联网处一行莅临科东软件考察调研

近日,广东省工业和信息化厅工业互联网处副处长郑华、广东省科学院智能制造研究所副所长曹永军等一行领导、专家莅临科东软件,就聚焦工业数字化转型,助推新型工业化高质量发展进行考察调研。 科东软件陪同郑华副处长一行参观科东软件展厅&…

学习笔记——GDB调试器

感谢B站up主 xiaobing1016 的学习视频:基于VSCode和CMake实现C/C开发 | Linux篇_哔哩哔哩_bilibili

Redis缓存异常问题,常用解决方案总结

前言 Redis缓存异常问题分别是:1.缓存雪崩。2.缓存预热。3.缓存穿透。4.缓存降级。5.缓存击穿,以 及对应Redis缓存异常问题解决方案。 1.缓存雪崩 1.1、什么是缓存雪崩 如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有…

Appium 自动化测试 —— Appium的环境搭建与设置流程!

1、Appium 环境搭建: 学习 appium 最大的难处之一在于环境的安装,安装流程比较繁琐,安装的工具和步骤也较多,以下是基于 Windows 系统下的 Android 手机端的安装流程。就像我们在用 Selenium 进行 web 自动化测试的时候一样&…

Python键鼠控制之PyAutoGUI方法

前言 PyAutoGUI 是一个 Python 库,用于在桌面应用程序中自动化鼠标和键盘操作。它提供了一组简单而强大的方法,使得开发者可以编写脚本来模拟用户的鼠标点击、键盘输入以及屏幕截图等操作。PyAutoGUI 可以用于自动化重复性任务、测试 GUI 应用程序、创建…

如何通过3D人脸扫描设备制作一个3D超写实虚拟人?

随着虚拟技术的快速发展,现如今的虚拟人逐渐逼真,比二次元虚拟偶像更接近真人形象的3D超写实虚拟人,拥有着更逼真的面部表情,更完美地融入于虚实画面。 随着3D人脸扫描设备不断发展,大大降低了高难度的3D超写实虚拟人…