Linux系统:iptables 防火墙

目录

一、安全技术与防火墙

1、安全技术概念

2、防火墙

2.1 防火墙概念

2.2 防火墙分类

2.3 linux的防火墙Netfilter

2.4 防火墙工具介绍

2.5 netfilter 和 iptables 的关系

二、iptables

1、概念

2、五表五链

2.1 五个table表

2.2 五个chain链

2.3 内核中数据包的传输过程

 三、iptables 相关操作

1、iptables 工具安装及开启

2、iptables 基本语法

2.1 iptables 基本语法格式

2.2 iptables语法总结图

2.3  iptables 管理选项

2.4 iptables 通用匹配

2.5  iptables 控制类型

3、iptables 基本用法

3.1 查看iptables规则表

3.2 新增iptables规则

3.3 修改、替换规则

3.4 删除规则

3.5 设置默认策略(黑白名单)

3.6 设置回环网卡允许访问规则

3.7 自定义链

3.7.1 自定义链的语法格式 

3.7.2 新建自定义链添加规则并使用

3.7.3 重命名自定义链

3.7.4 删除自定义链

3.8 通用匹配

3.9  隐含扩展模块

3.9.1 TCP模块

3.9.2 ICMP模块

3.10 显示扩展模块

3.10.1 multiport扩展(混合端口)

3.10.2 iprange扩展

3.10.3 mac地址

3.10.4 string字符串

3.10.5 time模块

3.10.6 connlimit扩展

3.10.7 state扩展

3.11 保存规则

3.12 规则优化


一、安全技术与防火墙

1、安全技术概念

  • 入侵检测系统(Intrusion Detection Systems)

特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类 似于监控系统一般采用旁路部署(默默的看着你)方式

  • 入侵防御系统(Intrusion Prevention System)

以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以 阻断,主动而有效的保护网络的安全,一般采用在线部署方式(必经之路)

  •  防火墙( FireWall )

隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中

  • 防水墙(Waterwall)

与防火墙相对,是一种防止内部信息泄漏的安全产品。   网络、外设接口、存储介质和打印机构成信息泄漏的全部途径。防水墙针对这四种泄密途径,在事前、事  中、事后进行全面防护。其与防病毒产品、外部安全产品一起构成完整的网络安全体系

2、防火墙

2.1 防火墙概念

防火墙是一种网络安全设备或软件,用于监控和控制网络流量,根据事先设定的规则来决定允许或者阻止数据包的传输。其主要目的是保护计算机网络免受未经授权的访问或损害,并确保网络的安全性、完整性和可用性。防火墙可以在网络层、传输层或应用层进行操作,并可用于保护个人计算机、企业网络或数据中心等各种规模的网络环境。通过配置防火墙规则,管理员可以限制哪些网络流量被允许进入或离开网络,以及允许的流量类型和目的地

2.2 防火墙分类

按照部署位置分类:

  • 网络层防火墙:通常部署在网络边界,检查和过滤进出网络的流量
  • 主机防火墙:安装在主机上,用于保护单个主机或设备
  • 云防火墙:专门设计用于云环境的防火墙解决方案,保护云端应用和数据的安全

按照工作原理分类:

  • 有状态防火墙:根据数据包的状态信息来做决策
  • 无状态防火墙:只根据单个数据包的信息来做决策

按照过滤方式分类:

  • 基于包过滤的防火墙:网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否 允许该数据包通过

优点:对用户来说透明,处理速度快且易于维护

缺点:无法检查应用层数据,如病毒等

  • 基于应用层的防火墙:应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server)。将所有跨越防火墙的网络通信链路分为两段,内外网用户的访问都是通过代理服务器上的“链接”来实现

优点:在应用层对数据进行检查,比较安全

缺点:增加防火墙的负载

注意:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用层去检查

按照功能分类

  • 传统防火墙:基于网络层的防火墙
  • 应用层防火墙:能够检查应用层数据的防火墙
  • 代理防火墙:通过代理服务器来转发流量,提供更高级的安全功能

按照技术分类

  • 静态包过滤防火墙:基于预定义的规则进行数据包过滤
  • 动态包过滤防火墙:根据实时流量和行为进行动态调整和过滤

2.3 linux的防火墙Netfilter

Linux 防火墙是由 Netfilter 组件提供的,Netfilter 工作在内核空间,集成在 linux 内核中

Netfilter 是 Linux 2.4.x 之后新一代的 Linux 防火墙机制,是 linux 内核的一个子系统。Netfilter 采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter 与 IP 协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作

