前往顾页
以后地位: 主页 > 精通Office > Ubuntu教程 >

iptables防火墙道理详解

时候:2018-10-30 13:17来源:知行网www.zhixing123.cn 编辑:麦田守望者

1. netfilter与iptables

Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简练又矫捷,可实现宁静战略利用中的很多服从,如数据包过滤、数据包措置、地点假装、透明朝办代理、静态收集地点转换(Network Address Translation,NAT),和基于用户及媒体拜候节制(Media Access Control,MAC)地点的过滤和基于状况的过滤、包速率限定等。Iptables/Netfilter的这些法则可以经由过程矫捷组合,构成非常多的服从、涵盖各个方面,这一切都得益于它的优良设想思惟。

Netfilter是Linux操纵体系核心层外部的一个数据包措置模块,它具有以下服从:

  • 收集地点转换(Network Address Translate)
  • 数据包内容点窜
  • 和数据包过滤的防火墙服从

Netfilter 平台中制定了数据包的五个挂载点(Hook Point,我们可以了解为回调函数点,数据包到达这些地位的时候会主动调用我们的函数,使我们有机遇能在数据包路由的时候改变它们的标的目标、内容),这5个挂载点别离是PRE_ROUTINGINPUTOUTPUTFORWARDPOST_ROUTING

Netfilter 所设置的法则是存放在内核内存中的,而 iptables 是一个利用层的利用法度,它经由过程 Netfilter 放出的接口来对存放在内核内存中的 XXtables(Netfilter的建设表)进行点窜。这个XXtables由表tables、链chains、法则rules构成,iptables在利用层卖力点窜这个法则文件。近似的利用法度另有 firewalld 。

iptables-netfilter

1.1 filter、nat、mangle等法则表

filter表

首要用于对数据包进行过滤,按照详细的法则决定是不是放行该数据包(如DROP、ACCEPT、REJECT、LOG)。filter 表对应的内核模块为iptable_filter,包含三个法则链:

  • INPUT链:INPUT针对那些目标地是本地的包
  • FORWARD链:FORWARD过滤所有不是本地产生的并且目标地不是本地(即本机只是卖力转发)的包
  • OUTPUT链:OUTPUT是用来过滤所有本地天生的包

nat表

首要用于点窜数据包的IP地点、端标语等信息(收集地点转换,如SNAT、DNAT、MASQUERADE、REDIRECT)。属于一个流的包(因为包
的年夜小限定导致数据可能会被分成多个数据包)只会颠末这个表一次。如果第一个包被许可做NAT或Masqueraded,那么余下的包都会主动地被做不异的操纵,也就是说,余下的包不会再经由过程这个表。表对应的内核模块为 iptable_nat,包含三个链:

  • PREROUTING链:感化是在包方才到达防火墙时改变它的目标地点
  • OUTPUT链:改变本地产生的包的目标地点
  • POSTROUTING链:在包就要分开防火墙之前改变其源地点

mangle表

首要用于点窜数据包的TOS(Type Of Service,办事范例)、TTL(Time To Live,保存周期)指和为数据包设置Mark标识表记标帜,以实现Qos(Quality Of Service,办事质量)调剂和战略路由等利用,因为需求呼应的路由装备支撑,是以利用其实不遍及。包含五个法则链——PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。

raw表

是自1.2.9今后版本的iptables新增的表,首要用于决定命据包是不是被状况跟踪机制措置。在婚配数据包时,raw表的法则要优先于其他表。包含两条法则链——OUTPUT、PREROUTING

iptables中数据包和4种被跟踪连接的4种不合状况:

  • NEW:该包想要开端一个连接(从头连接或将连接重定向)
  • RELATED:该包是属于某个已建立的连接所建立的新连接。比方:FTP的数据传输连接就是节制连接所 RELATED出来的连接。--icmp-type 0 ( ping 应答) 就是--icmp-type 8 (ping 请求)所RELATED出来的。
  • ESTABLISHED :只需发送并接到应答,一个数据连接从NEW变成ESTABLISHED,并且该状况会继续婚配这个连接的后续数据包。
  • INVALID:数据包不克不及被辨认属于哪个连接或没有任何状况比如内存溢出,收到不知属于哪个连接的ICMP错误信息,一般应当DROP这个状况的任何数据。

1.2 INPUT、FORWARD等法则链和法则

在措置各种数据包时,按照防火墙法则的不合参与机会,iptables供触及5种默许法则链,从利用时候点的角度了解这些链:

  • INPUT链:当领遭到防火墙本机地点的数据包(入站)时,利用此链中的法则。
  • OUTPUT链:当防火墙本机向外发送数据包(出站)时,利用此链中的法则。
  • FORWARD链:当领遭到需求经由过程防火墙发送给其他地点的数据包(转发)时,利用此链中的法则。
  • PREROUTING链:在对数据包作路由挑选之前,利用此链中的法则,如DNAT。
  • POSTROUTING链:在对数据包作路由挑选以后,利用此链中的法则,如SNAT。

1
2
3
4
5
6
7
8
9
10
-->PREROUTING-->[ROUTE]-->FORWARD-->POSTROUTING-->
mangle | mangle ^ mangle
nat | filter | nat
| |
| |
v |
INPUT OUTPUT
| mangle ^ mangle
| filter | nat
v ------>local------->| filter

 

