同城约会| 杂志期刊| 小说| 两性论坛| 军事电影| 两性知识| 电脑知识| 汽车| 旅游| 收藏

FreeBSD连载(79):设置和使用ipfilter

来源: 作者: 出处:综艺读书 2006-10-10 
关 键 词:unix  

设置和使用ipfilter

  虽然ipfw/natd已经是相当强大的网络地址转换及防火墙系统,然而它还是有一定的缺点存在。其中最重要 的一个缺点是natd是使用守护进程的方法来进行地址转换,因为它没有运行在内核中,而是通过divert socket 来和内核通信,这种方式虽然比较灵活,但效率显然要低一些。

  另外,natd的功能还不能满足有些要求,natd能做静态地址转换和使用一个伪装地址为多个内部地址服务, 但其不能从一个给定的地址池中,为内部地址自动分配IP地址。毕竟natd是一个较早的网络地址转换工具,当前的发展 已经比较迟缓。但是由于ipfw是FreeBSD系统的一部分,并且过滤和地址转换是由不同的部分来完成的,结构清晰 ,因此对于大部分情况都很适合,因此一般仍应使用ipfw/natd。

  如果ipfw/natd不能满足使用者的需要,能避免ipfw/natd缺点的另一个网络地址转换和数据包过 滤的工具是ipfilter。虽然FreeBSD是其支持的主要系统,但它其实是一个支持多平台的独立软件,不仅能运 行在FreeBSD上,也能运行在其他多种Unix系统中。由于它被包括进FreeBSD基本系统中,因此在FreeBSD 下配置ipfilter同样也非常轻松。

  ipfilter的网址为http://cheops.anu.edu.au/~avalon/, FreeBSD 3.0之前它不包括在FreeBSD的基本系统中,需要手工设置。

  由于ipfilter与ipfw同为在内核级对IP数据包进行处理的系统,因此他们相互冲突,不能同时并存在 一个内核内,否则内核的TCP/IP功能就不能正常执行。为了使用ipfilter,就需要重新定制内核,删除所有 IPFIREWALL的设置,而添加IPFILTER的设置。

#options		IPFIREWALL

#options		IPDIVERT



options		IPFILTER

options		IPFILTER_LOG

  选项IPFILTER为支持IPFILTER的基本代码,IPFILTER_LOG为支持IPFILTER的 统计记录能力。需要增加这些选项,并注释IPFIREWALL、IPDIVERT及其相关选项。此后,就可以重新定制 、安装新内核。然而在重新启动之前,还需要在rc.conf中设置firewall_enable的值为NO,当系统 内核不存在IPFIREALL功能又设置了firewall_enable的时候,启动文件就会自动载入支持这个功能 的可加载模块ipfw.ko,载入ipfw.ko之后的系统内核就等同于使用IPFIREWALL内核选项的系统,与 ipfilter发生冲突。然而ipfilter仍然需要设置gateway_enable,以打开系统内核的数据包 转发功能。

  使用新内核启动系统之后,如果本地计算机的网络功能正常,此时再使用ipfw就会报告错误。这就能使用ipfilter 来设置包过滤和网络地址转换了。

  • 设置地址转换

  为了在ipfilter下设置网络地址转换,首先要创建一个地址转换设置文件,例如/etc/ipflter .nat。与ipfw/natd的相似,最基本的用法为使用一个外部地址来转换所有内部地址,此时必须进行端口转换, 因此ipfilter.nat中应该包含的NAT规则为:

  map fxp1 192.168.3.0/24 -> 202.102.245.60/32 portmap tcp/udp 10000:65000

  这个设置中,首先使用map关键字指明是进行地址转换的设置,此后的fxp1为连接外部网络的网络界面,在这 个网络界面上执行数据包的IP地址和端口地址转换,第三个参数为进行转换的内部地址的范围,此后跟随的一个-> 符号表示进行地址转换,第五个参数为要转换为的外部地址,当指定子网掩码长度为32时就表示这只是一个主机而非子网范 围,后面portmap关键字对tcp/udp协议进行端口转换,其使用的映射端口范围为在10000到65000之 间,也可以对tcp或udp协议分别指定转换端口的范围。

  如果使用者拥有的不仅是一个主机,而是一个具备多个合法IP地址的子网,这样就能设置使用地址池,为内部向外 连接的计算机动态分配合法的外部IP地址,这样的设置更为简单,因为不需要指定portmap进行地址转换。

  map fxp1 192.168.3.0/24 -> 202.102.245.0/26

  显然内部计算机的数量显然要多于系统拥有的合法地址的数量,上例中内部地址最多254个,而合法的外部地址仅 仅有62个,这样如果向外连接的计算机一多,必然出现地址资源用光的问题。因此动态分配IP一般和端口转换结合起来, 以避免出现地址消耗完毕的问题。

  map规则是用于转换外出数据包的源地址,使得被转换后的地址好象是从外部地址中发起的。而另一个规则rdr 用于转换数据包中的目的地址,这样就能使得一个数据包被转发到某个特定计算机上进行处理,这可用于构建端口映射关系。

  rdr fxp1 202.102.245.60 port ftp -> 192.168.3.2 port ftp

  上面的规则将指定ipfilter在fxp1网络界面上将发送给202.102.245.60,端口为ftp 的数据包,转换为发送给内部地址192.168.3.2。

  rdr的另一个重要用途是可以用以构建透明的代理服务器,普通代理服务器都需要在客户机上进行设置,如果不进 行设置,客户机将直接访问Internet上的计算机而不通过代理服务器,然而防火墙可以将这些应用请求转发给代理服 务器,完成代理工作。此时对外界发送请求是在内部网络界面fxp0上发起的,因此也要在这里进行地址转换,而使用0.0.0.0/0 代表对所有目的地址,并且是80端口的浏览请求都转发到127.0.0.1上去,而127.0.0.1 必须运行代理服务器软件,以提供代理服务。

  rdr fxp0 0.0.0.0/0 port 80 -> 127.0.0.1 port 80

  虽然不是所有的应用代理服务都能使用透明代理的方法来减轻客户设置的负担,但绝大多数代理完全可以使用这种方 法,使得客户不需要修改软件设置,就能利用代理服务器,而代理服务器具备大量的缓冲区,能够节约内部网络的Internet 访问流量并加速Internet访问速度。

  因此,一个简单的不支持透明代理服务器的设置文件ipnat.conf例子为:

