iptables原理及规则

iptables简介和原理

咱们先来了解如下社么是防火墙 linux

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

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

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的组成tcp

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:地址假装

相关文章
相关标签/搜索