此中中INPUT、OUTPUT链更多的利用在“主机防火墙”中,即首要针对办事器本机收支数据的宁静节制;而FORWARD、PREROUTING、POSTROUTING链更多的利用在“收集防火墙”中,特别是防火墙办事器作为网关利用时的环境。

防火墙措置数据包的体例(法则):

  • ACCEPT:许可数据包经由过程
  • DROP:直接丢弃数据包,不给任何回应信息
  • REJECT:回绝数据包经由过程,需求时会给数据发送端一个呼应的信息。

  • SNAT:源地点转换。在进入路由层面的route以后,出本地的收集栈之前,改写源地点,目标地点不变,并在本机建立NAT表项,当数据前往时,按照NAT表将目标地点数据改写为数据发送出去时候的源地点,并发送给主机。处理内网用户用同一个公网地点上彀的问题。
    MASQUERADE,是SNAT的一种特别情势,合用于像adsl这类临时会变的ip上

  • DNAT:目标地点转换。和SNAT相反,IP包颠末route之前,从头点窜目标地点,源地点不变,在本机建立NAT表项,当数据前往时,按照NAT表将源地点点窜成数据发送过去时的目标地点,并发给长途主机。可以埋没后端办事器的实在地点。(感激网友提出之前这个处所与SNAT写反了)
    REDIRECT:是DNAT的一种特别情势,将收集包转发到本地host上(不管IP头部指定的目标地点是啥),便利在本机做端口转发。

  • LOG:在/var/log/messages文件中记录日记信息,然后将数据包通报给下一条法则

撤除最后一个LOG,前3条法则婚配数据包后,该数据包不会再往下继续婚配了,所以编写的法则依次极其关头。

2. Linux数据包路由道理

我们已晓得了Netfilter和Iptables的架构和感化,并且学习了节制Netfilter行动的Xtables表的布局,那么这个Xtables表是怎样在内核和谈栈的数据包路由中起感化的呢?

网口数据包由底层的网卡NIC领受,经由过程数据链路层的解包以后(去除数据链路帧头),就进入了TCP/IP和谈栈(本质就是一个措置收集数据包的内核驱动)和Netfilter异化的数据包措置流程中了。数据包的领受、措置、转发流程构成一个无限状况向量机,颠末一些列的内核措置函数、和Netfilter Hook点,最后被转发、或本次下层的利用法度消化失落。是时候看这张图了:
iptables-routing

从上图中,我们可以总结出以下规律:

  • 当一个数据包进入网卡时,数据包起首进入PREROUTING链,在PREROUTING链中我们有机遇点窜数据包的DestIP(目标IP),然后内核的”路由模块”按照”数据包目标IP”和”内核中的路由表”判定是不是需求转送出去(重视,这个时候数据包的DestIP有可能已被我们修改过了)
  • 如果数据包就是进入本机的(即数据包的目标IP是本机的网口IP),数据包就会沿着图向下挪动,到达INPUT链。数据包到达INPUT链后,任何过程都会-收到它
  • 本机上运行的法度也能够发送数据包,这些数据包颠末OUTPUT链,然后到达POSTROTING链输入(重视,这个时候数据包的SrcIP有可能已被我们修改过了)
  • 如果数据包是要转发出去的(即目标IP地点不再以后子网中),且内核许可转发,数据包就会向右挪动,颠末FORWARD链,然后到达POSTROUTING链输入(挑选对应子网的网口发送出去)

我们在写Iptables法则的时候,要时刻服膺这张路由依次图,按照地点Hook点的不合,矫捷设置装备摆设法则。

3. iptables编写法则

号令格局:
iptables-cli

  • [-t 表名]:该法则所操纵的哪个表,可利用filter、nat等,如果没有指定则默许为filter
  • -A:新增一条法则,到该法则链列表的最后一行
  • -I:拔出一条法则,原本该地位上的法则会今后依次挪动,没有指定编号则为1
  • -D:从法则链中删除一条法则,要么输入完整的法则,或指定法则编号加以删除
  • -R:替代某条法则,法则替代不会改变依次,并且必须指定编号。
  • -P:设置某条法则链的默许行动
  • -nL-L-n,检察以后运行的防火墙法则列表
  • chain名:指定法则表的哪个链,如INPUT、OUPUT、FORWARD、PREROUTING等
  • [法则编号]:拔出、删除、替代法则时用,--line-numbers显现号码
  • [-i|o 网卡称呼]:i是指定命据包从哪块网卡进入,o是指定命据包从哪块网卡输入
  • [-p 和谈范例]:可以指定法则利用的和谈,包含tcp、udp和icmp等
  • [-s 源IP地点]:源主机的IP地点或子网地点
  • [--sport 源端标语]:数据包的IP的源端标语
  • [-d目标IP地点]:目标主机的IP地点或子网地点
  • [--dport目标端标语]:数据包的IP的目标端标语
  • -m:extend matches,这个选项用于供应更多的婚配参数,如:
    • -m state –state ESTABLISHED,RELATED
    • -m tcp –dport 22
    • -m multiport –dports 80,8080
    • -m icmp –icmp-type 8
  • <-j 行动>:措置数据包的行动,包含ACCEPT、DROP、REJECT等
------分开线----------------------------
标签(Tag):iptables iptables防火墙道理 iptables防火墙
------分开线----------------------------
保举内容
猜你感兴趣