首页 > 其他分享 >firewalld防火墙:直接规则、富语言、地址伪装;以及综合示例

firewalld防火墙:直接规则、富语言、地址伪装;以及综合示例

时间:2024-07-03 17:31:35浏览次数:26  
标签:示例 -- cmd 防火墙 192.168 firewalld blacklist firewall ipv4

目录

直接规则

示例

(1)创建一个黑名单功能链

(2)将来自192.168.10.0/24的数据包指向这个链

(3)每分钟记录一次日志

(4)设置该链的规则为DROP

(5)重载firewalld

清空直接规则

富语言

示例

(1)允许连接http,并使用审核每分钟记录一次

(2)测试

(3)将192.168.10.202地址加入白名单,允许该主机的ipv4连接

其他富语言示例

地址伪装

示例

(1)设置external区域地址伪装

关闭地址伪装、重载

设置external区域中只有192.168.1.0/24网段的数据包才有地址伪装效果

(2)端口转发

(3)将网关服务器的外网接口设置第二个ip地址,让外网主机能够通过两个IP访问Web服务

(4)使用富规则配置端口转发

(5)最后在外网测试机,使用curl命令测试两个ip能否访问Web服务


直接规则

将iptables的规则插入到firewalld防火墙的策略中

示例

将某个IP范围列入黑名单

防止DDOS攻击

(1)创建一个黑名单功能链

先使用firewall-cmd --direct --add-chain ipv4 raw blacklist命令在规则中添加一个名为 blacklist 的新的ipv4原始防火墙链

  1. --direct:这个选项告诉firewall-cmd命令直接在防火墙的底层规则中进行操作,而不是通过firewalld的标准配置接口。
  2. --add-chain ipv4 raw blacklist:在IPv4协议下的原始(raw)表中添加一个名为blacklist的新防火墙链。
    1. 原始表(raw table)是Linux防火墙的一部分,它允许更低层次的处理,通常用于某些特定的高级网络配置和包过滤。

由此命令也可以延伸出其他功能

firewall-cmd --direct --remove-chain ipv4 raw blacklist:删除一个名为blacklist的ipv4原始防火墙链

firewall-cmd --direct --add-chain ipv4 raw blacklist --permanent:在规则中永久添加一个名为 blacklist 的新的ipv4原始防火墙链

(2)将来自192.168.10.0/24的数据包指向这个链

再在该链上加一条规则,用于将指定网段的数据包跳转到blacklist链中

