|
|
第1行: |
第1行: |
| 1.简介 | | *1 Iptables基础 如何在Ubuntu Server版上实施iptables |
| | | **1.1 基本命令 |
| 2.什么是iptables?
| | **1.2 允许建立会话 |
| | | **1.3 在指定端口上允许入站流量 |
| 3.下载和安装iptables包
| | **1.4 阻断流量 |
| | | **1.5 编辑iptables |
| 4.怎样启动iptables
| | **1.6 日志记录 |
| | | **1.7 保存iptables |
| 5.检查iptables的状态
| | **1.8 配置启动时自动加载规则 |
| | | **1.9 提示 |
| 6.iptables中数据包的处理状态
| | ***1.9.1 如果你在一个已有规则上手动编辑iptables |
| 6.1 表14-1 防火墙处理被路由的数据包
| | ***1.9.2 使用iptables-save/restore来测试规则 |
| 6.2 图14-1 iptables 中数据包的流程图
| | ***1.9.3 更详细的日志记录 |
| | | ***1.9.4 禁用防火墙 |
| 7.目标与跳转
| | **1.10 通过GUI界面程序简单配置 |
| 7.1 表14-2 最常用的目标的描述
| | **1.11 更多信息 |
| | | **1.12 致谢 |
| 8.重要的iptables命令转换操作
| |
| 8.1 表14-2 概述iptables状态标准
| |
| 8.2 表14-4 普通 TCP 和 UDP 状态标准
| |
| 8.3 表14-5 普通 ICMP(ping) 状态标准
| |
| 8.4 表14-6 普通扩展状态标准
| |
| | |
| 9.使用用户自定义链
| |
| 9.1 表14.7 自定义队列例子列表
| |
| | |
| 10. 保存您的iptables脚本
| |
| | |
| 11.Fedora 的iptables规则生成器
| |
| | |
| 12.恢复一个丢失的iptables脚本
| |
| | |
| 13.加载iptables所需要的内核模块
| |
| | |
| 14.iptables脚本例子
| |
| 14.1 基本的的操作系统防御
| |
| 14.2 高级iptables初始化
| |
| 14.3 允许DNS解析通过您的防火墙
| |
| 14.4 允许WWW和SSH服务通过您的防火墙
| |
| 14.5 允许您通过防火墙访问Internet
| |
| 14.6 允许您的家庭网络通过防火墙
| |
| 14.7 伪装(多对一的NAT)
| |
| 14.8 端口转发型的NAT(DHCP DSL)
| |
| 14.9 静态NAT
| |
| | |
| 15.iptables排错
| |
| 15.1 检查防火墙日志
| |
| 15.2 iptables停止工作
| |
| | |
| 16.总结
| |
| | |
| | |
| | |
| | |
| ==简介==
| |
| | |
| 网络安全是个首先要考虑的问题,尤其是在网站威胁越来越普遍化的今天。一种提供额外波户的手段是购置防火墙。尽管防火墙价格一直在下降,但在某些情况下,你可以花很少甚至不需要花费额外的开销通过在一台linux服务器上配置iptables来创建一个可与之媲美的防火墙。
| |
| | |
| 本章节将向你展示如何将一台linux服务器配置成:
| |
|
| |
| *一台防火墙,同时是你的本地web站点的mail、web、dns服务器 | |
| *一台路由器,并且利用NAT和端口转发同时保护您的本地网络和使得你的另外一个网络共享您防火墙上的公有IP地址。 | |
| | |
| | |
| =什么是iptables?=
| |
| | |
| 起初,linux上最流行的防火墙/NAT 软件包是ipchains,但它有太多缺点。为了校正这些缺点,Netfilter机构决定创建一个叫做iptables的产品,并对它做了如下改进:
| |
| | |
| *更好地整合了linux内核加载iptables特殊模块的能力,提高了速度和可靠性.
| |
| *所有状态包的检查。这就意味这防火墙能保持跟踪通过它的每个数据包,而且在某些情况下可以查看数据流内容来预测某些协议的下一个行为。这在支持活动的TCP和DNS以及其他许多网络服务方面是一大亮点。 | |
| *基于MAC地址和TCP头标志过滤数据包。这对于阻止使用畸形数据包的攻击和限制通过本地服务器到达其他网络(不用查看ip地址)尤其有效。
| |
| *提供可选择不同级别的详细报告的系统日志
| |
| *更好的网络地址翻译(NAT)
| |
| *更好的对squid类透明web代理的支持 | |
| *一定程度上防御拒绝服务(DOS)攻击 | |
| | |
| 与可选的ipchains相比,iptables更为快速、安全,而且iptables已经成为了Redhat和Fedora Linux上的默认防火墙。
| |
| | |
| =下载和安装iptables软件包=
| |
| | |
| 在您开始前,您必须确保iptables RPM软件包已经安装上了。(如果您需要参考的话,请看第6章,:[[Wikipedia:Installing Linux Software]])。当您搜索RPM软件包时,记得软件包经常是以软件包版本命名的,例如iptables-1.2.9-1.0.i386.rpm。
| |
| | |
| ==如何启动iptables==
| |
| | |
| 您可以在系统启动后通过以下命令启动、停止、重启动iptables:
| |
| [root@bigboy tmp]# service iptables start
| |
| [root@bigboy tmp]# service iptables stop
| |
| [root@bigboy tmp]# service iptables restart
| |
| | |
| 为了配置iptables在系统启动时自动启动,可以使用下面的chkconfig命令:
| |
| [root@bigboy tmp]# chkconfig iptables on
| |
| | |
| ==检查iptabels的状态==
| |
| | |
| [root@bigboy tmp]# service iptables status
| |
| Firewall is stopped.
| |
| [root@bigboy tmp]#
| |
| | |
| ==iptables中数据包的处理==
| |
| iptables通过内置的序列表(队列)检查所有经过的数据包。每组队列都用于特定的包行为,而且为一个相关的包转发/过滤链控制。
| |
| | |
| 总共有3个表。第一个mangel表用于变更TCP头里面的bit流QOS。这引用户家庭或小型办公环境。
| |
| | |
| 第二个表是过滤队列,它负责包过滤。它有3个内建的链,在这些链里面你可以设置您的防火墙策略规则。它们是:
| |
| | |
| *Forward chain(转发链):处理受防火墙保护流经服务器的数据包。 | |
| *Input chain(输入链):处理目的地是防火墙的数据包。 | |
| *Output chain(输出链):处理发源于防火墙的数据包。 | |
| | |
| 第三个表是NAT队列,它负责网络地址翻译。它有2条内置链:
| |
| *Pre-routing chain:当数据包的目的地址需要转换时执行NATs转换。
| |
| *Post-routing chain:当数据包的源地址需要转换时执行NATs转换。
| |
| | |
| | |
| === 表14-1 防火墙处理被路由的数据包===
| |
| | |
| <div align=center>
| |
| | |
| <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
| |
| style='border-collapse:collapse;border:none'>
| |
| <tr>
| |
| <td valign=top style='border:solid windowtext 1.0pt;background:green;
| |
| padding:.05in .05in .05in .05in'>
| |
| | |
| <p class=MsoNormal align=center style='text-align:center'><b><span
| |
| style='color:white'>Queue</span></b></p>
| |
| <p class=MsoNormal align=center style='text-align:center'><b><span
| |
| style='color:white'>Type</span></b></p>
| |
| </td>
| |
| <td width=147 valign=top style='width:88.35pt;border:solid windowtext 1.0pt;
| |
| border-left:none;background:green;padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal align=center style='text-align:center'><b><span
| |
| style='color:white'>Queue</span></b></p>
| |
| <p class=MsoNormal align=center style='text-align:center'><b><span
| |
| style='color:white'>Function</span></b></p>
| |
| </td>
| |
| | |
| <td width=147 valign=top style='width:88.35pt;border:solid windowtext 1.0pt;
| |
| border-left:none;background:green;padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal align=center style='text-align:center'><b><span
| |
| style='color:white'>Packet transformation chain in Queue</span></b></p>
| |
| </td>
| |
| <td width=314 valign=top style='width:188.65pt;border:solid windowtext 1.0pt;
| |
| border-left:none;background:green;padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal align=center style='text-align:center'><b><span
| |
| style='color:white'>Chain Function</span></b></p>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td valign=top style='border-top:none;border-left:solid windowtext 1.0pt;
| |
| border-bottom:none;border-right:solid windowtext 1.0pt;padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal align=center style='text-align:center'>Filter</p>
| |
| </td>
| |
| <td width=147 valign=top style='width:88.35pt;border:none;border-right:solid windowtext 1.0pt;
| |
| padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal>Packet filtering</p>
| |
| </td>
| |
| <td width=147 valign=top style='width:88.35pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| | |
| <p class=MsoNormal align=center style='text-align:center'>FORWARD</p>
| |
| </td>
| |
| <td width=314 valign=top style='width:188.65pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| <p class=MsoNormal>Filters packets to servers accessible by another NIC on
| |
| the firewall.</p>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td valign=top style='border-top:none;border-left:solid windowtext 1.0pt;
| |
| border-bottom:none;border-right:solid windowtext 1.0pt;padding:.05in .05in .05in .05in'>
| |
| | |
| <p class=MsoNormal align=center style='text-align:center'> </p>
| |
| </td>
| |
| <td width=147 valign=top style='width:88.35pt;border:none;border-right:solid windowtext 1.0pt;
| |
| padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal> </p>
| |
| </td>
| |
| <td width=147 valign=top style='width:88.35pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| <p class=MsoNormal align=center style='text-align:center'>INPUT</p>
| |
| </td>
| |
| | |
| <td width=314 valign=top style='width:188.65pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| <p class=MsoNormal>Filters packets destined to the firewall.</p>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
| |
| padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal align=center style='text-align:center'> </p>
| |
| </td>
| |
| | |
| <td width=147 valign=top style='width:88.35pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal> </p>
| |
| </td>
| |
| <td width=147 valign=top style='width:88.35pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| <p class=MsoNormal align=center style='text-align:center'>OUTPUT</p>
| |
| </td>
| |
| <td width=314 valign=top style='width:188.65pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| <p class=MsoNormal>Filters packets originating from the firewall</p>
| |
| | |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td valign=top style='border-top:none;border-left:solid windowtext 1.0pt;
| |
| border-bottom:none;border-right:solid windowtext 1.0pt;padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal align=center style='text-align:center'>Nat</p>
| |
| </td>
| |
| <td width=147 valign=top style='width:88.35pt;border:none;border-right:solid windowtext 1.0pt;
| |
| padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal>Network Address Translation</p>
| |
| | |
| </td>
| |
| <td width=147 valign=top style='width:88.35pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| <p class=MsoNormal align=center style='text-align:center'>PREROUTING</p>
| |
| </td>
| |
| <td width=314 valign=top style='width:188.65pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| <p class=MsoNormal>Address translation occurs before routing. Facilitates the
| |
| transformation of the destination IP address to be compatible with the
| |
| firewall's routing table. Used with NAT of the destination IP address, also
| |
| known as <b>destination NAT</b> or <b>DNAT</b>.</p>
| |
| | |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td valign=top style='border-top:none;border-left:solid windowtext 1.0pt;
| |
| border-bottom:none;border-right:solid windowtext 1.0pt;padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal align=center style='text-align:center'> </p>
| |
| </td>
| |
| <td width=147 valign=top style='width:88.35pt;border:none;border-right:solid windowtext 1.0pt;
| |
| padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal> </p>
| |
| </td>
| |
| | |
| <td width=147 valign=top style='width:88.35pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| <p class=MsoNormal align=center style='text-align:center'>POSTROUTING</p>
| |
| </td>
| |
| <td width=314 valign=top style='width:188.65pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| <p class=MsoNormal>Address translation occurs after routing. This implies
| |
| that there was no need to modify the destination IP address of the packet as
| |
| in pre-routing. Used with NAT of the source IP address using either one-to-one
| |
| or many-to-one NAT. This is known as <b>source NAT</b>, or <b>SNAT</b>.</p>
| |
| </td>
| |
| | |
| </tr>
| |
| <tr>
| |
| <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
| |
| padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal align=center style='text-align:center'> </p>
| |
| </td>
| |
| <td width=147 valign=top style='width:88.35pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal> </p>
| |
| </td>
| |
| <td width=147 valign=top style='width:88.35pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| | |
| <p class=MsoNormal align=center style='text-align:center'>OUTPUT</p>
| |
| </td>
| |
| <td width=314 valign=top style='width:188.65pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| <p class=MsoNormal>Network address translation for packets generated by the
| |
| firewall. (Rarely used in SOHO environments)</p>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
| |
| padding:.05in .05in .05in .05in'>
| |
| | |
| <p class=MsoNormal align=center style='text-align:center'>Mangle</p>
| |
| </td>
| |
| <td width=147 valign=top style='width:88.35pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:.05in .05in .05in .05in'>
| |
| <p class=MsoNormal>TCP header modification</p>
| |
| </td>
| |
| <td width=147 valign=top style='width:88.35pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| <p class=MsoNormal align=center style='text-align:center'>PREROUTING
| |
| POSTROUTING OUTPUT INPUT FORWARD</p>
| |
| | |
| </td>
| |
| <td width=314 valign=top style='width:188.65pt;border-top:none;border-left:
| |
| none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
| |
| padding:7.5pt 7.5pt 7.5pt 7.5pt'>
| |
| <p class=MsoNormal>Modification of the TCP packet quality of service bits
| |
| before routing occurs</p>
| |
| <p class=MsoNormal>(Rarely used in SOHO environments)</p>
| |
| </td>
| |
| </tr>
| |
| </table>
| |
| | |
| </div>
| |
| | |
| 您必须为您创建的每个防火墙规则指定表和链。有个例外:大多数的规则都是过滤,所以iptables假定没有定义表的链都属于filter表。因此filter表是默认的表。
| |
| | |
| 为了是这更清楚,请查看下包在iptables被处理的方式。在图14.1中,一个来自Internet的TCP包到达网络A上防火墙的接口来创建个数据连接。
| |
| | |
| | |
| 这个包首先被您规则中的mangle表中的PREROUTING链检测。接着被nat表中的PREROUTING链的规则检测,看是否包需要做DNAT(目标地址转换)。然后才被路由。
| |
| | |
| 如果这个数据包流向一个受保护的网络,它会被防火墙fileter表中的FORWARE链中的规则过滤下来,如果有必要,这个包在到达网络B前会在POSTROUTIN链中做SNAT。当目的服务器发出响应,包要经过同样的一系列步骤。mangle表中的FORWARD和POSTROUTING链可能都会被配置来执行QOS,但在SOHO环境里通常不被配置。
| |
| | |
| | |
| 如果包是流向防火墙自身,那么它在被filter表的INPUT链规则过滤前先通过INPUT链的mangle表(如果配置过)。如果成功通过了这些测试,它就可以被防火墙上的内部应用程序处理。
| |
| | |
| 在某些时候防火墙需要对外响应。如果需要的话,这个响应会被mangle表中的output链规则路由和检测。接着,nat表中的OUTPUT链会决定需要做DNAT,而且filter表中的OUTPUT链规检查包来帮助约束未授权的包。最后,在包被送回Internet前,POSTROUTING链完成SNAT和OoS mangling 。
| |