-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path20-配置iptables防火墙.txt
executable file
·1701 lines (1092 loc) · 72.5 KB
/
20-配置iptables防火墙.txt
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
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
第20章 配置iptables防火墙
20.1 防火墙简介
20.1.1 什么是防火墙
防火墙是一种位于内部网络与外部网络之间的网络安全防护系统,根据特定的访问规则,
允许或限制数据包传输通过。
防火墙一般是一种计算机硬件和软件的结合,使互联网和局域网之间建立起一个安全网关,
从而保护内部网络免受非法用户的入侵,防火墙主要由【服务访问规则】、【验证工具】、【包过滤】、
【应用网关】4个部分组成。
防火墙一般具有以下作用
1.数据包过滤
数据包过滤是指监控通过的数据包的特征来决定放行或者阻止该数据包。防火墙通过数据包过滤
可以实现阻挡攻击,禁止外部/内部访问某些站点,限制每个IP的流量和连接数。
2.数据包透明转发
防火墙一般架设在提供某些服务的服务器前,用户对服务器的访问请求与服务器反馈给用户的信息,
都需要经过防火墙的转发,因此很多防火墙局部网关的能力。
3.阻挡外部攻击
如果用户发送的信息是防火墙设置所不允许的,防火墙立即将其阻断,避免其进入防火墙后面的服务器中
4.记录攻击
如果有必要,防火墙可以将攻击行为记录下来。
20.1.2 什么是包过滤防火墙
包过滤防火墙是一种查看锁经过的数据包的包头,由此来决定丢弃(DROP)这个数据包,还是接收(ACCEPT)这个
数据包并让它通过,也可能执行其它更复杂的动作。
包过滤防火墙可以使用以下的过滤策略。
。拒绝来自某主机或某网段的所有连接
。允许来自某主机或某网段的所有连接
。拒绝来自某主机或某网段的指定端口的连接
。允许来自某主机或某网段的指定端口的连接。
。拒绝本地主机或本地网络与其他主机或其他网络的所有连接
。允许本地主机或本地网络与其他主机或其他网络的所有连接
。拒绝本地主机或本地网络与其他主机或其他网络的指定端口的连接
。允许本地主机或本地网络与其他主机或其他网络的指定端口的连接。
在过滤数据包时,基本过程如下:
。包过滤规则必须被包过滤设备端口存储起来。
。当数据包达到端口时,对数据包包头进行语法分析。大多数数据包顾虑设备只检查IP\
TCP、或UDP包头中的字段。
。包过滤规则以特殊的方式存储。应用于数据包的规则的顺序与包过滤器规则存储顺序必须相同。
。如果一条规则阻止数据包传输或接收,则此数据包便不被允许
。如果一条规则允许数据包传输或接收,则此数据包便可以被继续处理。
。如果数据包不满足任何一条规则,则此数据包便被阻塞。
20.1.3 iptables简介
iptable是一个用户态的防火墙应用软件,可以调整设定X表(Xtables)提供相关的系统表、链和规则来管理
网络数据包的流动与转送的动作,通常iptables对需要内核模块来配合运作,Xtables是主要在内核里面iptables API
运作功能的模块。
iptables是与最新的Linux内核集成的IP信息包过滤系统。如果Linux系统连接到因特网或局域网、服务器或连接
局域网和因特网的代理服务器,则该系统有利于在Linux系统上更好地控制IP信息包过滤和防火墙配置。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成
在Linux内核中。在信息包过滤表中,规则被分组放在链中。而iptables IP数据包过滤系统是一款功能强大的工具,可用
于添加、编辑和移除规则。
虽然iptables IP数据包顾虑系统被称为单个实体,但它实际上是由【netfilter】和【iptables】两个组件组成。
。netfilter组件: 也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包
过滤处理的规则集。
。iptables组件:是一种工具,也称为用户空间,它使插入、修改和除去信息包过滤表中的规则变得容易。
iptables的最大优点:它可以配置有状态的防火墙。有状态的防火墙能够指定并记住为发送和接收数据包所建立的连接
的状态。防火墙可以从数据包的连接跟踪状态获得该信息。在决定新的数据包过滤时,防火墙所使用的这些状态信息可以增加
其效率和速度。这里有4种有效状态,名称分别为:
【1】ESTABLISHED状态:指出该数据包属于已建立的连接,该连接一直用于发送和接收数据包并且完全有效。
【2】INVALID状态:指出该数据包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。
【3】NEW状态:意味着该数据包已经或将启动新的连接,或者它与尚未用于发送和接收数据包的连接相关联。
【4】RELATED状态:表示该数据包正在启动新连接,以及它与建立的连接相关联。
iptables最重要的一个优点:它使用户可以完全控制防火墙配置和数据包过滤。可以定制自己的规则来满足特定需求,从而
只允许想要的网络流量进入系统。
20.2 iptables防火墙安装和配置
20.2.1 安装iptabls防火墙软件包
。检查是否安装iptables软件包:iptables和iptables-devel
-->rpm -qa|grep iptables
iptables-1.4.7-11.el6.x86_64
iptables-ipv6-1.4.7-11.el6.x86_64
。安装
-->yum install iptables iptables-devel -y
20.2.2 /etc/sysconfig/iptables文件详解
该文件内容和使用iptables -S命令显示出来的内容相类似,通过查看该文件获取iptables
规则的信息。或直接查看iptables文件。
-->more /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Tue May 26 16:15:36 2015
*nat
:PREROUTING ACCEPT [89:7630]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -s 192.168.0.0/24 -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
COMMIT
# Completed on Tue May 26 16:15:36 2015
# Generated by iptables-save v1.4.7 on Tue May 26 16:15:36 2015
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [193:17562]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Tue May 26 16:15:36 2015
20.2.3 控制iptables服务
使用service和chkconfig命令可以控制iptables服务的状态,以及当iptables防火墙启动时自动启动服务。
1.启动iptables服务
-->service iptables start
iptables:应用防火墙规则: [确定]
2.查看iptables服务运行状态
-->service iptables status
表格:filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
表格:nat
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 REDIRECT tcp -- 192.168.0.0/24 0.0.0.0/0 tcp dpt:80 redir ports 3128
Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
3.停止iptables服务
-->service iptables stop
iptables:将链设置为政策 ACCEPT:filter nat [确定]
iptables:清除防火墙规则: [确定]
iptables:正在卸载模块: [确定]
4.重新启动iptables服务
-->service iptables restart
iptables:将链设置为政策 ACCEPT:filter nat [确定]
iptables:清除防火墙规则: [确定]
iptables:正在卸载模块: [确定]
iptables:应用防火墙规则: [确定]
5.开机自动启动iptables服务
-->chkconfig iptables on
-->chkconfig --list iptables
iptables 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
20.2.4 保存和恢复iptables规则
当配置了iptables规则之后,一定要记得保存iptables规则,以便将来在恢复的时候进行恢复使用。
1.保存规则
例20.1: 将iptables规则保存到/etc/iptables_save文件
-->iptables-save > /etc/iptables_save #注意/etc/iptables_save文件默认是没有的
。查看保存的规则:
-->cat /etc/iptables_save
# Generated by iptables-save v1.4.7 on Fri Jun 19 09:46:06 2015
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [59:5804]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Fri Jun 19 09:46:06 2015
# Generated by iptables-save v1.4.7 on Fri Jun 19 09:46:06 2015
*nat
:PREROUTING ACCEPT [22:1667]
:POSTROUTING ACCEPT [1:60]
:OUTPUT ACCEPT [1:60]
-A PREROUTING -s 192.168.0.0/24 -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
COMMIT
# Completed on Fri Jun 19 09:46:06 2015
2.恢复规则
使用iptables-restore命令可以将之前使用iptables-save命令保存的iptables规则恢复到当前系统中。
例20.2 从/etc/iptables_save文件中恢复iptables规则
-->iptables-restore < /etc/iptables_save
3.启动系统时使用保存的iptables规则
使用service iptables save命令将iptables规则保存到/etc/sysconfig/iptables文件中,当Linux系统
在启动的时候会使用/etc/sysconfig/iptables文件所提供的规则进行恢复。
例20.3 保存iptables规则
-->service iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]
20.3 iptables规则要素
一条完整的iptables规则是由表、操作命令、链、规则匹配器和目标动作等5个要素组成。其中链名和目标动作
书写的时候一定要大写。
iptables规则语法:
iptables [-t 表] [操作命令] [链] [规则匹配器] [-j 目标动作]
大写 大写
20.3.1 表
iptables目前支持如下表所示的4个表,4个表的优先级由高到第分别是:【raw】、【mangle】、【nat】和【filter】
表
-----------------------------------------------------------------------------------------------------------
表 描述 支持的链
-----------------------------------------------------------------------------------------------------------
filter netfilter默认表,过滤数据包设置 INPUT、FORWARD和OUTPUT
------------------------------------------------------------------------------------------------------------
nat 当数据包建立新的连接时,nat表能够修改数据包, PREROUTING、OUTPUT和POSTROUTING
完成网络地址转换
------------------------------------------------------------------------------------------------------------
mangle 用在数据包的特殊变更操作,比如修改TOS特性 PREROUTING、OUTPUT、INPUT、FORWARD和POSTROUTING
------------------------------------------------------------------------------------------------------------
raw 优先级最高,设置raw一般是为了不再让iptables做 PREROUTING和OUTPUT
数据包的连接跟踪处理,提高性能。
------------------------------------------------------------------------------------------------------------
20.3.2 链
链是数据包传播的路径,一条链就是规则的一个检查清单,每一条链中可以有一条或多条规则。当一个数据包达到一个链时,
iptables就会从第一条骨子额开始检查,查看该数据包是否满足规则所定义的条件,决定是否按预定于的方法处理该数据包,如果
包头不符合链中的规则,iptables就会根据该链的默认策略来处理数据包。
iptables链,不同的链只能在不同的iptables表中使用,除了使用慕容恩的链,还可以由用户创建自定义的链。
链
---------------------------------------------------------------------------------------------
链 描述
---------------------------------------------------------------------------------------------
INPUT 过滤所有目标地址是本机的数据包(对进入本机数据包的过滤)
---------------------------------------------------------------------------------------------
OUTPUT 过滤所有本机产生的数据包(对源地址的数据包的过滤)
---------------------------------------------------------------------------------------------
FORWARD 过滤所有经过本机的数据包(源地址和目标地址都不是本机的数据包)
---------------------------------------------------------------------------------------------
POSTROUTING 数据包达到防火墙时改变数据包的目的地址
---------------------------------------------------------------------------------------------
iptables五条链的相互关系
-->PREROUTING--->路由选择--->FORWARD--->POSTROUTIGN---->
| ^
| |
V |
INPUT OUTPUT
| ^
|------->本地处理进程----|
iptables链相互关系
20.3.3 目标动作
目标动作是指当规则匹配器处理一个数据包的时候,真正要执行的任务,比如是允许数据包通过还是
丢弃数据包。-j参数用来指定要进行的目标动作,常用的目标动作如下表所示:
目标动作
---------------------------------------------------------------------------------------------
目标动作 描述
---------------------------------------------------------------------------------------------
ACCEPT 允许数据包通过
---------------------------------------------------------------------------------------------
DROP 丢弃数据包
----------------------------------------------------------------------------------------------
REJECT 拒绝数据包,丢弃数据包的同时给发送者发送没有接收的通知
----------------------------------------------------------------------------------------------
LOG 数据包的有关信息被记录到日志中
------------------------------------------------------------------------------------------------
TOS 改写数据包的ToS(Type of Service,服务类型)值
------------------------------------------------------------------------------------------------
QUEUE 中断过滤程序,将数据包放入队列,交给其他程序处理。透过自行
开发的处理程序,可以进行其他应用
-------------------------------------------------------------------------------------------------
RETURN 结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自订
规则链看成是一个子程序,那么这个动作就相当于提早结束子程序并返回
到主程序中。
------------------------------------------------------------------------------------------------
SNAT 改写数据包来源IP地址为某特定IP地址或IP地址范围,可以指定端口对应
的范围,进行完成处理动作后,将直接跳往下一个规则链。
------------------------------------------------------------------------------------------------
DNAT 改写封包目的地IP地址为某特定IP地址或IP地址范围,可以指定端口对应的
范围,进行完成此处理动作后,将直接跳往下一个规则链。
------------------------------------------------------------------------------------------------
REDIRECT 将数据包重新导向到另一个端口,进行完此处理动作后,将会继续对比它规则。
这个功能可以用来实现通透式代理或用来保护Web服务器。
------------------------------------------------------------------------------------------------
MASQUREADE 只适用于nat表的POSTROUTING链。它应该只被用来动态分配的IP(拨号)连接,从
而实现IP伪装。
-------------------------------------------------------------------------------------------------
MIRROR 镜射数据包,也就是将来源IP地址与目的地IP地址对调后,将数据包送回,进行完成
此处理动作后,将会中断过滤程序。
---------------------------------------------------------------------------------------------------
MARK 将数据包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完成此处理动作
后,将会继续比对其它规则。
---------------------------------------------------------------------------------------------------
20.3.4 操作命令
操作命令时指执行iptables时锁需的凑走,比如添加、删除、插入、列出规则等
操作命令
------------------------------------------------------------------------------
操作命令 描述
------------------------------------------------------------------------------
-A 在指定链的链尾添加规则
------------------------------------------------------------------------------
-D 从指定链中删除匹配的规则
-----------------------------------------------------------------------------
-R 在指定链中替换匹配的规则
------------------------------------------------------------------------------
-I 以指定规则号在所选链中插入规则
------------------------------------------------------------------------------
-L 列出指定链或所有链的规则
------------------------------------------------------------------------------
-S 显示指定链或所有链的规则
------------------------------------------------------------------------------
-F 在指定或所有链中删除所有规则
------------------------------------------------------------------------------
-N 指定名称创建新的用户自定义链
-------------------------------------------------------------------------------
-X 删除指定的用户自定义链
-------------------------------------------------------------------------------
-P 在内置链上设置默认规则策略,用户自定义链不起作用
-------------------------------------------------------------------------------
-Z 将指定链或所有链中所有规则的包字节计数器清零。
------------------------------------------------------------------------------
-E 更改用户自定义链的名称
-------------------------------------------------------------------------------
-v 输出详细信息
-------------------------------------------------------------------------------
-n 数字输出,IP地址和端口号将被以数字格式显示
--------------------------------------------------------------------------------
-x 扩大数字,显示包和字节计数器的精确值
--------------------------------------------------------------------------------
1.查看iptables规则
例20.4 列出所有链的规则(默认为filter表)
-->iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
例20.5 将IP地址和端口号以数字格式显示列出所有链的规则
-->iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
例20.6 详细列出所有链的规则
-->iptables -vL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
27279 40M ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- any any anywhere anywhere
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT tcp -- any any anywhere anywhere state NEW tcp dpt:ssh
14566 1213K REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 19799 packets, 1045K bytes)
pkts bytes target prot opt in out source destination
注意:不能使用iptables -Lv命令,使用该命令将会出现以下错误信息:
-->iptables -Lv
iptables: No chain/target/match by that name.
正确命令: iptables -vL
例20.7 列出INPUT链的规则
-->iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED #1号INPUT规则
ACCEPT icmp -- anywhere anywhere #2号INPUT规则
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
例20.8 列出INPUT链的1号规则
-->iptables -L INPUT 1
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
例20.9 显示所有链的规则
-->iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
例20.10 详细显示所有链的规则
-->iptables -vS
-P INPUT ACCEPT -c 0 0
-P FORWARD ACCEPT -c 0 0
-P OUTPUT ACCEPT -c 20315 1075019
-A INPUT -m state --state RELATED,ESTABLISHED -c 27444 40315072 -j ACCEPT
-A INPUT -p icmp -c 0 0 -j ACCEPT
-A INPUT -i lo -c 0 0 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -c 0 0 -j ACCEPT
-A INPUT -c 15976 1340121 -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -c 0 0 -j REJECT --reject-with icmp-host-prohibited
注意不能使用iptables -Sv命令,否则报错:
-->iptables -Sv
iptables: No chain/target/match by that name.
正确命令:iptables -vS
例20.11 显示INPUT链的规则
-->iptables -S INPUT
-P INPUT ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
例20.12 显示INPUT链的1号规则
-->iptables -S INPUT 1
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
2.清除指定链和表中的所有规则
例20.13:清除所有链的规则(默认为filter表)
-->iptables -F
-->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
执行完为了后续操作先恢复下:iptables-restore < /etc/iptables_save
例20.14:清除INPUT链的所有规则
-->iptables -F INPUT
-->iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
执行完为了后续操作先恢复下:iptables-restore < /etc/iptables_save
3.清除计数器
例20.15 将所有链中的规则的包字节计数器清零
-->iptables -vL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
25 1840 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- any any anywhere anywhere
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT tcp -- any any anywhere anywhere state NEW tcp dpt:ssh
200 16571 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 80 packets, 4296 bytes)
pkts bytes target prot opt in out source destination
-->iptables -Z
-->iptables -vL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
16 1160 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- any any anywhere anywhere
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT tcp -- any any anywhere anywhere state NEW tcp dpt:ssh
38 3212 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 16 packets, 1260 bytes) ------------------------------#这里的包大小已经改变
pkts bytes target prot opt in out source destination
例20.16 将INPUT链中的规则的包字节计数器清零
-->iptables -Z INPUT
-->iptables -vL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
80 6252 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- any any anywhere anywhere
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT tcp -- any any anywhere anywhere state NEW tcp dpt:ssh
72 5616 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 81 packets, 6356 bytes)
pkts bytes target prot opt in out source destination
例20.17 将INPUT链中的1号规则的包字节计数器清零
-->iptables -Z INPUT 1
-->iptables -vL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
6 396 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- any any anywhere anywhere
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT tcp -- any any anywhere anywhere state NEW tcp dpt:ssh
188 15291 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 19 packets, 1032 bytes)
4.设置默认则策略
例20.18:在INPU、OUTPUT和FORWARD链上设置默认规则策略为DROP(拒绝所有数据包)
-->iptables -P INPUT DROP
-->iptables -P OUTPUT DROP
-->iptables -P FORWARD DROP
-->iptables -L #列出所有链的规则
例20.19 在INPUT、OUTPUT和FORWARD链上设置默认规则策略为ACCEPT(允许所有数据包)
-->iptables -P INPUT ACCEPT
-->iptables -P OUTPUT ACCEPT
-->iptables -P FORWARD ACCEPT
5.添加规则
例20.20 在INPUT链上添加规则,协议为tcp,目标端口号是21
-->iptables -A INPUT -p tcp --dport 21
-->iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 --------------------------#可以看到端口号预计净添加
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
6.插入规则
例20.21 在INPUT链上插入规则,协议为tcp,目标端口号是23,规则号是1
-->iptables -I INPUT 1 -p tcp --dport 23
-->iptables -L
iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:23 ----------------------#23端口已经添加到第一条规则中
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
7.替换规则
例20.22 在INPUT链上替换规则号1的iptables规则,将目标端口号更改为24
-->iptables -R INPUT 1 -p tcp --dport 24
-->iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:24
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
8.删除规则
例20.23 在INPUT链上删除规则号是1的iptables规则
-->iptables -D INPUT 1
-->iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
9.创建用户自定义链
例20.24 创建用户自定义链WWW
-->iptables -N WWW
列出用户自定义链WWW
-->iptables -L WWW
Chain WWW (0 references)
target prot opt source destination
10. 更改用户自定义的链的链名
例20.25:更改用户自定义链WWW的名称为OOO
-->iptables -L OOO
Chain OOO (0 references)
target prot opt source destination
11.删除用户自定义链
例20.26 删除用户自定义链OOO
-->iptables -X OOO
-->iptables -L OOO
iptables: No chain/target/match by that name.
例20.27 删除所有的用户自定义链
-->iptables -X
iptables: Too many links.
-->iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
tcp -- anywhere anywhere tcp dpt:ftp
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
20.3.5 基本规则匹配器
基本规则匹配器用于匹配数据包中的协议、IP地址、端口号、接口和ICMP类型等。
基本规则匹配器
-----------------------------------------------------------------------------------------------------
基本规则匹配器 描述
------------------------------------------------------------------------------------------------------
-p protocol 匹配协议,比如tcp、udp、icmp或all,all会匹配所有协议,前缀"!"为逻辑非,表示该
除该协议外的所有协议。
或--protocol 指定匹配规则的通讯协议,如tcp、udp、icmp、all,如未指定则匹配所有通讯协议。
[!]protocol
------------------------------------------------------------------------------------------------------
-s address[/mask] 匹配源地址。地址可以是一个网络名、主机名、网络IP地址(带有/掩码),或者一个
普通的IP地址
------------------------------------------------------------------------------------------------------
-d address[/mask] 匹配目的地址或目的地址范围
或--destination[!]address[/mask]
-------------------------------------------------------------------------------------------------------
--sport port[:port] 匹配源端口
-------------------------------------------------------------------------------------------------------
--dport port[:port] 匹配目的端口或目的端口范围,可用端口号,也可用/etc/servcies文件中
或--destination-port[!]port [:port] 的名字、端口范围格式xxx:yyy
-------------------------------------------------------------------------------------------------------
-o name 匹配将被发送数据包的接口名称(只适用于从FORWARD、OUTPUT和POSTROUTING链输出的数据
包)。如果接口名称结尾有一个“+”,表示匹配所有此类接口。
或:--out-interface 指定匹配规则对外网络接口名,默认则符合所有接口,可制定暂未工作的接口,待其工作后
[!]interface name[+] 才起作用,该选项只对OUTPUT、FORWARD和POSTROUTING链是合法的。
-------------------------------------------------------------------------------------------------------
-i name 匹配数据包被接受的接口的名称(只适用于数据包进入INPUT、FORWARD和PREROUTING链)。
--in-iinterface 如果接口名称结尾有一个"+",表示匹配所有此类接口。
[!]interface name[+]
其它解释:指定匹配规则的对内网接口名、默认则符合所有接口, 可指定暂未工作的接口,
待其工作后才起作用,该选项只对INPUT、FORWARD和PREROUTING链是合法的。
-------------------------------------------------------------------------------------------------------
-f 指定数据包的第二个和以后的IP碎片
-------------------------------------------------------------------------------------------------------
-c packets bytes 使得管理员可以初始化规则的数据包和字节计数器(INSERT、APPEND和REPLACE操作)
---------------------------------------------------------------------------------------------------------------
-icmp-type {type[/code]|typename} 匹配ICMP类型(使得iptables -p icmp -h命令查看有效的ICMP类型名)
[!]typename 指定匹配规则的ICMP消息类型,选项后需要一个icmp名称类型、数字类型(如3)、或一对
用/分割的数字类型和编码(如3/3),可用以下命令查看有效的icmp类型名表:iptables -p icmp -h
------------------------------------------------------------------------------------------------------------------
-tcp-flags mask comp 匹配TCP标记。有两个参数,第一个参数提供检查范围,第二个参数提供被设置的条件。
这个匹配操作可以识别以下标记:SYN、ACK、FIN、RST、URG、PSH。另外还有ALL和NONE。
ALL是指选定所有的标记,NONE是指未选定任何标记。如果指定多个标志,则每个标志间需以逗号分隔。
-------------------------------------------------------------------------------------------------------------------
-j或-jump 指定规则的目标动作或跳转,如未指定则此规则无任何效果。
-------------------------------------------------------------------------------------------------------------------
--tcp-option 这个选项后需接一个数字,用于匹配tcp选项等于该数字的数据包。如果需要检查tcp选项,那些
tcp表头部完整的数据包就会被自动删除。
------------------------------------------------------------------------------------------------------------------
-l 在系统日志/var/log/messages中记录与该规则匹配的数据包
------------------------------------------------------------------------------------------------------------------
-v 详细输出
-------------------------------------------------------------------------------------------------------------------
-n 当显示时,不对IP地址进行DNS查找
-------------------------------------------------------------------------------------------------------------------
[!]-y -y表明tcp握手中的连接请求标志位SYN; !-y表示对该请求的响应。
-------------------------------------------------------------------------------------------------------------------
[!]-syn 指定仅仅匹配设置了SYN位,清除了ACK、FIN位的TCP包,该参数仅针对TCP协议类型使用
-------------------------------------------------------------------------------------------------------------------
-m -state 标记数据包
-------------------------------------------------------------------------------------------------------------------