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

📄 iptables 指南 1_1_19.htm

📁 这是我对防火墙技术的一些见解
💻 HTM
📖 第 1 页 / 共 5 页
字号:
  <P>3. 多用户环境,就是我们一般事用的层。 </P>
  <LI>
  <P>5. X11,图形界面。</P></LI></UL>
<P></P>
<P>用下面的命令以使<B class=COMMAND>iptables</B>能在这些层运行:</P>
<P><B class=COMMAND>chkconfig --level 235 iptables on</B> </P>
<P>你也可以使用这个命令使<B 
class=COMMAND>iptables</B>能在其他层运行。但没这个必要,因为层1是单用户模式,一般用在维修上;层4保留不用;层6用来关闭计算机。</P>
<P>启动<B class=COMMAND>iptables</B>用:</P>
<P><B class=COMMAND>service iptables start</B> </P>
<P>在脚本<B class=COMMAND>iptables</B>里还没有定义规则。在Red Hat 7.1中添加规则的方法有二:第一个方法是编辑<TT 
class=FILENAME>/etc/rc.d/init.d/iptables</TT>,要注意在用RPM升级iptables时,已有的规则可能会被删除。另一个方法是先装载规则,然后用命令<B 
class=COMMAND>iptables-save</B>把规则保存到文件中,再由目录rc.d下的脚本(<TT 
class=FILENAME>/etc/rc.d/init.d/iptables</TT>)自动装载。</P>
<P>我们先来说明如何利用“剪切粘贴大法”设置<TT 
class=FILENAME>/etc/rc.d/init.d/iptables</TT>。为了能在计算机启动iptables时装载规则,可以把规则放在“start)”节或函数start()中。注意:如果把规则放在“start)”节里,则不要在“start)”节里运行start(),还要编辑“stop)”节,以便在关机时或进入一个不需要iptables的层时,脚本知道如何处理。还应检查“restart”节和“condrestart”节的设置。一定要注意,我们所做的改动在升级iptables时可能会被删除,而不管是通过Red 
Hat网络自动升级还是用 RPM升级。</P>
<P>下面介绍第二种方法:先写一个规则的脚本,或直接用iptables命令生成规则。规则要适合自己的需要,别忘了实验一下是否有问题,确认正常之后,使用命令<B 
class=COMMAND>iptables-save</B>来保存规则。一般用<B class=COMMAND>iptables-save &gt; 
/etc/sysconfig/iptables</B>生成保存规则的文件 <TT 
class=FILENAME>/etc/sysconfig/iptables</TT>,也可以用<B class=COMMAND>service 
iptables save</B>,它能把规则自动保存在<TT 
class=FILENAME>/etc/sysconfig/iptables</TT>中。当计算机启动时,rc.d下的脚本将用命令<B 
class=COMMAND>iptables-restore</B>调用这个文件,从而就自动恢复了规则。</P>
<P>以上两种方法最好不要混用,以免用不同方法定义的规则互相影响,甚至使防火墙的设置无效。</P>
<P>至此,可以删除预装的<B class=COMMAND>ipchains</B>和<B 
class=COMMAND>iptables</B>了,这样可以避免新旧版本的<B 
class=COMMAND>iptables</B>之间的冲突。其实,只有当你从原码安装时,才需要这样做。但一般来说,也不会出现互相影响的问题,因为基于rpm的包不使用原码的缺省目录。删除用以下命令:</P>
<P><B class=COMMAND>rpm -e iptables</B> </P>
<P>既然不用<B class=COMMAND>ipchains</B>为什么要保留呢?删吧!命令如下:</P>
<P><B class=COMMAND>rpm -e ipchains</B> </P>
<P>历经磨难,胜利终于到来了。你已经能够从源码安装iptables了。那些老版的东西就删掉吧。 </P></DIV></DIV></DIV>
<DIV class=CHAPTER>
<HR>

<H1><A name=TRAVERSINGOFTABLES>Chapter 3. 表和链</A></H1>
<P>这一章我们来讨论数据包是以什么顺序、如何穿越不同的链和表的。稍后,在你自己写规则时,就会知道这个顺序是多么的重要。一些组件是iptables与内核共用的,比如,数据包路由的判断。了解到这一点是很重要的,尤其在你用iptables改变数据包的路由时。这会帮助你弄明白数据包是如何以及为什么被那样路由,一个好的例子是<B 
class=COMMAND>DNAT</B>和<B class=COMMAND>SNAT</B>,不要忘了TOS的作用。 </P>
<DIV class=SECTION>
<HR>

