Iptables原理及使用

什么是iptables

iptables是Linux系统下常用的防火墙软件,是Linux

netfilter机制的一部分,通过iptables可以操纵linux对网络访问进行精细的控,例如丢掉特定地址来源的数据包。

Iptables工作原理

在Linux系统中,iptables是用于操作Linux内核netfilter系统的用户接口,在Linux系统中,当外部网络的数据包进入内核后,会通过Linux系统预先定义好的流程进行传递,在传递过程中,Linux内核暴露了一系列的接口给用户,从而允许用户在数据包传递的不同点上允许对数据包进行丢弃,修改等操作,这套机制在Linux系统中被称为netfilter机制。

五链四表

Linux系统在系统中总共设置了PREROUTING,INPUT,FORWARD,POSTROUTING,OUTPUT五个控制点(被称为规则链,即五链)通过应用预先定义在filter,nat,mangle,raw四张表中的规则对进出系统的数据包进行精细控制。


对于进入系统的一个数据包,可以在PREROUTING控制点对该数据包进行过滤,修改等操作;PREROUTING控制点完成数据包处理后,进入数据包的路由转发阶段,判断数据包需要路由到本地还是转发出去;路由到本地的数据包,还可以在INPUT控制点被进一步进行处理;需要转发出去的数据包可以在FORWARD控制点和POSTROUTING控制点被进一步处理。

         对于本机要发出去的数据包,用户进程将数据包传递到内核空间后,首先可以在OUTPUT控制点进行处理,处理完成后可以通过POSTROUTING控制点进行进一步的处理后,从本机路由出去。

         为了能在这几个控制点进行数据包的处理,Linux内核设置了filter,nat,mangle,raw四张控制表,通过在这几个控制表中定义对应的控制规则,则可以完全控制进出Linux系统的数据包,当然,不同的控制点只并不一定能使用全部的控制表,且控制表在进行处理时也具有现后顺序,以raw->mangle->nat->filter顺序进行处理。


不同的控制表具有不同的特征,其情况如下:

RAW表:主要确定是否对数据包进行状态跟踪。

Mangle表:用于修改数据包的服务类型,生存周期,为数据包设置标记,实现流量整形等。

NAT表:修改数据包的IP地址,端口等信息。

Filter表:对数据包进行过滤,根据特定规则确定对数据包如何处理。

netfilter

netfilter是iptables的核心机制,netfilter允许用户通过hook的方式,让Linux内核执行注册的回调函数并完成一系列功能。Netfilter提供了5个可注册接口,具体内容如下:

1:NF_IP_PRE_ROUTING,位于数据包被路由之前,数据包一致性检查完成后,进入该hook位置。

2:NF_IP_LOCAL_IN,位于数据包被路由后,并且数据包的目的地是本机时。

3:NF_IP_FORWARD,位于数据包被路由后,但数据包目的地址不是本机时。

4:NF_IP_LOCAL_OUT:由本机发出的数据包,在被路由之前,进入该hook处理。

5:NF_IP_POST_ROUTING:即将离开本机的数据包,在该hook被处理。

可以看到,iptables的五链四表其实就是利用Linux内核的hook机制进行的实现。

当Linux内核模块被注册后,注册的函数由可以有5种返回值,不同的返回值,内核会进行不同的处理。

1:NF_ACCEPT,报文被正常处理,允许报文通过。

2:NF_DROP,报文被丢弃。

3:NF_STOLEN,取走这个报文,不在进行后续处理。

4:NF_QUEUE,报文进行重新排队,可以被送到用户程序。

5:NF_REPEAT,对该报文重新调用hook函数。

Iptables是利用netfilter机制实现的报文控制系统,也可以理解为iptables是基于netfilter机制的一个应用功能;利用netfilter机制,我们可以自己编码实现类似于iptables的工具,对进出Linux的数据报文进行控制。

netfilter用法示例

下面通过一个简短的样例代码说明,如何使用netfilter机制,在Linux系统种注册自己的回调函数完成对数据报文的控制(需要了解Linux内核模块知识)



iptables工具使用

iptables工具分为两部分,内核部分以及用户部分,内核部分通过Linux

netfilter机制实现,用户部分传递控制参数到内核部分。

Iptables命令格式:

