@@ -7,6 +7,32 @@ Linux上常用的防火墙软件
7
7
8
8
** iptables命令** 是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。
9
9
10
+ <!-- TOC -->
11
+
12
+ - [ 补充说明] ( #补充说明 )
13
+ - [ 语法] ( #语法 )
14
+ - [ 选项] ( #选项 )
15
+ - [ 命令选项输入顺序] ( #命令选项输入顺序 )
16
+ - [ 工作机制] ( #工作机制 )
17
+ - [ 防火墙的策略] ( #防火墙的策略 )
18
+ - [ 防火墙的策略] ( #防火墙的策略-1 )
19
+ - [ 实例] ( #实例 )
20
+ - [ 列出已设置的规则] ( #列出已设置的规则 )
21
+ - [ 清除已有iptables规则] ( #清除已有iptables规则 )
22
+ - [ 删除一条规则] ( #删除一条规则 )
23
+ - [ 开放指定的端口] ( #开放指定的端口 )
24
+ - [ 屏蔽IP] ( #屏蔽ip )
25
+ - [ 指定数据包出去的网络接口] ( #指定数据包出去的网络接口 )
26
+ - [ 查看已添加的iptables规则] ( #查看已添加的iptables规则 )
27
+ - [ 删除已添加的iptables规则] ( #删除已添加的iptables规则 )
28
+ - [ 启动网络转发规则] ( #启动网络转发规则 )
29
+ - [ 端口映射] ( #端口映射 )
30
+ - [ 字符串匹配] ( #字符串匹配 )
31
+ - [ 阻止Windows蠕虫的攻击] ( #阻止windows蠕虫的攻击 )
32
+ - [ 防止SYN洪水攻击] ( #防止syn洪水攻击 )
33
+
34
+ <!-- /TOC -->
35
+
10
36
### 语法
11
37
12
38
```
@@ -15,49 +41,88 @@ iptables(选项)(参数)
15
41
16
42
### 选项
17
43
18
- ```
44
+ ``` bash
19
45
-t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。
46
+
47
+ # 通用匹配:源地址目标地址的匹配
48
+ -p:指定要匹配的数据包协议类型;
49
+ -s, --source [! ] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。
50
+ -d, --destination [! ] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。
51
+ -i, --in-interface [! ] < 网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似," !" 表示取反。
52
+ -o, --out-interface [! ] < 网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。
53
+
54
+ # 查看管理命令
20
55
-L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。
21
- -F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
56
+
57
+ # 规则管理命令
22
58
-A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。
23
- -D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
24
59
-I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。
25
- -R, --replace chain rulenum rule-specification 用新规则替换指定链 chain 上面的指定规则,规则号从1开始。
26
- -Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。
60
+ -D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
61
+ -R num:Replays替换/修改第几条规则
62
+
63
+ # 链管理命令(这都是立即生效的)
64
+ -P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。
65
+ -F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
27
66
-N, --new-chain chain 用指定的名字创建一个新的链。
28
- -p:指定要匹配的数据包协议类型;
29
67
-X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
30
68
-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部照成任何影响。
31
- -P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。
69
+ -Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。
70
+
32
71
-j, --jump target < 指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。
33
- -s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。
34
- -d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。
35
- -i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。
36
- -o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。
37
72
-h:显示帮助信息;
38
73
```
39
74
40
- ** iptables命令选项输入顺序: **
75
+ #### 命令选项输入顺序
41
76
42
77
```
43
78
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
44
79
```
45
80
46
- 表名包括:
47
-
48
- - ** raw** :高级功能,如:网址过滤。
49
- - ** mangle** :数据包修改(QOS),用于实现服务质量。
50
- - ** net** :地址转换,用于网关路由器。
51
- - ** filter** :包过滤,用于防火墙规则。
81
+ #### 工作机制
52
82
53
- 规则链名包括:
83
+ 规则链名包括(也被称为五个钩子函数(hook functions)) :
54
84
55
85
- ** INPUT链** :处理输入数据包。
56
86
- ** OUTPUT链** :处理输出数据包。
57
87
- ** PORWARD链** :处理转发数据包。
58
88
- ** PREROUTING链** :用于目标地址转换(DNAT)。
59
89
- ** POSTOUTING链** :用于源地址转换(SNAT)。
60
90
91
+ #### 防火墙的策略
92
+
93
+ 防火墙策略一般分为两种,一种叫` 通 ` 策略,一种叫` 堵 ` 策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,` 所以通,是要全通,而堵,则是要选择 ` 。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。
94
+
95
+ 我们现在用的比较多个功能有3个:
96
+
97
+ 1 . filter 定义允许或者不允许的,只能做在3个链上:INPUT ,FORWARD ,OUTPUT
98
+ 2 . nat 定义地址转换的,也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING
99
+ 3 . mangle功能:修改报文原数据,是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
100
+
101
+ 我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开,在里面做标记/修改内容的。而防火墙标记,其实就是靠mangle来实现的。
102
+
103
+ 小扩展:
104
+
105
+ - 对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT
106
+ - 对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING
107
+ - 而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
108
+
109
+ iptables/netfilter(这款软件)是工作在用户空间的,它可以让规则进行生效的,本身不是一种服务,而且规则是立即生效的。而我们iptables现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。
110
+
111
+ iptables还支持自己定义链。但是自己定义的链,必须是跟某种特定的链关联起来的。在一个关卡设定,指定当有数据的时候专门去找某个特定的链来处理,当那个链处理完之后,再返回。接着在特定的链中继续检查。
112
+
113
+ 注意:规则的次序非常关键,` 谁的规则越严格,应该放的越靠前 ` ,而检查规则的时候,是按照从上往下的方式进行检查的。
114
+
115
+ #### 防火墙的策略
116
+
117
+ 防火墙策略一般分为两种,一种叫` 通 ` 策略,一种叫` 堵 ` 策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进,` 所以通,是要全通,而堵,则是要选择 ` 。
118
+
119
+ 表名包括:
120
+
121
+ - ** raw** :高级功能,如:网址过滤。
122
+ - ** mangle** :数据包修改(QOS),用于实现服务质量。
123
+ - ** net** :地址转换,用于网关路由器。
124
+ - ** filter** :包过滤,用于防火墙规则。
125
+
61
126
动作包括:
62
127
63
128
- ** ACCEPT** :接收数据包。
0 commit comments