术语 | 解释 |
---|---|
Connection | 连接是指相互关联的一系列数据包,这些包相互成为一种已建立的连接。也可以理解为连接就是一系列交换的数据包。TCP协议中,三次握手成功后就相当于建立了一个连接 |
DNAT | Destination Network Address Translation(IP地址转换协议之一), |
SNAT | Source Network Address Translation(IP地址转换协议之一) |
IPSEC | IPv4报文安全发送的协议 |
Kernel space | 内核空间,相比较于用户空间 |
Packet | 一种通过网络发送的单一单元,包含报头和数据部分 |
QoS | Quality of Service,服务质量是一种指定如何处理数据包以及在发送数据包时应该接收什么样的服务质量的方法 |
Segment | TCP段指的就是TCP数据包,前者更正式些 |
Stream | 这个术语指的是发送和接收以某种方式相互关联的数据包的连接。在TCP协议中,这可能意味着一个发送SYN然后用SYN/ACK响应的连接,但也可能意味着一个发送SYN然后用ICMP Host响应连接不可达 |
SYN | 同步序列编号(Synchronize Sequence Numbers)是TCP/IP建立连接时使用的握手信号。 |
State | 数据包状态, |
User space | 用户空间,即发生在内核外的操作。 例如,调用iptables -h发生在内核外部,而调用iptables -A FORWARD -p tcp -j ACCEPT(部分地)发生在内核内部,因为一个新规则被添加到规则集中。 |
参考已撰写的文章
IPtables是一个IP过滤器,主要作用在TCP/IP协议栈的第二层(IP层),当然它也在第3层起作用。如果IP过滤器严格按照定义来设计,那它就只能过滤带有IP报文头的数据包(Source and Destination address, TOS/DSCP/ECN, TTL, Protocol, etc. IP报文头的内容)。然后IPtables并没有完全按照这一协议来设计,所以它也可以过滤其下一层(TCP\UDP)和上一层(MAC)数据包。
IPtables不跟随数据流或将数据混合,因为这样太耗处理器和内存性能。它通过追踪数据包判断他们是不是同一个数据流,这被称为连接跟踪,正因为如此,我们可以做诸如目的和源网络地址转换(通常称为DNAT和SNAT),以及数据包的状态匹配等事情。另外一个原因是网络上有代理,代理一般会负责审核数据流的内容、文件和页面等
网络代理:代理的开发是为了处理更高层次的流量,因此可以更好地满足这些需求。最初开发代理是为了处理下载和经常使用的页面,并帮助您充分利用缓慢的互联网连接。例如,Squid是一个webproxy。想要下载页面的人发送请求,代理要么抓取请求,要么接收请求并打开到web浏览器的连接,然后连接到web服务器并下载文件,当它下载了文件或页面后,它将其发送给客户端。现在,如果第二个浏览器想再次读取相同的页面,文件或页面已经下载到代理,可以直接发送,为我们节省带宽。
对于上面的固有问题,其实也有相关补丁可用http://l7-filter.sourceforge.net/。它可以用于匹配很多七层协议,但主要是与QoS和流量统计一起使用,尽管它也可以用于纯过滤。l7-filter仍然是实验性的,并在内核和netfilter核心团队之外开发,因此我们在这儿不做深入探讨。
术语 | 解释 |
---|---|
Drop/Deny | 当一个数据包被丢弃或拒绝时,它将被简单地删除,不再采取进一步的操作。没有回复告诉主机它被丢弃了,也没有以任何方式通知包的接收主机。 |
Reject | 这与drop或deny目标或策略基本相同,只是我们还向发送被丢弃数据包的主机发送一个应答。回复可以指定,也可以自动计算到某个值。(不幸的是,到目前为止,还没有iptables功能来发送一个包通知接收主机被拒绝的包发生了什么(即,做与拒绝目标相反的事情)。这有时候也是好事,因为接收主机没有能力阻止拒绝服务攻击的发生。) |
State | 信息包相对于整个信息流的特定状态。例如,如果包是防火墙看到或知道的第一个包,则认为它是新的(TCP连接中的SYN包),或者如果它是防火墙知道的已经建立的连接的一部分,则认为它已经建立。状态通过连接跟踪系统获知,该系统跟踪所有会话。 |
Chain | 链包含应用于遍历链的信息包的规则集。每个链都有一个特定的目的(例如,它连接到哪个表,它指定了这个链能够做什么),以及一个特定的应用区域(例如,只转发数据包,或只发送到这个主机的数据包)。在iptables中,有几种不同的链,将在后面的章节中深入讨论。 |
Table | 每个表都有特定的用途,在iptables中有4个表。raw, nat, mangle和filter表格。例如,过滤表是针对报文进行过滤的,nat表是针对nat (Network Address Translation)报文进行过滤的。 |
Match | 当涉及到IP过滤时,这个词可以有两种不同的含义。第一个含义是单个匹配,它告诉规则这个头必须包含这个和这个信息。例如,——source匹配告诉我们源地址必须是一个特定的网络范围或主机地址。第二个意思是如果整个规则是一项匹配。如果信息包匹配整个规则,跳转或目标指令将被执行(例如,信息包将被丢弃)。 |
Target | 规则集中的每个规则通常都有一个目标集。如果规则完全匹配,目标规范将告诉我们如何处理数据包。例如,如果我们应该放弃或接受它,或NAT它,等等。还有一种称为跳转规范的东西,有关更多信息,请参阅此列表中的跳转描述。最后要说明的是,每个规则可能没有目标或跳转 |
Rule | 在大多数IP过滤器实现(包括iptables实现)中,规则是一个或多个匹配项与单个目标的集合。有一些实现可以让你在每个规则中使用多个目标/操作。 |
Ruleset | 规则集是放在整个IP过滤器实现中的完整规则集。对于iptables,这包括在filter、nat、raw和mangle表以及所有后续链中设置的所有规则。大多数时候,它们被写在某种类型的配置文件中。 |
Jump | 跳转指令与目标密切相关。跳转指令的写入与iptables中的目标完全相同,只是写入的不是目标名称,而是另一个链的名称。如果规则匹配,则信息包将被发送到第二个链,并在该链中照常处理。 |
Connection tracking | 实现连接跟踪的防火墙能够简单地跟踪连接/流。这样做的能力通常受到大量处理器和内存使用的影响。不幸的是,在iptables中也是如此,但是在这方面已经做了很多工作。然而,好的一面是防火墙将更加安全,因为防火墙策略的实现者将正确地使用连接跟踪。 |
Accept | 接收一个数据包让它通过防火墙,与drop/deny规则相反 |
Policy | 在实现防火墙时,我们通常会提到两种策略。首先我们有链策略,它告诉防火墙实现在没有匹配的规则时采用包的默认行为。这是我们将在本书中使用的这个词的主要用法。第二种策略是安全策略,我们可能有书面文件说明,例如针对整个公司或这个特定的网段。在开始实际实施防火墙之前,安全策略是非常好的文档,需要仔细考虑并适当研究。 |
IP过滤设计,首先肯定要考虑的当然是防火墙的位置,防火墙的位置需要慎重考虑,因为我们的网络需要被分割的恰当好处。防火墙的位置首选位置应该是局域网和因特网之间的网关,这个地方的安全措施要相当严密,同时,对于大型网络,通过防火墙将不同的部门分成彼此分开的网络会得到更好的效果(比如开发团队、人力资源团队、财务团队)。所以,IP过滤的第一条规则就是要各个子网络之间彼此隔离
另外一个好办法,在网络中创建一个非军事化区(De-Militarized Zone),防止我们的服务器可以通过因特网连接到它。DMZ是一个带有物理服务器的小型网络,处于深度关闭的状态,这样就减少了任何人进入DMZ中的计算机的风险,也减少了任何人实际进入并从外部下载任何木马等的风险。为什么叫“非军事化区域”因为内外都可以到达,是一种灰色地带(DMZ)
有两种方法可以在防火墙中设置策略和默认行为,本节将讨论在实际开始实施防火墙之前应该考虑的实际理论,并帮助我们最大限度的全面考虑。
我们通常使用两种基本策略。要么我们放弃除我们指定的以外的一切,要么我们接受除我们特别指定的以外的一切。大多数时候,我们最感兴趣的是删除策略,然后接受我们想要特定允许的一切。这意味着防火墙在默认情况下更安全,但也可能意味着您需要做更多的工作才能使防火墙正常运行。
我们要做的第一个决定是简单地确定应该使用哪种类型的防火墙。安全问题有多大?什么样的应用程序必须能够通过防火墙?某些应用程序对防火墙来说是可怕的,原因很简单,它们协商在控制会话中用于数据流的端口。这使得防火墙很难知道开放哪些端口。iptables可以支持很多常用的应用程序,但还是有少数应用程序不支持。也有一些应用程序是部分工作的,比如ICQ。正常的ICQ使用很好,但聊天或文件发送功能不行,因为它们需要特定的代码来处理协议。由于ICQ协议不是标准化的(它们是专有的,随时都可以更改),大多数IP过滤器要么选择将ICQ协议处理程序排除在外,要么选择作为可以应用于防火墙的补丁。Iptables选择将它们作为单独的补丁。
除了防火墙措施,应用分层安全措施也可以是一个好多网络安全举措,即应该同时使用尽可能多的安全措施,不要依赖于任何单一的安全概念。将此作为您的安全的基本概念将使安全性至少提高十倍。举个例子,我们来看看这个。
上图示例中,选择在所有三个网络连接的外围放置Cisco PIX防火墙。它可以对内部局域网进行NAT,也可以对DMZ进行NAT(如果需要的话)。它还可以阻止除http返回流量以及ftp和ssh流量之外的所有传出流量。它可以允许来自局域网和Internet的http流量,以及来自局域网的ftp和ssh流量。在此基础上,我们注意到每个web服务器都基于Linux,因此可以在每台机器上抛出iptables和netfilter,并在这些机器上添加相同的基本策略。这样,如果有人设法破坏了Cisco PIX,我们仍然可以依赖每台机器上本地的netfilter防火墙,反之亦然,这就是所谓的分层安全。
在此基础上,我们可以在每台机器上添加Snort。Snort是一个优秀的开源网络入侵检测系统(NIDS),它在看到的信息包中寻找签名,如果发现某种攻击或入侵的签名,它可以通过电子邮件通知管理员,甚至对攻击做出积极响应,比如阻止发起攻击的IP。需要注意的是,不应该轻易使用主动响应,因为snort有报告大量误报的不良行为(例如,报告的攻击并不是真正的攻击)。
在网络服务器前设置代理也是个好办法,代理可以捕捉一些坏的数据包,这样就提前阻止坏的数据包连接到整个网络。通过一个网络代理,我们可以减少员工使用的网络流量,以及在某种程度上限制他们的网络流量。至于一个webproxy到你自己的网络服务器,你可以用它来阻止一些最明显的连接。市面上好用的网络代理有:Squid。
另一个预防措施是安装Tripwire。这是一种优秀的最后一道防线类型的应用,它通常被认为是一个主机入侵检测系统。它所做的是对配置文件中指定的所有文件进行校验和,然后偶尔从cron运行它,以查看所有指定的文件与以前相同,或者没有以非法的方式更改。换句话说,这个程序将能够发现是否有人真的能够通过并篡改系统。建议在所有的网络服务器上运行这个。
最后要注意的一点是,正如我们所知,遵循标准总是一件好事。正如您在ICQ示例中已经看到的,如果您不使用标准化的系统,事情可能会变得非常糟糕。对于您自己的环境,在某种程度上可以忽略这一点,但是如果您运行的是宽带服务或调制解调器池,那么这一点就变得更加重要了。通过您连接的用户必须始终能够依赖于您的标准化,并且您不能期望每个人都运行您选择的特定操作系统。有些人想要运行Windows,有些人想要运行Linux,甚至是VMS等等。如果您将安全性建立在专有系统上,就会遇到一些麻烦。