2.4 防火墙工具介绍

  • iptables:iptables是Linux中最常用的防火墙工具之一。它基于内核的Netfilter框架,可以配置规则集来过滤、转发和修改网络数据包。iptables提供了广泛的功能和灵活性,可以根据源IP地址、目标IP地址、端口号等多个参数进行过滤
  • firewalld:firewalld是Red Hat系列Linux发行版中默认的防火墙管理工具。它使用了D-Bus接口和动态防火墙规则,支持更高级的网络配置。firewalld通过定义“区域”和“服务”来管理网络连接,并且可以实时更新规则而无需重启防火墙
  • nftables:nftables是Netfilter框架的下一代替代品。它提供了更简洁和高效的语法,支持类似于iptables的过滤、NAT和连接跟踪功能。nftables的目标是取代iptables,并提供更好的性能和可扩展性

2.5 netfilter 和 iptables 的关系

  • netfilter 

①属于的“内核态”(Kernel Space, 又称为内核空间)的防火墙功能体系
②是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集

  • iptables

①属于“用户态”(User Space,又称为用户空间)的防火墙管理体系
②是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下

  • 两者之间关系

iptable 和 netfilter 共同组成了一个防火墙系统,iptables 只是 Linux 防火墙的管理工具——命令行工具,或者也可以说是一个客户端的代理,netfilter 是安全框架,并且真正实现防火墙功能的是 netfilter,它是Linux内核中的一部分。这两部分共同组成了包过滤防火墙,并且是免费使用,可以实现完成封包过滤、封包重定向和网络地址转换(NAT)等功能

二、iptables

1、概念

IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置

防火墙在做数据包过滤时决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。由软件包 iptables 提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包

2、五表五链

iptables由五个表table和五个链chain以及一些规则组成。表中有链,链中有规则。iptables使用表来组织规则,链是规则的容器,用于按顺序处理数据包

2.1 五个table表

五个表table:filter、nat、mangle、raw、security(用的很少,了解即可)
table表说明
raw跟踪数据包,确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT、PREROUTING
mangle标记数据包,修改数据包内容,用来做流量整形,给数据包设置标记。包含五个规则链,INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING
nat负责网络地址转换,用来修改数据包中的源、目标IP地址或端口(通信五元素)。包含三个规则链,OUTPUT、 PREROUTING、 POSTROUTING
filter负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、 FORWARD、 OUTPUT
security用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现 (了解)
优先级由高到低的顺序为:security -->raw-->mangle-->nat-->filter

2.2 五个chain链

五个链chain:input、output、forward、postrouting、prerouting
chain链说明
input处理入站数据包,匹配目标IP为本机的数据包
output处理出站数据包,一般不在此链上做配置
forward处理转发数据包,匹配流经本机的数据包
prerouting在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上
postrouting在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网

2.3 内核中数据包的传输过程

① 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去

② 如果数据包是进入本机的,数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达

③ 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出

三种报文流向:

  • 流入本机:PREROUTING --> INPUT-->用户空间进程
  • 流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
  • 转发:PREROUTING --> FORWARD --> POSTROUTING

 三、iptables 相关操作

1、iptables 工具安装及开启

默认Linux系统已安装iptables,若无请安装

[root@localhost ~]#yum install iptables iptables-services.x86_64 -y

关闭firewalld防火墙和核心防护,开启iptables服务

[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
[root@localhost ~]#systemctl start iptables.service 
[root@localhost ~]#systemctl status iptables.service

2、iptables 基本语法

2.1 iptables 基本语法格式

#iptables  指定表   怎么在链中插入规则  指定链  规则  
iptables [-t 表名] -管理选项 [链表] [通用规则匹配] [-j 控制类型]

#如,-t指定filter表  -A指定INPUT链  -s指定要匹配的数据包的源IP地址为172.16.12.12  -j指定控制类型为DROP即直接丢弃数据包,不给出任何回应信息
iptables -t filter -A INPUT  -s 172.16.12.12 -j DROP

 

注:

  • 不指定表名时,默认指filter表
  • 不指定链名时,默认指表内的所有链
  • 除非设置链的默认策略,否则必须指定匹配条件
  • 控制类型使用大写字母,其余均为小写

2.2 iptables语法总结图

2.3  iptables 管理选项

在使用iptables进行防火墙管理时,可以使用各种选项来配置规则、查看规则、添加/删除规则以及保存/加载规则等。以下是一些常用的iptables防火墙管理选项的介绍

管理选项说明
-A在指定链末尾追加一条 iptables -A INPUT (操作)
-I在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT (操作)
-P指定默认规则 iptables -P OUTPUT ACCEPT (操作)
-D删除 iptables -t nat -D INPUT 2 (操作)
-p服务名称 icmp tcp
-R修改、替换某一条规则 iptables -t nat -R INPUT (操作)
-L查看 iptables -t nat -L (查看)
-n所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议端口号而不是服务名) iptables -L -n,iptables -nL,iptables -vnL (查看)
-v查看时显示更详细信息,常跟-L一起使用 (查看)
--line-number规则带编号 iptables -t nat -L -n --line-number /iptables -t nat -L --line-number
-F清除链中所有规则 iptables -F (操作)
-N新加自定义链
-X清空自定义链的规则,不影响其他链 iptables -X
-Z清空链的计数器(匹配到的数据包的大小和总和)iptables -Z
-S看链的所有规则或者某个链的规则/某个具体规则后面跟编号

