云联天下首页 |  登陆 |  注册 |  密码找回 |  关于我们 | 加入收藏 
首页技术资料系统/服务器→FREEBSD中使用IPFW来过滤ICMP服务 【字号: 】 【背景色 杏仁黄 秋叶褐 胭脂红 芥末绿 天蓝 雪青 灰 银河白(默认色)

FREEBSD中使用IPFW来过滤ICMP服务

网址来源:http://www.kehui.net发布时间: 2004-11-15 07:10:22



    FREEBSD中可以使用IPFW来停止PING的响应,即可以调制内核和使用IPFW来拒绝 
ICMP服务,这样别人用PING就看不到任何信息了。 

先介绍下IPFW:在专用路由器系统开始流行之前,Internet上的路由器大部分 
是基于Unix的软件路由器,其中多数是BSD Unix。显然这是由于BSD Unix在 
Internet上占据的重要地位决定的,即便是在专用硬件路由器流行的今天, 
当由于价格等因素不能考虑硬件路由器时,BSD系统仍然是用作软件路由器的 
首选系统。 

  由于路由器处于网络之间,所有网络间需要交换的数据包都要通过它转发, 
因此就可以进行一定的限制,即按照预定义的一定规则处理每个数据包,符合 
要求的允许通过,不符合要求的就进行丢弃。这样路由器就能用作一个简单的 
防火墙系统,保护内部计算机。BSD系统中最早使用ipfw过滤器来定义不同的 
过滤规则,随后ipfw也被移植到其他平台上,并根据开发者的理解不同而独立 
发展。当前不同系统上的ipfw已经大不相同了,并出现了具备相同功能的其他过 
滤器, FreeBSD下的ipfw也经过了不断发展,具备了更强的过滤能力,尤其是 
它能和natd守护进程相结合,提供网络地址转换能力,具备更完善的防火墙能力。 


FreeBSD的包过滤能力是在内核中实现的,这样才具备最高的效率和性能。因此 
为了在FreeBSD上使用这个防火墙功能,需要在编译内核时打开下面选项重新定 
制内核。 

这文章里需要你在内核编制中打开下面的选项: 

IPFIREWALL 
IPFIREWALL_VERBOSE 
"IPFIREWALL_VERBOSE_LIMIT=100" 
options IPFIREWALL_DEFAULT_TO_ACCEPT 

IPFILTER 
IPFILTER_LOG 

其中第一项设置IPFIREWALL是用于打开基本的包过滤支持的,只有使用它才能在 
内核中支持包过滤。IPFIREWALL_VERBOSE 和IPFIREWALL_VERBOSE_LIMIT设置记 
录过滤日志,及日志记录的限制。IPFIREWALL_DEFAULT_TO_ACCEPT是设置 
IPFIREWALL的缺省行为,在数据包不符合所有的过滤规则的情况下进行转发, 
显然这是一种宽松的限制,此时系统主要用于屏蔽特定地址和特定服务,而提 
供其他的缺省网络能力。如果没有定义这个选项,系统就只能允许符合已定义 
规则的数据包通过,而屏蔽其他任何数据包,这样在没有定义过滤规则的情况 
下,系统不能和其他计算机相互通信。而IPFILTER是通知内核支持ipfilter, 
IPFILTER_LOG是进行ipfilter LOG记录。 

OK,再经过内核重新编译(内核编译请参看其他文章),还需要设置内核具备 
数据包的转发能力。需要在rc.conf中设置gateway_enable 的值为YES,这样 
就能在系统启动时自动打开包转发能力。也可以直接执行下面命令来打开内 
核包转发能力。 

好了,下面主要描述我们来拒绝ICMP的服务规则,因为测试所用,所以你可以建立 
一个文件如(myfile)并增加下面的条目: 

ip="你的IP地址" 
ipfw -f flush #Forces your current firewall to be flushed! 
ipfw add pass log icmp from $ip to any icmp 8 
ipfw add pass log icmp from not $ip to $ip icmp 0 