<H1 class=SECTION><A name=TRAVERSINGGENERAL>3.1. 概述</A></H1>
<P>当数据包到达防火墙时,如果MAC地址符合,就会由内核里相应的驱动程序接收,然后会经过一系列操作,从而决定是发送给本地的程序,还是转发给其他机子,还是其他的什么。 
</P>
<P>我们先来看一个以本地为目的的数据包,它要经过以下步骤才能到达要接收它的程序:</P>
<P>下文中有个词mangle,我实在没想到什么合适的词来表达这个意思,只因为我的英语太差!我只能把我理解的写出来。这个词表达的意思是,会对数据包的一些传输特性进行修改,在mangle表中允许的操作是 
TOS、TTL、MARK。也就是说,今后只要我们见到这个词能理解它的作用就行了。</P>
<DIV class=TABLE><A name=TABLE.DESTINATIONLOCALHOST></A>
<P><B>Table 3-1. 以本地为目标(就是我们自己的机子了)的包</B></P>
<TABLE class=CALSTABLE border=1>
  <THEAD>
  <TR>
    <TH vAlign=top align=left width="12%">Step(步骤)</TH>
    <TH vAlign=top align=left width="12%">Table(表)</TH>
    <TH vAlign=top align=left width="25%">Chain(链)</TH>
    <TH vAlign=top align=left width="50%">Comment(注释)</TH></TR></THEAD>
  <TBODY>
  <TR>
    <TD vAlign=top align=left width="12%">1</TD>
    <TD vAlign=top align=left width="12%">&nbsp;</TD>
    <TD vAlign=top align=left width="25%">&nbsp;</TD>
    <TD vAlign=top align=left width="50%">在线路上传输(比如,Internet)</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">2</TD>
    <TD vAlign=top align=left width="12%">&nbsp;</TD>
    <TD vAlign=top align=left width="25%">&nbsp;</TD>
    <TD vAlign=top align=left width="50%">进入接口 (比如, eth0)</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">3</TD>
    <TD vAlign=top align=left width="12%">mangle</TD>
    <TD vAlign=top align=left width="25%">PREROUTING</TD>
    <TD vAlign=top align=left width="50%">这个链用来mangle数据包,比如改变TOS等</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">4</TD>
    <TD vAlign=top align=left width="12%">nat</TD>
    <TD vAlign=top align=left width="25%">PREROUTING</TD>
    <TD vAlign=top align=left 
      width="50%">这个链主要用来做DNAT。不要在这个链做过虑操作,因为某些情况下包会溜过去。</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">5</TD>
    <TD vAlign=top align=left width="12%">&nbsp;</TD>
    <TD vAlign=top align=left width="25%">&nbsp;</TD>
    <TD vAlign=top align=left width="50%">路由判断,比如,包是发往本地的,还是要转发的。</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">6</TD>
    <TD vAlign=top align=left width="12%">mangle</TD>
    <TD vAlign=top align=left width="25%">INPUT</TD>
    <TD vAlign=top align=left width="50%">在路由之后,被送往本地程序之前,mangle数据包。</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">7</TD>
    <TD vAlign=top align=left width="12%">filter</TD>
    <TD vAlign=top align=left width="25%">INPUT</TD>
    <TD vAlign=top align=left 
      width="50%">所有以本地为目的的包都要经过这个链,不管它们从哪儿来,对这些包的过滤条件就设在这里。 </TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">8</TD>
    <TD vAlign=top align=left width="12%">&nbsp;</TD>
    <TD vAlign=top align=left width="25%">&nbsp;</TD>
    <TD vAlign=top align=left 
width="50%">到达本地程序了(比如,服务程序或客户程序)</TD></TR></TBODY></TABLE></DIV>
<P>注意,相比以前(译者注:就是指ipchain)现在数据包是由INPUT链过,而不是FORWARD链。这样更符合逻辑。刚看上去可能不太好理解,但仔细想想就会恍然大悟的。</P>
<P>现在我们来看看源地址是本地器的包要经过哪些步骤:</P>
<DIV class=TABLE><A name=TABLE.SOURCELOCALHOST></A>
<P><B>Table 3-2. 以本地为源的包</B></P>
<TABLE class=CALSTABLE border=1>
  <THEAD>
  <TR>
    <TH vAlign=top align=left width="12%">Step</TH>
    <TH vAlign=top align=left width="12%">Table</TH>
    <TH vAlign=top align=left width="25%">Chain</TH>
    <TH vAlign=top align=left width="50%">Comment</TH></TR></THEAD>
  <TBODY>
  <TR>
    <TD vAlign=top align=left width="12%">1</TD>
    <TD vAlign=top align=left width="12%">&nbsp;</TD>
    <TD vAlign=top align=left width="25%">&nbsp;</TD>
    <TD vAlign=top align=left width="50%">本地程序(比如,服务程序或客户程序)</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">2</TD>
    <TD vAlign=top align=left width="12%">&nbsp;</TD>
    <TD vAlign=top align=left width="25%">&nbsp;</TD>
    <TD vAlign=top align=left width="50%">路由判断,要使用源地址,外出接口,还有其他一些信息。 </TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">3</TD>
    <TD vAlign=top align=left width="12%">mangle</TD>
    <TD vAlign=top align=left width="25%">OUTPUT</TD>
    <TD vAlign=top align=left 
  width="50%">在这儿可以mangle包。建议不要在这儿做过滤,可能有副作用哦。</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">4</TD>
    <TD vAlign=top align=left width="12%">nat</TD>
    <TD vAlign=top align=left width="25%">OUTPUT</TD>
    <TD vAlign=top align=left width="50%">这个链对从防火墙本身发出的包进行DNAT操作。</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">5</TD>
    <TD vAlign=top align=left width="12%">filter</TD>
    <TD vAlign=top align=left width="25%">OUTPUT</TD>
    <TD vAlign=top align=left width="50%">对本地发出的包过滤。</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">6</TD>
    <TD vAlign=top align=left width="12%">mangle</TD>
    <TD vAlign=top align=left width="25%">POSTROUTING</TD>
    <TD vAlign=top align=left 
      width="50%">这条链主要在包DNAT之后(译者注:作者把这一次DNAT称作实际的路由,虽然在前面有一次路由。对于本地的包,一旦它被生成,就必须经过路由代码的处理,但这个包具体到哪儿去,要由NAT代码处理之后才能确定。所以把这称作实际的路由。),离开本地之前,对包 
      mangle。有两种包会经过这里,防火墙所在机子本身产生的包,还有被转发的包。</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">7</TD>
    <TD vAlign=top align=left width="12%">nat</TD>
    <TD vAlign=top align=left width="25%">POSTROUTING</TD>
    <TD vAlign=top align=left 
      width="50%">在这里做SNAT。但不要在这里做过滤,因为有副作用,而且有些包是会溜过去的,即使你用了DROP策略。</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">8</TD>
    <TD vAlign=top align=left width="12%">&nbsp;</TD>
    <TD vAlign=top align=left width="25%">&nbsp;</TD>
    <TD vAlign=top align=left width="50%">离开接口(比如: eth0)</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">9</TD>
    <TD vAlign=top align=left width="12%">&nbsp;</TD>
    <TD vAlign=top align=left width="25%">&nbsp;</TD>
    <TD vAlign=top align=left 
