一、防火墙概述

1、什么是防火墙

   所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障。是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关,从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件。该计算机流入流出的所有网络通信和数据包均要经过此防火墙。

2、防火墙分类

   防火墙有不同类型。一个防火墙可以是硬件自身的一部分,你可以将因特网连接和计算机都插入其中。防火墙也可以在一个独立的机器上运行,该机器作为它背后网络中所有计算机的代理和防火墙。最后,直接连在因特网的机器可以使用个人防火墙。 

  • 从防火墙的软、硬件形式来分

(1)    软件防火墙

        软件防火墙运行于特定的计算机上,它需要客户预先安装好的计算机操作系统的支持,一般来说这台计算机就是整个网络的网关。俗称“个人防火墙”。软件防火墙就像其它的软件产品一样需要先在计算机上安装并做好配置才可以使用。

(2)    硬件防火墙

        硬件防火墙基于硬件平台的网络防预系统,与芯片级防火墙相比并不需要专门的硬件。

(3)    芯片级防火墙

        芯片级防火墙基于专门的硬件平台,没有操作系统。专有的ASIC芯片促使它们比其他种类的防火墙速度更快,处理能力更强,性能更高。

  • 从防火墙的技术来分的话

(1)      包过滤(Packet filtering)型

        包过滤型防火墙工作在OSI网络参考模型的网络层和传输层,它根据数据包头源地址,目的地址、端口号和协议类型等标志确定是否允许通过。只有满足过滤条件的数据包才被转发到相应的目的地,其余数据包则从数据流中被丢弃。

(2)      应用代理(Application Proxy)型

        应用代理型防火墙是工作在OSI的最高层,即应用层。其特点是完全“阻隔”了网络通信流,通过对每种应用服务编制专门的代理程序,实现监视和控制应用层通信流的作用。

   上面已经讲到了什么是防火墙及分类,然而在日常生活中光有防火墙还不行,还需要配合IDS、IPS、蜜罐技术以及规章制度上等才能做到网络安全的尽善尽美,下面就从概念上简要讲下上面几种技术。


二、IDS(入侵检测系统)

   IDS是英文“Intrusion Detection Systems”的缩写,中文意思是“入侵检测系统”。专业上讲就是依照一定的安全策略,对网络、系统的运行状况进行监视,尽可能发现各种攻击企图、攻击行为或者攻击结果,以保证网络系统资源的机密性、完整性和可用性。

  • 基本介绍

   做一个形象的比喻:假如防火墙是一幢大楼的门锁,那么IDS就是这幢大楼里的监视系统。一旦小偷爬窗进入大楼,或内部人员有越界行为,只有实时监视系统才能发现情况并发出警告。

   在本质上,入侵检测系统是一个典型的"窥探设备"。它不跨接多个物理网段(通常只有一个监听端口),无须转发任何流量,而只需要在网络上被动的、无声息的收集它所关心的报文即可。对收集来的报文,入侵检测系统提取相应的流量统计特征值,并利用内置的入侵知识库,与这些流量特征进行智能分析比较匹配。根据预设的阀值,匹配耦合度较高的报文流量将被认为是进攻,入侵检测系统将根据相应的配置进行报警或进行有限度的反击。

   不同于防火墙,IDS入侵检测系统是一个监听设备,没有跨接在任何链路上,无须网络流量流经它便可以工作。因此,对IDS的部署,唯一的要求是:IDS应当挂接在所有所关注流量都必须流经的链路上。在这里,"所关注流量"指的是来自高危网络区域的访问流量和需要进行统计、监视的网络报文。在如今的网络拓扑中,已经很难找到以前的HUB式的共享介质冲突域的网络,绝大部分的网络区域都已经全面升级到交换式的网络结构。因此,IDS在交换式网络中的位置一般选择在:(1)尽可能靠近攻击源 (2)尽可能靠近受保护资源


