Linux防火墙与iptables五表五链规则介绍

目录

一、防火墙基本认识

1. 安全技术

2. 防火墙分类

3. 防火墙工具介绍

二、iptables

1. 概述

2. 五表五链

3. 语法

3.1 基本语法

3.2 语法总结

4. 管理选项

5. 通用匹配

6. 控制类型

7. iptables应用

7.1 新增防火墙规则

7.2 查看规则表

7.3 黑白名单

7.4 替换、删除、清空规则

7.5 设置默认策略

8. 自定义链 

8.1 创建自定义链

8.2 改名 

8.3 自定义链添加规则

8.4 使用自定义链

8.5 删除自定义链 

9. 隐含扩展模块

9.1 TCP模块

9.2 ICMP模块

10. 显示扩展模块

10.1 multiport扩展(混合端口)

10.2 iprange扩展

10.3 mac地址

10.4 string 字符串

10.5 time模块

10.6 connlimit扩展 

10.7 limit模块(限制流量)

10.8 state模块


一、防火墙基本认识

1. 安全技术

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

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

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

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

2. 防火墙分类

按保护范围划分:

  • 主机防火墙:服务范围为当前一台主机
  • 网络防火墙:服务范围为防火墙一侧的局域网

按实现方式划分:

  • 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为, 山石hillstone,天融信,启明星辰,绿盟,深信服, PaloAlto , fortinet, Cisco, Checkpoint, NetScreen(Juniper2004年40亿美元收购)等
  • 软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA --> Forefront

按网络协议划分:

  • 网络层防火墙:OSI模型下四层,又称为包过滤防火墙
  • 应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层

3. 防火墙工具介绍

① iptables:iptables是Linux中最常用的防火墙工具之一。它基于内核的Netfilter框架,可以配置规则集来过滤、转发和修改网络数据包。iptables提供了广泛的功能和灵活性,可以根据源IP地址、目标IP地址、端口号等多个参数进行过滤。

② firewalld:firewalld是Red Hat系列Linux发行版中默认的防火墙管理工具。它使用了D-Bus接口和动态防火墙规则,支持更高级的网络配置。firewalld通过定义“区域”和“服务”来管理网络连接,并且可以实时更新规则而无需重启防火墙。

③ nftables:nftables是Netfilter框架的下一代替代品。它提供了更简洁和高效的语法,支持类似于iptables的过滤、NAT和连接跟踪功能。nftables的目标是取代iptables,并提供更好的性能和可扩展性。

二、iptables

1. 概述

属于“用户态”(User Space, 又称为用户空间)的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。 netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。

2. 五表五链

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

五个表table:filter、nat、mangle、raw、security(用的较少)

  • raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度(跟踪数据包)
  • mangle:修改数据标记位规则表(标记数据包)
  • nat:network address translation 地址转换,公网和私网的地址转换
  • filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表(允许、拒绝)
  • security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现 (了解)

优先级由高到低的顺序为:security -->raw-->mangle-->nat-->filter

五个链chain:input、output、forward、postrouting、prerouting

  • input: 处理入站数据
  • output:处理出站数据
  • forward:转发数据
  • prerouting:处理路由选择前数据
  • postrouting:处理路由选择后数据

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

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

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

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

三种报文流向:

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

3. 语法

3.1 基本语法

iptables [-t 表名] -管理选项 [链表] [通用规则匹配] [-j 控制类型]#不指定默认filter表

3.2 语法总结

4. 管理选项

在使用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看链的所有规则或者某个链的规则/某个具体规则后面跟编号

5. 通用匹配

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

  • 协议匹配: -p协议名
  • 地址匹配: -s 源地址、-d目的地址。可以是IP、网段、域名、空(任何地址)
  • 接口匹配: -i入站网卡、-o出站网卡  
iptables -I INPUT -p icmp -j DROP
iptables -A FORWARD ! -p icmp -j ACCEPT       #感叹号”!”表示取反

6. 控制类型

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

  • - ACCEPT:允许数据包通过
  • - DROP:直接丢弃数据包,不给出任何回 应信息 
  • - REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息
  • - LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则
  • - SNAT:修改数据包的源地址
  • - DNAT:修改数据包的目的地址
  • - MASQUERADE:伪装成一个非固定公网IP地址

7. iptables应用

iptables是Linux中最常用的防火墙工具之一,它基于内核的Netfilter框架。iptables可以通过配置规则集来过滤、转发和修改网络数据包,从而保护计算机系统免受网络攻击。