[root@localhost ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.10.0/24 -j blacklist

PREROUTING: 原始表中的PREROUTING链,该链用于处理进入主机的数据包。
0: 规则的编号。这里的0表示第1行规则,优先级最高,规则从0开始。
-s 192.168.10.0/24: 源IP地址为192.168.10.0/24,匹配从这个网段发起的数据包。
-j blacklist: 如果数据包符合上述条件,则将其跳转到名为 blacklist 的防火墙链进行进一步处理。

(3)每分钟记录一次日志

记录匹配特定条件的流量

[root@localhost ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log-prefix "blacklist"

blacklist 0:将规则添加到blacklist链中,0是规则的编号
-m limit --limit 1/min:使用limit模块限制每分钟记录的日志消息数量为1条。
-j LOG --log-prefix "blacklist":指定匹配的数据包应该使用前缀“blacklist”进行日志记录。

(4)设置该链的规则为DROP

在该链中添加一条规则,编号为 1,该规则的动作是丢弃 (DROP) 匹配的数据包。

[root@localhost ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP

(5)重载firewalld

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

此时另一台虚拟机就ping不通了这台配置规则的主机了

使用另一台机器ping过以后,因为是规则指定范围内的IP,所以在/var/log/message日志文件中就可以看到相关日志,以及我们设置的前缀为blacklist

清空直接规则

cd到/etc/firewalld目录下,删除direct.xml文件,再重载防火墙就行了


富语言

 firewalld的富语言(rich language)提供了一种不需要了解 iptables 语法的通过高级语言配置复杂 IPv4和IPv6 防火墙规则的机制,为管理员提供了一种表达性语言,通过这种语言可以表达firewalld 的基本语法中未涵盖的自定义防火墙规则。

示例

需求:允许主机建立连接,并且每分钟审核一下

yum -y install httpd安装Apache软件包

(1)允许连接http,并使用审核每分钟记录一次

[root@localhost ~]# firewall-cmd --add-rich-rule='rule service name=http log prefix=httpAccess limit value=1/m audit accept'
--add-rich-rule:用于添加富规则。

(2)测试

使用echo "Test Web" > /var/www/html/index.html命令修改http服务的首页

另一台主机curl测试

201主机cat /var/log/message

(3)将192.168.10.202地址加入白名单,允许该主机的ipv4连接

[root@localhost firewalld]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.10.202" accept'
--add-rich-rule:用于添加富规则。 
family="ipv4":规定规则适用于 IPv4 地址族。
source address="192.168.10.202":指定允许来自 IP 地址 192.168.10.202 的流量通过。
accept:如果规则匹配,接受(允许)这些数据包。

其他富语言示例

允许了来自 192.168.10.0/24 网段的主机访问 TFTP 服务,并记录相关日志

[root@localhost ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" service name="tftp" log prefix="MyTFTPLOG: " level="info" limit value="1/m" accept'

允许了来自相同网段的主机访问 TCP 端口范围在 7000 到 8000 的服务

[root@localhost ~]# firewall-cmd --zone=dmz --add-rich-rule="rule family='ipv4' source address='192.168.10.0/24' port port='7000-8000' protocol='tcp' accept"

地址伪装

源地址转换:内网访问外网

目标地址转换:外网访问内部服务器

示例

该示例是基于本人的上一章firewalld防火墙的博客中的示例为基础,在该基础之上实现地址伪装的功能

实现外网主机访问内网Web服务器dmz区域的Web服务

需要在网关服务器做地址转换

(1)设置external区域地址伪装

[root@gateway-server ~]# firewall-cmd --list-all --zone=external 
external (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: 
  ports: 12345/tcp
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: echo-request
  rich rules: 
关闭地址伪装、重载
[root@gateway-server ~]# firewall-cmd --remove-masquerade --zone=external --permanent 
[root@gateway-server ~]# firewall-cmd --reload

此时内网的主机和服务器就不能访问外网了(ping)

设置external区域中只有192.168.1.0/24网段的数据包才有地址伪装效果

只有192.168.1.0/24网段的包才有地址伪装效果(可以访问外网主机),而内网Web服务器(192.168.2.10)就不能访问外网主机

[root@gateway-server ~]# firewall-cmd --zone=external --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' masquerade" --permanent
success
[root@gateway-server ~]# firewall-cmd --reload
success
[root@gateway-server ~]# firewall-cmd --list-all --zone=external
external (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: 
  ports: 12345/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: echo-request
  rich rules: 
    rule family="ipv4" source address="192.168.1.0/24" masquerade

(2)端口转发

将所有进入防火墙外部区域(external)的80端口的TCP流量转发到内部网络的192.168.2.10主机上

[root@gateway-server ~]# firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:proto=tcp:toaddr=192.168.2.10 --permanent
收到来自外网的80端口且是tcp协议的包;转发到192.168.2.10的80端口,也是tcp协议的
[root@gateway-server ~]# firewall-cmd --reload # 重启服务

  • port=80:proto=tcp:proto=tcp:toaddr=192.168.2.10 这部分指定了具体的转发规则
    • port=80: 表示要转发的端口是80端口,即HTTP服务的标准端口。
    • proto=tcp: 指定协议为TCP,这是HTTP服务使用的协议。
    • toaddr=192.168.2.10: 指定转发的目标地址,即所有发往防火墙的80端口的TCP流量都将被转发到192.168.2.10这台主机。

此时就实现了内网测试机可以访问内网Web服务器的http服务,外网测试机也能访问内网Web服务器的http服务,但是外网测试机不能访问整个内网,内网测试机却可以访问外网测试机

(3)将网关服务器的外网接口设置第二个ip地址,让外网主机能够通过两个IP访问Web服务

假如内网的Web服务器新申请了一个公网ip 100.1.1.15,将新的公网ip设置网关服务器的外网网卡ens33,作为第二个ip地址

vim /etc/sysconfig/network-scripts/ifcfg-ens33

使用ip a命令的效果,可以看到ens33接口有两个ip

(4)使用富规则配置端口转发

[root@gateway-server network-scripts]# firewall-cmd --zone=external --add-rich-rule="rule family=ipv4 destination address=100.1.1.15/32 forward-port port=80 protocol=tcp to-addr=192.168.2.10" --permanent
[root@gateway-server network-scripts]# firewall-cmd --reload

(5)最后在外网测试机,使用curl命令测试两个ip能否访问Web服务

标签:示例,--,cmd,防火墙,192.168,firewalld,blacklist,firewall,ipv4
From: https://blog.csdn.net/m0_65551023/article/details/140156822

相关文章

  • Mysql中视图的使用以及常见运算符的使用示例和优先级
    场景基础知识回顾:mysql中视图的基础使用以及常见运算符的使用示例。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现Mysql中视图的使用视图的创建CREATEVIEWstu_viewASSELECT*FROMbus_student;视图查询SELECT*FROMstu_view;查看视图基本信息SHOWTAB......
  • Vue3全局配置Axios并解决跨域请求问题示例详解
    背景对于前后端分离项目,前端和后端端口不能重复,否则会导致前端或者后端服务起不来。例如前端访问地址为: http://localhost:8080/ ,后端访问地址为 http://localhost:8081/ 。后端写好Controller,当用Axios访问该接口时,将会报错:AccesstoXMLHttpRequestat'http://localh......
  • SQL的存储过程,语法示例
    存储过程类型含义IN作为输入,调用时需要传入值OUT作为输出,该参数作为返回值INOUT既可以输入参数,也可以输出参数 语法:创建createprocedure存储过程名称(in参数名称1参数数据类型,out参数名称2参数数据类型,i......
  • 邮件通知提醒邮箱设置教程及API代码示例!
    邮件通知的警告功能如何配置?详细教程与API代码示例!无论是业务提醒、账户活动警告,还是个人事务,邮件通知已经成为一种重要的沟通工具。AokSend将详细介绍如何设置邮件通知提醒邮箱,并提供相应的API代码示例,帮助你更高效地管理信息流。邮件通知:选择务提供商常见的有Gmail、Outl......
  • c语言函数指针和指针函数的区别及代码示例
    c语言函数指针和指针函数的区别及代码示例在C或C++中,函数指针和指针函数是两个容易混淆但本质不同的概念。理解它们的区别对于深入掌握C/C++的指针和函数特性至关重要。1.函数指针定义:函数指针是指向函数的指针。它存储了函数的地址,通过它可以调用该函数。语法:返回类型(*指......
  • 前端vue3项目dagre-d3基础配置项及流程图组件示例(包括安装依赖)
    目录引言d3是什么?dagre是什么?dagre-d3是什么?dagre-d3配置项流程图示例依赖安装组件示例总结引言因为很多文档都是英文,刚开始调研的时候比较费劲,文档里的配置像示例又比较分散,就自己整理了一下,附上测试时写的示例d3是什么?d3.js 是一个强大的JavaScript库,用于在......
  • dig 命令详解及使用示例
    一、背景知识CNAMECNAME是CanonicalName的缩写,它是DNS(域名系统)记录的一种类型。CNAME记录用于将一个域名映射(别名)到另一个域名。换句话说,当你访问一个设置了CNAME记录的域名时,你实际上被重定向到了另一个域名。例如,假设你有一个域名www.baidu.com,你想让用户通过examp......
  • 红队工具Finger 安装具体以步骤-示例centos
    1.gitclonehttps://github.com/EASY233/Finger.git如果没有yuminstallgit2.pip3install-rrequirements.txt找到finger所在的文件夹可以用find-name"Finger"进入文件中配置命令前提要安装pythonyuminstallpython-pip33.python3Finger.py-h......
  • 纳米体育数据电竞数据接口:基础数据包接口文档API示例③
    纳米体育数据的数据接口通过JSON拉流方式获取200多个国家的体育赛事实时数据或历史数据的编程接口,无请求次数限制,可按需购买,接口稳定高效;覆盖项目包括足球、篮球、网球、电子竞技、奥运等专题、数据内容。纳米数据API2.0版本包含http协议以及websocket协议,主要通过http获取数......
  • ONNX Runtime入门示例:在C#中使用ResNet50v2进行图像识别
    ONNXRuntime简介ONNXRuntime是一个跨平台的推理和训练机器学习加速器。ONNX运行时推理可以实现更快的客户体验和更低的成本,支持来自深度学习框架(如PyTorch和TensorFlow/Keras)以及经典机器学习库(如scikit-learn、LightGBM、XGBoost等)的模型。ONNX运行时与不同的硬件、......