三、IPS (入侵防御系统)

   入侵防御系统(IPS: Intrusion Prevention System)是电脑网络安全设施,是对防病毒软件(Antivirus Programs)和防火墙(Packet Filter, Application Gateway)的补充。 入侵预防系统(Intrusion-prevention system)是一部能够监视网络或网络设备的网络资料传输行为的计算机网络安全设备,能够即时的中断、调整或隔离一些不正常或是具有伤害性的网络资料传输行为。

  • 基本介绍

   在ISO/OSI网络层次模型(见OSI模型) 中,防火墙主要在第二到第四层起作用,它的作用在第四到第七层一般很微弱。而除病毒软件主要在第五到第七层起作用。为了弥补防火墙和除病毒软件二者在第四到第五层之间留下的空档,几年前,工业界已经有入侵侦查系统(IDS: Intrusion Detection System)投入使用。入侵侦查系统在发现异常情况后及时向网路安全管理人员或防火墙系统发出警报。可惜这时灾害往往已经形成。虽然,亡羊补牢,尤未为晚,但是,防卫机制最好应该是在危害形成之前先期起作用。随后应运而生的入侵响应系统(IRS: Intrusion Response Systems) 作为对入侵侦查系统的补充能够在发现入侵时,迅速作出反应,并自动采取阻止措施。而入侵预防系统则作为二者的进一步发展,汲取了二者的长处。

   入侵预防系统也像入侵侦查系统一样,专门深入网络数据内部,查找它所认识的攻击代码特征,过滤有害数据流,丢弃有害数据包,并进行记载,以便事后分析。除此之外,更重要的是,大多数入侵预防系统同时结合考虑应用程序或网路传输中的异常情况,来辅助识别入侵和攻击。比如,用户或用户程序违反安全条例、数据包在不应该出现的时段出现、作业系统或应用程序弱点的空子正在被利用等等现象。入侵预防系统虽然也考虑已知病毒特征,但是它并不仅仅依赖于已知病毒特征。     

   应用入侵预防系统的目的在于及时识别攻击程序或有害代码及其克隆和变种,采取预防措施,先期阻止入侵,防患于未然。或者至少使其危害性充分降低。入侵预防系统一般作为防火墙 和防病毒软件的补充来投入使用。在必要时,它还可以为追究攻击者的刑事责任而提供法律上有效的证据 (forensic)。


四、蜜罐技术

   蜜罐是一个包含漏洞的系统,它模拟一个或多个易受攻击的主机,给黑客提供一个容易攻击的目标。由于蜜罐没有其它任务需要完成,因此所有连接的尝试都应被视为是可疑的。蜜罐的另一个用 途是拖延攻击者对其真正目标的攻击,让攻击者在蜜罐上浪费时间。与此同时,最初的攻击目标受到了保护,真正有价值的内容将不受侵犯。 蜜罐最初的目的之一是为起诉恶意黑客搜集证据,这看起来有“诱捕”的感觉。但是在一些国家中,是不能利用蜜罐收集证据起诉黑客的。


五、系统评估安全工具

   上面介绍了在网络安全上的相关技术,然而记住一句话:没有绝对安全的系统!对于我们来说既然不能做到完美那么就要将系统的安全做到自己能力的最大值,然而人类的思维是有死角的所以为了系统安全,我们要和黑客们做下换为思考,下面就是介绍几款常用的黑客使用的网络工具。