7.1 新增防火墙规则

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

示例:

[root@localhost ~]# systemctl stop firewalld.service
#需要关闭firewalld.service防火墙服务
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j DROP
#建立iptables防火墙规则:指定filter规则表,添加INPUT链规则,规定icmp协议控制拒绝;即拒绝来自任意主机的icmp包,禁止ping本机,这里省略了-s 源地址,也就是所有。
[root@localhost ~]# iptables -A INPUT -s 192.168.190.101 -p tcp --dport 22 -j ACCEPT
#允许来自192.168.192.168主机访问本机的22端口,这里省略了-t filter,不指定认filter表。[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 19 packets, 1156 bytes)pkts bytes target     prot opt in     out     source               destination         0     0 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0           0     0 ACCEPT     tcp  --  *      *       192.168.190.101      0.0.0.0/0            tcp dpt:22
[root@localhost ~]# iptables -I INPUT 2 -s 192.168.190.101 -j ACCEPT 
#在链表第条二插入规则
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 8 packets, 488 bytes)pkts bytes target     prot opt in     out     source               destination                    0     0 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0 0     0 ACCEPT     all  --  *      *       192.168.190.101      0.0.0.0/0          0     0 ACCEPT     tcp  --  *      *       192.168.190.101      0.0.0.0/0            tcp dpt:22

7.2 查看规则表

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

iptables [-t表名] -v -n -L [链名] [-- line-numbers]
  • -v:详细信息
  • -n:规则
  • -L: 规则列表

注意:L必须写在最后 

示例:

[root@localhost ~]# iptables -vnL                      #查看全部规则
Chain INPUT (policy ACCEPT 367 packets, 27100 bytes)pkts bytes target     prot opt in     out     source               destination         0     0 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0           0     0 ACCEPT     tcp  --  *      *       192.168.190.100      0.0.0.0/0            tcp dpt:22Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 247 packets, 25974 bytes)pkts bytes target     prot opt in     out     source               destination 
[root@localhost ~]# iptables -t filter -vnL INPUT 2    #指定查看filter表INPUT链第二条规则0     0 ACCEPT     tcp  --  *      *       192.168.190.100      0.0.0.0/0            tcp dpt:22[root@localhost ~]# iptables -vnL --line-numbers
#查看filter表INPUT链规则编号
Chain INPUT (policy ACCEPT 38 packets, 2220 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
2        0     0 ACCEPT     tcp  --  *      *       192.168.190.100      0.0.0.0/0 

7.3 黑白名单

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

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

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

如何制作白名单提高安全性且不影响使用iptables -F命令?

[root@localhost ~]# iptables -A INPUT -s 192.168.190.1 -j ACCEPT 
[root@localhost ~]# iptables -A INPUT -j DROP
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         29  1716 ACCEPT     all  --  *      *       192.168.190.1        0.0.0.0/0           0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 13 packets, 1000 bytes)pkts bytes target     prot opt in     out     source               destination 
#在最后加入一条拒绝所有入站数据的规则

注意:需要在拒绝所有入站数据规则前加上自己想要访问地址的规则。最后一条规则在这里可以实现既是白名单也是黑名单。

7.4 替换、删除、清空规则

[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 10 packets, 612 bytes)pkts bytes target     prot opt in     out     source               destination         0     0 ACCEPT     all  --  *      *       192.168.190.101      0.0.0.0/0           0     0 DROP       all  --  *      *       192.168.190.102      0.0.0.0/0           0     0 ACCEPT     all  --  *      *       192.168.190.102      0.0.0.0/0 [root@localhost ~]# iptables -R INPUT 3 -s 192.168.190.102 -j DROP
#修改、替换某一条规则需要在链后指定序号
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 8 packets, 488 bytes)pkts bytes target     prot opt in     out     source               destination         0     0 ACCEPT     all  --  *      *       192.168.190.101      0.0.0.0/0           0     0 DROP       all  --  *      *       192.168.190.102      0.0.0.0/0           0     0 DROP       all  --  *      *       192.168.190.102      0.0.0.0/0 [root@localhost ~]# iptables -D INPUT -s 192.168.190.102 -j DROP 
#按内容删除,若遇到内容相同的规则,默认删除序号最小的那条
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 8 packets, 488 bytes)pkts bytes target     prot opt in     out     source               destination         0     0 ACCEPT     all  --  *      *       192.168.190.101      0.0.0.0/0           0     0 DROP       all  --  *      *       192.168.190.102      0.0.0.0/0  [root@localhost ~]# iptables -D INPUT 2
#按编号删除
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 10 packets, 612 bytes)pkts bytes target     prot opt in     out     source               destination         0     0 ACCEPT     all  --  *      *       192.168.190.101      0.0.0.0/0   [root@localhost ~]# iptables -F
#清空filter规则
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 6 packets, 364 bytes)pkts bytes target     prot opt in     out     source               destination 

清空指定链或表中的所有防火墙规则,使用管理选项“-F”。例如,若要清空 filter 表 INPUT:iptables -F INPUT即可。

注意:

  • 若规则列表中有多条相同的规则时,按内容匹配只删除的序号最小的一条
  • 按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错
  • 按内容匹配删数时,确保规则存在,否则报错

7.5 设置默认策略

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

[root@localhost ~]# iptables -P INPUT DROP
#默认清除所有规则,输入后没显示无法远程连接,因为INPUT链只剩下DROP,默认拒绝所有
[root@localhost ~]# iptables -A INPUT -s 192.168.190.1 -p tcp -j ACCEPT
#添加远程访问规则 
[root@localhost ~]# iptables -vnL
Chain INPUT (policy DROP 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         50  5302 ACCEPT     tcp  --  *      *       192.168.190.1        0.0.0.0/0  

设置回环网卡允许访问规则:可以连通本机所有网卡

[root@localhost ~]# iptables -A INPUT -s 192.168.190.1 -j ACCEPT 
[root@localhost ~]# iptables -A INPUT -s 192.168.190.0/24 -j REJECT 
[root@localhost ~]# iptables -A INPUT -s 172.19.8.0/24 -j REJECT 
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         249 18736 ACCEPT     all  --  *      *       192.168.190.1        0.0.0.0/0           0     0 REJECT     all  --  *      *       192.168.190.0/24     0.0.0.0/0            reject-with icmp-port-unreachable0     0 REJECT     all  --  *      *       172.19.8.0/24        0.0.0.0/0            reject-with icmp-port-unreachable测试连通性,无法ping通:
[root@localhost ~]# ping 192.168.190.100
PING 192.168.190.100 (192.168.190.100) 56(84) bytes of data.
[root@localhost ~]# ping 172.19.8.211
PING 172.19.8.211 (172.19.8.211) 56(84) bytes of data.添加允许流量进入本机回环网卡,并测试连通性:
[root@localhost ~]# iptables -I INPUT 2 -i lo -j ACCEPT
[root@localhost ~]# ping 192.168.190.100
PING 192.168.190.100 (192.168.190.100) 56(84) bytes of data.
64 bytes from 192.168.190.100: icmp_seq=1 ttl=64 time=0.035 ms
[root@localhost ~]# ping 172.19.8.211
PING 172.19.8.211 (172.19.8.211) 56(84) bytes of data.
64 bytes from 172.19.8.211: icmp_seq=1 ttl=64 time=0.038 ms

8. 自定义链 

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

8.1 创建自定义链

格式:

iptables -N CUSTOM_CHAIN_NAME

示例:

[root@localhost ~]# iptables -N web
[root@localhost ~]# iptables -vnL
Chain web (0 references)pkts bytes target     prot opt in     out     source               destination

8.2 改名 

[root@localhost ~]# iptables -E web WEB
[root@localhost ~]# iptables -vnL
Chain WEB (0 references)pkts bytes target     prot opt in     out     source               destination

8.3 自定义链添加规则

[root@localhost ~]# iptables -A WEB -p tcp -m multiport --dport 80,443 -j ACCEPT 
[root@localhost ~]# iptables -A WEB -p tcp --dport 8080 -j ACCEPT
[root@localhost ~]# iptables -vnL
Chain WEB (0 references)pkts bytes target     prot opt in     out     source               destination         0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 80,4430     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080

8.4 使用自定义链

[root@localhost ~]# iptables -A INPUT -s 192.168.190.101 -j WEB
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination0     0 WEB        all  --  *      *       192.168.190.101      0.0.0.0/0 

8.5 删除自定义链 

[root@localhost ~]# iptables -X WEB

9. 隐含扩展模块

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

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

9.1 TCP模块

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

端口号: 

[!] --source-port, --sport port[:port]:匹配报文源端口,可为端口连续范围
[!] --destination-port,--dport port[:port]:匹配报文目标端口,可为连续范围

--sport  指明源端口,使用格式: --sport  端口或 端口1:端口2(端口1到端口2的连续端口范围指定)。

[root@localhost ~]#iptables -A INPUT -p tcp  --sport 10000:30000 -j REJECT 
#端口10000到30000全部拒绝

--dport  指明目的端口,使用格式: --dport  端口或 端口1:端口2(端口1到端口2的连续端口范围指定)。 

[root@localhost ~]# iptables -A INPUT -p -s 192.168.190.0/24 --dport 80 -j ACCEPT
#允许192.168.91段访问80端口

示例:拒绝目标端口为80的tcp协议流量

192.168.19.100:
[root@localhost ~]# iptables -t filter -A INPUT -m tcp -p tcp --dport 80 -j REJECT 
#拒绝所有目标端口为80的TCP协议数据包的输入流量,并且该规则适用于filter表。协议名和模块名重复,这里- m模块可以省略。192.168.190.101:
[root@localhost ~]# curl 192.168.190.100:80
curl: (7) Failed connect to 192.168.190.100:80; 拒绝连接
[root@localhost ~]# ssh root@192.168.190.100
The authenticity of host '192.168.190.100 (192.168.190.100)' can't be established.
ECDSA key fingerprint is SHA256:6+8qeJTs9OwWCvFNtomXsQvrfb+no8F3moR0oliq7QU.
ECDSA key fingerprint is MD5:3b:d2:42:d9:c3:03:ba:ac:18:2c:e0:03:a3:c7:bd:ba.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.190.100' (ECDSA) to the list of known hosts.
root@192.168.190.100's password: 
Last login: Sat Feb  3 22:51:26 2024 from 192.168.190.100

示例:拒绝ip192.168.190.101目标端口为20到80的tcp协议流量

192.168.190.100:
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22:80 -s 192.168.190.101 -j REJECT 
##拒绝192.168.190.101目标端口为20到80的TCP协议数据包的输入流量192.168.190.101:
[root@localhost ~]# curl 192.168.190.100:80
curl: (7) Failed connect to 192.168.190.100:80; 拒绝连接
[root@localhost ~]# ssh root@192.168.190.100
ssh: connect to host 192.168.190.100 port 22: Connection refused
#ssh协议用的是22端口,这里拒绝了22-80所有的端口

注意:--sport和--dport 必须配合-p <协议类型>使用  

握手连接: 

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

--tcp-flags SYN,ACK,FIN,RST SYN 
#表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0,第一次握手
--tcp-flags FIN,RST SYN,ACK 
#第二次握手
--tcp-flags ALL ALL        //6给位置全为1(不可能)
--tcp_flags ALL NONE       //6给位置全为0(不可能)
#错误包,代表流量有问题--syn:用于匹配第一次握手,相当于:--tcp-flags SYN,ACK,FIN,RST SYN

示例:拒绝第一次握手,即无法建立tcp连接

192.168.190.100:
[root@localhost ~]# iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -s 192.168.190.101 -j REJECT
#拒绝三次握手第一次握手,即拒绝所有tcp协议的连接192.168.190.101:
[root@localhost ~]# curl 192.168.190.100:80
curl: (7) Failed connect to 192.168.190.100:80; 拒绝连接
[root@localhost ~]# ssh root@192.168.190.100
ssh: connect to host 192.168.190.100 port 22: Connection refused

9.2 ICMP模块

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

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

示例:192.168.190.100可以单向ping通192.168.190.101

思路:100ping101,100发送8包,101发送0包;反之,101发送8包,100发送0包。这里只需要禁止来自101的8包即可达到目标。

192.168.190.100:
[root@localhost ~]# iptables -A INPUT -s 192.168.190.101 -p icmp --icmp-type 8 -j REJECT
#拒绝源地址192.168.190.100的icmp协议类型为8的包
[root@localhost ~]# ping 192.168.190.101
PING 192.168.190.101 (192.168.190.101) 56(84) bytes of data.
64 bytes from 192.168.190.101: icmp_seq=1 ttl=64 time=0.727 ms
64 bytes from 192.168.190.101: icmp_seq=2 ttl=64 time=1.35 ms
64 bytes from 192.168.190.101: icmp_seq=3 ttl=64 time=1.05 ms192.168.190.101:
[root@localhost ~]# ping 192.168.190.100
PING 192.168.190.100 (192.168.190.100) 56(84) bytes of data.
From 192.168.190.100 icmp_seq=1 Destination Port Unreachable
From 192.168.190.100 icmp_seq=2 Destination Port Unreachable
From 192.168.190.100 icmp_seq=3 Destination Port Unreachable

当然也可以禁止100OUTPUT0包实现目标:

191.168.190.100:
[root@localhost ~]# iptables -A OUTPUT -d 192.168.190.101 -p icmp --icmp-type 0 -j REJECT 
#禁止给目标地址发送icmp协议类型为0的包
[root@localhost ~]# ping 192.168.190.101
PING 192.168.190.101 (192.168.190.101) 56(84) bytes of data.
64 bytes from 192.168.190.101: icmp_seq=1 ttl=64 time=0.861 ms
64 bytes from 192.168.190.101: icmp_seq=2 ttl=64 time=1.99 ms192.168.190.101:
[root@localhost ~]# ping 192.168.190.100
PING 192.168.190.100 (192.168.190.100) 56(84) bytes of data.

10. 显示扩展模块

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

10.1 multiport扩展(混合端口)

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

选项: 

[!] --source-ports,--sports port[,port|,port:port]...
#指定多个源端口 逗号隔开
[!] --destination-ports,--dports port[,port|,port:port]...
# 指定多个目标端口 逗号隔开
[!] --ports port[,port|,port:port]...
#多个源或目标端

示例:使用混合模块控制多个端口

192.168.190.100:
[root@localhost ~]# iptables -A INPUT -s 192.168.190.101 -p tcp -m multiport --dport 22,80 -j REJECT 
#拒绝来自源地址为192.168.190.101tcp协议(multiport混合模块)目的端口为22和80的流量192.168.190.101:
[root@localhost ~]# ssh root@192.168.190.100
ssh: connect to host 192.168.190.100 port 22: Connection refused
[root@localhost ~]# curl 192.168.190.100:80
curl: (7) Failed connect to 192.168.190.100:80; 拒绝连接

10.2 iprange扩展

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

[!] --src-range from[-to] 源IP地址范围
[!] --dst-range from[-to] 目标IP地址范围

示例:拒绝来自192.168.190.101-103所有的流量

192.168.190.100:
[root@localhost ~]# iptables -A INPUT -m iprange --src-range 192.168.190.101-192.168.190.103 -j REJECT 192.168.190.101:
[root@localhost ~]# ping 192.168.190.100
PING 192.168.190.100 (192.168.190.100) 56(84) bytes of data.
From 192.168.190.100 icmp_seq=1 Destination Port Unreachable
From 192.168.190.100 icmp_seq=2 Destination Port Unreachable192.168.190.102:
[root@localhost ~]# ping 192.168.190.100
PING 192.168.190.100 (192.168.190.100) 56(84) bytes of data.
From 192.168.190.100 icmp_seq=1 Destination Port Unreachable

10.3 mac地址

mac模块可以指明源MAC地址进行控制。

-m   mac   --mac-source XX:XX:XX:XX:XX:XX    源

示例:根据192.168.190.101mac地址控制流量

192.168.190.100:
[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:62:c7:6d -j REJECT
#拒绝mac地址为00:0c:29:62:c7:6d的所有流量192.168.190.101:
[root@localhost ~]# ping 192.168.190.100
PING 192.168.190.100 (192.168.190.100) 56(84) bytes of data.
From 192.168.190.100 icmp_seq=1 Destination Port Unreachable
From 192.168.190.100 icmp_seq=2 Destination Port Unreachable
[root@localhost ~]# curl 192.168.190.100:80
curl: (7) Failed connect to 192.168.190.100:80; 拒绝连接
[root@localhost ~]# ssh root@192.168.190.100
ssh: connect to host 192.168.190.100 port 22: Connection refused

10.4 string 字符串

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

选项: 

--algo {bm|kmp} 字符串匹配检测算法
 bm:Boyer-Moore           算法
 kmp:Knuth-Pratt-Morris   算法

--from offset 开始查询的地方
--to offset   结束查询的地方
[!] --string pattern 要检测的字符串模式
[!] --hex-string pattern要检测字符串模式,16进制格式

mac + ip + 协议/端口号 = 62 真

示例:

192.168.190.100:
[root@localhost html]# echo "www.baidu.com" > /var/www/html/baidu.html
[root@localhost html]# echo "www.bilibili.com" > /var/www/html/bilibili.html
192.168.190.101:
[root@localhost ~]# curl 192.168.190.100/baidu.html 
www.baidu.com
[root@localhost ~]# curl 192.168.190.100/bilibili.html 
www.bilibili.com192.168.190.100:
[root@localhost html]# iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "bilibili" -j REJECT
#http协议即tcp协议,源端口为80,使用字符模块,利用bm算法从第62个字节开始检查字符串为bilibili
#注意请求的包不带字符,回复的包带字符所以要output192.168.190.101:
[root@localhost ~]# curl 192.168.190.100/baidu.html 
www.baidu.com
[root@localhost ~]# curl 192.168.190.100/bilibili.html 
^C

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指定本地时区(默认)

192.168.190.100:
[root@localhost ~]# date -u
2024年 02月 04日 星期日 06:21:31 UTC
[root@localhost ~]# iptables -A INPUT -p tcp -s 192.168.190.101 --dport 22 -m time --timestart 06:00 --timestop 18:00  --weekdays 6,7 -j REJECT
#拒绝源地址192.168.190.101在周末6点到18点访问tcp协议22端口192.1168.190.101:
[root@localhost ~]# ssh root@192.168.190.100
ssh: connect to host 192.168.190.100 port 22: Connection refused

10.6 connlimit扩展 

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

选项: 

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

 示例:限制tcp协议80端口最大连接数

192.168.190.100:
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT
#针对TCP协议的目标端口80,使用connlimit扩展模块限制并发连接数不超过2个,并且对超过限制的连接进行拒绝处理。192.168.190.101:
[root@localhost opt]# gcc flood_connect.c -o flood
#编译安装黑客文件
[root@localhost opt]# ./flood 192.168.190.100
#运行黑客脚本192.168.190.100:
[root@localhost ~]# ss -natp | grep 80
LISTEN     0      128         :::80                      :::*                   users:(("httpd",pid=1877,fd=4),("httpd",pid=1876,fd=4),("httpd",pid=1875,fd=4),("httpd",pid=1874,fd=4),("httpd",pid=1873,fd=4),("httpd",pid=1871,fd=4))
SYN-RECV   0      0        0:0:200:::80                   ::eb47:ba37:ec47:ba37:34884              
SYN-RECV   0      0       400::100:0:80                    ::80:0:d80:0:34882 192.168.190.101:
[root@localhost opt]# ./flood 192.168.190.100
Starting flood connect attack on 192.168.190.100 port 80
^CAborted (made 2 successful connects)
#只有两个成功

10.7 limit模块(限制流量)

iptables防火墙的 limit 模块用于限制特定类型的数据包的数量。它可以用于防止DDoS攻击或限制特定类型的流量。

选项:

--limit rate: 指定限制的速率,例如,--limit 10/minute表示每分钟允许的数据包数量为10个
--limit-burst number: 指定允许的突发连接数,例如,--limit-burst 5表示允许5个数据包的突发连接
--limit-mode mode: 指定限制模式,可选的模式有upstream、downstream和srcip. 默认为srcip,表示限制来自单个源IP地址的数据包数量
--limit-upto bytes: 用于限制数据包的大小,超出这个大小的数据包将被丢弃

示例:限制允许通过包,拒绝私有,规则组合

192.168.190.100:
[root@localhost ~]# iptables -A INPUT -s 192.168.190.101 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
#限制系统接收到的ping请求的数量,每分钟不超过10个,允许出现最多5个突发连接。超出这个限制的ping请求将被丢弃。
[root@localhost ~]# iptables -A INPUT  -p icmp -j REJECT
#拒绝所有

192.168.190.101长ping101:

小结: 

这两条iptables规则的组合将实现对ICMP (Internet Control Message Protocol) 数据包的限制和拒绝处理。这种组合使用的目的是限制某种类型的ICMP数据包的流量,避免可能的滥用或拒绝服务攻击,并对超过限制的数据包进行拒绝。同时,通过限制和拒绝结合的方式,可以灵活地处理不同情况下的ICMP数据包。 

10.8 state模块

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

格式:

-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            #新用户拒绝

状态类型:

  • NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
  • ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
  • RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
  • INVALID:无效的连接,如flag标记不正确
  • UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪

常用选项介绍:

--state:指定要匹配的连接状态列表,如--state NEW,ESTABLISHED
--ctstate:与--state选项类似,用于指定要匹配的连接状态列表。与--state选项不同的是,--ctstate选项允许更精确的匹配,特别在使用连接跟踪模块来管理连接状态时非常有用。例如,--ctstate NEW,ESTABLISHED表示仅匹配连接跟踪状态为新建或已建立的数据包
--state INVALID:匹配无效的数据包,这些数据包不符合协议规范或防火墙状态跟踪出错
--state NEW:匹配新建的连接请求数据包
--state ESTABLISHED:匹配已建立的连接,属于已通过的数据包
--state RELATED:匹配与已建立的连接相关的数据包。例如,FTP的数据传输就属于相关的数据包 

 示例:

192.168.190.100:
[root@localhost ~]# iptables -A INPUT -p icmp -s 192.168.190.101 -m state --state NEW -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp -m state --state NEW -j DROP
#允许来自IP地址为192.168.1.100的源IP的TCP连接请求通过,同时拒绝其他任何新建连接的TCP数据包。192.168.190.101:
[root@localhost ~]# ping 192.168.190.100
PING 192.168.190.100 (192.168.190.100) 56(84) bytes of data.
64 bytes from 192.168.190.100: icmp_seq=1 ttl=64 time=0.710 ms
64 bytes from 192.168.190.100: icmp_seq=2 ttl=64 time=1.36 ms192.168.190.102:
[root@localhost ~]# ping 192.168.190.100
PING 192.168.190.100 (192.168.190.100) 56(84) bytes of data.
^C
--- 192.168.190.100 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4001ms

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

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

相关文章

C++ 调用lua 脚本

需求&#xff1a; 使用Qt/C 调用 lua 脚本 扩展原有功能。 步骤&#xff1a; 1&#xff0c;工程中引入 头文件&#xff0c;库文件。lua二进制下载地址&#xff08;Lua Binaries&#xff09; 2&#xff0c; 调用脚本内函数。 这里调用lua 脚本中的process函数&#xff0c;并…

canvas图片上设置镂空文字效果

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

C语言-3

定义指针 /*指针的概念:1.为了方便访问内存中的内容&#xff0c;给每一个内存单元&#xff0c;进行编号&#xff0c;那么我们称这个编号为地址&#xff0c;也就是指针。2.指针也是一种数据类型&#xff0c;指针变量有自己的内存&#xff0c;里面存储的是地址&#xff0c;也就是…

【HarmonyOS应用开发】APP应用的通知(十五)

相关介绍 通知旨在让用户以合适的方式及时获得有用的新消息&#xff0c;帮助用户高效地处理任务。应用可以通过通知接口发送通知消息&#xff0c;用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用&#xff0c;通知主要有以下使用场景&#xff1a; 显示接收…

BUGKU-WEB Simple_SSTI_1

02 Simple_SSTI_1 题目描述 没啥好说的~ 解题思路 进入场景后&#xff0c;显示&#xff1a; You need pass in a parameter named flag。ctrlu 查看源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…

代码随想录 Leetcode491. 非递减子序列

题目&#xff1a; 代码(首刷看解析 2024年2月3日&#xff09;&#xff1a; class Solution { private:vector<vector<int>> res;vector<int> path; public:void backtracking(vector<int>& nums, int startIndex) {if (path.size() > 1) {res.…

HSM加密机原理:密钥管理和加密操作从软件层面转移到物理设备中 DUKPT 安全行业基础8

HSM加密机原理 硬件安全模块&#xff08;HSM&#xff09;是一种物理设备&#xff0c;设计用于安全地管理、处理和存储加密密钥和数字证书。HSM广泛应用于需要高安全性的场景&#xff0c;如金融服务、数据保护、企业安全以及政府和军事领域。HSM提供了一种比软件存储密钥更安全…

Web html和css

目录 1 前言2 HTML2.1 元素(Element)2.1.1 块级元素和内联(行级)元素2.1.2 空元素 2.2 html页面的文档结构2.3 常见标签使用2.3.1 注释2.3.2 标题2.3.3 段落2.3.4 列表2.3.5 超链接2.3.6 图片2.3.7 内联(行级)标签2.3.8 换行 2.4 属性2.4.1 布尔属性 2.5 实体引用2.6 空格2.7 D…

vue3 之 组合式API—生命周期函数

vue3的生命周期API 生命周期函数基本使用 1️⃣导入生命周期函数 2️⃣执行生命周期函数 传入回调 <scirpt setup> import { onMounted } from vue onMounted(()>{// 组件挂载完毕mounted执行了 }) </script>执行多次 生命周期函数是可以执行多次的&#xff…

支持多字体、静动态的.NET图片验证码的开源项目

上次分享过 SkiaSharp 这个开源图形项目&#xff0c;并举了一个生成验证码的例子&#xff0c;具体见文章&#xff1a;《SkiaSharp&#xff1a;.NET强大而灵活的跨平台图形库》。 但文中验证码比较简单&#xff0c;刚好看到一个非常不错的图片验证码&#xff0c;分享给大家。 …

ChatGPT之搭建API代理服务

简介 一行Docker命令部署的 OpenAI/GPT API代理&#xff0c;支持SSE流式返回、腾讯云函数 。 项目地址&#xff1a;https://github.com/easychen/openai-api-proxy 这个项目可以自行搭建 OpenAI API 代理服务器工具&#xff0c;该项目是代理的服务器端&#xff0c;不是客户端。…

MySQL 用户管理

重点&#xff1a; 视图&#xff0c;函数&#xff0c;存储过程&#xff0c;触发器&#xff0c;事件&#xff08; 了解 &#xff09; 用户管理&#xff0c;密码管理 grant revoke 权限管理 MySQL 架构&#xff08; 了解 &#xff09; 存储引擎&#xff1a;MyISAM 和 InnoDB …

【JavaScript 漫游】【008】错误处理机制

文章简介 本文为【JavaScript 漫游】专栏的第 008 篇文章&#xff0c;记录了笔者所学习到的错误处理机制的所有知识点。 Error 实例对象原生错误类型&#xff0c;包括 SyntaxError、ReferenceError、RangeError、TypeError、URIError对象自定义错误throw 语句try...catch 结构…

【iOS ARKit】3D人体姿态估计实例

与2D人体姿态检测一样&#xff0c;在ARKit 中&#xff0c;我们不必关心底层的人体骨骼关节点检测算法&#xff0c;也不必自己去调用这些算法&#xff0c;在运行使用 ARBodyTrackingConfiguration 配置的 ARSession 之后&#xff0c;基于摄像头图像的3D人体姿态估计任务也会启动…

Python中的HTTP代理与网络安全

在当今数字化的世界里&#xff0c;网络安全已经成为我们无法忽视的重要议题。无数的信息在网络上传递&#xff0c;而我们的隐私和敏感数据也在这个过程中可能面临被窃取或滥用的风险。在Python编程中&#xff0c;HTTP代理作为一种工具&#xff0c;能够在网络安全方面发挥重要的…

docker重建镜像

DockerFile如下&#xff1a; FROM k8s-registry.qhtx.local/base/centos7-jdk8-haitong0704RUN yum -y update && yum install -y python3-devel && yum install -y python36 RUN mv /usr/bin/python /usr/bin/python_old RUN ln -s /usr/bin/python3 /usr/bi…

虹科技术|一文详解IO-Link Wireless技术如何影响工业无线自动化

导读&#xff1a;在工业无线自动化的飞速发展进程中&#xff0c;IO-Link Wireless技术成为了一项具有颠覆性的创新。它将IO-Link协议与无线连接完美结合&#xff0c;解决了传统通信技术在工业应用中的痛点。本文将深入解析IO-Link Wireless技术的原理、应用领域、优势以及实际案…

小华和小为的聚餐地点 - 华为OD统一考试

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C++ 题目描述 小华和小为是很要好的朋友,他们约定周末一起吃饭。 通过手机交流,他们在地图上选择了多个聚餐地点(由于自然地形等原因,部分聚餐地点不可达)。 求小华和小为都能到达的聚餐地点有多少个? 输入描述…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--强化学习、模仿学习、机器人

专属领域论文订阅 关注{晓理紫|小李子}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 如果你感觉对你有所帮助&#xff0c;请关注我&#xff0c;每日准时为你推送最新论文。 为了答谢各位网友的支持&#xff0c;从今日起…

WINDOWS搭建NFS服务器

下载并安装 Networking Software for Windows 启动配置 找到安装目录&#xff08;如C:\Program Files\nfsd&#xff09;&#xff0c;双击nfsctl.exe&#xff0c;菜单Edit->Preferences 启动后&#xff1a; 配置Export Exports->Edit exports file 其他的几句我都删除…