iptables原理及规则

bailandecheng bailandecheng     2023-01-12     152

关键词:

iptables简介和原理

我们先来了解以下社么是防火墙 

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

[ 防火墙的本质是对报文(包)进行过滤,通过过滤器对报文(包)按照特征来进行匹配,将匹配到的报文(包)进行处理,以此来进行过滤 ]

linux中真正实现防火墙功能的是netfilter,它是一个抽象的框架,提供了一套hook函数的管理机制,并以此来对数据包进行管理。iptables是用来在用户空间编写防火墙规则的工具,用户通过iptables以系统调用的方式来管理netfilter

在内核中的五个hook function(INPUTOUTPUTFORWARDPREROUTINGPOSTROUTING),这五个hook function被放在数据包流过协议栈的五个关键点,以此来对数据包进行检测和处理,而这五个hook function向用户开放,用户不能直接对内核中的hook function进行操作,但用户可以通过一个命令工具iptables向其写入规则,以系统调用的方式来将规则发送给hook function

 

以下是刚刚提到的五个hook function

NF_IP_PRE_ROUTING:刚刚进入网络层的数据包通过此点(刚刚进行完版本号,校验 和等检测),源地址转换在此点进行;IP_Input.cIP_Rcv调用;
NF_IP_LOCAL_IN:经路由查找后,送往本机的通过此检查点,INPUT包过滤在此点进行,IP_local_deliver中调用;
NF_IP_FORWARD:要转发的包通过此检测点,FORWORD包过滤在此点进行;
NF_IP_POST_ROUTING:所有马上便要通过网络设备出去的包通过此检测点,内置的目的地址转换功能(包括地址伪装)在此点进行;
NF_IP_LOCAL_OUT:本机进程发出的包通过此检测点,OUTPUT包过滤在此点进行。

 

了解完五个hook function,我们再来看看iptables的组成

iptables由五个表和五个链以及一些规则组成

hook function在执行规则时会一次性执行多条规则,hook执行的多条规则又按照所处的hook分为五个链,可以理解为hook所执行的为链,按照链中的规则从上至下以此执行。再把这些链按对数据包的操作或者功能分类,这样每个功能下会含有多个链,这样的一个功能类称为一个表,每个hook function中以链为单位存放。五个表中不是所有表都拥有五个链。

简单的来说hook function是框架,链是这个框架的内容,而表是链功能的划分。表和hook function是两个不同维度的东西。

 

接下来我们具体讨论以下表和链

五个表table

filter:过滤规则表,根据预定义的规则过滤符合条件的数据包

natnetwork address translation 地址转换规则表

mangle:修改数据标记位规则表

raw:关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度

security:(用户的自定义表)用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现

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

 

五个内置链chain

INPUT——进来的数据包应用此规则链中的策略
OUTPUT——外出的数据包应用此规则链中的策略
FORWARD——转发数据包时应用此规则链中的策略
PREROUTING——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
POSTROUTING——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

 

每个表所含有的链