网络安全评估工具

  • Wireshark:Wireshark(原名Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。站点:http://www.wireshark.org/

  • Metasploit:Metasploit是一款开源的安全漏洞检测工具,同时Metasploit是免费的工具,因此安全工作人员常用Metasploit工具来检测系统的安全性。站点:http://www.metasploit.com/

  • Nessus:Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件。站点:http://www.tenable.com/

  • Aircrack:Aircrack是一套用于破解WEP和WPA的工具套装,一般用于无线网络的密钥破解,从而非法进入未经许可的无线网络。只要一旦收集到足够的加密数据包,利用它就可以破解40到512位的WEP密匙,也可以通过高级加密方法或暴力破解来破解WPA1或2网络。站点:http://aircrack-ng.org/

  • OpenVAS:OpenVAS是开放式漏洞评估系统,也可以说它是一个包含着相关工具的网络扫描器。其核心部件是一个服务器,包括一套网络漏洞测试程序,可以检测远程系统和应用程序中的安全问题。站点:http://www.openvas.org/

  • Nmap:是一款用于网络浏览或安全审计的免费开源工具。站点:http://nmap.org/

Web安全评估工具

  • Nikto :Nikto是一款开源的(GPL)Web服务器扫描器,它可以对Web服务器进行全面的多种扫描,包含超过3300种有潜在危险的文件CGIs,超过625种服务器版本,以及超过230种特定服务器问题。 站点:http://www.cirt.net/nikto2

  • Samurai framework :Samurai Web测试框架是一个预先定制的Linux LiveCD环境,其中包含了许多优秀的开源安全测试工具和攻击工具。 站点:http://samurai.inguardians.com/

  • Safe3 Scanner :Safe3 Scanner是保护伞网络推出的网站安全性检测工具,传统的方法往往依靠渗透测试(黑箱、白箱和灰箱测试),这往往局限于测试人员的技术水准高低。Safe3 Scanner使用较为领先的智能化爬虫技术及SQL注入状态检测技术,使得相比国内外同类产品智能化程度更高,速度更快,结果更准确。 站点:http://sourceforge.net/projects/safe3wvs/

  • Websecurify :Websecurify是一个强大的Web应用程序安全测试环境,由底层向上提供了自动和手动的脆弱性测试技术的最佳组合。 站点:http://www.websecurify.com/

  • SQLMap :SQLMap是一个开源的渗透测试工具,可以自动检测数据库服务器上存在的SQL注入漏洞。 站点:http://sqlmap.sourceforge.net/

   最后给大家介绍个关于这些工具的使用排行的网站:http://sectools.org/,以及国内最著名的白帽镇漏洞举报网站:http://www.wooyun.org/


六、iptables防火墙原理详解

1、 netfilter与iptables

   Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。Iptables/Netfilter的这些规则可以通过灵活组合,形成非常多的功能、涵盖各个方面,这一切都得益于它的优秀设计思想。

Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

  • 网络地址转换(Network Address Translate)

  • 数据包内容修改

  • 以及数据包过滤的防火墙功能


链(chains)

   Netfilter 平台中制定了数据包的五个链,分别是PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING。链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。


规则(rules)

   规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。


表(tables)

   表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。


 netfilter与iptables(一)_IDS、IPS、防火墙、netfilte

   Netfilter 所设置的规则是存放在内核内存中的,而 iptables 是一个应用层的应用程序,它通过 Netfilter 放出的接口来对存放在内核内存中的 iptables(Netfilter的配置表)进行修改。这个iptables由表tables、链chains、规则rules组成,iptables在应用层负责修改这个规则文件。类似的应用程序还有 firewalld 。

 netfilter与iptables(一)_IDS、IPS、防火墙、netfilte_02

2、filter、nat、mangle、raw

filter表

   主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包(如DROP、ACCEPT、REJECT、LOG)。filter 表对应的内核模块为iptable_filter,包含三个规则链: 

  • INPUT链:INPUT针对那些目的地是本地的包;

  • FORWARD链:FORWARD过滤所有不是本地产生的并且目的地不是本地(即本机只是负责转发)的包; 

  • OUTPUT链:OUTPUT是用来过滤所有本地生成的包; 

nat表

   主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT)。属于一个流的包(因为包 的大小限制导致数据可能会被分成多个数据包)只会经过这个表一次。如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自动地被做相同的操作,也就是说,余下的包不会再通过这个表。表对应的内核模块为 iptable_nat,包含三个链: 

  • PREROUTING链:作用是在包刚刚到达防火墙时改变它的目的地址;

  • OUTPUT链:改变本地产生的包的目的地址;

  • POSTROUTING链:在包就要离开防火墙之前改变其源地址;