2.4 iptables 通用匹配

直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。

匹配的条件作用
-p指定要匹配的数据包的协议类型
-s指定要匹配的数据包的源IP地址
-d指定要匹配的数据包的目的IP地址
-i指定数据包进入本机的网络接口(入站网卡)
-o指定数据包离开本机做使用的网络接口(出站网卡)
--sport指定源端口号
--dport指定目的端口号

2.5  iptables 控制类型

对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵及做相应的日志记录等。在 iptables 防火墙体系中,最常用的几种控制类型如下

控制类型说明
ACCEPT 允许数据包通过(默认)
DROP直接丢弃数据包,不给出任何回应信息
REJECT拒绝数据包通过,会给数据发送端一个响应信息
SNAT修改数据包的源地址
DNAT修改数据包的目的地址
MASQUERADE伪装成一个非固定公网IP地址
LOG

 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。LOG只是一种辅助动作,并没有真正处理数据包

3、iptables 基本用法

3.1 查看iptables规则表

查看已有的防火墙规则时,使用管理选项“-L”,结合“--line-numbers”选项还可显示各条规则在链内的顺序号

iptables  [-t表名]  -v  -n  -L  [链名]  [-- line-numbers]
#-v:详细信息   -n:规则   -L: 规则列表  ( L必须写在最后 ) 
[root@localhost ~]# iptables -vnL                      #查看全部规则
[root@localhost ~]# iptables -t filter -vnL INPUT 2    #指定查看filter表INPUT链第二条规则
[root@localhost ~]# iptables -vnL --line-numbers       #查看全部规则的编号

3.2 新增iptables规则

添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。注意:-A代表最底部插入,-I默认首行插入,-I  数字则代表插入第数字条

#在INPUT链中插入一条新的规则,未指定序号,默认加在第一条
[root@localhost ~]#iptables -I INPUT  -s 172.16.12.12 -j ACCEPT
#指定序号2,即新的规则加在第2条的位置
[root@localhost ~]#iptables -I INPUT 2 -s 172.16.12.13 -j DROP
#在INPUT链的末尾加上新的规则
[root@localhost ~]#iptables -A INPUT -s 172.16.12.14 -j REJECT 

3.3 修改、替换规则

iptables  -t 表名  -R 链名  编号  规则
[root@localhost ~]#iptables -R INPUT 3 -s 172.16.12.0/24 -j ACCEPT 

3.4 删除规则

#删除指定链的序号的规则
[root@localhost ~]#iptables -D INPUT 1
#指定链并且指定源地址删除
[root@localhost ~]#iptables -D INPUT -s 172.16.12.13 -j DROP 
#清除链中所有的规则
[root@localhost ~]#iptables -F     

3.5 设置默认策略(黑白名单)

iptables 的各条链中,默认策略是规则匹配的最后一个环节,当找不到任何一条能够匹配数据包的规则时,则执行默认策略。默认策略的控制类型为 ACCEPT(允许)、DROP(丢弃)两种,没有REJECT(拒绝)

即可通过设置默认策略来实现iptables防火墙的黑白名单操作,在iptables防火墙中,可以使用黑名单和白名单来控制网络流量的访问权限。黑名单和白名单是两种不同的策略,用于指定哪些IP地址或IP地址段被允许或禁止通过防火墙

  • 黑名单:默认全部允许通过,添加谁才不允许谁通过。
  • 白名单:默认全部不允许通过,添加谁允许谁通过。

方法一 :通过设置DROP规则,默认拒绝所有,然后设置允许访问的主机到iptables规则中,即为白名单

#指定规则DROP,默认拒绝所有
[root@localhost ~]#iptables -P  INPUT DROP
#添加允许172.16.12.12远程主机访问的规则
[root@localhost ~]# iptables -A INPUT -s 172.16.12.12 -j ACCEPT
[root@localhost ~]# iptables -vnL

