⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linux防火墙实现技术比较.htm

📁 这是我对防火墙技术的一些见解
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0050)http://www.linuxbyte.net/view.php?skin=art&ID=2035 -->
<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防火墙实现技术比较.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防火墙实现技术比较.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防火墙实现技术比较.files/go.gif" 
      border=0>&nbsp;&nbsp; </FORM></TD></TR>
  <TR>
    <TD align=left width="20%"><IMG src="linux防火墙实现技术比较.files/logo.jpg" 
      border=0></TD>
    <TD align=middle width="60%"><IMG src="linux防火墙实现技术比较.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防火墙实现技术比较.files/tabledi.jpg colSpan=3 height=6></TD></TR>
  <TR>
    <TD background=linux防火墙实现技术比较.files/titlebg.jpg colSpan=3 height=22>
      <CENTER>&nbsp;<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>&nbsp;<A 
      href="http://www.linuxbyte.net/index.php">首页</A>&lt;&lt;&nbsp;<A 
      href="http://www.linuxbyte.net/articles.php">技术文献</A>&lt;&lt;&nbsp;<B>linux防火墙实现技术比较</B><BR><BR>
      <UL>&nbsp;&nbsp;&nbsp;&nbsp; <BR><BR>作者:yawl <BR><BR>一 前言 <BR>此文是在aka(<A 
        class=red href="http://www.aka.org.cn/" 
        target=_blank>http://www.aka.org.cn/</A>)的一次讲座稿【12】基础之上修改而成(催稿,没办法),着重阐述linux下 
        <BR>的防火墙的不同实现之间的区别,以ipchains, iptables, checkpoint FW1为例。 <BR><BR><BR>二 
        基本概念 <BR><BR>2.0 
        <BR>在进入正题之前,我将花少许篇幅阐述一些基本概念。尽管防火墙的术语这些年基本上没有太大的变化,但是如果你以前只看过90年代初的一些文献的话,有些概念仍然会让你混淆。此处只列出一些最实用的,它们不是准确的定义,我只是尽可能的让它们便于理解而已。 
        <BR><BR>2.1 包过滤: 
        <BR>防火墙的一类。80年代便有论文来描述这种系统。传统的包过滤功能在路由器上常可看到,而专门的防火墙系统一般在此之上加了功能的扩展,如状态检测等。它通过检查单个包的地址,协议,端口等信息来决定是否允许此数据包 
        <BR>通过。 <BR><BR>2.2 代理: 
        <BR>防火墙的一类。工作在应用层,特点是两次连接(browser与proxy之间,proxy与web 
        server之间)。如果对原理尚有疑惑,建议用sniffer抓一下包。代理不在此文的讨论范围之内。 <BR><BR>2.3 状态检测: 
        <BR>又称动态包过滤,是在传统包过滤上的功能扩展,最早由checkpoint提出。传统的包过滤在遇到利用动态端口的协议时会发生困难,如ftp。你事先无法知道哪些端口需要打开,而如果采用原始的静态包过滤,又希望用到的此服务的话,就需要实现将所有可能用到的端口打开,而这往往是个非常大的范围,会给安全带来不必要的隐患。 
        而状态检测通过检查应用程序信息(如ftp的PORT和PASS命令),来判断此端口是否允许需要临时打开,而当传输结束时,端口又马上恢复为关闭状态。 
        <BR><BR>2.4 DMZ非军事化区: 
        <BR>为了配置管理方便,内部网中需要向外提供服务的服务器往往放在一个单独的网段,这个网段便是非军事化区。防火墙一般配备三块网卡,在配置时一般分别分别连接内部网,internet和DMZ。 
        <BR><BR>2.5 
        <BR>由于防火墙地理位置的优越(往往处于网络的关键出口上),防火墙一般附加了NAT,地址伪装和VPN等功能,这些不在本文的讨论范围。 
        <BR><BR><BR>三 检测点 <BR><BR>3.0 综述 
        <BR>包过滤需要检查IP包,因此它工作在网络层,截获IP包,并与用户定义的规则做比较。 <BR><BR>3.1 ipchains 
        <BR>摘自【3】 
        <BR><BR>---------------------------------------------------------------- 
        <BR>| ACCEPT/ lo interface | <BR>v REDIRECT _______ | <BR>--&gt; C 
        --&gt; S --&gt; ______ --&gt; D --&gt; ~~~~~~~~ --&gt;|forward|----&gt; 
        _______ --&gt; <BR>h a |input | e {Routing } |Chain | |output |ACCEPT 
        <BR>e n |Chain | m {Decision} |_______| ---&gt;|Chain | <BR>c i |______| 
        a ~~~~~~~~ | | -&gt;|_______| <BR>k t | s | | | | | <BR>s y | q | v | | 
        | <BR>u | v e v DENY/ | | v <BR>m | DENY/ r Local Process REJECT | | 
        DENY/ <BR>| v REJECT a | | | REJECT <BR>| DENY d --------------------- | 
        <BR>v e ----------------------------- <BR>DENY 
        <BR><BR>总体来说,分为输入检测,输出检测和转发检测。但具体到代码的时候,输出检测实际分散到了几处(不同的上层协议走IP层的不同的流程): 
        <BR>UDP/RAW/ICMP报文:ip_build_xmit <BR>TCP报文:ip_queue_xmit 
        <BR>转发的包:ip_forward <BR>其它:ip_build_and_send_pkt 
        <BR><BR>正如ipchains项目的负责人Rusty 
        Russell所说,在开始ipchians不久,便发现选择的检测点位置错了,最终只能暂时将错就错。一个明显的问题是转发的包在此结构中必须经过三条链的匹配。地址伪装功能与防火墙模块牵扯过于紧密,如果不详细了解其原理的话,配置规则很容易出错。 
        <BR><BR>此部分详细的分析可参见我早期的一份文章【9】。 <BR><BR><BR>3.2 iptables <BR><BR>A 
        Packet Traversing the Netfilter System: 
        <BR><BR>---&gt;PRE------&gt;[ROUTE]---&gt;FWD----------&gt;POST------&gt; 
        <BR>Conntrack | Filter ^ NAT (Src) <BR>Mangle | | Conntrack <BR>NAT 
        (Dst) | [ROUTE] <BR>(QDisc) v | <BR>IN Filter OUT Conntrack <BR>| 
        Conntrack ^ Mangle <BR>| | NAT (Dst) <BR>v | Filter 
        <BR><BR><BR>2.4内核中的防火墙系统不是2.2的简单增强,而是一次完全的重写,在结构上发生了非常大的变化。相比2.2的内核,2.4的检测点变为了五个。 
        <BR><BR>在每个检测点上登记了需要处理的函数(通过nf_register_hook()保存在全局变量nf_hooks中),当到达此检测点的时候,实现登记的函数按照一定的优先级来执行。严格的从概念上将,netfilter便是这么一个框架,你可以在适当的位置上登记一些你需要的处理函数,正式代码中已经登记了许多处理函数(在代码中搜nf_register_hook的调用),如在NF_IP_FORWARD点上登记了装发的包过滤功能。你也可以登记自己的处理函数,具体例子可参看【8】与【10】。 
        <BR><BR>3.3 FW1 
        <BR>FW1是chekpoint推出的用于2.2内核的防火墙。由于其发布的模组文件带了大量的调试信息,可以从反汇编的代码中窥探到到许多实现细节。 
        <BR>FW1通过dev_add_pack的办法加载输入过滤函数,如果对这个函数不熟悉,请参看【14】。但是此处有个问题:在net_bh()中,传往网络层的skbuff是克隆的,即 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -