iptables的基础知识-iptables规则

运维 系统运维
iptables规则:iptabels被认为是Linux中实现包过滤功能的第四代应用程序。iptables包含在Linux2.4以后的内核中,详细地来讲iptables包在转发时是怎样被送出呢?本文介绍的是iptables的基础知识-iptables规则。

  iptables规则是如何练成的

  iptables规则就是指向标,在一条链上,对不同的连接和数据包阻塞或允许它们去向何处。插入链的每一行都是一条iptables规则。我们也会讨论基本的matche及其用法,还有各种各样的target,以及如何建立我们自己的target(比如,一个新的子链)。

  我们已经解释了什么是iptables规则,在内核看来,iptables规则就是决定如何处理一个包的语句。如果一个包符合所有的条件(就是符合matche语句),我们就运行target或jump指令。书写iptables规则的语法格式是:

  1.   iptables [-t table] command [match] [target/jump]  
  2.  

  对于这个句法没什么可说的,但注意target指令必须在***。为了易读,我们一般用这种语法。总之,你将见到的大部分iptables规则都是按这种语法写的。因此,如果你看到别人写的iptables规则,你很可能会发现用的也是这种语法,当然就很容易理解那些iptables规则了。

  如果你不想用标准的表,就要在[table]处指定表名。一般情况下没有必要指定使用的表,因为iptables 默认使用filter表来执行所有的命令。也没有必要非得在这里指定表名,实际上几乎可在iptables规则的任何地方。当然,把表名在开始处已经是约定俗成的标准。

  尽管命令总是放在开头,或者是直接放在表名后面,我们也要考虑考虑到底放在哪儿易读。command告诉程序该做什么,比如:插入一个iptables规则,还是在链的末尾增加一个iptables规则,还是删除一个iptables规则,具体的可以参考iptables的手册。

  match细致地描述了包的某个特点,以使这个包区别于其它所有的包。在这里,我们可以指定包的来源IP 地址,网络接口,端口,协议类型,或者其他什么。下面我们将会看到许多不同的match。

  ***是数据包的目标所在。若数据包符合所有的match,内核就用target来处理它,或者说把包发往 target。比如,我们可以让内核把包发送到当前表中的其他链(可能是我们自己建立的),或者只是丢弃这个包而没有什么处理,或者向发送者返回某个特殊的应答。

  一个测试脚本

  1.   Client-----------------------àserver(web server,dns)  
  2.  
  3.   192.168.10.7 192.168.55.55  
  4.  
  5.   #实验环境,redhat 7.1  
  6.  
  7.   #iptables v1.2.1.a  
  8.  
  9.   #客户机:192.168.10.7  
  10.  
  11.   #linux: 192.68.55.55 安装apache,dns  
  12.  
  13.   #清除所有iptables规则  
  14.  
  15.   iptables -F  
  16.  
  17.   # set policy  
  18.  
  19.   #设置默认策略,均为删除  
  20.  
  21.   iptables -P INPUT DROP  
  22.  
  23.   iptables -P OUTPUT DROP  
  24.  
  25.   iptables -P FORWARD DROP  
  26.  
  27.   # add chains  
  28.  
  29.   #加入自定义链  
  30.  
  31.   iptables -N bad_tcp_packets  
  32.  
  33.   iptables -N allowed  
  34.  
  35.   iptables -N tcp_packets  
  36.  
  37.   iptables -N udp_packets  
  38.  
  39.   # bad tcp  
  40.  
  41.   #对坏包的处理为reset,和扫描等有关  
  42.  
  43.   iptables -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset  
  44.  
  45.   #一个新包,SYN不置位,因此不是一个正常的连接请求,删除  
  46.  
  47.   iptables -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP  
  48.  
  49.   #allow chain  
  50.  
  51.   #正常的TCP包都允许,其他的都删除  
  52.  
  53.   iptables -A allowed -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT  
  54.  
  55.   iptables -A allowed -p tcp -j DROP  
  56.  
  57.   #tcp roles  
  58.  
  59.   #TCP链的处理,允许WEB服务  
  60.  
  61.   iptables -A tcp_packets -p tcp -s 0/0 --dport 80 -j allowed  
  62.  
  63.   #udp roles  
  64.  
  65.   #UDP链的处理,允许DNS  
  66.  
  67.   iptables -A udp_packets -p udp -s 0/0 --dport 53 -j ACCEPT  
  68.  
  69.   #所有进入的包先检查是否正常,然后转到TCP,UDP进行处理  
  70.  
  71.   #192.168.10.7是网管机,允许该机的ICMP  
  72.  
  73.   iptables -A INPUT -p tcp -j bad_tcp_packets  
  74.  
  75.   iptables -A INPUT -p tcp -j tcp_packets  
  76.  
  77.   iptables -A INPUT -p udp -j udp_packets  
  78.  
  79.   #允许来自192.168.10.7发起ICMP的请求  
  80.  
  81.   iptables -A INPUT -p icmp -s 192.168.10.7 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT  
  82.  
  83.   #本机ICMP请求包返回时,进入INPUT,所以状态是ESTABLISHED,RELATED  
  84.  
  85.   #允许从本机往外发ICMP的请求包  
  86.  
  87.   iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT  
  88.  
  89.   #HTTP的请求收到后允许出去,所以状态是ESTABLISHED,RELATED  
  90.  
  91.   #当然还有DNS的UDP包  
  92.  
  93.   iptables -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT  
  94.  
  95.   iptables -A OUTPUT -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT  
  96.  

  上一节:iptables包的转发过程   下一节:TOS优化提高防火墙性能

【编辑推荐】 

IPtables防火墙使用技巧(超实用)

Linux下Iptables端口转发功能的解决

四种NAT的iptables实现

责任编辑:zhaolei 来源: netren
相关推荐

2011-03-16 11:17:56

IptablesICMP

2011-03-16 11:12:06

Iptables

2011-03-18 08:52:23

Iptables

2011-03-18 09:26:14

iptableslimit

2011-03-16 11:15:12

2011-03-16 11:06:55

Iptables防火墙

2011-03-16 09:30:47

iptables过滤

2011-03-17 17:45:45

iptables规则

2011-03-18 09:26:13

IptablesTOS

2011-03-16 10:59:57

2011-03-16 16:41:57

清空iptables

2011-03-14 15:46:35

Iptables语法

2017-09-11 20:16:58

2011-03-16 16:54:10

iptables 清空linux

2011-03-16 16:23:23

保存iptables防火墙

2011-03-15 15:47:34

netfilteriptables

2011-03-14 14:40:11

iptables编译

2011-03-17 17:19:24

iptables

2011-03-16 16:48:32

iptables 清空

2010-02-24 15:10:18

点赞
收藏

51CTO技术栈公众号