FreeBSD SNP 3.Client端--连线实作

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只是记录这个数据包,而数据包本身还将继续受到其他过滤;

推荐阅读