把文件保存后,并使用chmod +x myfile设置文件属性,并运行文件。 

其中第一条是设置你的IP为一变量; 
第二条是flush表示强制清楚你当前防火墙的所有规则; 
对于第三,第四条,我们先来看看具体指令的意义: 

add是增加规则,而pass指令是这条规则的处理指令,类似allow,而log 
是记录指令,这个指令和其他指令不同,其他指令是对数据包进行处理的 
指令,而log只是记录这个数据包,而数据包本身还将继续受到其他过滤 
规则的处理,而icmp栏本身是过滤规则中规定数据包的协议类型,指定规 
则是用于处理哪种数据包的,FreeBSD可以处理TCP,UCP,ICMP 类型的数据, 
以及在/etc/protocols文件中定义的其他数据包的类型,上例中指定类型 
是ICMP,因为我们要对ICMP进行处理,而from $ip to any是规定过滤规则 
适用的地址范围,这可以通过指定源和目的计算机的IP地址范围或数据包 
通过的网络界面来进行指定: 

--用from规定数据包的来源地址,可以是主机地址或网络; 
--用to规定数据包的目的地址,可以是主机地址或网络; 
--用in或out规定数据包是流向本机,还是向外发送的; 

所以第三条的规则意思是允许你使用到任何地址使用icmptype 8,echo-request, 
而第四条是你获得icmptype 0,echo-reponse信息,但阻止你发送echo-reponse. 

这上面的示例能比较好的阻止一些端口扫描器的扫描,因为多数端口一般开始使用 
ping来查看是否主机在线,但上面我们的traceroute就不能工作了,traceroute 
先发送UDP信息包并等待icmp包返回,因此下面的规则是阻止入站的icmp type 8, 
但允许所需要的icmp类型入站来进行traceroute的tracing(追踪): 

    参照下面的列表: 
    0 echo-reply ping 
    3 destination-unreachable Any TCP/UDP traffic. (目标主机不可达) 
    5 redirect routing if not running routing daemon (如没有有运行routing 
                            守护程序重定向routing) 
    8 echo-request ping 
    11 time-exceeded traceroute (traceroute超时) 
    当然icmp还有其他类型,请参看Request for Comments:  792 


1,    ipfw add pass log udp from $ip to any 
2,    ipfw add pass log icmp from $ip to any icmp 8 
3,    ipfw add pass log icmp from not $ip to any icmp 0 
4,    ipfw add pass log icmp from not $ip to any icmp 11 
5,    ipfw add pass log icmp from not $ip to any icmp 3 

上面的规则4是接受icmp type 11但拒绝你发送,规则5是接受icmp type 3,但 
拒绝你发送icmp type 3的信息。 

按照上面的规则并进行测试,你可以traceroutes和ping目标主机防火墙规则能 
接受它们的回应,而你可以让你朋友traceroute/ping你的目标主机,但他讲不会 
得到任何回应或者出现超时错。 


总结:icmp和其他协议不同之处是icmp过滤使用类型而不使用端口,一般应用程序 
可以使用端口来增加过滤功能,但icmp是用类型类规定进出站的信息,如"echo-request" 
是入站信息而"echo-response"是出站信息,这样就可以对信息进行过滤。 

具体一般协议的规则使用方法是在目标和源地址后面进行端口规定,如: 

ipfw add pass tcp from any [要规则处理的端口] to $ip [要规则处理的端口] 

而ICMP是定义要规则处理的协议,如: 

ipfw add pass icmp from any to $ip [要规则处理的协议] 

最后如果你有其他规则加入此文件增加过滤能力,你如果要在FREEBSD启动时候 
加入这些规则,FREEBSD有rc.firewall文件进行启动处理,只要把这些规则加入 
rc.firewall后就能自动进行处理。 