方法二:先在INPUT链尾添加DROP,然后在DROP规则前任意插入允许的规则,除在DROP规则前的规则允许外拒绝所有,即为白名单

#先在INPUT链末尾  拒绝所有
[root@localhost ~]#iptables -A INPUT -j DROP
#然后在DROP规则上插入新的允许规则,想要允许什么就插入什么,相当于白名单
[root@localhost ~]#iptables -I INPUT -s 172.16.12.12 -j ACCEPT
[root@localhost ~]#iptables -I INPUT -s 172.16.12.12 -j ACCEPT
[root@localhost ~]# iptables -vnL

注:

iptables规则表当中的规则是从上至下依次执行的,执行过允许的规则后,最后执行拒绝所有

3.6 设置回环网卡允许访问规则

当设置了172.16.12.0网段的客户端无法访问,那么其本身172.16.12.10也无法ping通自己,如何解决这个问题?

#-i 指定入站网卡 lo(回环网卡)允许自己ping通
[root@localhost ~]#iptables -I INPUT -i lo -j ACCEPT 

3.7 自定义链

自定义链是iptables中的一种功能,它允许用户创建自己的链来组织和管理规则。自定义链可以帮助简化规则集,使其更易于管理。通过将相关规则放入一个自定义链中,可以提高可读性并降低错误发生的可能性。此外,自定义链还可以在多个规则之间共享相同的操作,从而减少冗余

3.7.1 自定义链的语法格式 
iptables  选项  CUSTOM_CHAIN_NAME
选项说明
-N自定义一条新的规则链
-E重命名自定义链 :引用计数不为0的自定义链,也就是被使用的自定义链,不能够被重命名,也不能被删除
-X删除自定义的空的规则链
3.7.2 新建自定义链添加规则并使用
#新建自定义链
[root@localhost ~]#iptables -N dh

#给自定义链dh添加规则
[root@localhost ~]#iptables -A dh -p tcp --dport 8080 -j ACCEPT

#使用自定义链,绑定INPUT链,即运行INPUT链的同时运行自定义链
[root@localhost ~]#iptables -A INPUT -s 172.16.12.12 -j dh

3.7.3 重命名自定义链
#重命名自定义链
[root@localhost ~]#iptables -E dh  web

3.7.4 删除自定义链
#当引用计数为0才可以删除,也就是还没有使用自定义链才可以使用这一条命令删除
[root@localhost ~]#iptables -X web

#需要先删除自定义web链中的规则,再删除INPUT链中的关于web的规则,最后删除自定义链web
[root@localhost ~]#iptables -D web 1
[root@localhost ~]#iptables -D INPUT 1
[root@localhost ~]#iptables -X web

3.8 通用匹配

基本匹配条件:不需要加载模块,由 iptables/netfilter 提供

#直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件
协议匹配: -p  协议名
地址匹配: -s  源地址
         -d  目的地址       #可以是IP、网段、域名、空(任何地址)
接口匹配: -i  入站网卡
         -o  出站网卡
#拒绝172.16.12.12主机使用imcp协议到本机
[root@localhost ~]#iptables -A INPUT -p icmp -s 172.16.12.12 -j DROP

 3.9  隐含扩展模块

iptables防火墙中的隐含扩展是指一些特殊的扩展模块,它们不需要显式加载,而是隐含在iptables中。这些隐含扩展包括一些常见的功能,如状态跟踪(state tracking)、网络地址转换(Network Address Translation,NAT)和数据包过滤等。

iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块。要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件。 端口匹配: --sport 源端口、--dport 目的端口,可以是个别端口、端口范围

#查看扩展帮助
man iptables-extensions
#查看有哪些扩展模块
rpm -ql iptables

3.9.1 TCP模块

TCP模块允许iptables根据TCP连接的状态进行过滤和处理

--sport port匹配报文源端口,可为端口连续范围
--dport port匹配报文目标端口,可为连续范围
--tcp-flags mask comp

mask 需检查的标志位列表,用 , 分隔 

例如 SYN,ACK,FIN,RST
comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用 , 分隔 tcp协议的扩展选项

--sport 1000          #匹配源端口是1000的数据包
--sport 1000:3000     #匹配源端口是1000-3000的数据包
--sport :3000         #匹配源端口是3000及以下的数据包
--sport 1000:         #匹配源端口是1000及以上的数据包
#注: --sport和--dport 必须配合-p <协议类型>使用
#端口可以使用的范围 0-65535
#tcp端口22到80全部被拒绝172.16.12.12主机访问
[root@localhost ~]#iptables -A INPUT -p tcp --dport 22:80 -s 172.16.12.12 -j REJECT 

#拒绝172.16.12.0网段访问80端口
[root@localhost ~]#iptables -A INPUT -p -s 172.16.12.0/24 --dport 80 -j REJECT

#丢弃SYN请求包,放行其他包
[root@localhost ~]#iptables -I INPUT -i ens33 -p tcp ! --syn -j REJECT

3.9.2 ICMP模块

ICMP模块允许iptables根据ICMP协议的类型和代码进行过滤和处理

类型匹配:--icmp-type ICMP类型
可以是字符串、数字代码
"Echo- Request" (代码为8)表示请求
"Echo- Reply" (代码为0)表示回复
"Dest ination-Unreachable" (代码为3)表示目标不可达
关于其它可用的ICMP协议类型,可以执行“iptables -p icmp -h”命令,查看帮助信息

要求:如何禁止其它客户端ping主机,而允许主机ping其他客户端?

其他客户端:172.16.12.12等      主机:172.16.12.10

方法一:

#拒绝源地址172.16.12.12的icmp协议类型为8的包到达主机172.16.12.10的INPUT口
[root@localhost ~]#iptables -A INPUT -s 172.16.12.12 -p icmp --icmp-type 8 -j REJECT

方法二:

#172.16.12.10主机给其他客户端发送0个数据包
[root@localhost ~]# iptables -A OUTPUT -d 172.16.12.12 -p icmp --icmp-type 0 -j REJECT 

3.10 显示扩展模块

显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块

3.10.1 multiport扩展(混合端口)

以离散方式定义多端口匹配,最多指定15个端口

#指定多个源端口 逗号隔开
[!] --source-ports,--sports port[,port|,port:port]...
#指定多个目标端口 逗号隔开
[!] --destination-ports,--dports port[,port|,port:port]...
#多个源或目标端
[!] --ports port[,port|,port:port]...
#阻止ip地址来自172.16.12.12访问当前机器的tcp 22和80端口
[root@localhost ~]#iptables -A INPUT -s 172.16.12.12 -p tcp -m multiport --dport 22,80 -j REJECT

3.10.2 iprange扩展

指明连续的(但一般不是整个网络)ip地址范围

--src-range from[-to] 源IP地址范围
--dst-range from[-to] 目标IP地址范围
#拒绝172.16.12.12-172.16.12.14的所有流量
[root@localhost ~]#iptables -A INPUT  -m iprange --src-range 172.16.12.12-172.16.12.14 -j REJECT

3.10.3 mac地址

mac 模块可以指明源MAC地址,,适用于:PREROUTING, FORWARD,INPUT chains

-m   mac    [!] --mac-source XX:XX:XX:XX:XX:XX

[root@localhost ~]#iptables -A INPUT -m mac --mac-source 00:0c:29:1e:c9:3f -j REJECT

3.10.4 string字符串

对报文中的应用层数据做字符串模式匹配检测

--algo {bm|kmp} 字符串匹配检测算法
 bm:Boyer-Moore           算法
 kmp:Knuth-Pratt-Morris   算法
 
--from offset 开始查询的地方
--to offset   结束查询的地方
 
[!] --string pattern 要检测的字符串模式
[!] --hex-string pattern要检测字符串模式,16进制格式

准备工作: 

[root@localhost html]#systemctl start httpd
[root@localhost ~]#cd /var/www/html
[root@localhost html]#echo "hello" > he.html
[root@localhost html]#echo "world" > wo.html

当出现特定字符时就不显示网页内容: 

#http协议即tcp协议,源端口为80,使用字符模块,利用bm算法从第62个字节开始检查字符串为hello
#注意请求的包不带字符,回复的包带字符所以要output
[root@localhost html]# iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "hello" -j REJECT

3.10.5 time模块

iptables防火墙中的time模块允许您根据当前时间来匹配数据包。这个模块通常用于实现基于时间的访问控制,比如只允许在特定时间段内访问某些服务或资源。注意:这里时间需要使用格林威治时间,date -u可以查看

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss]       时间
--timestop hh:mm[:ss]
[!] --monthdays day[,day...]   每个月的几号
[!] --weekdays day[,day...]   星期几,1 – 7 分别表示星期一到星期日
--kerneltz:内核时区(当地时间),不建议使用,CentOS 7版本以上系统默认为 UTC
注意: centos6 不支持kerneltz ,--localtz指定本地时区(默认)
[root@localhost ~]# date -u
[root@localhost ~]#iptables -A INPUT -s 172.16.12.12 -m time --timestart 11:00 --timestop 12:00 -j REJECT

