iptables简介

第1章 Iptables简介

防火墙分为硬件防火墙与软件防火墙,硬件防火墙价格很高,多数中小型公司使用软件防火墙,免费的iptables使用是很多的,现在复习一下iptables。

iptables其实不是真正的防火墙,用户通过iptables这个代理,将用户的安全设定执行到对应的netfilter,是linux内核的一个软件框架,用来管理网络数据包。使用的是内核组件,iptables不像其他服务那样有进程。

主要功能有 :网络地址转换(NAT)、包内容修改、数据包过滤、数据包处理、地址伪装、透明代理等功能。

Iptables根据定义的规则来处理这些数据包,例如:放通(ACCEPT)、拒绝(REJECT)、丢弃(DROP)、源地址转换(SNAT)、目标地址转换(DNAT)、端口映射(REDIRECT)、地址伪装(MASQUERADE)、日志记录(LOG)…

第2章 经典的报文流向

上面讲到iptables是根据定义额规则来处理数据包,就要从经典数据包流向来看

image.png

涉及到本机的的流程有:

本机某进程发报文:OUTPUTàPOSTROUTING

目标为本机的报文:PREROUTINGàINPUT

由本机转发的报文:PREROUTINGàFORWARDàPOSTROUTING

上图对应就是对应的“五链”,那么所谓的“四表”又有哪些??

第3章 表链结构

接触iptables最初老是听说表链结构,有哪些表?有哪些链呢?

3.1 四表五链

“四表”:filter , nat , mangle , raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter

filter表:负责过滤功能,防火墙;内核模块:iptables_filter

nat表:network address translation,网络地址转换功能;内核模块:iptable_nat

mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle

raw表:关闭nat表上启用的连接追踪机制;iptable_raw ,raw表优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能。RAW 表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链 上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.

“五链”:

INPUT链 :处理输入数据包。

OUTPUT链 :处理输出数据包。

FORWARD链 :处理转发数据包。

PREROUTING链 :用于目标地址转换(DNAT)。

POSTOUTING链 :用于源地址转换(SNAT)。

3.2 表链对应关系

需要使用iptables还需要对表链的对应关系了解才能流畅的使用

image.png

表可以被哪些链使用?
表名 -----> 表规则可以被哪些链使用
raw -----> PREROUTING、OUTPUT
mangle -----> PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
nat -----> PREROUTING、OUTPUT、POSTROUTING
filter -----> INPUT、FORWARD、OUTPUT

链中可以存在多个表,那么在一个链中有多个表,应该如何执行呢??

例如从上图得知,OUTPUT 可以包含四个表,单这些表都存在时,他们的优先级(从高到低):raw --> mangle --> nat --> filter ,其他表也可以参照对比。

链中可以包含哪些表?优先级?
链 -----> 可以包含哪些表?优先级?
PREROUTING -----> Raw > nangle > nat
INPUT -----> Mangle > filter
FORWARD -----> Mangle > filter
OUTPUT -----> Raw > mangle > nat > filter
POSTROUTING -----> Mangle > nat

image.png

其中INPUT 中在centos7就包含了nat表,centos6中不包含,需要了解一下。

第4章 Iptables设置规则

上文就在说,iptables匹配自定义的规则 ,当匹配到了指定的规则之后就会按照定义的动作进行处理

例如:

我们设置一个规则,公交车上低于1.2m的儿童能够免票。

那么想要免票就需要满足两个规则:儿童、低于1.2m。不是儿童或者>=1.2m或者不是儿童且>=1.2m 就不满足条件,售票员就不能让

Iptables设置的规则也是这样,当匹配上了符合条件的报文,就执行自定义的动作进行处理这个报文。

4.1 匹配条件

匹配条件分为基本匹配条件与扩展匹配条件,需要注意的是iptables 是从上往下开始匹配,以先达条件规则执行。

4.1.1 基本匹配条件:

源地址Source IP,目标地址 Destination IP

上述内容都可以作为基本匹配条件。

4.1.2 扩展匹配条件:

除了上述的条件可以用于匹配,还有很多其他的条件可以用于匹配,这些条件泛称为扩展条件,这些扩展条件其实也是netfilter中的一部分,只是以模块的形式存在,如果想要使用这些条件,则需要依赖对应的扩展模块。

源端口Source Port, 目标端口Destination Port

上述内容都可以作为扩展匹配条件

4.2 处理动作

处理动作在iptables中被称为target(这样说并不准确,我们暂且这样称呼),动作也可以分为基本动作和扩展动作。

此处列出一些常用的动作,之后的文章会对它们进行详细的示例与总结:

ACCEPT:允许数据包通过。

DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。

REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。

SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。

MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。

DNAT:目标地址转换。

REDIRECT:在本机做端口映射。

LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

第5章 Iptables基本使用

5.1 Iptables基本语法参数

语法 :iptables(选项)(参数)