mangle表

   主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。包含五个规则链:PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。

raw表

   是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理。在匹配数据包时,raw表的规则要优先于其他表。包含两条规则链——OUTPUT、PREROUTING


3、INPUT、FORWARD等规则链和规则

   在处理各种数据包时,根据防火墙规则的不同介入时机,iptables供涉及5种默认规则链,从应用时间点的角度理解这些链:

INPUT链:当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则。

OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。

FORWARD链:当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则。

PREROUTING链:在对数据包作路由选择之前,应用此链中的规则,如DNAT。

POSTROUTING链:在对数据包作路由选择之后,应用此链中的规则,如SNAT。

 netfilter与iptables(一)_IDS、IPS、防火墙、netfilte_03


   其中中INPUT、OUTPUT链更多的应用在“主机防火墙”中,即主要针对服务器本机进出数据的安全控制;而FORWARD、PREROUTING、POSTROUTING链更多的应用在“网络防火墙”中,特别是防火墙服务器作为网关使用时的情况。

防火墙处理数据包的方式(规则):

  • ACCEPT:允许数据包通过

  • DROP:直接丢弃数据包,不给任何回应信息

  • REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息。

  • SNAT - Source Network Address Translation源网络地址转换。这是一种改变数据包源ip地址的技术, 经常用来使多台计算机分享一个Internet地址。这只在IPv4中使用,因为IPv4的地址已快用完了,IPv6将解 决这个问题。

  • DNAT - Destination Network Address Translation 目的网络地址转换。 DNAT是一种改变数据包目的 ip地址的技术,经常和SNAT联用,以使多台服务器能共享一个ip地址连入Internet,并且继续服务。通过对 同一个ip地址分配不同的端口,来决定数据的流向。

  • MASQUERADE,是SNAT的一种特殊形式,适用于像adsl这种临时会变的ip上

  • REDIRECT:是DNAT的一种特殊形式,将网络包转发到本地host上(不管IP头部指定的目标地址是啥),方便在本机做端口转发。

  • RETURN:返回

  • LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。

注意:除去最后一个LOG,前3条规则匹配数据包后,该数据包不会再往下继续匹配了,所以编写的规则顺序极其关键。

4、 Linux数据包路由原理

   网口数据包由底层的网卡NIC接收,通过数据链路层的解包之后(去除数据链路帧头),就进入了TCP/IP协议栈(本质就是一个处理网络数据包的内核驱动)和Netfilter混合的数据包处理流程中了。数据包的接收、处理、转发流程构成一个有限状态向量机,经过一些列的内核处理函数、以及Netfilter Hook点,最后被转发、或者本次上层的应用程序消化掉。是时候看这张图了:

 netfilter与iptables(一)_IDS、IPS、防火墙、netfilte_04


从上图中,我们可以总结出以下规律:

  • 当一个数据包进入网卡时,数据包首先进入PREROUTING链,在PREROUTING链中我们有机会修改数据包的DestIP(目的IP),然后内核的”路由模块”根据”数据包目的IP”以及”内核中的路由表”判断是否需要转送出去(注意,这个时候数据包的DestIP有可能已经被我们修改过了)

  • 如果数据包就是进入本机的(即数据包的目的IP是本机的网口IP),数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后,任何进程都会-收到它

  • 本机上运行的程序也可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROTING链输出(注意,这个时候数据包的SrcIP有可能已经被我们修改过了)

  • 如果数据包是要转发出去的(即目的IP地址不再当前子网中),且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出(选择对应子网的网口发送出去)

  • 我们在写Iptables规则的时候,要时刻牢记这张路由次序图,根据所在Hook点的不同,灵活配置规则。