[root@localhost ~]# date -u
[root@localhost ~]#iptables -A INPUT -s 172.16.12.12 -m time --timestart 11:00 --timestop 11:30 -j REJECT

3.10.6 connlimit扩展

iptables防火墙中的connlimit扩展模块允许您限制连接数,以防止某个服务被过多的连接请求所淹没。这个扩展模块通常用于防止DDoS(分布式拒绝服务)攻击或其他类型的连接泛滥

--connlimit-upto N #连接的数量小于等于N时匹配
--connlimit-above N #连接的数量大于N时匹配

Dos攻击:当同一个IP地址同一时间老是访问服务器,就会占用服务器的硬件资源导致其他客户无法访问到服务器那么该如何解决呢? 

#如果同一个地址同时访问大于2次以上,就拒绝它,也就是同一地址同一时间只能访问两次
[root@localhost ~]#iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT

3.10.7 state扩展

state模块是iptables防火墙中的一个重要模块,它用于根据连接的状态进行过滤和处理规则。它根据数据包的状态(如新建、已建立、相关、无效)来确定是否接受、拒绝或进一步处理数据包

状态类型说明
NEW新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
ESTABLISHEDNEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
RELATED新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
INVALID无效的连接,如flag标记不正确
UNTRACKED未进行追踪的连接,如:raw表中关闭追踪
-m state --state <state1,state2,...>
在上面的格式中,<state1,state2,...> 是一个逗号分隔的连接状态列表,用于指定要匹配的连接状态。
 
实现功能老用户可以访问,新用户不可以访问
iptables -AINPUT -m state --state ESTABLISHED -j ACCEPT   #已在ping的可以继续ping,停了也不可以通了,xshell也不可以再连
iptables -AINPUT -m state --state NEW -j REJET            #新用户拒绝
#拒绝新用户访问,老用户只要不退出就可以一直访问
[root@localhost ~]#iptables -A INPUT  -m state --state NEW -j REJECT 

#172.16.12.10主机可访问172.16.12.12主机所有服务,但172.16.12.12主机无法访问172.16.12.10主机的所有服务
[root@localhost ~]#iptables -A INPUT -s 172.16.12.12 -m state --state NEW -j REJECT 

拓展:

故障:发现ping不通,查看服务器的日志发现是table full,dropping packet错误,如何解决?

原因:启用了的 iptables  state 模块用户访问有问题,需要查看日志 table full  drop pket

根本是有一个内核选项的默认值过低, 即netfilter/nf_conntrack_max,默认值为65536,需要把这个值调大一点,即可避免table full,dropping packet错误

[root@localhost ~]#echo "1000000" > /proc/sys/net/netfilter/nf_conntrack_max
[root@localhost ~]#cat /proc/sys/net/netfilter/nf_conntrack_max

3.11 保存规则

使用 iptables 命令定义的规则,手动删除之前,其生效期限为 kernel 存活期限

持久保存规则:

CentOS 7,8

#文件路径自定义
iptables-save > /PATH/TO/SOME_RULES_FILE

CentOS 6

#将规则覆盖保存至/etc/sysconfig/iptables文件中
service iptables save

加载规则:

CentOS 7,8 重新载入预存规则文件中规则

iptables-restore < /PATH/FROM/SOME_RULES_FILE
#再重新导回来
iptables-restore选项
-n, --noflush:不清除原有规则
-t, --test:仅分析生成规则集,但不提交

CentOS 6

#会自动从/etc/sysconfig/iptables 重新载入规则
service iptables  restart

开机自动重载规则:

方法一:使用iptables-save

开机自启后原本的iptables规则无法自动保存,需要在开机自启前用脚本保存各个iptables命令;让此脚本开机后自动运行

[root@localhost ~]#iptables-save > /opt/iptables
[root@localhost ~]#vim ~/.basrc         #仅当前用户有效
iptables-restore < /opt/iptables

或者
[root@localhost ~]#vim /etc/profile     #对当前系统所有用户有效
iptables-restore < /opt/iptables

或者
[root@localhost ~]#vim /etc/rc.d/rc.local    #对当前系统所有用户有效
iptables-restore < /opt/iptables
[root@localhost ~]#chmod +x /etc/rc.d/rc.local

方法二:使用iptables-services软件

