免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1475 | 回复: 0
打印 上一主题 下一主题

solaris 10 IP Filter 高级应用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-03 23:49 |只看该作者 |倒序浏览
在这篇帖子里我简单讲述了IP Filter的基本配置(
http://bbs.chinaunix.net/viewthr
... 1%26filter%3Ddigest),在这里,我们将话题延伸,来共同学习一下它的一些高级应用
1、网络地址转换和代理
防火墙一个最大的应用是使几台机器可以通过一个公用的外部接口连到外部网络。对于那些熟悉linux的用户来说,这个概念就是ip伪装,对于其他人来说它有一个更模糊的说法"网络地址转换",简称NAT.
其实ipfilter可以称为NPAT,因为ipfilter不仅对地址进行转换还对端口进行转换,而NAT只是改变了地址。
1.1 多个地址转换为一个地址
基本的NAT可以完成Linux ip伪装的功能,可以这样做:
map pcn0 192.168.1.0/24 -> 202.110.20.1/32
很简单,只要源地址符合192.168.1.0/24 通过pcn0 出去的数据包,它的源地址都会被改写为202.110.20.1而目的地址不会改变。系统为地址转换维护一个表,这样回复的包都可以根据这个表转换为正确的地址(202.110.20.1 转换成内网地址)。
但是在大部分情况下,我们并不知道我们外网的ip 地址(动态地址),这种情况下外网地址可以用0/32来代替,当它发现地址是0/32时它就知道应该查找接口的真正地址。
map pcn0 192.168.1.0/24 -> 0/32
当你的IP地址动态改变后要运行一下ipf -y
在你的网络中可能有很多主机用到了相同的源端口,这个时候就会发生冲突,这时候可以用关键字portmap 解决这个问题:
map pcn0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:30000
它的作法是将所有的链接都塞入20000到30000之间的端口,一般不必要这么做,有可能在你的防火墙外还有一层防火墙,你可能需要符合他的端口规则。
1.2 多地址影射到地址池
map pcn0 192.168.0.0/16 -> 202.110.20.0/24 portmap tcp/udp 20000:60000
当然有些远程应用需要多个链接来自同一个ip地址(比如192.168.0.31需要访问218.9.121.110,它的并发链接经过NAT 之后很有可能来自不同的IP 地址),我们可以告诉NAT 静态的映射每个链接,用关键字map-block实现:
map-block pcn0 192.168.1.0/24 -> 202.110.20.0/24
在做地址池的时候,尽量使用map-block关键字,这样能够保证你的连接不会出现问题
1.3 点对点映射
bimap pcn0 192.168.1.1/32 -> 202.110.20.1/32
1.4 伪装
假设我们有一台web服务器地址是202.110.20.5,我们怀疑我们网络的安全性有问题,我们不想在端口80上提供服务,因为它需要用root来运行一小段时间。我们如何让web服务器运行于8000端口呢?客户机如何访问呢?我们可以使用NAT的重定向来解决这个问题,指示所有对202.110.20.5:80访问都指向202.110.20.5:8000,用rdr 关键字来实现:
rdr pcn0 202.110.20.5/32 port 80 -> 202.110.20.5 port 8000
当然这里我们也可以指定协议,如果我们想重定向一个udp服务而不是tcp(tcp是默认的)。例如,如果我们在防火墙上有一个模仿windows后门的"蜜罐",我们可以把整个网络都定向到这个地方:
rdr pcn0 202.110.20.0/24 port 31337 -> 127.0.0.1 port 31337 udp
rdr 有一个相当重要的地方:你不能简单地把重定向用成“反射镜”。例如:
rdr pcn0 202.110.20.5/32 port 80 -> 202.110.20.6 port 80 tcp
将不会正常工作,因为.5和.6在同一个局域网段上。首先,一个到达202.110.20.5接口pcn0的数据包将会被重定向到202.110.20.6,也就是它的目的地址被修改了,然后被送到ipf过滤规则进行过滤(注意作用顺序,先地址转换后过滤),如果它通过了ipf,那么它就被送到unix路由代码处,这个时候这个数据包目的地址被改了,但是它的目的接口还是pcn0,系统就不知道该怎么办了。因此"反射镜"是不能正常工作的。记住:使用rdr时,目的地址必须是从不同的接口离开防火墙。
1.5 透明代理
当你在建立一个防火墙的时候,你会认为应该谨慎的使用代理,你可以"绷紧"你的防火墙规则来保护你的内部网。或者你认为你的NAT 没有正常的工作,你可以使用重定向:
rdr xl0 0.0.0.0/0 port 21 -> 127.0.0.1 port 21
这条规则是说任何连接ftp的数据包都被重定向到了127.0.0.1针对ftp的代理有些复杂,因为web浏览器或者其它自动登录类型的客户端不知道如何跟代理通信。有个补丁是针对TIS 防火墙的sftp-gw,NAT 配合这个补丁能够解决这个问题。很多代理软件是透明代理(如squid)。
2.加载NAT规则,ipnat
#ipnat -CF -f /etc/ipf/ipnat.conf
3. 监视和调试
你也许很想知道防火墙到底在干什么,而且如果ipfilter没有状态监视工具的话,它就不是一个完整的防火墙。
3.1 ipfstat工具
ipfstat最简的用法是显示一个关于防火墙执行情况的数据表,比如有多少个包通过或则抛弃,它们是否被
记录,以及由多少状态条等等。你将看到的是这样一些数据:
# ipfstat
input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0
output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0
input packets logged: blocked 99286 passed 0
output packets logged: blocked 0 passed 0
packets logged: input 0 output 0
log failures: input 3898 output 0
fragment state(in): kept 0 lost 0
fragment state(out): kept 0 lost 0
packet state(in): kept 169364 lost 0
packet state(out): kept 431395 lost 0
ICMP replies: 0 TCP RSTs sent: 0
Result cache hits(in): 1215208 (out): 1098963
IN Pullups succeeded: 2 failed: 0
OUT Pullups succeeded: 0 failed: 0
Fastroute successes: 0 failures: 0
TCP cksum fails(in): 0 (out): 0
Packet log flags set: (0)
none
ipfstat当然也能够显示你目前的规则列表。参数-i或者-o显示有哪些in规则或者out 规则,加上参数-h能
够显示更详细的信息,包括每条规则有多少个数据包命中。例如:
# ipfstat -ho
2451423 pass out on xl0 from any to any
354727 block out on ppp0 from any to any
430918 pass out quick on ppp0 proto tcp/udp from 202.110.20.0/24 to any keep state keep frags
从这里我们可以看出哪些地方可能不正常,ipfstat 不能告诉你哪些规则正确或者错误,它只是告诉你由于
你的规则而发生了什么事情。为了进一步调试规则,可以使用参数-n,这个参数显示规则的顺序
# ipfstat -on
@1 pass out on xl0 from any to any
@2 block out on ppp0 from any to any
@3 pass out quick on ppp0 proto tcp/udp from 202.110.20.0/24 to any keep state keep frags
ipfstat的最后一个用处是显示一些关于状态记录的数据。这个参数是-s
# ipfstat -s
281458 TCP
319349 UDP
0 ICMP
19780145 hits
5723648 misses
0 maximum
0 no memory
1 active
319349 expired
281419 closed
100.100.100.1 -> 202.110.20.1 ttl 864000 pass 20490 pr 6 state 4/4
pkts 196 bytes 17394 987 -> 22 585538471:2213225493 16592:16500
pass in log quick keep state
pkt_flags & b = 2, pkt_options & ffffffff = 0
pkt_security & ffff = 0, pkt_auth & ffff = 0
从这我们可以看到有一条tcp连接状态。不同的版本输出的内容会略有不同,但是基本的信息是一样的。这条连接的状态是4/4,而其它的状态是不完整的,我们将在后面详细介绍。4/4状态的超时时间是240小时,相当长的一段时间,但它默认是已建立的tcp连接的超时时间。当这条状态空闲时TTL的值每秒减1,最终超时并被删除。当一个连接状态重新启用时,它的TTL值又恢复到864000,必须确保一个活动的连接不会超时。我们还可以看到有196 个17K的数据包通过。还有两端的端口号,这个例子是987 和22。这意味着这条状态表示一个从100.100.100.1 端口987 到202.110.20.1 端口22 的连接。第二行最大的数字
是TCP顺序号,保证没有人能够轻易的在这个连接中注入伪装的数据包。TCP的窗口也显示出来
3.2 ipmon
ipfstat对收集在系统上发生的事情很有用,但是它还不能够方便且及时的查看日志。ipmon是一个工具,它有能力查看包过滤的日志(关键字log产生的日志),状态日志,或者是nat日志以及由它们三者共同产生的日志。这个工具可以在前台运行也可以在后台运行(将日志传给syslogd或者一个文件)。如果我们想看状态表的当前情况,可以运行ipmon -o S
# ipmon -o S
01/08/1999 15:58:57.836053 STATE:NEW 100.100.100.1,53 -> 202.110.20.15,53 PR udp
01/08/1999 15:58:58.030815 STATE:NEW 202.110.20.15,123 -> 128.167.1.69,123 PR udp
01/08/1999 15:59:18.032174 STATE:NEW 202.110.20.15,123 -> 128.173.14.71,123 PR udp
01/08/1999 15:59:24.570107 STATE:EXPIRE 100.100.100.1,53 -> 202.110.20.15,53 PR udp Pkts 4 Bytes
356
01/08/1999 16:03:51.754867 STATE:NEW 202.110.20.13,1019 -> 100.100.100.10,22 PR tcp
01/08/1999 16:04:03.070127 STATE:EXPIRE 202.110.20.13,1019 -> 100.100.100.10,22 PR tcp Pkts 63
Bytes 4604
我们可以看到有一条外部机器向我们的dnssever发送dns请求的状态条,两条xntp ping到时间服务器,一条短暂的向外的ssh连接。
ipmon也可以显示哪些数据包被日志记录了。例如
# ipmon -o I
15:57:33.803147 ppp0 @0:2 b 100.100.100.103,443 -> 202.110.20.10,4923 PR tcp len 20 1488 -A
它们的含义分别是时间戳 接口 规则 阻止 源地址,端口 -> 目的地址,端口 协议 tcp 包长度 20 1488
ACK
最后我们看一下NAT表
# ipmon -o N
01/08/1999 05:30:02.466114 @2 NAT:RDR 202.110.20.253,113  202.110.20.253,113
[100.100.100.13,45816]
01/08/1999 05:30:31.990037 @2 NAT:EXPIRE 202.110.20.253,113  202.110.20.253,113
[100.100.100.13,45816] Pkts 10 Bytes 455
这是一条重定向的规则,用于在我们的防火墙后面提供规则的场合

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/8646/showart_108128.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP