PersonalCorpus 版 (精华区)

发信人: Kermit (<img src="../../sign.gif">), 信区: Hacker
标  题: 用SYN包特性增强网络安全
发信站: 哈工大紫丁香 (Fri Apr 11 03:29:13 2003) , 转信


本文介绍了一种用SYN包(连接请求包)特性来增强网络安全的简单方法
------------------------------------------------------------------------------
--
By 处处, 出处:bye2000


  考虑下面的情形: 

  内部网为198.199.1.0,用linux作路由器兼防火墙连接到Internet。在防火墙上,eth
0接外网,eth1接内网。 

  针对www服务的安全性,设置如下一组ipchains 规则: 

  ipchains -A input -p tcp -s 198.199.1.0/24 :1024 
           -d 0.0.0.0/0 www -i eth1 -j ACCEPT 
  ipchains -A input -p tcp -s 0.0.0.0/0 www 
           -d 198.199.1.0/24 1024: -i eth0 -j ACCEPT 

  在以上的设置中,只允许内部用户用1024(非定义端口)以上的端口访问Internet中
的www主机;换句话说,允许内部网主机上大于1024的端口和Internet上的80端口建立连接
。试想一下,这将允许Internet上的主机用80端口连接到你内部网主机的一个大于1024的
端口上,由此我们看到,系统存在安全隐患,因为有好多服务的服务端口是大于1024的。
那么,怎么样来克服这一隐患呢,我们可以用SYN包的特性来消除这一隐患。

  先让我们来看一看TCP数据段头的标志位。TCP共有六位标志位,分别是:URG、ACK、
PSH、RST、SYN和FIN。我们着重来看一下其中的ACK、SYN和FIN标志位。 

  ACK:表示确认号是否合法,1表示合法,0表示确认号无效。确认号指的是希望收到的
下一个字节而不是前面已经收到的字节。由此可见,发起建立连接请求的包(即第一个保
)的ACK为总是置0的,其后的包则总是置1。

  SYN:用来建立连接。在连接请求中,SYN=1,连接请求确认中,SYN=1。因此,SYN表
示CONNECTION REQUEST和CONNECTION ACCEPTED。在其后的TCP包中,SYN总是被置成0。 

  FIN:用于撤销连接。 

  以上可以用下表来加以总结: 

ACK标志位 SYN标志位 该TCP包的含义 
0 1 连接请求 
1 1 连接请求确认(接受连接请求) 
1 0 确认连接请求确认  
1 0 数据包  
... ... ... 

  我们所谓的SYN包,就是连接请求包。如上所示,SYN包具有如下特点:SYN=1,ACK=0
,FIN=0。所以,为了过滤连接请求包,只要将SYN包过滤掉即可。 

  在ipchains中,我们可以这样来指定SYN包: 

  -p tcp -s x.x.x.x/x -y 

  如可以这样定义所有来自192.168.1.0的SYN包: 

  -p tcp -s 192.168.1.0/24 -y 

  我们也可以在-y前面加上!来定义所有非SYN包: 

  -P tcp -s x.x.x.x/x ! -y 

  所以,在上面的例子中,我们可以这样来增强网络的安全性: 

  ipchains -A input -p tcp -s 198.199.1.0/24 :1024 
           -d 0.0.0.0/0 www -i eth1 -j ACCEPT 
  ipchains -A input -p tcp ! -y -s 0.0.0.0/0 www 
           -d 198.199.1.0/24 1024: -i eth0 -j ACCEPT 

  这将禁止Internet上的主机用80端口连接到你内部网主机的一个大于1024的端口,从而
达到增强网络安全性的目的。

  参考资料: 

  1.IPCHANIS-HOWTO 

  2.Internet 防火墙域网络安全 

  3.计算机网络



--

※ 来源:.哈工大紫丁香 http://bbs.hit.edu.cn [FROM: 218.109.184.65]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.224毫秒