#安装iptables-services工具
[root@centos7 ~]#yum -y install iptables-services
#iptables{,.bak} iptables 备份成 iptables.bak
[root@centos7 ~]#cp /etc/sysconfig/iptables{,.bak}
#保存现在的规则到文件中方法一
[root@centos7 ~]#/usr/libexec/iptables/iptables.init save
#保存现在的规则到文件中方法二
[root@centos7 ~]#iptables-save > /etc/sysconfig/iptables
#开机启动
[root@centos7 ~]#systemctl enable iptables.service

3.12 规则优化

  • 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条,效率更高
  • 谨慎放行入站的新请求
  • 有特殊目的限制访问功能,要在放行规则之前加以拒绝
  • 同类规则(访问同一应用,比如:http ),匹配范围小的放在前面,用于特殊处理
  • 不同类的规则(访问不同应用,一个是http,另一个是mysql ),匹配范围大的放在前面,效率更高
  • 应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量,提高检查效率
  • 设置默认策略,建议白名单(只放行特定连接)

①iptables -P,不建议,容易出现“自杀现象”

②规则的最后定义规则做为默认策略,推荐使用,放在最后一条

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全网最详细的从0到1的turbo pnpm monorepo的前端工程化项目[搭建篇]

全网最详细的从0到1的turbo pnpm monorepo的前端工程化项目[搭建篇] 引言相关环境技术栈初始化工程安装turbo配置pnpm-workspace安装husky安装lint-staged安装eslint安装prettier配置 .editorconfig配置 .gitignore初步项目结构结语 引言 最近各种原因&#xff0c;生活上的&am…

PHP支持的伪协议

php.ini参数设置 在php.ini里有两个重要的参数allow_url_fopen、allow_url_include。 allow_url_fopen:默认值是ON。允许url里的封装协议访问文件&#xff1b; allow_url_include:默认值是OFF。不允许包含url里的封装协议包含文件&#xff1b; 各协议的利用条件和方法 php:/…

机器人内部传感器-位置传感器-电位器式位置传感器

位置传感器 位置感觉是机器人最基本的感觉要求&#xff0c;可以通过多种传感器来实现。位置传感器包括位置和角度检测传感器。常用的机器人位置传感器有电位器式、光电式、电感式、电容式、霍尔元件式、磁栅式及机械式位置传感器等。机器人各关节和连杆的运动定位精度要求、重…

【Java】图解 JVM 垃圾回收(一):GC 判断策略、引用类型、垃圾回收算法

图解 JVM 垃圾回收&#xff08;一&#xff09; 1.前言1.1 什么是垃圾1.2 内存溢出和内存泄漏 2.垃圾回收的定义与重要性3.GC 判断策略3.1 引用计数算法3.2 可达性分析算法 4.引用类型5.垃圾回收算法5.1 标记-复制&#xff08;Copying&#xff09;5.2 标记-清除&#xff08;Mark…

Diffusion Model——扩散模型

Diffusion Model 文章目录 Diffusion ModelDenoising Diffusion Probabilistic Model(DDPM)去噪过程&#xff1a;Denoise结构训练过程Text-to-image Generation Model High Resolution Image Synthesis With_Latent Diffusion Models (Stable Diffusion)基本结构与推理过程Text…

【OpenAI Sora】 最强文生视频怎么用-新手小白必看教程

1. Sora 是什么AI 2024年2月16日&#xff0c;OpenAI在其官网上面正式宣布推出文本生成视频的大模型 Sora。 Sora能够根据简单的文本描述&#xff0c;生成高达60秒的高质量视频&#xff0c;使得视频创作变得前所未有的简单和高效。本文将为您提供关于如何使用Sora的最新详细教程…

Days 34 ElfBoard 音频接口

音频接口介绍 音频模块采用了 NAU88C22 芯片&#xff0c;芯片数据信号使用 I2S 接口进行通讯&#xff0c;主要信号功能&#xff1a; SAI_MCLK&#xff1a;音频信号主时钟&#xff1b; SAI_BCLK&#xff1a;音频信号位时钟&#xff1b; SAI_SYNC&#xff1a;左右声道控制信号&am…

OpenAI重磅发布Sora——首个视频生成模型:利用文本-视频人工智能将想象变为现实

想象一下&#xff0c;现在你有一段文本话描述的故事&#xff0c;通过输入这段文本&#xff0c;就可以立刻展开一个生动详细的视频。这就是 OpenAI 神奇的 Sora&#xff0c;一个革命性的文本到视频的 AI 模型。Sora于2024年2月推出&#xff0c;凭借其仅凭文字提示就能生成现实和…

天锐绿盾 | 办公终端文件数据\资料防泄密软件

