-
Notifications
You must be signed in to change notification settings - Fork 0
/
iptable_filter_table_command
266 lines (173 loc) · 11.3 KB
/
iptable_filter_table_command
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
01==================================================iptables命令介绍:
iptables -t table 命令 chain rules -j target
table可以是filter,nat,mangle 默认是filter
命令:
-P 或 --policy 定义默认策略(ACCEPT/DROP)
[root@zwj iptables]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@zwj iptables]# iptables -t filter --policy FORWARD DROP
[root@zwj iptables]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
-A 或 --append 在规则列表里最后追加一条规则
-I 或 --insert 在制定位置插入一条规则
#禁止客户端ping自己(把客户端的echo request丢掉不处理),自己ping客户端能够成功,但是视而不见(自己把客户端的echo reply丢弃了)
#表面来看就是相互ping都有问题
[root@zwj iptables]# iptables -t filter -I INPUT -p icmp -j DROP
[root@zwj iptables]#
[root@zwj iptables]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
-D 或 --delete 删除一条规则
eg: iptables -t filter -D INPUT 2
-R 或 --replace 替换一条规则
eg: iptables -t filter -R INPUT 2 -p icmp -j DROP
-F 或 --flush 删除所有规则
eg: iptables -t filter -F INPUT #清楚filter表,INPUT链的规则
eg: iptables -t filter -F #清除filter表左右的链的规则
02==================================================iptables匹配选项
-i或--in-interface 制定数据包从哪一个网络接口进入,入ppp0,eth0,eth1
-o或--out-interface
-p或--protocol 协议类型 制定数据包匹配的协议,tcp,udp,icmp
-s或--source 制定数据匹配的原地址
-d或--destination 制定数据匹配的目的地址
--sport 源端口号,指定数据包匹配的源端口号,可以使用"起始端口号:结束端口号"的格式制定一个范围的端口
--dport 目标端口号,指定数据包匹配的目标端口号,可以使用"起始端口号:结束端口号"的格式制定一个范围的端口
#使路由服务器的eth1 ping不通
eg:iptables -t filter I INPUT -p icmp -i eth1 -j DROP
#路由服务器禁止192.168.80.123/32 通过3389端口远程登录192.168.10.123/32
eg:iptables -t filter -I FORWARD -p tcp -s 192.168.80.123/32 -d 192.168.10.123/32 --dport 3389 -j DROP
03==================================================扩展匹配选项
参数 -m icmp
--icmp-type(echo-request/echo-reply)
#禁止客户端117.101.6.53/32 ping通,而自己能够ping通客户端
iptables -t filter -I INPUT -s 117.101.6.53/32 -p icmp -m icmp --icmp-type echo-request -j DROP
[root@zwj ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp -- 117.101.6.53 anywhere icmp echo-request
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
#在路由上设置 禁止某一网络到另一网络的ping ,使用FORWAR链
[root@zwj ~]# iptables -t filter -I FORWARD -s 117.101.6.0/24 -d 123.206.96.0/24 -p icmp -m icmp --icmp-type echo-request -j DROP
基于状态检测的包过滤,指定检测哪种状态
参数 -m state
--state(NEW/ESTATBLISHED/INVALID/RELATED)
NEW:表明改包想要建立一个新的连接
ESTATBLISHED:改包属于某个已经建立的连接
INVALID:改包的连接编号(SessionID)无法识别或编号不正确
RELATED:表示该包属于某个已经建立的连接
#单方向建立回话,不让服务器(192.168.10.0)主动与客户端(192.168.80.0/24)建立链接
iptables -t filter -I FORWARD -s 192.168.10.0/24 -d 192.168.80.0/24 -m state --state NEW -j DROP
#在指定服务器上设置单向链接,服务器只能被动链接客户端
iptables -t filter -I OUTPUT -m state --state NEW -j DROP
参数 -m multiport
指定多端口号,貌似不加"s"也行啊..
-m multiport
--sports
--dports
--ports
eg: 拒绝 192.168.80.0/24 访问 192.168.10.0/24 1-1024 3389 端口
#路由服务器上设置
iptables -t filter -I FORWARD -p tcp -s 192.168.80.0/24 -d 192.168.10.0/24 -m multiport --dports 1:1024,3389 -j DROP
#在服务器设置不让117.101.6.0/24访问该服务器的50-1024,3389端口
iptables -t filter -I INPUT -p tcp -s 117.101.6.0/24 -m multiport --dports 50:1024,3389 -j DROP
指定IP段(并不是一个网段,可能是网段中的几个)
-m iprange
--src-range ip-ip
--dst-range ip-ip
eg: 禁止192.168.1.1-100地址段 访问192.168.10.0/24
#路由上设置
iptables -t filter -I FORWARD -p tcp -m iprange --src-range 117.101.6.50-117.101.6.52 -d 192.168.10.0/24 --dport 80 -j DROP
#在服务器上设置
iptables -t filter -I INPUT -p tcp -m iprange --src-range 117.101.6.50-117.101.6.52 --dport 80 -j DROP
最大连接数限定
-m connlimit
--connlimit-above 限定最大连接数
eg: 当源地址为192.168.80.0/24且远程桌面连接192.168.10.123/32时 最多两个会话
#路由服务器上设置允许192.168.80.0/24使用远程桌面连接192.168.10.123/32 最多3个会话
iptables -t filter -I FORWARD -s 192.168.80.0/24 -d 192.168.10.123/32 -p tcp --dport 3389 -m connlimit --connlimit-above 2 -j DROP
#服务器上设置只能有3个ssh连接
iptables -t filter -I INPUT -s 117.101.6.53 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP
限速
-m limit --limit
用来控制某段时间内封包的平均流量 单位为xx/second xx/minute xx/day xx/hour
eg:192.168.10.0/24 每秒钟向192.168.80.0/24发送数据包不超过300个(每个包最大1500byte),约等于1500*300=450K
#路由服务器上设置如下
iptables -t filter -I FORWARD -s 192.168.10.0/24 -d 192.168.80.0/24 -m limit --limit 300/second -j ACCEPT
iptables -t filter -A FORWARD -s 192.168.10.0/24 -d 192.168.80.0/24 -j ACCEPT -j DROP
#设置往123.xxx.96.xxx服务器上传文件速度..
iptables -t filter -I INPUT -s 117.101.6.53 -m limit --limit 300/second -j ACCEPT
iptables -t filter -A INPUT -s 117.101.6.53 -j DROP
瞬间流量控制
参数 -m limit
--limit-burst number
iptables -t filter -Z #清楚计数器
表示前number个包不会受 -m limit --limit 300/second 限制,多快多慢都无所谓,超过number后遵循300限制
#使用ping测试burst功能,ping请求4icmp包后,就开始出现"Request timeout"
iptables -t filter -I INPUT -p icmp -s 117.101.6.53 -m limit --limit 3/hour --limit-burst 4 -j ACCEPT
iptables -t filter -A INPUT -p icmp -s 117.101.6.53 -j DROP
参数 -m mac
--mac-source
eg: iptables -t filter -I FORWARD -d 192.168.80.0/24 -m mac --mac-source 00:00:00:00:00:01 -j DROP
=======================================iptables 处理动作
-j 参数指定要进行的处理动作,常用的处理动作包括:ACCEPT,DROP,REDIRECT,MASQUERADE,REJECT,LOG,DNAT,SNAT,MIRROR,QUEUE,RETURN,MARK.
filter表常用动作:
ACCEPT: 放行封包,进行完该动作时,将不在匹配其它规则,直接跳往下一个规则链
REJECT: 阻拦该封包,并弄个包通知对方,可以传送的封包有几个选择,port unreable,icmp echo-reply,tcp-reset(这个封包会要求对方关闭连接),进行完处理动作后不在匹配其它规则,直接中断过滤程序.
DROP: 丢弃包不予处理,进行完处理动作后,不在匹配其它规则,直接中断程序
LOG: 将封包相关信息记录在/var/log中,进行完处理动作后,继续匹配其它规则.
REJECT示例:
iptables -t filter -I INPUT -p icmp -s 117.101.6.53 -j REJECT
-->ping 123.206.96.111
PING 123.206.96.111 (123.206.96.111): 56 data bytes
92 bytes from 123.206.96.111: Destination Port Unreachable
Vr HL TOS Len ID Flg off TTL Pro cks Src Dst
4 5 00 5400 65be 0 0000 37 01 809a 192.168.0.107 123.206.96.111
Request timeout for icmp_seq 0
92 bytes from 123.206.96.111: Destination Port Unreachable
Vr HL TOS Len ID Flg off TTL Pro cks Src Dst
4 5 00 5400 bcd7 0 0000 37 01 2981 192.168.0.107 123.206.96.111
LOG示例:
iptables -t filter -I INPUT -s 117.101.6.53 -p tcp --dport 80 -j DROP
iptables -t filter -I INPUT -s 117.101.6.53 -p tcp --dport 80 -j LOG --log-prefix "try to access port 80"
[root@zwj log]# tail -n 5 messages
May 21 23:20:26 zwj kernel: [442783.112294] try to access port 80IN=eth0 OUT= MAC=52:54:00:2f:0c:c9:fe:ee:ff:ff:ff:ff:08:00 SRC=117.101.6.53 DST=10.141.41.84 LEN=64 TOS=0x00 PREC=0x00 TTL=55 ID=7823 DF PROTO=TCP SPT=28028 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0
May 21 23:20:30 zwj kernel: [442787.116150] try to access port 80IN=eth0 OUT= MAC=52:54:00:2f:0c:c9:fe:ee:ff:ff:ff:ff:08:00 SRC=117.101.6.53 DST=10.141.41.84 LEN=48 TOS=0x00 PREC=0x00 TTL=55 ID=20251 DF PROTO=TCP SPT=28028 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0
May 21 23:20:38 zwj kernel: [442795.125573] try to access port 80IN=eth0 OUT= MAC=52:54:00:2f:0c:c9:fe:ee:ff:ff:ff:ff:08:00 SRC=117.101.6.53 DST=10.141.41.84 LEN=48 TOS=0x00 PREC=0x00 TTL=55 ID=32025 DF PROTO=TCP SPT=28028 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0
May 21 23:20:54 zwj kernel: [442811.133633] try to access port 80IN=eth0 OUT= MAC=52:54:00:2f:0c:c9:fe:ee:ff:ff:ff:ff:08:00 SRC=117.101.6.53 DST=10.141.41.84 LEN=48 TOS=0x00 PREC=0x00 TTL=55 ID=37974 DF PROTO=TCP SPT=28028 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0
May 21 23:21:26 zwj kernel: [442843.267985] try to access port 80IN=eth0 OUT= MAC=52:54:00:2f:0c:c9:fe:ee:ff:ff:ff:ff:08:00 SRC=117.101.6.53 DST=10.141.41.84 LEN=48 TOS=0x00 PREC=0x00 TTL=55 ID=51685 DF PROTO=TCP SPT=28028 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0
recent模块实现服务器网络安全
常用设置:
--name :设定列表名称
--rsource :源地址,默认
--rdest :目的地址
--seconds :指定时间内
--hitcount :命中次数
--set :将地址添加进列表,并更新信息,包含地址加入的时间戳
--rcheck :检查地址是否在列表,以第一个匹配开始计算时间
--update :和rcheck类似,以最后一个匹配计算时间
--remove :在表里删除相应地址,后跟列表名称及地址
eg:服务器限制一个客户端使用SSH在60秒内只允许连接2次
iptables -t filter -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --rcheck --seconds 60 --hitcount 2 -j DROP
iptables -t filter -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --set -j ACCEPT
eg:限制TCP 80端口60秒内每个IP只能发起10个新连接,超过后记录到日志中,并丢掉数据 包,可防止CC(客户端使用代理服务器)以及非伪造IP的syn flood.
iptables -t filter -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j LOG --log-prefix 'DDOS:' --log-ip-options
iptables -t filter -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j DROP
iptables -t filter -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --set -j ACCEPT