📄 linux 2.4有状态防火墙设计(二).htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0050)http://www.linuxbyte.net/view.php?skin=art&ID=2585 -->
<HTML><HEAD><TITLE>linuxbyte</TITLE>
<META http-equiv=Content-Language content=zh-cn>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>A:link {
COLOR: #000000; TEXT-DECORATION: none
}
A:visited {
COLOR: #000000; TEXT-DECORATION: none
}
A:hover {
TEXT-DECORATION: underline
}
BODY {
FONT-SIZE: 12px; SCROLLBAR-ARROW-COLOR: #395d81; BACKGROUND-COLOR: #ffffff
}
TABLE {
BORDER-RIGHT: #889093 1px solid; BORDER-TOP: #889093 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: #889093 1px solid; COLOR: #000000; BORDER-BOTTOM: #889093 1px solid
}
TEXTAREA {
BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; FONT-WEIGHT: normal; FONT-SIZE: 12px; BORDER-LEFT: #666666 1px solid; COLOR: #000000; BORDER-BOTTOM: #666666 1px solid; FONT-FAMILY: Verdana, Tahoma, Arial; BACKGROUND-COLOR: #f8f8f8
}
INPUT {
BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; FONT-WEIGHT: normal; FONT-SIZE: 12px; BORDER-LEFT: #666666 1px solid; COLOR: #000000; BORDER-BOTTOM: #666666 1px solid; FONT-FAMILY: Verdana, Tahoma, Arial; BACKGROUND-COLOR: #f8f8f8
}
SELECT {
FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: Tahoma, Verdana; BACKGROUND-COLOR: #f8f8f8
}
.nav {
FONT-WEIGHT: bold; FONT-SIZE: 12px; FONT-FAMILY: Tahoma, Verdana
}
.header {
FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #ffffff; FONT-FAMILY: Tahoma, Verdana; BACKGROUND-COLOR: #698cc3
}
.category {
FONT-SIZE: 11px; COLOR: #000000; FONT-FAMILY: Tahoma, Verdana; BACKGROUND-COLOR: #efefef
}
.multi {
FONT-SIZE: 11px; COLOR: #003366; FONT-FAMILY: Tahoma, Verdana
}
.smalltxt {
FONT-SIZE: 11px; FONT-FAMILY: Tahoma, Verdana
}
.mediumtxt {
FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: Tahoma, Verdana
}
.bold {
FONT-WEIGHT: bold
}
</STYLE>
</STYLE>
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY leftMargin=0 background="Linux 2.4有状态防火墙设计(二).files/bg.gif" topMargin=0
rightMargin=0>
<TABLE
style="BORDER-RIGHT: #656b6d 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #656b6d 1px solid; BORDER-LEFT: #656b6d 1px solid; BORDER-BOTTOM: #656b6d 1px solid; WORD-WRAP: break-word"
cellSpacing=0 cellPadding=0 width="98%" align=center bgColor=#ffffff border=0>
<TBODY>
<TR height=0>
<TD width="25%"></TD>
<TD width="65%"></TD>
<TD width="10%"></TD></TR>
<TR height=26>
<TD vAlign=center align=right width="100%"
background="Linux 2.4有状态防火墙设计(二).files/topbg.jpg" colSpan=3>
<FORM action=search.php method=post><SELECT name=radiobutton> <OPTION
value=news selected>-- 新闻搜索 --</OPTION> <OPTION value=articles>-- 文章搜索
--</OPTION> <OPTION value=software>-- 软件搜索 --</OPTION></SELECT><INPUT
size=15 name=Search> <INPUT type=image
src="Linux 2.4有状态防火墙设计(二).files/go.gif" border=0>
</FORM></TD></TR>
<TR>
<TD align=left width="20%"><IMG src="Linux 2.4有状态防火墙设计(二).files/logo.jpg"
border=0></TD>
<TD align=middle width="60%"><IMG
src="Linux 2.4有状态防火墙设计(二).files/logo2.jpg" border=1></TD>
<TD align=middle width="20%">::<A
href="http://www.linuxbyte.net/news.php">网站新闻</A>::<BR>::<A
href="http://www.linuxbyte.net/articles.php">技术文献</A>::<BR>::<A
href="http://www.linuxbyte.net/softs.php">软件中心</A>::<BR>::<A
href="http://www.linuxbyte.net/bbs/index.php" target=_blank>讨论区</A>::
</TD></TR>
<TR>
<TD background="Linux 2.4有状态防火墙设计(二).files/tabledi.jpg" colSpan=3
height=6></TD></TR>
<TR>
<TD background="Linux 2.4有状态防火墙设计(二).files/titlebg.jpg" colSpan=3
height=22><CENTER> <B><A
href="http://www.linuxbyte.net/index.php">首页</A></B> || <B><A
href="http://www.linuxbyte.net/bbs/index.php" target=new>讨论区</A></B> ||
<B><A href="http://www.linuxbyte.net/news.php">新闻中心</A></B> || <B><A
href="http://www.linuxbyte.net/articles.php">技术文献</A></B> || <B><A
href="http://www.linuxbyte.net/softs.php">软件中心</A></B> || <B><A
href="http://www.linuxbyte.net/about.php">关于本站</A></B> || <B><A
href="mailto:oneteam@mail.linuxbyte.net">联系本站</A></B>||</CENTER></TD></TR></TBODY></TABLE>
<TABLE
style="TABLE-LAYOUT: fixed; BORDER-COLLAPSE: collapse; WORD-WRAP: break-word"
cellSpacing=0 cellPadding=0 width="98%" align=center bgColor=#ffffff border=1>
<TBODY>
<TR><!--第二列-->
<TD vAlign=top align=left width="75%"><BR> <A
href="http://www.linuxbyte.net/index.php">首页</A><< <A
href="http://www.linuxbyte.net/articles.php">技术文献</A><< <B>Linux
2.4有状态防火墙设计(二)</B><BR><BR>
<UL> <BR><BR>第三章 定义规则 <BR><BR>(小)改进
<BR><BR><BR>在本示例中,假设我们正在为有两个网络接口 eh0 和 eth1 的机器设计防火墙。eth0 网卡连接到 LAN,而
eth1 网卡连接到 DSL 路由器,这是与因特网的连接。对于这种情况,通过添加以下几行命令就可以改进我们的“终极防火墙”:
<BR><BR><BR>iptables -P INPUT DROP <BR>iptables -A INPUT -i ! eth1 -j
ACCEPT <BR><BR>这行附加的 "iptables -A" 将一个新的包过滤规则添加到 INPUT
链的末端。添加此规则之后,INPUT 链就包含了一个规则和缺省删除策略。现在,让我们看一下这个半成品防火墙有什么功能。 <BR><BR>有关
INPUT 链 <BR><BR>当包进入任何一个接口(lo、th0 或 eth1)时,netfilter 代码会将它定向到 INPUT
链,并检查该包是否与第一个规则匹配。如果匹配,则接受包,并且不再执行处理。如果不匹配,则实施 INPUT 链的缺省策略,废弃(删除)该包。
<BR><BR>那是概念性的概述。具体情况中,第一个规则会匹配来自 eth0 和 lo 的所有包,并立即允许它们进入。而所有来自 eth1
的包都将被删除。因此,如果我们在机器上启用这个防火墙,它可以与 LAN 交互,但却会彻底断开因特网连接。让我们看一些启用因特网通信流的方法。
<BR><BR>传统防火墙,第 1 部分
<BR><BR><BR>显然,如果要使防火墙变得实用,需要有选择性地允许某些进入包经由因特网到达机器。有两种方法可以使防火墙开放到实用的程度
-- 一种是使用静态规则,另一种是使用动态规则,即有状态规则。 <BR><BR><BR>传统防火墙,第 2 部分
<BR><BR>让我们使用下载网页作为示例。如果想要机器能够从因特网下载网页,可以添加一个静态规则,此规则永远允许每个进入 http
包,不管它来自何处: <BR><BR><BR>iptables -A INPUT --sport 80 -j ACCEPT
<BR><BR>由于所有标准 Web 通信流都来自源端口 80,实际上此规则允许机器下载网页。虽然可以勉强接受这种传统方法,但是它却有许多问题。
<BR><BR>传统防火墙的缺点,第 1 部分 <BR><BR><BR>这里有个问题:虽然大多数 Web 通信流来自端口
80,但有些不是这样。因此,虽然此规则在大部分时间中有效,但仍有少量情况并不适用此规则。例如,您可能看到过类似于
"http://www.foo.com:81" 的 URL。这个 URL 示例通过端口 81 连接到网站,而不是缺省端口
80,因此在防火墙后面就看不到这个网站。考虑所有这些特殊情况可以将相当安全的防火墙迅速变成瑞士干酪, 并迅速将许多规则添加到 INPUT
链以处理偶尔遇到的奇特网站。 <BR><BR>传统防火墙的缺点,第 2 部分
<BR><BR><BR>但是,这个规则的主要问题与安全性相关。的确,只有使用源端口 80
的通信流才能通过我们的防火墙。但是包的源端口并不是我们所能控制的,闯入者可以轻易地改变它。例如,如果闯入者知道我们的防火墙是如何设计的,他只要确保其所有进入连接都来自其机器的
80 端口就可以绕过我们的防火墙。由于这个静态防火墙规则很容易被利用,因此需要一个更安全的动态方法。幸好,iptables 和内核 2.4
提供了启用动态、有状态过滤所需要的一切条件。 <BR><BR><BR>第四章 有状态防火墙 <BR><BR><BR>状态基础知识
<BR><BR>与其在基于静态协议特征的防火墙上开一个洞,还不如使用 Linux
新的连接跟踪功能来使防火墙根据包的动态连接状态做出判定。conntrack 通过将每个包与一个独立的双向通信信道或连接相关联来进行判定。
<BR><BR>例如,设想一下,当使用 Telnet 或 ssh
连接远程机器时会发生什么情况。如果查看包级的网络通信流,您所看到的许多包从一台机器传递到另一台机器。但是,从更高级别的角度看,这种包交换是您的本地机器与远程机器之间的双向通信信道。传统(过时)的防火墙只看到独立的包,并没有看出它们实际上是一个更大的整体(连接)的一部分。
<BR><BR><BR>conntrack 内幕 <BR><BR><BR>那正是产生连接跟踪技术的原因。Linux 的 conntrack
功能可以“看到”正在发生的更高级别的连接,从而将 ssh 会话看作是单一的逻辑实体。conntrack 甚至可以将 UDP 和 ICMP
包交换看作是逻辑“连接”,即使 UDP 和 ICMP 实际上是非连接方式;这是非常有用的,因为它可以让我们使用 conntrack 来处理
ICMP 和 UDP 包交换。 <BR><BR>如果已经重新启动,并且正在使用支持 netfilter 的新内核,那么通过输入 "cat
/proc/net/ip_conntrack" 可以查看您的机器参与的活动网络连接。即使没有配置防火墙,Linux 的 conntrack
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -