• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

我用的是LINUX,但我觉得差不多,所以发到这里

发布: 2007-6-09 13:34 | 作者: seanhe | 来源: | 查看: 24次 | 进入软件测试论坛讨论

领测软件测试网
是关于FIREWALL的问题,由于LINUX的回答人不多,所以我在这里也放了一份,希望大家帮忙看看!
我是用iptables配置的防火墙,虽然我不懂ipfw,但我觉得应该和BSD的差不多,估计大拿们也都能看懂iptables的配置。先说我的配置规则吧:
[code:1:9bcfcfe7cf]
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -F -t filter
/sbin/iptables -F -t nat
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -A OUTPUT -j ACCEPT
/sbin/iptables -A FORWARD -j ACCEPT

# FTP
/sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 20 -j ACCEPT

# VPN
/sbin/iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
/sbin/iptables -A INPUT -p gre -j ACCEPT

# HTTP
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# SSHD
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# ICMP(PING)
/sbin/iptables -A INPUT -p icmp --icmp-type ! echo-request -j ACCEPT

# DENY OTHERS
/sbin/iptables -A INPUT -j DROP
[/code:1:9bcfcfe7cf]
边写边测,还挺美的 :lol: 
为了保证安全,我仅打开了我要公开的端口,一切外部连接测试都OK
后来却发现了一个问题!
……如果从LINUX访问别的机器的ftp,web.......都不行
我ftp另一台2000,结果像死机了一样
再执行netstat -a后,发现这样:
[quote:9bcfcfe7cf]
Proto Recv-Q Send-Q LocalAddress         ForeignAddress State
tcp     0          0           xx.xx.xx.xx:32798 xx.xx.xx.xx:ftp   SYN_SENT
[/quote:9bcfcfe7cf]
请问我应该怎么解决呢?

 i2era 回复于:2003-06-14 09:24:26
32798这个端口你打开了吗?没有吧,那包就进不来了
,所以是SYN_SENT ,这就是普通的包过滤防火墙的缺点所在。

想要解决,只要用基于状态的包过滤防火墙即可

[code:1:b4109d8eb7]
网络上数据的传输是双向的,因此所有服务所需要的数据包进出防火墙的端口都要仔细的被考虑到,否则,会产生意想不到的情况。然而我们知道,当被防火墙保护的设备与外界通讯时,绝大多数应用要求发出请求的系统本身提供一个端口,用来接收到外界返回的数据包,而且这个端口一般是在1023到16384之间不定的,这就增加了设计控制访问规则的难度。这里我们可以捕获一次由client到server的80端口访问的一些纪录来形象说明这个问题(截取的内容略有删节): 
17:48:52.513355 IP penetrat.1134 > server.80: S 1253142352:1253142352
17:48:52.515991 IP server.80 > penetrat.1134: S 1867056172:1867056172 ack 1253142353
17:48:52.516126 IP penetrat.1134 > server.80: . ack 1

 


我们可以从上述内容中看到,client为了完成对server的www网络访问,需要打开一个本机端口用来接收回来的数据包,此处是1134。如果防火墙没有开放1134这个端口的话,client将无法收到回应的数据包。

但是问题是由于系统和外界通讯的时候,本机的端口不是一定的,我们已经知道如果不放开这些端口,通讯将无法完成,那么只有一个方法,开放1023以上的全部端口,允许这些端口的数据包进出。这正是传统的包过滤型防火墙的做法。

这样做的危害是明显的,为了通讯,把所有的高端端口开放,危害了配置防火墙的最小开放性原则。上面我们提到过攻击者很容易利用这些漏洞比如rpc等服务攻击防火墙后的系统。

另一方面,由于普通的包过滤防火墙不能对数据传输状态进行判断,如收到ack数据包就想当然的认为这是一个建立的连接,从而对数据包放行,会带来一定的安全隐患。尤其当防火墙与IDS系统进行联动(目前商业产品中非常流行的做法)时,这会导致非常糟糕的状况,攻击者可能可以利用防火墙的这个弱点轻松的对目标系统进行拒绝服务攻击。

此时,也许我们可以借助于基于状态的包过滤防火墙,这种防火墙在传统的包过滤防火墙的基础上增加了对OSI第四层的支持,同时,防火墙会在自身cache或内存中维护着一个动态的状态表,数据包到达时,对该数据包的处理方式将综合访问规则和数据包所处的状态进行。

那么这个动态的状态表包括什么内容,又是如何产生的呢?这一点各个厂家实现的方式各有不同,但是一般而言,状态表的内容一般主要包括数据包的来源/目的ip地址、来源/目的端口、时间、以及数据包的sequence number(对于tcp连结)、数据包的标志符等(对于tcp连结)。当有数据包到达防火墙时,这些参数将决定数据包是否在属于一个已经合法的sessioin。如果防火墙接收到一个初始化tcp连接的带syn标志包,这个包会首先被防火墙的访问控制列检查,如果在检查了所有的控制规则后,该包都没有被接受,那么该次连接被拒绝;如果数据包符合某条访问控制规则,那么在状态表中一个新的session就被建立,后续的数据包状态如果与状态表内的session内容不一致(如虽然目的端口一致,但源端口不一致),那么数据包将被直接丢弃;如果判断数据包属于状态表中已经联接的session,那么数据包往往就直接允许通过,不再和访问控制列内容进行比较;同时,在状态表中一个session建立后,内存中会维护对这个session的动态超时值,比如,当防火墙两端的系统建立了连结,在状态表中生成了一个session,如果后续的数据包在某个设定的超时后依然没有到达,则此次session被丢弃,这样就一方面提升了防火墙效率,另外一方面可以在一定程度上防止拒绝服务攻击。

用上面的client访问server的web例子来看的话:此时防火墙不需要在规则中打开1023以上的端口,只需要放开80端口就可以了,因为防火墙信任的client端带syn标志的数据包经由防火墙访问控制规则允许的80端口出去,防火墙会登记源端口1134,目的端口80,两端ip地址,在状态表中增加一个session。这样当server端的80端口返回client数据包的时候,防火墙检查状态表,察觉到是由client端发起的合法连接,会自动打开1134端口,使数据包返回。
[/code:1:b4109d8eb7]

参考文章:
http://www-900.ibm.com/developerWorks/cn/security/l-udsfirewall/part1/index.shtml
http://www-900.ibm.com/developerWorks/cn/security/l-udsfirewall/part2/index.shtml
http://cmpp.linuxforum.net/NetSnake/pfhtcn.html
[/code]

 wanbin 回复于:2003-06-14 20:24:48
[quote:ff1c0ca0b5="i2era"][/quote:ff1c0ca0b5]     




经典啊!这是困绕我N久的问题。谢谢!
那实现这种基于状态的防火墙有啊些,是不是只有硬件的。
我觉得这种防火墙才是真正的防火墙。

 wanbin 回复于:2003-06-14 20:27:10
[quote:173763cc65="i2era"][/quote:173763cc65]     




经典啊!这是困绕我N久的问题。谢谢!
那实现这种基于状态的防火墙有啊些,是不是只有硬件的。
我觉得这种防火墙才是真正的防火墙。

 aborigen 回复于:2003-06-14 20:40:29
[quote:e0c53ca877="wanbin"]    




经典啊!这是困绕我N久的问题。谢谢!
那实现这种基于状态的防火墙有啊些,是不是只有硬件的。
我觉得这种防火墙才是真正的防火墙。[/quote:e0c53ca877]     


netfilter(iptables)和ipfilter 都可以实现基于状态的过滤:
以下是实例:
iptables:
#tcp forward rules
-N forward-tcp
-N forward-syn-flood-tcp
-A FORWARD -i $EXT_NIC -p tcp -j forward-tcp

#forward-tcp rules
#-A forward-tcp -i $EXT_NIC -p tcp --syn -j forward-syn-flood-tcp
-A forward-tcp -i $EXT_NIC -p tcp -m state --state NEW -j forward-syn-flood-tcp
#another tcp rules

#基于状态的检测
#for ESTABLISHED,RELATED tcp connect
-A forward-tcp -i $EXT_NIC -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
#another tcp ACCEPT,default for FORWARD is ACCEPT
-A forward-tcp -i $EXT_NIC -p tcp -j ACCEPT
#end of forward-tcp

#forward-syn-flood-tcp rules
-A forward-syn-flood-tcp -m limit --limit 100/s --limit-burst 200 -j RETURN
-A forward-syn-flood-tcp -j DROP 
#end of forward-syn-flood-tcp rules

ipfilter:
#for http and https
pass in quick on $EXT_NIC proto tcp from any to $EXT_ADDR port = 80 flags S/SA keep state group 100

#这里的keep state很重要,否则内部的主动连接发出后,返回的连接会被后面的block in on $EXT_NIC all拦截;
#pass out quick on $EXT_NIC proto tcp from any to any flags S/SA keep state group 200
pass out quick on $EXT_NIC all keep state group 200
pass out quick on $EXT_NIC all group 200

#block in all
#兜底的规则,拦截所有进入的连接;
block in quick on $EXT_NIC all group 100

###


我是如何学到以上知识的:
1. 在google搜索: “ipfilter iptables 基于状态 过滤”
2.http://www.ipfilter.org
3.http://www.netfilter.org
4.依据以上前人的知识自己实践。

 platinum 回复于:2003-06-14 20:41:19
问题已经解决!!!!
我的iptables配置规则如下:
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -F -t filter
/sbin/iptables -F -t nat
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
# /sbin/iptables -A OUTPUT -j ACCEPT
# /sbin/iptables -A FORWARD -j ACCEPT

# FTP
/sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 20 -j ACCEPT

# VPN
/sbin/iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
/sbin/iptables -A INPUT -p gre -j ACCEPT

# WWW and SWAT
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 901 -j ACCEPT

# SAMBA
/sbin/iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPT

# SOCKS5
/sbin/iptables -A INPUT -p tcp --dport 1080 -j ACCEPT

# SSHD
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# ICMP(PING)
/sbin/iptables -A INPUT -p icmp --icmp-type ! echo-request -j ACCEPT

# NAT
/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

# DENY OTHERS
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -j DROP

 aborigen 回复于:2003-06-14 20:47:24
[quote:db79edf615="platinum"]问题已经解决!!!!
我的iptables配置规则如下:
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -F -t filter
/sbin/iptables -F -t nat
/sbin/iptables -P INPUT ACCEPT
/sbin/..........[/quote:db79edf615]     


[color=red:db79edf615]/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT [/color:db79edf615]

恭喜你 :lol:

 platinum 回复于:2003-06-14 21:17:17
在这里我要谢谢大家啦!!!
(LINUX版的人没有回答给我)

 我爱臭豆腐 回复于:2003-06-14 21:39:53
[quote:017890b4e9="platinum"]在这里我要谢谢大家啦!!!
(LINUX版的人没有回答给我)[/quote:017890b4e9]     
朋友也许是linux版的人没有看到吧? :wink:

 i2era 回复于:2003-06-14 21:42:22
看来现在BSD版的人气不错

 红袖添香 回复于:2003-06-14 21:46:17
[quote:f2afb9e023="i2era"]看来现在BSD版的人气不错[/quote:f2afb9e023]    

也许是 Linux 人气过旺,铁子翻页过快~~~

:lol:

 quakelee 回复于:2003-06-14 21:49:16
[quote:f8b49a3c63="红袖添香"]   

也许是 Linux 人气过旺,铁子翻页过快~~~

:lol:[/quote:f8b49a3c63]     
我也觉得是 :lol: 
不象这里大家都一整天都盯着那五六个帖子~

 i2era 回复于:2003-06-14 21:50:24
唉,夜猫子的版面挺冷清的~~~

 aborigen 回复于:2003-06-14 21:53:49
[quote:c90978ace3="quakelee"]    
我也觉得是 :lol: 
不象这里大家都一整天都盯着那五六个帖子~[/quote:c90978ace3] 


帖子太少固然是坏事,帖子很多不见得是好事,linux我常常去看,非常多的帖子都是典型的luser帖子,我不知道是斑竹引导不够还是学linux的人就那样?

 南非蜘蛛 回复于:2003-06-14 22:00:23
[quote:0d6724ff88="quakelee"]    
我也觉得是 :lol: 
不象这里大家都一整天都盯着那五六个帖子~[/quote:0d6724ff88]     

要翻页那么快干什么?以前solaris版一天就翻4,5页,看的我头都疼

一想起来就头大,你身在福中不知福,没事躲到厕所偷着乐去吧 :lol:  :lol:

 quakelee 回复于:2003-06-14 22:02:50
[quote:dfa2522015="南非蜘蛛"]    

要翻页那么快干什么?以前solaris版一天就翻4,5页,看的我头都疼

一想起来就头大,你身在福中不知福,没事躲到厕所偷着乐去吧 :lol:  :lol:[/quote:dfa2522015]     
你一说我还真想去方便一下 :lol:  :lol:  :lol:

 红袖添香 回复于:2003-06-14 22:06:34
[quote:6b2e78b91b="i2era"]唉,夜猫子的版面挺冷清的~~~[/quote:6b2e78b91b]    

还有更冷清的,有次居然看到三四天才一个新帖,忘记在哪儿了,好象是段誉的地盘。。。

 i2era 回复于:2003-06-14 22:09:19
[quote:b3edd53d53="红袖添香"]   

还有更冷清的,有次居然看到三四天才一个新帖,忘记在哪儿了,好象是段誉的地盘。。。[/quote:b3edd53d53]     
Proxy服务器
版的精华区也很冷清
总共才有山篇铁籽

 Macolex 回复于:2004-12-30 14:55:16
现在状况仍然差不多

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网