iptables [-t table] COMMAND [chain]

CRETIRIA -j ACTION

-t table,是指操作的表,filter、nat、mangle或raw, 默认使用filter

         COMMAND,子命令,定义对规则的管理,可以添加,删除,插入,替换。

         chain,指明链路,指明控制点可能更好理解,即在INPUT,FORWARD等5个控制点的哪个控制点进行控制。

         CRETIRIA,匹配的条件或判断标准。

         ACTION,执行的动作,例如丢弃或接受。

         例如对下面这样一条iptables命令:

         iptables-A INPUT -s 10.8.0.0/16 -d 172.16.55.7 -p tcp --dport 80 -j DROP

                   其中参数-A表示添加一条规则。INPUT表示该规则添加在INPUT控制点,-s 10.8.0.0/16 -d 172.16.55.7 -p tcp --dport 80 描述源地址为10.8.0.0/16,目标地址为172.16.55.7,协议类型为tcp,目的端口为80的数据包。-j

DROP表示对满足匹配条件的数据包执行丢弃动作。

COMMAND有四种情况,通过以下参数描述。

-A, --append

chain rule-specification:追加新规则于指定链的尾部。

-I, --insert

chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部。

-R, --replace

chain rulenum rule-specification:替换指定的规则为新的规则。

-D, --delete

chain rulenum:根据规则编号删除规则。

-L,

--list [chain]:列出规则

匹配条件

通过几个关键的控制字,可以描述一个匹配的数据包。

-s,

--source address[/mask][,...]:检查报文的源IP地址是否符合此处指定的范围,或是否等于此处给定的地址

-d,

--destination address[/mask][,...]:检查报文的目标IP地址是否符合此处指定的范围,或是否等于此处给定的地址

-p,

--protocol protocol:匹配报文中的协议,可用值tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh 或者"all",

-i,

--in-interface name:限定报文仅能够从指定的接口流入,只能用在INPUT, FORWARD and PREROUTING这几个控制链上。

-o,

--out-interface name:限定报文仅能够从指定的接口流出,只能用在FORWARD, OUTPUT and POSTROUTING这几个控制链上。

在特定的协议下,还有一些扩展控制参数:

1:-p tcp:tcp协议场景下,可以使用

         --source-port,--sportport[:port]描述源端口。

         --destination-port,--dportport[:port]描述目标端口。

         --tcp-flagsmask comp描述tcp控制标志位置。

2:-p udp:udp协议下,可使用以下控制参数

         --source-port,--sportport[:port]描述源端口。

         --destination-port,--dportport[:port]描述目标端口。

3:-p icmp:icmp协议下,可以使用以下控制参数

         --icmp-type{type[/code]|typename}描述icmp消息类型

                   例如:0/0:echo reply或8/0:echo request。

此外,还可以通过匹配报文时间,报文包含的特定字符串对数据包进行匹配。

--timestart hh:mm[:ss]   

--timestop hh:mm[:ss] 描述数据包的到达时间。

--algo {bm|kmp} --string pattern描述匹配到的字符串。

--algo {bm|kmp} --hex-string pattern 描述匹配到的16进制字符串。

--connlimit-upto n 匹配连接数目。

--connlimit-above n匹配连接数目。

--state

state限制收发包的状态(状态可以取INVALID,

ESTABLISHED, NEW, RELATED or UNTRACKED)。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容

  • Firewall 工作于网络(网络防火墙)或主机(主机防火墙)的边缘(通信报文的进出口),对于进出本网络或主机的报...
    SRE1阅读 1,321评论 0 0
  • 1.安全技术 (1)入侵检测与管理系统(Intrusion Detection Systems): 特点是不阻断任...
    尛尛大尹阅读 2,467评论 0 2
  • 目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关。 三层的防火墙会在...
    辉耀辉耀阅读 2,647评论 0 2
  • Netfilter介绍 Netfilter是linux内核提供对报文修改和过滤的框架, 可用于将某些钩子函数作用于...
    imsilence阅读 3,833评论 0 1
  • 详述iptables五链 防火墙程序是工作在内核的TCP/IP的网络协议栈的框架之上,通过网络过滤可以实现入侵检测...
    Net夜风阅读 854评论 1 1