参考文章: 
http://www.freebsdrocks.com/show.php3?ThisArticleID=6197&start=1&s 
Return=25&search_category=8&search_criteria=&search_field= 
http://freebsd.online.ha.cn/focus/FreeBSD/index.shtml 
Request for Comments:  792   

xundi@xfocus.org 2000-06-17                 
(http://www.fanqiang.com)
    进入【UNIX论坛

白衫 

相关新闻
v FREEBSD中使用IPFW来过滤ICMP服务 2004-11-16 07:13:17
v 如何压缩FreeBSD内核? 2004-11-16 07:14:44
v 怎样编译FreeBSD内核 2004-11-16 07:15:07
v FreeBSD紧急救援状况的应变措施 2004-11-16 07:15:58
v FreeBSD 4.0 Kernel Hacking Guide--i386/i386/locore.s 2004-11-16 07:19:36
v FreeBSD如何保存和使用内核更改信息? 2004-11-16 07:19:59
v 在FreeBSD 4.0下安装USB鼠标支持 2004-11-16 07:21:50
v 如何在 FreeBSD 下压 MP3 2004-11-16 07:22:46
v FreeBSD的系统log日志 2004-11-16 07:23:11
v ports 装不起来的几种状况 2004-11-16 07:23:58
  最新新闻
智慧家居
智慧家居颠覆传统智能家居
智慧云谷让智能家居变成有智慧的
智慧云谷引领智慧家居新生活
科技改变生活 智慧云谷智慧家居系
智慧家居领航者,智慧云谷助你玩
智能家居如何赢得市场美誉度?
智慧云谷智慧家居:创业者有无限
WiFi智能家居你还在用?这样的智
互联网+助推智能家居产业
智慧云谷为您打造真正的智能家居
智能家居产业需要的不是单品,而
新家如何选择开关?智慧云谷iWis
智能传感器-世界首款“智”为你的
智慧云谷开关智能安防智能空气质
智能开关品牌,如何选择智能开关
秋季干燥,智慧家居温湿度传感器
传感器助力智慧家居 感知爱家
iWiscloud智能触摸开关缔造家居装

  最新帖子
 ※室内空气污染的危害及  [sensor]
 ※超声波风速传感器在生  [sensor]
 ※这么冷清  [gabc111]
 ※手机APP操作有问题  [ssy11407]
 ※智慧云谷智慧家居将在  [cici]
 ※上传下载  [cici]
 ※下载智慧家居  [apple2008]
 ※秋季干燥,智慧家居温  [apple2008]
 ※智慧家居紧扣热点 安全  [apple2008]
 ※办公大楼如何智慧化管  [apple2008]
 ※智慧云谷工业自控的优  [apple2008]
 ※传感器助力智慧家居 感  [apple2008]
 ※智能开关品牌,如何选  [apple2008]
 ※智慧云谷开关智能安防  [apple2008]
 ※没有专业人员,如何安  [apple2008]
 ※烟台智慧云谷董事长任  [apple2008]
 ※互联网+助推智能家居产  [apple2008]
 ※WiFi智能家居你还在用  [apple2008]
 ※智慧云谷智慧家居:创  [apple2008]
 ※智能家居如何赢得市场  [apple2008]
钯碳回收 硝酸银回收 银浆回收 银焊条回收 回收银浆 氯化钯回收 氯化钯回收 氧化钯回收 回收硝酸钯 钯水回收价格 海绵钯回收 钯炭回收价格 回收镀金板 深圳钯碳回收 镇江氯化钯回收 杭州钯浆回收 银浆回收多少钱 回收钯碳公司 硝酸银的价格 那里有回收金 氯化钯回收价格 江苏擦银布回收 硝酸银价格 德州钯粉回收 银铜回收 回收钯粉 回收铂碳催化剂 佛山钯碳回收 金盐回收价格 海绵钯回收 钯碳高价回收 钯回收价格 钯炭回收