filter:过滤器,防火墙 (INPUTEFORWARDOUTPUT

natnetwork address translationPREPOUTINGINPUTEOUTPUTPOSTROUTING

mangle:修改报文(PREROUTINGINPUTEFORWARDOUTPUTPOSTROUTING

raw:连接追踪功能(PREOUTINGOUTPUT

 

了解完这些组成,我们来看一下iptables具体是如何运作的

当数据包(报文)进入主机后会有三种情况:

 

流入本机:PREROUTING --> INPUT-->用户空间进程?

从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。

 

流出本机:用户空间进程 -->OUTPUT--> POSTROUTING?

防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

转发:PREROUTING --> FORWARD --> POSTROUTI

来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

 

知道了原理那我们该如何配置iptables呢,这就是iptables的规则

iptables规则

规则rule:根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理,规则分为匹配条件和处理动作两部分

注意:规则要添加在链上,才生效

匹配条件:默认为与条件,同时满足

基本匹配:IP

扩展匹配:通过复杂高级功能匹配(端口,TCPFlagsSYN,ACK等)),扩展匹配又分为隐式扩展(tcpudpicmp)和显式扩展(必须指定扩展模块进行 的扩展)

处理动作:称为target,跳转目标

内建处理动作:ACCEPT(通过),DROP(拒绝并丢弃数据包,不回应),REJECT(拒绝但 回应对方拒绝的信息),SNAT,DNATMASQUERADE,MARK,LOG...

自定义处理动作:自定义chain,利用分类管理复杂情形

 

iptables规则语法

 

iptables [选项]

-t :指定表(不写默认filter表)

规则管理

-Aadd,向规则链中添加规则(放在规则链的最后)

-Iinsert,向规则链中插入规则(如果不指定第几条则默认插入到第一条)

-D delete,删除规则链中的某规则

-R replace,替换规则链中的某规则

-Fflush,清空指定规则(不指定规则将清空正条连)

-Zzero,归零计数器(iptables的每条规则都有两个计数器,匹配到的报文的个数和匹配到的所有报文的大小)

规则查看

-Llist,列出一个链的规则,不指定链则会显示表中的全部规则(默认为filter

-nnumberic,以数字格式显示地址和端口号(不进行反解析,会大幅提高列出速,port为端口号,sourcedestinationip,如果不写n选项则会尝试将port解析为服务名,sourcedestination解析为域名,降低效率)

-vverbose,详细信息(pkts匹配到的报文数总和,bytes匹配到的报文包的大小总和,target匹配成功后采取的措施,port匹配的协议,opt匹配的选项,in匹配的报文流入网卡,out匹配的报文流出网卡,source匹配报文来源,destination匹配报文的目标地址)

-vv:更详细的信息

--line-number:显示规则编号

-S :命令格式显示链上规则

链管理

-Nnew,新建一个自定义链

-X:删除一个空且为被引用的链

-Ppolicy,指定一个链的默认规则(在没条链后的括号内)

-E:重命名一个链

规则保存

iptables-save:将当前iptables配置打印到当前终端,我们一般会将其导入到文件中,以便以后直接导入,建议导入到/etc/sysconfig/iptables

完整命令:

iptables-save>/etc/sysconfig/iptables

iptables-save</etc/sysconfig/iptables

 

具体格式:

iptables [-t table] -A|-C|-D chain rule-specification

iptables [-t table] -I chain [rulenum] rule-specification

iptables [-t table] -R chain rulenum rule-specification

iptables [-t table] -D chain rulenum

iptables [-t table] -S [chain [rulenum]]

iptables [-t table] -F|-L|-Z [chain [rulenum]] [options...]

iptables [-t table] -N chain

iptables [-t table] -X [chain]

iptables [-t table] -P chain target

iptables [-t table] -E old-chain-name new-chain-name

**关于rule-specification

rule-specification是对规则的定义,其写法为rule-specification = [matches...] [target]

其中matches是匹配模式,target为处理方式

matches

matches分为基本匹配和扩展匹配,使用扩展匹配时需指定要加载的扩展模块,扩展匹配又分为隐式扩展和显式扩展,隐式扩展在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块,可以自动匹配扩展机制,不需要手动加载扩展模块

-m matchname 指定扩展模块(基本匹配和隐式扩展时省略)

基本匹配:

-s:指定源IP地址或网段

-d:指定目标IP地址或网段

-i:报文流入的接口(网卡),只能应用于数据报文流入环节,只应用于INPUTFORWARDPREROUTING

-o:报文流出的接口(网卡),只能应用于数据报文流出的环节,只应用于FORWARDOUTPUTPOSTROUTING

扩展匹配:

-m 指定扩展的模块

隐式扩展:(主要是协议,在指定协议时自动匹配模块,因此不需要指定模块)

-p:指定协议,可使用数字如0all

-p tcp

--sport,匹配报文来源端口

--dport,匹配报文目标端口

--tcp--flags mask comp,匹配标志位(mask可以为SYN,ACK,FIN,RST等用“,”分隔,comp为标志位必须为1的标志位

-p udp

--sport,匹配报文来源端口

--dport,匹配报文目标端口

-p icmp

--icmp-type,匹配响应报文的类型(请求报文为8,回应报文为0

显示扩展:

-m multiport(用于匹配离散的ip只能用于tcp/udp协议,因此要配合-p udp-p tcp一起使用)

--deports,同时匹配多个离散的目标端口(“,”隔开“21:24”表示21号端口到24号端口,在multiport中算一个整体,当作一个端口)

--sports,同时匹配多个离散的来源端口

-m iprange(用来范围匹配ip

--src-range,匹配一个来源ip地址范围(例如172.1.1.1-172.1.1.100

--dst-range,匹配一个目标ip地址范围

-m string(用来匹配字符串)

--algo,选用一个匹配的算法bmkmp

--string,指定匹配的字符串,字符串需用引号引起

-m time(用来匹配时间,使用时注意检查时区)

--timestart 指定起始时间(02:00:00

--timestop 指定结束时间

--weekdays 指定一星期的某几天(1,7为周一和周日)

--monthdays 指定一个月中的某几天(10,2010号和20号)

--datestart 指定起始日期(2018-01-01

--datestop 指定结束日期

-m connlimit(限制每个ip链接到sever的数量)

--connlimit-above 链接数大于时匹配

--connlimit-upto 链接数下雨等于时匹配

--connlimit-mask 限制对应掩码的ip链接数量(24

-m limit(限制数据包进入的速度)

--limit 匹配一定时间内的包(10/minute每分钟10个包,这样设置后iptables会每6s匹配一个包)

-m mac(匹配mac地址)

--mac-source

-m state(匹配报文当前状态,此扩展比较占用资源)

--state 匹配报文状态

NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求

ESTABLISHEDNEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态

RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关

INVALID:无效的连接,如flag标记不正确

UNTRACKED:未进行追踪的连接如raw表中关闭

target

ACCEPT:允许数据包通过

DROP:直接丢弃数据包,不进行任何回应

REJECT:拒绝数据包通过,但给予回应

RETURN:返回调用链

REDIRECT:端口重定向

LOG:记录日志

MARK:做防火墙标记

DNAT:目标地址转换

SNAT:源地址转换

MASQUERADE:地址伪装










iptables规则备份和恢复及firewalld用法

10.19iptables规则备份和恢复10.20firewalld的9个zone10.21firewalld关于zone的操作10.22firewalld关于service的操作 查看详情

iptables的原理和基本用法(代码片段)

iptables-----可以将规则组成一个列表,实现绝对详细的访问控制功能。一、iptables基础Iptables中的规则表:规则表的先后顺序:raw→mangle→nat→filte规则链的先后顺序:入站顺序:PREROUTING→INPUT出站顺序:OUTPUT→POSTROUTING转发顺序:PREROUTING... 查看详情

iptables系列之基础原理

...核中的过滤框架,规则生效的位置框架    iptables:附加在netfilter上,生成防火墙规则,真正实现数据报文过滤,NAT,mangle等规则生成的工具防火墙:工作在主机或者网络的边缘,对于进出的报文进行检查监控,并... 查看详情

linux下防火墙iptables原理及使用

iptables简介      netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向... 查看详情

第10篇firewalld基于后端iptables的运行原理

...经探讨过这个问题。我们在深入探讨firewalld基于它的后端iptables的内部机制,需要了解iptables过滤数据表的原理,下图是一个很好的总结。firewalld作为iptables的前端,它在iptables的PREROUTING/FORWARD/INPUT/OUTPUT链内部为其活动区域都预设... 查看详情

iptables的备份及脚本构成

  在Linux中,iptables为我们提供了批量备份与恢复规则的命令,防火墙脚本实际上是一个shell脚本程序,便于使用shell变量、程序控制逻辑,在需要重用、移植使用时会非常方便,只需修改下变量值就可使用iptables的备份及... 查看详情

iptables防火墙使用及规则配置

说明防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这... 查看详情

llinux防火墙(selinux防火墙firewalldnetfilter(iptables))及iptables规则备份和恢复(代码片段)

selinux防火墙getenforce查看防火墙状态setenforce0临时关闭(0关闭1开启)#状态enforcing:强制模式,代表SELinux运作中,且已经正确的开始限制domain/type了;permissive:宽容模式:代表SELinux运作中,不过仅会有警告讯息并不会实际限制dom... 查看详情

(转载)iptables及使用layer7七层过滤

 一:简介iptables是与Linux内核集成的IP信息包过滤系统。如果Linux系统连接到因特网或LAN、服务器或连接LAN和因特网的代理服务器,则该系统有利于在Linux系统上更好地控制IP信息包过滤和防火墙配置。netfilter/iptablesIP信息包过... 查看详情

iptables简单使用

iptables网络防火墙一、简介防火墙:可以是硬件也可以是软件:规则(匹配标准,处理办法)netfilter:是一种框架,工作在内核中,通过iptables命令(用户空间)来规则交给netfilter(内核空间)。作用实现规则iptables:数据报文过滤,NAT... 查看详情

iptables原理简介

1.iptables防火墙简介  Iptables也叫netfilter是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入、流出、流经服务器的数据包进行精细的控制。iptables是Linux2.4及2.6内核中集成... 查看详情

iptables教程

1. iptables防火墙简介Iptables也叫netfilter是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入、流出、流经服务器的数据包进行精细的控制。iptables是Linux2.4及2.6内核中集成... 查看详情

自动安装squid+iptables上网代理及上网行为管理脚本。

#本节内容为配置iptables 与 squid ,并以文件来获取规则,以方便管理规则。#接上一个脚本内容,此部分内容需根据需求更改部分内容。#停止squid服务systemctl enable squid &> /dev/nullsystemctl stop squid#... 查看详情

防火墙及iptables命令(代码片段)

...火墙:应用软件处理逻辑而运行通用硬件实现的防火墙;iptables/netfilter包过滤防火墙;2.硬件防火墙:在硬件级别能实现一部分防火墙功能,而另一部分功能依然要基于软件实现;防火墙的介绍:所谓防火墙,指的是工作于主机... 查看详情

防火墙管理软件---iptables

1、基本概念:iptables安全策略:其实就是管理员预设定的的条件,规则存储在内核空间的信息过滤表中,这些规则分别指定了源地址,目的地址,传输协议及服务类型等所有待检查数据包的特征和目标。当数据包与规则不匹配时... 查看详情

iptables防火墙配置

实验iptables防火墙配置实验的目的熟悉防火墙的基本原理。熟悉包过滤防火墙的测试。实验内容1)学习Linux防火墙的基本架构2)学习IPtable的基本原理3)学习IPtable的使用方法实验环境1)虚拟机:Linux主机2)... 查看详情

简述kube-proxyiptables的原理?

参考技术AKubernetes从1.2版本开始,将iptables作为kube-proxy的默认模式。iptables模式下的kube-proxy不再起到Proxy的作用,其核心功能:通过APIServer的Watch接口实时跟踪Service与Endpoint的变更信息,并更新对应的iptables规则,Client的请求流量... 查看详情

linux平台下防火墙iptables原理(转)

iptables简介   netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转... 查看详情