一、防火墙简介
防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。
目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关。
对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测。但是对于七层的防火墙,不管你源端口或者目标端口,源地址或者目标地址是什么,都将对你所有的东西进行检查。所以,对于设计原理来讲,七层防火墙更加安全,但是这却带来了效率更低。所以市面上通常的防火墙方案,都是两者结合的。而又由于我们都需要从防火墙所控制的这个口来访问,所以防火墙的工作效率就成了用户能够访问数据多少的一个最重要的控制,配置的不好甚至有可能成为流量的瓶颈。
1、iptables简介
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
2、netfilter/iptables的区别
这是第一个要说的地方,Iptables和netfilter的关系是一个很容易让人搞不清的问题。很多人都知道iptables,却不知道 netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。
Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。Iptables/Netfilter的这些规则可以通过灵活组合,形成非常多的功能、涵盖各个方面,这一切都得益于它的优秀设计思想。
Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:
网络地址转换(Network AddressTranslate)
数据包内容修改
以及数据包过滤的防火墙功能
Netfilter 平台中制定了数据包的五个挂载点(HookPoint,我们可以理解为回调函数点,数据包到达这些位置的时候会主动调用我们的函数,使我们有机会能在数据包路由的时候改变它们的方向、内容),这5个挂载点分别是PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING。
Netfilter 所设置的规则是存放在内核内存中的,而iptables 是一个应用层的应用程序,它通过 Netfilter 放出的接口来对存放在内核内存中的 XXtables(Netfilter的配置表)进行修改。这个XXtables由表tables、链chains、规则rules组成,iptables在应用层负责修改这个规则文件。类似的应用程序还有 firewalld 。
3、iptables的规则表和链
表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。
Iptables采用“表”和“链”的分层结构。在REHL4中是三张表五个链。现在REHL5成了四张表五个链了,不过多出来的那个表用的也不太多,所以基本还是和以前一样。下面罗列一下这四张表和五个链。注意一定要明白这些表和链的关系及作用。
3.1规则表
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,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。对应的内核模块为iptable_mangle。包含五个规则链——PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。
raw表
是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理。在匹配数据包时,raw表的规则要优先于其他表。对应的内核模块为iptable_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这个状态的任何数据。
3.2 INPUT、FORWARD等规则链和规则
在处理各种数据包时,根据防火墙规则的不同介入时机,iptables供涉及5种默认规则链,从应用时间点的角度理解这些链:
PREROUTING链:在对数据包作路由选择之前,应用此链中的规则,如DNAT。
INPUT链:当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则。
FORWARD链:当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则。
OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。
POSTROUTING链:在对数据包作路由选择之后,应用此链中的规则,如SNAT。
NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。
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链更多的应用在“网络防火墙”中,特别是防火墙服务器作为网关使用时的情况。
4、规则表之间的优先顺序
Raw——>mangle——>nat——>filter
规则链之间的优先顺序(分三种情况):
第一种情况:入站数据流向
从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包 的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通 过等),通过以后再交给系统上层的应用程序(比如Apache服务器、Nginx服务器)进行响应。
第二冲情况:转发数据流向
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
第三种情况:出站数据流向
防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
5、经过iptables的数据包的流程介绍
一个数据包到达时,是怎么依次穿过各个链和表的(图)。
基本步骤如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
1. 数据包到达网络接口,比如 eth0。
2. 进入 raw 表的 PREROUTING 链,这个链的作用是赶在连接跟踪之前处理数据包。
3. 如果进行了连接跟踪,在此处理。
4. 进入 mangle 表的 PREROUTING 链,在此可以修改数据包,比如 TOS 等。
5. 进入 nat 表的 PREROUTING 链,可以在此做DNAT,但不要做过滤。
6. 决定路由,看是交给本地主机还是转发给其它主机。
到了这里我们就得分两种不同的情况进行讨论了,一种情况就是数据包要转发给其它主机,这时候它会依次经过:
7. 进入 mangle 表的 FORWARD 链,这里也比较特殊,这是在第一次路由决定之后,在进行最后的路由决定之前,我们仍然可以对数据包进行某些修改。
8. 进入 filter 表的 FORWARD 链,在这里我们可以对所有转发的数据包进行过滤。需要注意的是:经过这里的数据包是转发的,方向是双向的。
9. 进入 mangle 表的 POSTROUTING 链,到这里已经做完了所有的路由决定,但数据包仍然在本地主机,我们还可以进行某些修改。
10. 进入 nat 表的 POSTROUTING 链,在这里一般都是用来做 SNAT ,不要在这里进行过滤。
11. 进入出去的网络接口。完毕。
另一种情况是,数据包就是发给本地主机的,那么它会依次穿过:
7. 进入 mangle 表的 INPUT 链,这里是在路由之后,交由本地主机之前,我们也可以进行一些相应的修改。
8. 进入 filter 表的 INPUT 链,在这里我们可以对流入的所有数据包进行过滤,无论它来自哪个网络接口。
9. 交给本地主机的应用程序进行处理。
10. 处理完毕后进行路由决定,看该往那里发出。
11. 进入 raw 表的 OUTPUT 链,这里是在连接跟踪处理本地的数据包之前。
12. 连接跟踪对本地的数据包进行处理。
13. 进入 mangle 表的 OUTPUT 链,在这里我们可以修改数据包,但不要做过滤。
14. 进入 nat 表的 OUTPUT 链,可以对防火墙自己发出的数据做 NAT 。
15. 再次进行路由决定。
16. 进入 filter 表的 OUTPUT 链,可以对本地出去的数据包进行过滤。
17. 进入 mangle 表的 POSTROUTING 链,同上一种情况的第9步。注意,这里不光对经过防火墙的数据包进行处理,还对防火墙自己产生的数据包进行处理。
18. 进入 nat 表的 POSTROUTING 链,同上一种情况的第10步。
19. 进入出去的网络接口。完毕。
|
6、 防火墙的策略
防火墙策略一般分为两种,一种叫“通”策略,一种叫“堵”策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。
现在用的比较多个功能有3个:
filter 定义允许或者不允许的
nat 定义地址转换的
mangle功能:修改报文原数据
我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开,在里面做标记/修改内容的。而防火墙标记,其实就是靠mangle来实现的。
iptables/netfilter(这款软件)是工作在用户空间的,它可以让规则进行生效的,本身不是一种服务,而且规则是立即生效的。而我们iptables现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。
iptables还支持自己定义链。但是自己定义的链,必须是跟某种特定的链关联起来的。在一个关卡设定,指定当有数据的时候专门去找某个特定的链来处理,当那个链处理完之后,再返回。接着在特定的链中继续检查。
注意:规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。
二、iptables管理和设置iptables规则
1、iptables命令格式
iptables的命令格式较为复杂,一般的格式如下:
iptables [-t table] 命令 [chain] [rules] [-j target]
table:指定表明
命令:对链的操作命令
chain:链名
rules:规则
target:动作如何进行
1.1 表选项
表选项用于指定命令应用于哪个iptables内置表,iptables内置包括filter表、nat表、mangle表和raw表。
1.2 命令选项iptables命令格式
命令 |
说明 |
-P或–policy <链名> |
定义默认策略 |
-L或–list <链名> |
查看iptables规则列表 |
-A或—append <链名> |
在规则列表的最后增加1条规则 |
-I或–insert <链名> |
在指定的位置插入1条规则 |
-D或–delete <链名> |
从规则列表中删除1条规则 |
-R或–replace <链名> |
替换规则列表中的某条规则 |
-F或–flush <链名> |
删除表中所有规则 |
-Z或–zero <链名> |
将表中数据包计数器和流量计数器归零 |
1.3 匹配选项
匹配 |
说明 |
-i或–in-interface <网络接口名> |
指定数据包从哪个网络接口进入,如ppp0、eth0和eth1等 |
-o或–out-interface <网络接口名> |
指定数据包从哪块网络接口输出,如ppp0、eth0和eth1等 |
-p或—proto协议类型 < 协议类型> |
指定数据包匹配的协议,如TCP、UDP和ICMP等 |
-s或–source <源地址或子网> |
指定数据包匹配的源地址 |
–sport <源端口号> |
指定数据包匹配的源端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口 |
-d或–destination <目标地址或子网> |
指定数据包匹配的目标地址 |
–dport <目标端口号> |
指定数据包匹配的目标端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口 |
--tcp-fiags <TCP的标志位> |
指定TCP的标志位(SYN,ACK,FIN,PSH,RST,URG) |
1.4 动作选项
动作 |
说明 |
ACCEPT |
接受数据包 |
DROP |
丢弃数据包 |
REDIRECT |
与DROP基本一样,区别在于它除了阻塞包之外, 还向发送者返回错误信息。 |
SNAT |
源地址转换,即改变数据包的源地址 |
DNAT |
目标地址转换,即改变数据包的目的地址 |
MASQUERADE |
IP伪装,即是常说的NAT技术,MASQUERADE只能用于ADSL等拨号上网的IP伪装,也就是主机的IP是由ISP分配动态的;如果主机的IP地址是静态固定的,就要使用SNAT |
LOG |
日志功能,将符合规则的数据包的相关信息记录在日志中,以便管理员的分析和排错 |
MARK |
打防火墙标记的 |
RETURN |
返回在自定义链执行完毕后使用返回,来返回原规则链 |
2、定义默认策略
当数据包不符合链中任一条规则时,iptables将根据该链预先定义的默认策略来处理数据包,默认策略的定义格式如下。
iptables [-t表名] <-P> <链名> <动作>
参数说明如下:
1
2
3
4
|
[-t表名]:指默认策略将应用于哪个表,可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认使用filter表。
<-P>:定义默认策略。
<链名>:指默认策略将应用于哪个链,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。
<动作>:处理数据包的动作,可以使用ACCEPT(接受数据包)和DROP(丢弃数据包)
|
3、查看iptables规则
命令格式为:
iptables [-t表名] <-L> [链名]
参数说明如下:
1
2
3
4
5
6
7
8
|
[-t表名]:指查看哪个表的规则列表,表名用可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认查看filter表的规则列表。
<-L>:查看指定表和指定链的规则列表。
[链名]:指查看指定表中哪个链的规则列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING,如果不指明哪个链,则将查看某个表中所有链的规则列表。
-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
-
v
:显示详细信息
-vvv :越多越详细
-x:在计数器上显示精确值,不做单位换算
--line-numbers : 显示规则的行号
|
4、增加、插入、删除和替换规则
相关规则定义的格式为:
iptables [-t表名] <-A | I | D | R> 链名 [规则编号] [-i | o 网卡名称] [-p 协议类型] [-s 源IP地址 | 源子网] [--sport 源端口号] [-d目标IP地址 | 目标子网] [--dport目标端口号] <-j动作>
参数说明如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[-t表名]:定义默认策略将应用于哪个表,可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认使用filter表。
-A:新增加一条规则,该规则将会增加到规则列表的最后一行,该参数不能使用规则编号。
-I:插入一条规则,原本该位置上的规则将会往后顺序移动,如果没有指定规则编号,则在第一条规则前插入。
-D:从规则列表中删除一条规则,可以输入完整规则,或直接指定规则编号加以删除。
-R:替换某条规则,规则被替换并不会改变顺序,必须要指定替换的规则编号。
<链名>:指定查看指定表中哪个链的规则列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。
[规则编号]:规则编号用于插入、删除和替换规则时用,编号是按照规则列表的顺序排列,规则列表中第一条规则的编号为1。
[-i | o 网卡名称]:i是指定数据包从哪块网卡进入,o是指定数据包从哪块网卡输出。网卡名称可以使用ppp0、eth0和eth1等。
[-p 协议类型]:可以指定规则应用的协议,包含TCP、UDP和ICMP等。
[-s 源IP地址 | 源子网]:源主机的IP地址或子网地址。
[--sport 源端口号]:数据包的IP的源端口号。
[-d目标IP地址 | 目标子网]:目标主机的IP地址或子网地址。
[--dport目标端口号]:数据包的IP的目标端口号。
<-j动作>:处理数据包的动作,各个动作的详细说明可以参考前面的说明。
|
5、清除规则和计数器
在新建规则时,往往需要清除原有的、旧的规则,以免它们影 ?响新设定的规则。如果规则比较多,一条条删除就会十分麻烦, ?这时可以使用iptables提供的清除规则参数达到快速删除所有的规 ?则的目的。
定义参数的格式为:
iptables [-t表名] <-F | Z>
参数说明如下:
1
2
3
|
[-t表名]:指定默认策略将应用于哪个表,可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认使用filter表。
-F:删除指定表中所有规则。
-Z:将指定表中的数据包计数器和流量计数器归零。
|
6、iptables防火墙规则的保存于恢复
iptables-save把把规则保存到文件中,在由目录rc.d下的脚本(/etc/rc.d/init.d/iptalbes)自动装载
使用命令iptables-save来保存规则。
1
2
3
4
5
|
一般用iptables-save >
/etc/sysconfig/iptables
生成保存规则的文件
/etc/sysconfig/iptables
也可以用
/etc/init
.d
/iptables
save
它能把规则自动保存在
/etc/sysconfig/iptables
中
当计算机启动是,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复规则
|
三、iptables防火墙常用的策略
1、拒绝进入防火墙的所用ICMP协议数据包
1
|
iptables -I INPUT -p icmp -j REJECT
|
2、允许防火墙转发出ICMP协议以外的所有数据包
1
|
iptables -A FORWARD -p ! icmp -j ACCEPT
|
说明:使用“!”可以将条件取反
3、拒绝转发来自192.168.1.10主机的数据,允许转发来自192.168.0.0/24网段的数据
1
2
|
iptables -A FORWARD -s 192.168.1.11 -j REJECT
iptables -A FORWARD -s 192.168.0.0
/24
-j ACCERT
|
4、丢弃从外网接口(eth1)进入防火墙的源源地址为私网地址的数据包
1
2
3
|
iptables -A INPUT -i eth1 -s 192.168.0.0
/16
-j DROP
iptables -A INPUT -i eth1 -s 172.16.0.0
/12
-j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0
/8
-j DROP
|
5、封堵网段(192.168.1.0/24),两小时后解封
1
2
3
|
iptables -I INPUT -s 10.20.30.0
/24
-j DROP
iptables -I FORWAD -s 10.20.30.0
/24
-j DROP
at now 2 hours at >iptables -D INPUT 1 at >iptables -D FORWARD 1
|
说明:这个策略咱们借助crond计划任务来完成,就在好不过了
6、只允许管理员从202.13.0.0/16网段使用SSH远程登录防火墙主机
1
2
|
iptables -A INPUT -p tcp --dport 22 -s 22.13.0.0
/16
-j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
|
说明:这个用法比较适合对设备进行远程管理时使用,不如位于分公司中的SQL服务器需要被总公司的管理员管理时
7、允许开放从TCP端口20-1024提供的应用服务
1
2
|
iptables -A INPUT -p tcp --dport 22:1024 -j ACCERT
iptables -A OUTPUT -p tcp --dport 22:1024 -j ACCERT
|
8、允许转发来自192.168.0.0/24局域网段的DNS解析请求数据包
1
2
|
iptables -A FORWARD -s 192.168.0.0
/24
-p udp --dport 53 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0
/24
-p udp --sport 53 -j ACCEPT
|
9、禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主句
1
2
3
|
iptables -I INPUT -p icmp --icmp-
type
Echo-Request -j DROP
iptables -I INPUT -p icmp --icmp-
type
Echo-Reply -j ACCPT
iptables -I INPUT -p icmp --icmp-
type
destination-Unreachable -j ACCPT
|
10、禁止转发来自MAC地址为00:0C:29:27:55:3F的和主机的数据包
1
|
iptables -A FORWARD -m mac --mac-
source
00:0c:29:27:55:3F -j DROP
|
说明:iptables中使用“-m 模块关键字”的形式调用显示匹配。咱们这里用“-m mac --mac-source”来表示数据包中的源MAC地址
11、允许防火墙本机对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280
1
|
iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
|
说明:这里用“-m multiport –dport”来指定目的端口及范围
12.禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包。
1
|
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
|
说明:此处用“-m –iprange –src-range”指定IP范围。
13.禁止转发与正常TCP连接无关的非—syn请求数据包。
1
|
iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
|
说明:“-m state”表示数据包的连接状态,“NEW”表示与任何连接无关的
14、拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包
1
2
|
iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
|
说明:“ESTABLISHED”表示已经响应请求或者已经建立连接的数据包,“RELARED”表示与已建立的连接有相关性的,比如FTP数据连接等
15、只开放本机的web服务器(80)、FTP(20、21、20450-2048),放行外部主机发往服务器其他端口的应答数据包,将其他入站数据包均予以丢弃处理
1
2
3
4
|
iptables -I INPUT -p tcp -m multiport -dport 20,21,80 -j ACCEPT
iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
|
四、总结
Iptables是一个非常重要的工具,它是每一个防火墙上几乎必备的设置,也是我们在做大型网络的时候,为了很多原因而必须要设置的。学好Iptables,可以让我们对整个网络的结构有一个比较深刻的了解,同时,我们还能够将内核空间中数据的走向以及linux的安全给掌握的非常透彻。我们在学习的时候,尽量能结合着各种各样的项目,实验来完成,这样对你加深iptables的配置,以及各种技巧有非常大的帮助。
1、IPtables工作流程
防火墙是一层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的
如果匹配上规则,即表明是阻止还是通过,此时数据包就不在向下匹配新规则了。
如果所有规则中没有表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过
防火墙的默认规则是对应链的所有的规则执行完才会执行的
2、企业级别主机防火墙
2.1 清除默认的相关信息
1
2
3
|
[root@web01 ~]
# iptables -F
[root@web01 ~]
# iptables -Z
[root@web01 ~]
# iptables -X
|
2.2 允许内部管理
1
2
3
4
|
[root@web01 ~]
# iptables -A INPUT -p tcp -s 10.0.0.0/24 -j ACCEPT
[root@web01 ~]
# iptables -A INPUT -p tcp -s 203.81.18.0/24 -j ACCEPT
[root@web01 ~]
# iptables -A INPUT -p tcp -s 200.81.33.0/24 -j ACCEPT
[root@web01 ~]
# iptables -A INPUT -p tcp -s 192.168.1.0/24 -j ACCEPT
|
2.3 允许回环地址
1
|
[root@web01 ~]
# iptables -A INPUT -i lo -j ACCEPT
|
2.4 配置链的默认规则
1
2
3
|
[root@web01 ~]
# iptables -P OUTPUT ACCEPT
[root@web01 ~]
# iptables -P FORWARD ACCEPT
[root@web01 ~]
# iptables -P INPUT DROP
|
2.5 允许用户访问(web服务器为例)
1
2
|
[root@web01 ~]
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@web01 ~]
# iptables -I INPUT -p tcp --dport 443 -j ACCEPT
|
2.6 允许关联包通过(主要适用于FTP)
1
|
[root@web01 ~]
# iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
|
工作中使用脚本批量操作,并保存到/etc/sysconfig/iptables
生产维护:在配置文件中修改,测试配置可以使用定时任务定时清空
本文转自 炫维 51CTO博客,原文链接:http://blog.51cto.com/xuanwei/1957776