个人工具
登录
查看“IptablesHowTo”的源代码 - Ubuntu中文
页面
讨论
查看源代码
历史
搜索
导航
首页
最近更改
随机页面
页面分类
帮助
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息
查看“IptablesHowTo”的源代码
来自Ubuntu中文
←
IptablesHowTo
跳转至:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
原文出处:https://wiki.ubuntu.com/IptablesHowTo 原文作者:UbuntuWiki 授权许可:[http://creativecommons.org/licenses/by-sa/2.0/ 创作共用协议] [http://www.gnu.org/copyleft/fdl.html GNU FDL] 翻译人员:denven 校对人员:5451vs5451 贡献者: 适用版本: 文章状态:翻译完成 ---- '''本文尚未完成,希望比我更懂Iptables的同行能加以补充完毕,谢谢!''' ---- iptables是一款防火墙软件。它在Ubuntu系统中是默认安装的。通常情况下,iptables随系统一起被安装,但没有对通信作任何限制,因此防火墙并没有真正建立起来。 尽管关于iptables的资料非常丰富,但大都比较复杂。如果您只想作些简单的设置,那么本文比较适合您的要求。 === Basic Commands 基本命令 === Typing <pre><nowiki> </nowiki></pre> lists your current rules in iptables. If you have just set up your server, you will have no rules, and you should see <pre><nowiki> Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination </nowiki></pre> 使用命令 <pre><nowiki> </nowiki></pre> 查看现有的iptables防火墙规则。如果您刚架设好服务器,那么规则表应该是空的,您将看到如下内容 <pre><nowiki> Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination </nowiki></pre> === Allowing Established Sessions 允许已建立的连接接收数据 === 可以使用下面的命令,允许已建立的连接接收数据: <pre><nowiki> </nowiki></pre> === Allowing Incoming Traffic on Specific Ports 开放指定的端口 === 刚开始时您不妨阻断所有通信,但考虑到您将来可能要使用SSH,那么您要让iptables在使用默认规则丢弃报文之前,允许SSH报文通过。 要开放端口22(SSH的默认端口),您要告诉iptables允许接受到的所有目标端口为22的TCP报文通过。 执行上面的命令,一条规则会被追加到INPUT规则表的末尾(-A表示追加)。根据这条规则,对所有从接口eth0(-i指出对通过哪个接口的报文运用此规则)接收到的目标端口为22的报文,iptables要执行ACCEPT行动(-j指明当报文与规则相匹配时应采取的行动)。 我们来看看规则表中的情况:(这里只列出了开始的几行,您应该会看到更多内容) <pre><nowiki> Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh </nowiki></pre> 现在我们开放端口80: <pre><nowiki> </nowiki></pre> 此时的规则表中的内容如下: <pre><nowiki> Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:www </nowiki></pre> 通过上述命令,我们已经代开了SSH和web服务的相应的端口,但由于没有阻断任何通信,因此所有的报文都能通过。 === Blocking Traffic 阻断通信 === 对每一个报文,iptables依次测试每一条规则,看报文于规则是否相匹配。一旦找到一条匹配的规则,就根据此规则中指定的行动,对报文进行处置,而对后面的规则不再进行测试。因此,如果我们在规则表的末尾添加一条规则,让iptables丢弃所有报文,但由于有了前面几条规则,ssh和web的正常通信不会受到影响。 <pre><nowiki> Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:www DROP all -- anywhere anywhere </nowiki></pre> 在上面的规则中,没有明确指出针对哪个接口或哪种协议使用此规则,所以从每个接口接收到的除ssh和web之外的所有报文都会被丢弃。 === Editing iptables 编辑iptables === 进行至此,仍有一个问题,就是环回接口也被阻断了。刚才添加DROP规则的时候其实就可以使用-i eth0来解决这一问题。然而我们也可以为环回接口添加一条新规则来解决这个问题。但是不能将新规则追加到末尾,因为前一条规则已经把所有报文都丢弃了,而应该把它插到DROP规则前面,即规则表中第四行的位置。 <pre><nowiki> Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:www ACCEPT all -- anywhere anywhere DROP all -- anywhere anywhere </nowiki></pre> 规则表中的最后两行几乎一样,为了看看它们到底有什么不同,我们可以使用 <pre><nowiki> </nowiki></pre> === Logging 记录 === 在前面的例子中,没有任何报文会被记录到日志中。如果您希望将被丢弃的报文记录到syslog中,最简单的方法是: <pre><nowiki> </nowiki></pre> See Tips section for more ideas on logging. 更多关于日志记录的信息,请参照Tips(技巧)这一节。 === Saving iptables 保存设置 === 机器重启后,iptables中的配置信息会被清空。您可以将这些配置保存下来,让iptables在启动时自动加载,省得每次都得重新输入。<code><nowiki>iptables-save</nowiki></code>和<code><nowiki>iptables-restore </nowiki></code>是用来保存和恢复设置的。 === Configuration on startup 开机自动加载配置 === 先将防火墙规则保存到/etc/iptables.up.rules文件中 <pre><nowiki> </nowiki></pre> 然后修改脚本/etc/network/interfaces,使系统能自动应用这些规则(最后一行是我们手工添加的)。 <pre><nowiki> auto eth0 iface eth0 inet dhcp pre-up iptables-restore < /etc/iptables.up.rules </nowiki></pre> 当网络接口关闭后,您可以让iptables使用一套不同的规则集。 <pre><nowiki> auto eth0 iface eth0 inet dhcp pre-up iptables-restore < /etc/iptables.up.rules post-down iptables-restore < /etc/iptables.down.rules </nowiki></pre> === Tips 技巧 === ==== If you manually edit iptables on a regular basis 如果你经常手动编辑iptables ==== 大多数人并不需要经常改变他们的防火墙规则,因此只要根据前面的介绍,建立起防火墙规则就可以了。但是如果您要经常修改防火墙规则,以使其更加完善,那么您可能希望系统在每次重启前将防火墙的设置保存下来。为此您可以在/etc/network/interfaces文件中添加一行: <pre><nowiki> pre-up iptables-restore < /etc/iptables.up.rules post-down iptables-save > /etc/iptables.up.rules </nowiki></pre> "post-down iptables-save > /etc/iptables.up.rules"会将设置保存下来,以便下次启动时使用。 ==== Using iptables-save/restore to test rules 使用iptables-save/restore测试规则 ==== 使用iptables-save和iptables-restore可以很方便地修改和测试防火墙规则。首先运行iptables-save将规则保存到一个文件,然后用编辑器编辑该文件。 <pre><nowiki> </nowiki></pre> 如果您根据前面的例子建立了防火墙规则,iptables-save将产生一个类似于如下内容的文件: <pre><nowiki> *filter :INPUT ACCEPT [368:102354] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [92952:20764374] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 -A INPUT -j DROP COMMIT </nowiki></pre> 文件内容其实就是各种iptables命令,只不过把命令名iptables省略了。您可以随意对这个文件进行编辑,然后保存。接着使用以下命令测试修改后的规则: 之前您如果没有在<code><nowiki>/etc/network/interfaces</nowiki></code>文件中添加<code><nowiki>iptables-save</nowiki></code>命令,那么测试之后,别忘了把您所作的修改保存起来。 ==== More detailed Logging 关于日志记录的更多细节 ==== 您可以创建额外的规则链,以便在syslog中作更加详细的记录。以下是我/etc/iptables.up.rules文件中的一个简单例子: <pre><nowiki> *filter :INPUT ACCEPT [273:55355] :FORWARD ACCEPT [0:0] :LOGNDROP - [0:0] :OUTPUT ACCEPT [92376:20668252] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j LOGNDROP -A LOGNDROP -p tcp -m limit --limit 5/min -j LOG --log-prefix "Denied TCP: " --log-level 7 -A LOGNDROP -p udp -m limit --limit 5/min -j LOG --log-prefix "Denied UDP: " --log-level 7 -A LOGNDROP -p icmp -m limit --limit 5/min -j LOG --log-prefix "Denied ICMP: " --log-level 7 -A LOGNDROP -j DROP COMMIT </nowiki></pre> Note a new CHAIN called <code><nowiki>LOGNDROP</nowiki></code> at the top of the file. Also, the standard <code><nowiki>DROP</nowiki></code> at the bottom of the INPUT chain is replaceed with <code><nowiki>LOGNDROP</nowiki></code> and add protocol descriptions so it makes sense looking at the log. Lastly we drop the traffic at the end of the <code><nowiki>LOGNDROP</nowiki></code> chain. The following gives some idea of what is happening: * <code><nowiki>--limit</nowiki></code> sets the number of times to log the same rule to syslog * <code><nowiki>--log-prefix "Denied..."</nowiki></code> adds a prefix to make finding in the syslog easier * <code><nowiki>--log-level 7</nowiki></code> sets the syslog level to informational (see man syslog for more detail, but you can probably leave this) 可以看到,文件前面多了一条名为<code><nowiki>LOGNDROP</nowiki></code>的规则链。此外,INPUT链最后一条规则中的<code><nowiki>DROP</nowiki></code>被<code><nowiki>LONGDROP</nowiki></code>替代。并且在后面我添加了一些内容来描述报文所使用的协议,这可以让记录更容易理解。最后,在<code><nowiki>LOGNDROP</nowiki></code>链的末尾,报文被丢弃。 * <code><nowiki>--limit</nowiki></code> 对由此规则引发的记录事件的频率进行限制。 * <code><nowiki>--log-prefix "Denied..."</nowiki></code> 在每条记录前加上一个前缀,以便查找。 * <code><nowiki>--log-level 7</nowiki></code> 将记录的详细程度设为“informational”等级(详情请见man syslog,您也可以直接使用此处的设置)。 ==== Disabling the firewall 禁用防火墙 ==== 可以通过清除所有规则来暂时停止防火墙: <pre><nowiki> </nowiki></pre> === Easy configuration via GUI 通过GUI快速配置 === Firestarter是一款图形界面的防火墙工具,您可以从软件库中得到它。(用“新立得”或者apt-get安装)使用Firestarter并不需要掌握命令行方式下的配置方法。想了解它的用法,请阅读相应的教程…… Firestarter使用简单,虽然可能无法实现某些较为复杂的功能,但仍可满足大多数家庭使用的要求。对于从您的主机发送到网络的报文,firestarter推荐使用“restrictive”配置方案。这种方案要求您在清单中指明哪些报文是可以通过的,除此之外的所有报文都将被丢弃。您可以在firestarter的“policy”选项卡中改变配置方案。您也可以使用firestarer查看当前有哪些活动连接…… 当配置向导运行结束后,防火墙就建立起来了。拨号用户必须在配置向导中进行设定,以使防火墙在拨号后自动建立起来。 Firestarter主页:http://www.fs-security.com/ (再次声明,firestarter已经收入软件库,不需要您自己编译) firestarer教程: http://www.fs-security.com/docs/tutorial.php 注意事项:这款软件不会阻止(或者询问用户是否阻止)特定的程序访问网络。因此,根据我的使用经验,一旦您开启端口80(web服务),任何程序都可以使用此端口进行通信。 === Further Information 更多技术细节 === * [http://iptables-tutorial.frozentux.net/iptables-tutorial.html Iptables Tutorial] * [http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html Iptables How To] * [http://www.netfilter.org/documentation/ Netfilter and Iptables Multilingual Documentation] * [http://easyfwgen.morizot.net/gen/ Easy Firewall Generator for IPTables] === Credits 贡献者 === Thanks to Rusty Russell and his How-To, as much of this is based off that. 感谢Rusty Russell和他写的How-To。 ---- ---- 文章来源:官方WIKI<br> 翻译人员:<br> 校对人员:5451vs5451 <br> 文章状态:[[UbuntuHelp:翻译完成]]
返回至
IptablesHowTo
。