linux安全-firewalld防火墙-基础讲解

目录

[一、 防火墙技术分类](#一、 防火墙技术分类)

[二、 firewalld](#二、 firewalld)

[三、 firewalld支持的类型的NAT](#三、 firewalld支持的类型的NAT)

[四、 富语言](#四、 富语言)

[五、 firewalld配置方式](#五、 firewalld配置方式)

[六、 firewall-cmd命令](#六、 firewall-cmd命令)

[七、 小实验](#七、 小实验)


这篇文章将对 firewalld 防火墙的基础知识进行介绍

**firewalld简介:**firewalld的作用是为包过滤机制提供匹配规则(或称为策略),通过各种不同的规则, 告诉netfilter对来自指定源、前往指定目的或具有某些协议特征的数据包采取何种处理方式。

一、 防火墙技术分类

  1. 包过滤:linux防火墙主要工作在网络层

  2. 应用代理:squid

  3. 状态检测


在centos7中有几种防火墙的存在:firewalld,iptables,ebtables

firewalld和iptables的关系:

firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现。也就是说firewalld和iptables一样,他们的作用都是用于维护规则,而真正使用规 则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。 系统提供了图形化的配置工具firewall-config、system-config-firewall,提供命令行客户端firewall-cmd,用于配置firewalld永久性或非永久性运行时间的改变:它依次用iptables工具与执行数据包筛选的内核中的Netfilter通信

逻辑关系图:

从图中可以看出,iptables服务和firewalld都是通过iptables命令与内核的netfilter 进行交互的。在centos7中,我们仍然可以使用iptables命令来管理我们的防火墙。唯一不 同的是当我们重启服务器或重启firewalld时,iptables命令管理的规则不会自动加载,反而会被firewalld 的规则代替。

默认使用firewalld来管理netfilter子系统

netfilter:linux内核中实现包过滤防火墙的内部结构-内核态

firewalld:用于管理linux防火墙的命令程序-用户态

二、 firewalld

支持网络区域所定义的网络链接以及接口安全等级的动态防火墙

配置模式

  • 运行时配置
  • 永久配置

规则匹配顺序

首先检查"源地址"

  1. 若源地址关联到特定的区域,则执行该区域所制定的规则
  2. 若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所制定的规则
  3. 若网络接口未关联到特定的区域,则使用默认区域并执行该区域所制定的规则

🚨默认区域是:public

区域划分

  • 信任区域:trusted
  • 公共区域:public
  • 工作区域:work
  • 家庭区域:home
  • 内部区域:internal
  • 外部区域:external
  • 非军事区域:dmz
  • 限制区域:block
  • 丢弃区域:drop

三、 firewalld支持的类型的NAT

  1. IP地址伪装-SNAT
  2. 端口转发-DNAT(目的地址转换/端口映射)

四、 富语言

可用于表达基本的允许/拒绝原则,也可以用于配置记录,以及端口转发、伪装和速率限制

语法

  • source:限制源地址
  • destination:限制目标地址
  • service:服务
  • protocol:协议
  • icmp-block:阻断一个/多个ICMP类型
  • masquerade:IP伪装
  • forward-port:将指定的tcp/udp-本机的其他端口
  • log:日志
    • 等级:emerg、alert、crit、erroor、warning、notice、info
  • audit:审核
  • accept:允许
  • reject:拒绝
  • drop:丢弃

五、 firewalld配置方式

  1. 图形化
  2. firewalld-cmd
  3. 配置文件

六、 firewall-cmd命令

介绍一些基础命令使用以及常用的

  1. 显示预定义的区域
bash 复制代码
firewall-cmd --get-zones

区域管理

  • --get-default-zone:显示网络连接或接口的默认区域
  • --set-default-zone=<zone>:设置网络连接或接口的默认区域
  • --get-active-zones:显示已激活的所有区域
  • --get-zone-of-interface=<interface>:显示 指定接口绑定的区域
  • --zone=<zone> --add-interface=<interface>:为指定的区域更改绑定的网络接口
  • --zone=<zone> --change-interface=<interface>:为指定的区域更改绑定的网络接口
  • --zone=<zone> --remove-interface=<interface>:为指定的区域删除绑定的网络接口
  • --list-all-zones:显示所有区域及其规则
  • --zone=\]--list-all:显示所有指定区域的所有规则,省略--zone=\时表示仅对默认区域操作

  1. 显示当前系统中的默认区域
bash 复制代码
firewall-cmd --get-default-zone
  1. 显示默认区域的所有规则
bash 复制代码
firewall-cmd --list-all
  1. 显示网络接口ens33对应区域
bash 复制代码
firewall-cmd --get-zone-of-interface=ens33
  1. 将网络接口ens33对应区域更改为internal区域
bash 复制代码
firewall-cmd --zone=internal --change-interface=ens33
  1. 显示所有激活区域
bash 复制代码
firewall-cmd --get-active-zones

服务管理

  • --zone=\\] --list-services:显示指定区域内允许访问的所有服务

  • --zone=\\] --remove-service=\:删除指定区域已设置的允许访问的某项服务

  • --zone=\\] --add-port=\\[-\\]/\:为指定区域设置允许访问的某个/某段端口号(包括协议名)

  • --zone=\\] --list-icmp-blocks:显示指定区域内拒绝访问的所有ICMP类型

  • --zone=\\] --remove-icmp-block=\:删除指定区域已设置的拒绝访问的某项ICMP 类型,省略-zone=\时表示对默认区域操作

  1. 为默认区域设置允许访问的服务
bash 复制代码
#显示默认区域内允许访问的所有服务
firewall-cmd --list-services

#设置默认区域允许访问http服务
firewall-cmd --add-service=http
  1. 为internal区域设置允许访问的服务
bash 复制代码
#设置internal区域允许访问mysql服务
firewall-cmd --zone=internal --add-service=mysql

#显示internal区域内允许访问的所有服务
firewall-cmd --zone=internal --list-services

端口管理

  1. 在internal区域打开443/TCP端口
bash 复制代码
firewall-cmd --zone=internal --add-port=443/tcp
  1. 在internal区域禁止443/TCP端口访问
bash 复制代码
firewall-cmd --zone=internal --remove-port=443/tcp

七、 小实验

服务端:192.168.180.110

客户端:192.168.180.120

项目需求

  1. 禁止主机ping服务器
  2. 只允许192.168.180.120访问ssh
  3. 允许所有主机访问httpd服务

实验步骤

  1. 允许所有主机访问httpd
bash 复制代码
firewall-cmd --zone=public --add-service=http

#可以设置永久设置
firewall-cmd --zone=public --add-service=http --permanent	

客户端测试访问

curl 192.168.180.110

  1. 只允许192.168.180.120访问ssh
bash 复制代码
#先删除在默认区域的ssh
firewall-cmd --zone=public --remove-service=ssh

#在work区域添加ssh
firewall-cmd --zone=work --add-source=192.168.180.120
firewall-cmd --zone=work --add-service=ssh

客户端访问测试

用192.168.180.120测试

用192.168.180.130测试,不行

  1. 禁止ping服务器
bash 复制代码
firewall-cmd --zone=public --add-icmp-block=echo-request

相关推荐
Johny_Zhao15 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
用户9623779544820 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机1 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机1 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954481 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star1 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954481 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
YuMiao1 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
chlk1232 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑2 天前
Ubuntu系统安装CodeX出现问题
linux·后端