选项:
参数 作用
-t ,--table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。
#通用匹配:源地址目标地址的匹配
-p ,指定要匹配的数据包协议类型;
-s ,--source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。
-d ,--destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。
-i ,--in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。
-o ,--out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。
#查看管理命令
-L ,--list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。
#规则管理命令
-A ,--append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。
-I ,--insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。
-D ,--delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
-R num ,Replays替换/修改第几条规则
#链管理命令(立即生效)
-P ,--policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。
-F ,--flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
-N ,--new-chain chain 用指定的名字创建一个新的链。
-X ,--delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
-E ,--rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部造成任何影响。
-Z ,--zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。
-j ,--jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。
-h ,显示帮助信息;

命令选项输入顺序 :
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

5.2 实例

5.2.1 查看已添加规则

iptables -nL


image.png

5.2.2 清空当所有规则和计数

iptables -F # 清空所有的防火墙规则

iptables -X # 删除用户自定义的空链

iptables -Z # 清空计数

5.2.3 允许本地回环地址可以正常使用

本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

5.2.4 设置默认的规则

iptables -P INPUT DROP # 配置默认的不让进,注意:当前远程连接也会断开,请视情况使用

iptables -P FORWARD DROP # 默认的不允许转发

iptables -P OUTPUT ACCEPT # 默认的可以出去

默认规则 使用iptables -nL 不能查看到,所以需要谨慎使用

image.png

当我们怀疑是iptables出现问题 ,清理规则之后还是失败,就需要考虑将INPUT、OUTPUT、FORWARD等修改为默认ACCEPT

iptables -P INPUT ACCEPT # 配置默认 放通

iptables -P FORWARD ACCEPT # 默认放通转发

iptables -P OUTPUT ACCEPT # 默认放通

5.2.5 配置tcp 22端口放通

iptables -A INPUT -i ens33 -p tcp --dport 22 -j ACCEPT

“-A INPUT” – 表示我们要在 INPUT 链的最后增加后面的规则。所以这条规则将会应用于入站的数据包。

“-i ens33″ – 表示检查通过 eth0 接口进入的数据包,看看是否匹配此规则。

“-p tcp –dport 22″ – 该规则针对的是 TCP 数据包,并且使用了 -p 参数的选项 “–dport 22″ 来指定该规则针对的是要发送到服务器 22 号端口(即 SSH 端口)的数据包。

“-j ACCEPT” – 跳转到 ACCEPT,即接受满足这些匹配规则的数据包的传输。

放通之后修改默认规则input 为 drop ,可以正常连接,测试ping 失败

image.png

image.png

5.2.6 在input规则最后添加“丢弃所有包”

这个设置可以代替默认规则,

iptables -A INPUT -j DROP

image.png

5.2.7 指定协议匹配。

匹配指定协议。

iptables -A INPUT -p tcp

匹配指定协议之外的所有协议。

iptables -A INPUT -p !tcp

5.2.8 指定地址匹配。

指定匹配的主机。

iptables -A INPUT -s 192.168.0.18

指定匹配的网络。

iptables -A INPUT -s 192.168.2.0/24

匹配指定主机之外的地址。

iptables -A FORWARD -s 192.168.0.19

匹配指定网络之外的网络。

iptables -A FORWARD -s ! 192.168.3.0/24

5.2.9 指定网络接口匹配。

指定单一的网络接口匹配。

iptables -A INPUT -i eth0

iptables -A FORWARD -o eth0

指定同类型的网络接口匹配。

iptables -A FORWARD -o ppp+

5.2.10 指定端口匹配。

指定单一端口匹配。

iptables -A INPUT -p tcp --sport www

iptables -A INPUT -p udp –dport 53

匹配指定端口之外的端口。

iptables -A INPUT -p tcp –dport

匹配端口范围。

iptables -A INPUT -p tcp –sport 22:80

匹配ICMP端口和ICMP类型。

iptables -A INOUT -p icmp –icimp-type 8

指定ip碎片。

每个网络接口都有一个MTU(最大传输单元),这个参数定义了可以通过的数据包的最大尺寸。如果一个数据包大于这个参数值时,系统会将其划分成更小的数据包

(称为ip碎片)来传输,而接受方则对这些ip碎片再进行重组以还原整个包。这样会导致一个问题:当系统将大数据包划分成ip碎片传输时,第一个碎片含有

完整的包头信息(IP+TCP、UDP和ICMP),但是后续的碎片只有包头的部分信息(如源地址、目的地址)。因此,检查后面的ip碎片的头部(象有TCP、UDP和ICMP一样)是不可能的。假如有这样的一条规则:

iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.2.100 –dport 80 -j ACCEPT

并且这时的FORWARD的policy为DROP时,系统只会让第一个ip碎片通过,而余下的碎片因为包头信息不完整而无法通过。可以通过—fragment/-f 选项来指定第二个及以后的ip碎片解决上述问题。

iptables -A FORWARD -f -s 192.168.1.0/24 -d 192.168.2.100 -j ACCEPT

注意现在有许多进行ip碎片攻击的实例,如DoS攻击,因此允许ip碎片通过是有安全隐患的,对于这一点可以采用iptables的匹配扩展来进行限制。

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

推荐阅读更多精彩内容