天锐绿盾是一款电脑文件防泄密软件&#xff0c;旨在帮助企业保护其敏感数据免受未经授权的访问和泄露。该软件采用先进的加密技术和文件监控机制&#xff0c;确保企业数据在存储、传输和使用过程中的安全性。 PC地址&#xff1a;https://isite.baidu.com/site/wjz012xr/2eae091…

【计算机网络】P2P应用

将会在两个例子中得出结果 1&#xff0c;对等文件分发 &#xff1b;2&#xff0c;大型对等方社区中的服务器 P2P文件分发 自拓展性 直接成因是&#xff1a;对等方除了是比特的消费者外还是它们的重新分发者BitTorrent 一个用于文件分发的P2P协议洪流 torrent 参与一个特定文件…

吴恩达机器学习全课程笔记第二篇

目录 前言 P31-P33 logistics &#xff08;逻辑&#xff09;回归 决策边界 P34-P36 逻辑回归的代价函数 梯度下降的实现 P37-P41 过拟合问题 正则化代价函数 正则化线性回归 正则化logistics回归 前言 这是吴恩达机器学习笔记的第二篇&#xff0c;第一篇笔记请见&…

HQChart实战教程69-分时图主图如何设置指标

HQChart实战教程69-分时图主图如何设置指标 效果图插件地址uniapp插件地址HQChart插件源码地址实现步骤1. 分时图主图指标2. 主图指标标题3. 切换指标示例源码效果图 在主图窗口,显示指标,并显示指标标题。效果入下图 H5,小程序, uniapp 都支持。插件最新版本才支持此功能。…

线程安全性的原理分析学习

初步认识Volatile 一段代码引发的思考 下面这段代码&#xff0c;演示了一个使用volatile以及没使用volatile这个关键字&#xff0c;对于变量更新的影响 package com.sp.demo;/*** author : lssffy* Description :* date : 2024/2/16 18:42*/ public class VolatileDemo {publi…

Linux第52步_移植ST公司的linux内核第4步_关闭内核模块验证和log信息时间戳_编译_并通过tftp下载测试

1、采用程序配置关闭“内核模块验证” 默认配置文件“stm32mp1_atk_defconfig”路径为“arch/arm/configs”; 使用VSCode打开默认配置文件“stm32mp1_atk_defconfg”&#xff0c;然后将下面的4条语句屏蔽掉&#xff0c;如下&#xff1a; CONFIG_MODULE_SIGy CONFIG_MODULE_…

2024/2/18:IO进程线程

作业1&#xff1a;使用fgets统计给定文件的行数 代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, const char *argv[]) {//定义FILE *类型的句柄FILE *fpNULL;//判断是否进行了外部传参if(argc ! 2){pri…

Javaweb之SpringBootWeb案例之AOP通知顺序的详细解析

3.2 通知顺序 讲解完了Spring中AOP所支持的5种通知类型之后&#xff0c;接下来我们再来研究通知的执行顺序。 当在项目开发当中&#xff0c;我们定义了多个切面类&#xff0c;而多个切面类中多个切入点都匹配到了同一个目标方法。此时当目标方法在运行的时候&#xff0c;这多…

防御第五次作业

拓扑图及要求 1 创建安全区域 创建nat策略 测试 2 创建目标nat 测试 3 配置双向nat 配置IP 测试 查看会话表 4 FW1 FW3 结果 5 办公区限流 销售部限流 6 7

【每天学习一点点 day04】工程化 npm create 脚手架 create-vue, vue-cli 执行原理① - npm cli

希望我们每个人都能找到属于自己的花期&#xff0c;不急不躁&#xff0c;静等风来。 今天打算用 Docusaurus 开始搭建自己的知识库&#xff0c;之前早已有此想法&#xff0c;遗憾的是没有坚持下来。 这次借助这个机会&#xff0c;也计划将自己【每天学习一点点】系列整理在自己…

Windows编程环境配置!

喜欢的话麻烦大家多点点关注&#xff0c;谢谢&#xff01; 原文地址&#xff1a;Windows编程环境配置&#xff01; - Pleasure的博客 下面是正文内容&#xff1a; 前言 近期闲来无事&#xff0c;就想着把Windows系统中的环境给完善整理一下。方便后续码字时的不时之需。 正文…

keep-alive 的简单使用

vue-router 的嵌套与模块化 router 实例中增加 children 属性&#xff0c;形成层级效果。App.vue 中的 router-view 承载的是 router 实例最外层的路由对象&#xff0c;如 /login、/404 等PageHome.vue 中的 router-view 承载的是 children 中的路由对象&#xff0c;如 /home、…