本文目录一览:
- 1、防火墙程序怎么编?
- 2、如何构建防火墙
- 3、电脑防火墙代码是如何编写??
- 4、如何开发一个简单防火墙软件
- 5、如何用C++实现个人防火墙程序
- 6、防火墙怎么弄
防火墙程序怎么编?
防火墙工作原理简介
防火墙就是一种过滤塞(目前你这么理解不算错),你可以让你喜欢的东西通过这个塞子,别的玩意都统统过滤掉。在网络的世界里,要由防火墙过滤的就是承载通信数据的通信包。
天下的防火墙至少都会说两个词:Yes或者No。直接说就是接受或者拒绝。最简单的防火墙是以太网桥。但几乎没有人会认为这种原始防火墙能管多大用。大多数防火墙采用的技术和标准可谓五花八门。这些防火墙的形式多种多样:有的取代系统上已经装备的TCP/IP协议栈;有的在已有的协议栈上建立自己的软件模块;有的干脆就是独立的一套操作系统。还有一些应用型的防火墙只对特定类型的网络连接提供保护(比如SMTP或者HTTP协议等)。还有一些基于硬件的防火墙产品其实应该归入安全路由器一类。以上的产品都可以叫做防火墙,因为他们的工作方式都是一样的:分析出入防火墙的数据包,决定放行还是把他们扔到一边。
所有的防火墙都具有IP地址过滤功能。这项任务要检查IP包头,根据其IP源地址和目标地址作出放行/丢弃决定。看看下面这张图,两个网段之间隔了一个防火墙,防火墙的一端有台UNIX计算机,另一边的网段则摆了台PC客户机。
当PC客户机向UNIX计算机发起telnet请求时,PC的telnet客户程序就产生一个TCP包并把它传给本地的协议栈准备发送。接下来,协议栈将这个TCP包“塞”到一个IP包里,然后通过PC机的TCP/IP栈所定义的路径将它发送给UNIX计算机。在这个例子里,这个IP包必须经过横在PC和UNIX计算机中的防火墙才能到达UNIX计算机。
现在我们“命令”(用专业术语来说就是配制)防火墙把所有发给UNIX计算机的数据包都给拒了,完成这项工作以后,“心肠”比较好的防火墙还会通知客户程序一声呢!既然发向目标的IP数据没法转发,那么只有和UNIX计算机同在一个网段的用户才能访问UNIX计算机了。
还有一种情况,你可以命令防火墙专给那台可怜的PC机找茬,别人的数据包都让过就它不行。这正是防火墙最基本的功能:根据IP地址做转发判断。但要上了大场面这种小伎俩就玩不转了,由于黑客们可以采用IP地址欺骗技术,伪装成合法地址的计算机就可以穿越信任这个地址的防火墙了。不过根据地址的转发决策机制还是最基本和必需的。另外要注意的一点是,不要用DNS主机名建立过滤表,对DNS的伪造比IP地址欺骗要容易多了。
服务器TCP/UDP 端口过滤
仅仅依靠地址进行数据过滤在实际运用中是不可行的,还有个原因就是目标主机上往往运行着多种通信服务,比方说,我们不想让用户采用 telnet的方式连到系统,但这绝不等于我们非得同时禁止他们使用SMTP/POP邮件服务器吧?所以说,在地址之外我们还要对服务器的TCP/ UDP端口进行过滤。
比如,默认的telnet服务连接端口号是23。假如我们不许PC客户机建立对UNIX计算机(在这时我们当它是服务器)的telnet连接,那么我们只需命令防火墙检查发送目标是UNIX服务器的数据包,把其中具有23目标端口号的包过滤就行了。这样,我们把IP地址和目标服务器TCP/UDP端口结合起来不就可以作为过滤标准来实现相当可靠的防火墙了吗?不,没这么简单。
客户机也有TCP/UDP端口
TCP/IP是一种端对端协议,每个网络节点都具有唯一的地址。网络节点的应用层也是这样,处于应用层的每个应用程序和服务都具有自己的对应“地址”,也就是端口号。地址和端口都具备了才能建立客户机和服务器的各种应用之间的有效通信联系。比如,telnet服务器在端口23侦听入站连接。同时telnet客户机也有一个端口号,否则客户机的IP栈怎么知道某个数据包是属于哪个应用程序的呢?
由于历史的原因,几乎所有的TCP/IP客户程序都使用大于1023的随机分配端口号。只有UNIX计算机上的root用户才可以访问1024以下的端口,而这些端口还保留为服务器上的服务所用。所以,除非我们让所有具有大于1023端口号的数据包进入网络,否则各种网络连接都没法正常工作。
这对防火墙而言可就麻烦了,如果阻塞入站的全部端口,那么所有的客户机都没法使用网络资源。因为服务器发出响应外部连接请求的入站(就是进入防火墙的意思)数据包都没法经过防火墙的入站过滤。反过来,打开所有高于1023的端口就可行了吗?也不尽然。由于很多服务使用的端口都大于1023,比如X client、基于RPC的NFS服务以及为数众多的非UNIX IP产品等(NetWare/IP)就是这样的。那么让达到1023端口标准的数据包都进入网络的话网络还能说是安全的吗?连这些客户程序都不敢说自己是足够安全的。
双向过滤
OK,咱们换个思路。我们给防火墙这样下命令:已知服务的数据包可以进来,其他的全部挡在防火墙之外。比如,如果你知道用户要访问Web服务器,那就只让具有源端口号80的数据包进入网络:
不过新问题又出现了。首先,你怎么知道你要访问的服务器具有哪些正在运行的端口号呢? 象HTTP这样的服务器本来就是可以任意配置的,所采用的端口也可以随意配置。如果你这样设置防火墙,你就没法访问哪些没采用标准端口号的的网络站点了!反过来,你也没法保证进入网络的数据包中具有端口号80的就一定来自Web服务器。有些黑客就是利用这一点制作自己的入侵工具,并让其运行在本机的80端口!
检查ACK位
源地址我们不相信,源端口也信不得了,这个不得不与黑客共舞的疯狂世界上还有什么值得我们信任呢?还好,事情还没到走投无路的地步。对策还是有的,不过这个办法只能用于TCP协议。
TCP是一种可靠的通信协议,“可靠”这个词意味着协议具有包括纠错机制在内的一些特殊性质。为了实现其可靠性,每个TCP连接都要先经过一个“握手”过程来交换连接参数。还有,每个发送出去的包在后续的其他包被发送出去之前必须获得一个确认响应。但并不是对每个TCP包都非要采用专门的ACK包来响应,实际上仅仅在TCP包头上设置一个专门的位就可以完成这个功能了。所以,只要产生了响应包就要设置ACK位。连接会话的第一个包不用于确认,所以它就没有设置ACK位,后续会话交换的TCP包就要设置ACK位了。
举个例子,PC向远端的Web服务器发起一个连接,它生成一个没有设置ACK位的连接请求包。当服务器响应该请求时,服务器就发回一个设置了ACK位的数据包,同时在包里标记从客户机所收到的字节数。然后客户机就用自己的响应包再响应该数据包,这个数据包也设置了ACK位并标记了从服务器收到的字节数。通过监视ACK位,我们就可以将进入网络的数据限制在响应包的范围之内。于是,远程系统根本无法发起TCP连接但却能响应收到的数据包了。
这套机制还不能算是无懈可击,简单地举个例子,假设我们有台内部Web服务器,那么端口80就不得不被打开以便外部请求可以进入网络。还有,对UDP包而言就没法监视ACK位了,因为UDP包压根就没有ACK位。还有一些TCP应用程序,比如FTP,连接就必须由这些服务器程序自己发起。
FTP带来的困难
一般的Internet服务对所有的通信都只使用一对端口号,FTP程序在连接期间则使用两对端口号。第一对端口号用于FTP的“命令通道”提供登录和执行命令的通信链路,而另一对端口号则用于FTP的“数据通道”提供客户机和服务器之间的文件传送。
在通常的FTP会话过程中,客户机首先向服务器的端口21(命令通道)发送一个TCP连接请求,然后执行LOGIN、DIR等各种命令。一旦用户请求服务器发送数据,FTP服务器就用其20端口 (数据通道)向客户的数据端口发起连接。问题来了,如果服务器向客户机发起传送数据的连接,那么它就会发送没有设置ACK位的数据包,防火墙则按照刚才的规则拒绝该数据包同时也就意味着数据传送没戏了。通常只有高级的、也就是够聪明的防火墙才能看出客户机刚才告诉服务器的端口,然后才许可对该端口的入站连接。
UDP端口过滤
好了,现在我们回过头来看看怎么解决UDP问题。刚才说了,UDP包没有ACK位所以不能进行ACK位过滤。UDP 是发出去不管的“不可靠”通信,这种类型的服务通常用于广播、路由、多媒体等广播形式的通信任务。NFS、DNS、WINS、NetBIOS-over-TCP/IP和 NetWare/IP都使用UDP。
看来最简单的可行办法就是不允许建立入站UDP连接。防火墙设置为只许转发来自内部接口的UDP包,来自外部接口的UDP包则不转发。现在的问题是,比方说,DNS名称解析请求就使用UDP,如果你提供DNS服务,至少得允许一些内部请求穿越防火墙。还有IRC这样的客户程序也使用UDP,如果要让你的用户使用它,就同样要让他们的UDP包进入网络。我们能做的就是对那些从本地到可信任站点之间的连接进行限制。但是,什么叫可信任!如果黑客采取地址欺骗的方法不又回到老路上去了吗?
有些新型路由器可以通过“记忆”出站UDP包来解决这个问题:如果入站UDP包匹配最近出站UDP包的目标地址和端口号就让它进来。如果在内存中找不到匹配的UDP包就只好拒绝它了!但是,我们如何确信产生数据包的外部主机就是内部客户机希望通信的服务器呢?如果黑客诈称DNS服务器的地址,那么他在理论上当然可以从附着DNS的UDP端口发起攻击。只要你允许DNS查询和反馈包进入网络这个问题就必然存在。办法是采用代理服务器。
所谓代理服务器,顾名思义就是代表你的网络和外界打交道的服务器。代理服务器不允许存在任何网络内外的直接连接。它本身就提供公共和专用的DNS、邮件服务器等多种功能。代理服务器重写数据包而不是简单地将其转发了事。给人的感觉就是网络内部的主机都站在了网络的边缘,但实际上他们都躲在代理的后面,露面的不过是代理这个假面具。
参考资料:
如何构建防火墙
步骤/方法
防火墙实现了你的安全政策。防火墙加强了一些安全策略。如果你没有在放置防火墙之前制定安全策略的话,那么现在就是制定的时候了。它可以不被写成书面形式,但是同样可以作为安全策略。如果你还没有明确关于安全策略应当做什么的话,安装防火墙就是你能做的最好的保护你的站点的事情,并且要随时维护它也是很不容易的事情。要想有一个好的防火墙,你需要好的安全策略---写成书面的并且被大家所接受。
一个防火墙在许多时候并不是一个单一的设备。
除非在特别简单的案例中,防火墙很少是单一的设备,而是一组设备。就算你购买的是一个商用的"all-in-one"防火墙应用程序,你同样得配置其他机器(例如你的网络服务器)来与之一同运行。这些其他的机器被认为是防火墙的一部分,这包含了对这些机器的配置和管理方式,他们所信任的是什么,什么又将他们作为可信的等等。你不能简单的选择一个叫做“防火墙”的设备却期望其担负所有安全责任。
防火墙并不是现成的随时获得的产品。
选择防火墙更像买房子而不是选择去哪里度假。防火墙和房子很相似,你必须每天和它待在一起,你使用它的期限也不止一两个星期那么多。都需要维护否则都会崩溃掉。建设防火墙需要仔细的选择和配置一个解决方案来满足你的需求,然后不断的去维护它。需要做很多的决定,对一个站点是正确的解决方案往往对另外站点来说是错误的。
防火墙并不会解决你所有的问题。
并不要指望防火墙靠自身就能够给予你安全。防火墙保护你免受一类攻击的威胁,人们尝试从外部直接攻击内部。但是却不能防止从LAN内部的攻击,它甚至不能保护你免首所有那些它能检测到的攻击。
使用默认的策略。
正常情况下你的手段是拒绝除了你知道必要和安全的服务以外的任何服务。但是新的漏洞每天都出现,关闭不安全的服务意味着一场持续的战争。
有条件的妥协,而不是轻易的。
人们都喜欢做不安全的事情。如果你允许所有的请求的话,你的网络就会很不安全。如果你拒绝所有的请求的话,你的网络同样是不安全的,你不会知道不安全的东西隐藏在哪里。那些不能和你一同工作的人将会对你不利。你需要找到满足用户需求的方式,虽然这些方式会带来一定量的风险。
使用分层手段。
并在一个地点以来单一的设备。使用多个安全层来避免某个失误造成对你关心的问题的侵害。
只安装你所需要的。
防火墙机器不能像普通计算机那样安装厂商提供的全部软件分发。作为防火墙一部分的机器必须保持最小的安装。即使你认为有些东西是安全的也不要在你不需要的时候安装它。
使用可以获得的所有资源。
不要建立基于单一来源的信息的防火墙,特别是该资源不是来自厂商。有许多可以利用的资源:例如厂商信息,我们所编写的书,邮件组,和网站。
只相信你能确定的。
不要相信图形界面的手工和对话框或是厂商关于某些东西如何运行的声明,检测来确定应当拒绝的连接都拒绝了。检测来确定应当允许的连接都允许了。
不断的重新评价决定。
你五年前买的房子今天可能已经不适合你了。同样的,你一年以前所安装的防火墙对于你现在的情况已经不是最好的解决方案了。对于防火墙你应当经常性的评估你的决定并确认你仍然有合理的解决方案。更改你的防火墙,就像搬新家一样,需要明显的努力和仔细的计划。
要对失败有心理准备。
做好最坏的心理准备。机器可能会停止运行,动机良好的用户可能会做错事情,有恶意动机的用户可能做坏的事情并成功的打败你。但是一定要明白当这些事情发生的时候这并不是一个完全的灾难。
电脑防火墙代码是如何编写??
1、启动windows7防火墙
在windows7桌面上,单击“开始”进入控制面板,找到“windows防火墙”并点击。
2、基本设置
防火墙如果设置不好,阻止网络恶意攻击不给力不说,还可能会阻挡用户正常访问互联网,所以之前很多电脑用户都不会去手动设置防火墙,现在好了,windows7系统的防火墙设置相对简单了很多,普通的电脑用户也可以独立进行相关的基本 设置,点击进入“打开或关闭windows防火墙”设置窗口,点击“启用Windows防火墙”即可开启windows7的防火墙,windows7新手用户尽可放心大胆去设置,就算操作失误也没关系,windows7系统提供的防火墙还原默认设置功能可立马帮您把防火墙恢复到初始状态,windows7 提供了三种网络类型供用户选择使用:公共网络、家庭网络或工作网络,后两者都被windows7系统视为私人网络,所有网络类型,windows7都允许手动调整配置,另外,windows7系统中为每一项设置都提供了详细的说明文字,普通用户在动手设置前有不明白的地方最好先浏览一遍。
3、高级设置
作为不少windows7旗舰版高级用户来说,想要把防火墙设置的更全面详细,windows7的防火墙还提供了高级设置控制台,在这里您可以为网络类型的配置文件进行设置,包括出站规则、入站规则、连接安全规则等,对于高级设置,不熟悉的用户可不要轻易动手哦。
如何开发一个简单防火墙软件
好像winpcap不能做防火墙吧?你查一下,我记得是这样的
既然要做简单的防火墙那就自己定义几个规则啊,如不允许IP地址为某某的包,或者不允行端口号为某某某的包
这样做成后把规则组合起来就有实用效果了。如禁止收发邮件(把smtp和pop3端口封了)
一般做界面是不会做成exe再调用的。做成一个对话框调用时这样
CYourDlg dlg;//定义一个对话框类
dlg.DoMoal();//显示
如何用C++实现个人防火墙程序
#include int main(){int input=0;std::cininput;//输入 int res_in=0;//反序数 //求反序数 int tem=input;while(tem){res_in=res_in*10+tem%10;tem/=10;}std::cout
防火墙怎么弄
依次单击开始;控制面板,然后在控制面板经典视图中双击Windows防火墙一项,即可打开Windows防火墙控制台。此外,还可以在SP2新增加的安全中心界面下,点击Windows防火墙打开防火墙控制台 。
1.常规选项卡
在Windows防火墙控制台常规选项卡中有两个主选项:启用(推荐)和关闭(不推荐),一个子选项不允许例外。如果选择了不允许例 外,Windows防火墙将拦截所有的连接用户计算机的网络请求,包括在例外选项卡列表中的应用程序和系统服务。另外,防火墙也将拦截文件和打印机共享, 还有网络设备的侦测。使用不允许例外选项的Windows防火墙简直就完全闭关了,比较适用于高危环境,如餐馆、宾馆和机场等场所连接到公共网络 上的个人计算机。
2.例外选项卡
某些程序需要对外通讯,就可以把它们添加到例外选项卡中,这里的程序将被特许可以提供连接服务,即可以监听和接受来自网络上的连接。
在例外选项卡界面下方有两个添加按钮,分别是:添加程序和添加端口,可以根据具体的情况手工添加例外项。如果不清楚某个应用程序是 通过哪个端口与外界通信,或者不知道它是基于UDP还是TCP的,可以通过添加程序来添加例外项。例如要允许Windows Messenger通信,则点击添加程序按钮,选择应用程序C:Program Files MessengerMessengermsmsgs.exe,然后点击确定把它加入列表。
如果对端口号以及TCP/UDP比较熟悉,则可以采用后一种方式,即指定端口号的添加方式。对于每一个例外项,可以通过更改范围指定其作用 域。对于家用和小型办公室应用网络,推荐设置作用域为可能的本地网络。当然,也可以自定义作用域中的IP范围,这样只有来自特定的IP地址范围的网络请求 才能被接受。
3.高级选项卡
在高级选项卡中包含了网络连接设置、安全记录、ICMP设置和还原默认设置四组选项,可以根据实际情况进行配置。
◆网络连接设置
这里可以选择Windows防火墙应用到哪些连接上,当然也可以对某个连接进行单独的配置,这样可以使防火墙应用更灵活。
◆安全记录
新版Windows防火墙的日志记录与ICF大同小异,日志选项里面的设置可以记录防火墙的跟踪记录,包括丢弃和成功的所有事项。在日志文件选 项里,可以更改记录文件存放的位置,还可以手工指定日志文件的大小。系统默认的选项是不记录任何拦截或成功的事项,而记录文件的大小默认为4MB。
◆ICMP设置
Internet控制消息协议(ICMP)允许网络上的计算机共享错误和状态信息。在ICMP设置对话框中选定某一项时,界面下方会显示出相应的描述信息,可以根据需要进行配置。在缺省状态下,所有的ICMP都没有打开。
◆默认设置
如果要将所有Windows防火墙设置恢复为默认状态,可以单击右侧的还原为默认值按钮。