Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29335801
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: LINUX

2010-03-13 19:30:31

LINUX中的防火墙专题

[整理人:遥方 整理时间:2010-3-13]

修改防火墙的指令

vi /etc/firewall.sh

source /etc/firewall.sh   使其生效

其中的firewall.sh 文件内容类似的如下:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

 

不太明白这些含义。现在整理一下以后就懂了!

 

一、整理一下相关的专业名词术语

INPUT 网络数据包流向服务器

OUTPUT 网络数据包从服务器流出

FORWARD 网络数据包经服务器路由

nat,用于NAT.NAT(Net Address Translation )是一种IP地址转换方法。

PREROUTING 网络数据包到达服务器时可以被修改

mangle,用于修改网络数据包的表,如TOS(Type Of Service),TTL(Time To Live),

示例:#iptables -A INPUT -s XX.X.XXX.X/XX -p udp --dport 165 -j ACCEPT

其中就有INPUT关键字。表示 网络数据包流向服务器

数据包进入到一台服务器的数据流过程:

当数据包进入服务器时,Linux Kernel会查找对应的链,直到找到一条规则与数据包匹配。如果该规则的targetACCEPT,就会跳过剩下的规则,数据包会被继续发送。如果该 规则的targetDROP,该数据包会被拦截掉,kernel不会再参考其他规则。

  Note:如果从始至终都没有一条规则与数据包匹配,而且表末尾又没有drop all的规则,那末该数据包会被acceptCisco则相反,在表末尾会因含deny all的规则。

 

二、看到一条规则又是什么-A又是什么-s又是什么-p之类的现在整理一下明白其中的含义

-A 在链尾添加一条规则

-C 将规则添加到用户定义链之前对其检查

-D 从链中删除一条规则

-E 重命名用户定义的链,不改变链本身

-F 清空链,删除链上的所有规则

-I 在链中插入一条规则

-L 列出某个链上的规则,如iptables –L INPUT 列出INPUT链的规则

-N 创建一个新链

-P 定义某个链的默认策略

-R 替换链上的某条规则

-X 删除某个用户相关的链

-Z 将所有表的所有链的字节和数据包计数器清零

示例:

iptables –F                     firewall.sh的头部会定义这一行表示先清空

 

iptables -P INPUT DROP          定义默认策略为DROP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

上面是大写的关键字现在来看看小写的关键字吧

-p –protocol  应用于数据包的协议类型,可以是TCP UDP ICMPALL。!也可使用。

当使用-p tcp时,还可使用其他可以选项,以便允许进一步定义规则。选项包括:

  --sport 允许指定匹配数据包源端口.port1:port ,表示port1port2之间的所有端口

  --dport 目的端口,和--sport雷同。

当使用-p !udp时,也有特殊的选项供使包括:

  --sport,--dport,-p tcp 相同,只不过用以用于UDP包。

使用-p icmp参数时,只有一个选项可用。

  --icmp-type,允许在过滤规则中指定icmp类型。

示例:#iptables -A INPUT -s XXX.XXX.XXX.XXX/XX -p tcp --dport 384 -j ACCEPT

这句链用了-p 数据包的协议类型即为tcp 这里面我们用了-p tcp 还可以用其他的选项比如这里我们就使用了—dport 384 表示允许指定匹配数据包源端口

 

-s –source 指定数据包的源地址。该参数后跟一个IP地址,一个带有sub-net mask的网络地址,或一个主机名。(不建议使用主机名)

示例:#iptables -A INPUT -s XX.XX.X.0/16 -p udp -j ACCEPT  

名词术语补充:

subnet mask是子网掩码,是与你的网络规模有关的,如分配网段,那些是属于这个网段,那些是属于另外一个的;2.Default Gateway是默认网关,一般是联接两个不同协议网络的一个结点,主要是完成协议转换。至于子网掩码的详细内容请参考下面的内容

 

-d,-- destination 数据包的目的地址,同-s.

 

-j,--jump 用于指定一个target,告诉规则将该匹配的数据包发送到该targetTarget可以是ACCEPT,DROP,QUEUE,RETURN.如果没有-j,那么不会对数据包进行任何操作,只是将计数器加1

示例: iptables -A INPUT -s XX.X.X.0/16 -p udp -j ACCEPT

 

-i,--in-interface ,对于INPUT FORWARD PREROUTING链,该指定数据包到达器时所使用的端口。

示例:iptables -A INPUT -i lo -j ACCEPT      lo:表示127.0.0.1地址值

 

-o --out-interface,对于OUTPUT FORWARD POSTROUTING链,该参数指定数据包离开服务器时使用的端口。

 

下面再介绍一下-j 后面的目标的含义

创建规则的最后一步是指定Iptables对数据包的操作。只要某一规则匹配该数据包,就不会再有别的规则的操作。内建的target有:ACCEPT DROP QUEUE RETURN
ACCEPT
:允许数据包通过,到达目的地。

DROP:拒绝数据包通过,丢弃该包。

QUEUE:将数据包发送回到用户应用程序处理。

RETURN:不再根据当前链的其他规则来检查数据包,而是直接返回,继续被发送到其目的地址,或下一个链。

以上介绍了整个firewall.sh里面的东西术语。现在来查看一下示例应用

允许WWW

iptables –A INPUT –p tcp –dport 80 –j ACCEPT

该规则被添加到filter表的INPUT链,允许目的端口是80的数据包。

在内部接口上允许DHCP

iptables –A INPUT –i eth0 –p tcp - - sport 68 - -dport 67 ACCEPT

iptables –A INPUT –i eth0 –p ucp - -sport 68 - -dport 67 ACCEPT

以上同时允许TCPUDP协议。


说明:在实际的应用中用到了自已不懂的再添加进来。我想现在基本上能够看得懂它的配置文件的内容了

 

 

 

 

附一:子网掩码介绍

TCP/IP协议中,SUBNET MASKS(子网掩码)的作用是用来区分网络上的主机是否在同一网络取段内。在大型网络中,CLASS A SUBNET MASKS255.0.0.0 CLASS BSUBNET MASKS255.255.0.0CLASS C SUBNET MASKS255.255.255.0 

PS:哦怪不得我的电脑上面的子网掩码是255.255.255.0 原来我的是属于C类网络

假如某台主机的SUBNET MASKSIP地址为202.119.115.78,它的SUBNET MASKS255.255.255.0。将这两个数据作AND运算后,所得出的值中的非0BYTE部分即为NETWORK ID 。运算步骤如下: 

202.119.115.78的二进制值为: 202—二进制为:128+64+2+8=202  27次方+2的六次方这样
11001010.01110111.01110011.01001110 
255.255.255.0
的二进制值为 
11111111.11111111.11111111.00000000 
AND
后的结果为:                          AND表示只要有一个为0则为0
11001010.01110111.01110011.00000000    
转为二进制后即为: 
202.119.115.0 

它就是NETWORK ID,在IP地址中剩下的即为HOST ID,即为78,这样当有另一台主机 IP 地址为 202.119.115.83,它的SUBNET MASKS也是255.255.255.0,则其NETWORK ID  202.119.115HOST ID83,因为这两台主机的NETWORK ID都是202.119.115,因此,这两台主机在同一网段内。 

PS:哦因为255.255.255 其实参与and运算之后还是得回到原有的IP值。即两台主机的IP值如果都是属于CIP的话。其前面的三个值相同则可以马上得知其网络ID是一样的。即属于同一个网段

例如:我的IP192.168.100.40 子网掩码为255.255.255.0 那只要其他的IP是以192.168.100而且子网掩码与我的一样的话就表示我们是属性同一个网段内!

更进一步:

但是,在实际应用中,可能会有多个分布与各地的网络,而且,每个网络的主机数量并不很多,如果申请多个NETWORK ID,会造成IP资源的浪费,而且很不经济,如果我们在SUBNET MASKS上动一下手脚,可以在只申请一个NETWORK ID的基础上解决这个问题。 

比如,我们有三个不同的子网,每个网络的HOST数量各为202550,下面依次称为甲、乙和丙网,但只申请了一个NETWORK ID 就是 202.119.115。首先我们把甲和乙网的SUBNET MASKS改为255.255.255.224224的二进制为11100000,即它的 SUBNET MASKS为: 

11111111.11111111.11111111.11100000 

这样,我们把HOST ID高三位用来分割子网(?不太了解含义),这三位共有000001010011100 101110111八种组合,除去 000(代表本身)和111(代表广播),还有六个组合,也就是可提供六个子网,它们的IP地址分别为:(前三个字节还是202.119.115 


00100001~00111110 
33~62为第一个子网 
01000001~01011110 
65~94为第二个子网 
01100001~01111110 
97~126为第三个子网 
10000001~10011110 
129~158为第四个子网 
10100001~10111110 
161~190为第五个子网 
11000001~11011110 
193~222为第六个子网 
选用161~190段给甲网,193~222段给乙网,因为各个子网都支持30台主机,足以应付甲网和乙网20台和25台的需求。 

再来看丙网,由于丙网有50台主机,按上述分割方法无法满足它的IP需求,我们 可以将它的SUBNET MASKS设为255.255.255.192 由于192的二进制值为11000000,按上述方法,它可以划分为两个子网,IP地址为: 

01000001~01111110 65~126为第一个子网 
10000001~10111110 
129~190为第二个子网 

这样每个子网有62IP可用,将65~126分配丙网,多个子网用一个NETWORK ID 即告实现。 

 

 

 

阅读(878) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~