width="50%">在线路上传输(比如,Internet)</TD></TR></TBODY></TABLE></DIV>
<P>在这个例子中,我们假设一个包的目的是另一个网络中的一台机子。让我们来看看这个包的旅程:</P>
<DIV class=TABLE><A name=TABLE.FORWARDEDPACKETS></A>
<P><B>Table 3-3. 被转发的包</B></P>
<TABLE class=CALSTABLE border=1>
  <THEAD>
  <TR>
    <TH vAlign=top align=left width="12%">Step</TH>
    <TH vAlign=top align=left width="12%">Table</TH>
    <TH vAlign=top align=left width="25%">Chain</TH>
    <TH vAlign=top align=left width="50%">Comment</TH></TR></THEAD>
  <TBODY>
  <TR>
    <TD vAlign=top align=left width="12%">1</TD>
    <TD vAlign=top align=left width="12%">&nbsp;</TD>
    <TD vAlign=top align=left width="25%">&nbsp;</TD>
    <TD vAlign=top align=left width="50%">在线路上传输(比如,Internet)</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">2</TD>
    <TD vAlign=top align=left width="12%">&nbsp;</TD>
    <TD vAlign=top align=left width="25%">&nbsp;</TD>
    <TD vAlign=top align=left width="50%">进入接口(比如, eth0)</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">3</TD>
    <TD vAlign=top align=left width="12%">mangle</TD>
    <TD vAlign=top align=left width="25%">PREROUTING</TD>
    <TD vAlign=top align=left width="50%">mangle数据包,,比如改变TOS等。</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">4</TD>
    <TD vAlign=top align=left width="12%">nat</TD>
    <TD vAlign=top align=left width="25%">PREROUTING</TD>
    <TD vAlign=top align=left 
      width="50%">这个链主要用来做DNAT。不要在这个链做过虑操作,因为某些情况下包会溜过去。稍后会做SNAT。</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">5</TD>
    <TD vAlign=top align=left width="12%">&nbsp;</TD>
    <TD vAlign=top align=left width="25%">&nbsp;</TD>
    <TD vAlign=top align=left width="50%">路由判断,比如,包是发往本地的,还是要转发的。</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">6</TD>
    <TD vAlign=top align=left width="12%">mangle</TD>
    <TD vAlign=top align=left width="25%">FORWARD</TD>
    <TD vAlign=top align=left 
      width="50%">包继续被发送至mangle表的FORWARD链,这是非常特殊的情况才会用到的。在这里,包被mangle(还记得mangle的意思吗)。这次mangle发生在最初的路由判断之后,在最后一次更改包的目的之前(译者注:就是下面的FORWARD链所做的,因其过滤功能,可能会改变一些包的目的地,如丢弃包)。</TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">7</TD>
    <TD vAlign=top align=left width="12%">filter</TD>
    <TD vAlign=top align=left width="25%">FORWARD</TD>
    <TD vAlign=top align=left 
      width="50%">包继续被发送至这条FORWARD链。只有需要转发的包才会走到这里,并且针对这些包的所有过滤也在这里进行。注意,所有要转发的包都要经过这里,不管是外网到内网的还是内网到外网的。在你自己书写规则时,要考虑到这一点。 
    </TD></TR>
  <TR>
    <TD vAlign=top align=left width="12%">8</TD>
    <TD vAlign=top align=left width="12%">mangle</TD>
    <TD vAlign=top align=left width="25%">POSTROUTING</TD>
    <TD vAlign=top align=left 
      wi

⌨️ 快捷键说明

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