map fxp1 192.168.3.0/24 -> 202.102.245.0/26 portmap tcp/udp 10000:65000

map fxp1 192.168.3.0/24 -> 202.102.245.0/26

rdr fxp1 202.102.245.60 port ftp -> 192.168.3.2 port ftp

  在这样的设置下,tcp和udp在地址资源消耗完毕之后将进行端口转换,而其他协议,如icmp,将直 接进行地址转换而不必进行端口转换。此后就可以将这个转换规则加入系统中,需要执行ipnat命令:

# ipnat -C

# ipnat -f /etc/ipnat.conf

  当前使用-C参数用于清除现有的转换规则,-f用于从配置文件中读取转换规则。设置了转换规则之 后,就可以使用-l参数查看当前设置的转换规则和已经激活的转换关系。

# ipnat -l

List of active MAP/Redirect filters:

map fxp1 192.168.3.0/24  -> 202.102.245.0/26  portmap tcp/udp 10000:65000

map fxp1 192.168.3.0/24  -> 202.102.245.0/26 

rdr fxp1 202.102.245.60/32 port 21 -> 192.168.3.2 port 21 tcp



List of active sessions:

RDR 192.168.3.2     21    <- -> 202.102.245.60  21    [202.102.245.25 35635] 863

992 0 407

MAP 192.168.3.2     1024  <- -> 202.102.245.60  10000 [202.102.245.25 9999] 8639

93 0 1f09

  • 设置包过滤

  ipfilter也能很好的完成包过滤任务,它的过滤规则相当复杂。下面为一些简单的过滤设置例子,一般 这些过滤规则可以保存在/etc/ipf.conf文件中。

block in log quick all with short

block in log quick all with ipopts

  block参数用于屏蔽符合过滤条件的数据包,in代表数据包的方向,标识从网络上或其他网络界面上发送到某 个网络界面上的数据包,log用于指出该规则过滤的数据包应被记录下来,quick指示ipfilter进行快速过滤 处理,符合这个规则的数据包将立即丢弃,all with short标识不完整的IP数据包,数据包的长度太小就没 有包含合法的源地址或目标地址,从而无法被ipfilter识别,all with ipopts标志本身带有路由数 据的IP数据包,这些IP数据包由于包含自己的路由信息,因此可能会带来网络安全问题。

  这两句设置用于过滤可能会带来安全问题的短数据包或具备路由信息的数据包。

pass in on fxp0 all

pass out on fxp0 all

pass in on lo0 all

pass out on lo0 all

  pass用于指定数据包可以通过,out与in相反,标识从网络界面向网络上或其他网络界面发送的数据 包,而on fxp0或on lo0标识进行处理的网络界面。这里的设置允许内部网络界面、loopback网络界面可以自 由发送和接收数据包。

block in log on fxp1 all

block out log on fxp1 all

  为了安全起见,除了明确指定可以发送和接收的数据包之外,屏蔽其余的外部网络界面进行数据发送和接收。

block in log quick on fxp1 from 10.0.0.0/8 to any

block in log quick on fxp1 from 192.168.0.0/16 to any

block in log quick on fxp1 from 172.16.0.0/12 to any

block in log quick on fxp1 from 127.0.0.0/8 to any

  上面的设置明确屏蔽具备内部网络地址的数据包被转发到外部网络去,由于ipfilter中地址转换和包过 滤是在同一个系统中完成的,因此不必担心它们会发生冲突问题。 更多内容请看Freebsd安装/配置  Freebsd频道  FreeBSD使用教程专题,或进入讨论组讨论。

收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
综艺读书宗旨
相关专题
·FreeBSD系统安全管理 (7310篇文章)
·FreeBSD使用教程 (5218篇文章)
·Freebsd频道 (618篇文章)
·FreeBSD系统安装 (178篇文章)
·FreeBSD系统的使用 (83篇文章)
·Freebsd安装/配置 (192篇文章)
热点标签: unix  
阅读排行榜
最新技术文档
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
百度推荐,商机无限
搜索您感兴趣的内容
Web 全站
综艺电脑频道编辑信箱  告诉我们您想看的专题或文章

Google

友情互链 | 收藏本站 | 联系我们 | 在线留言 | 京ICP备08008424号|