Iptables 使用简介
Iptables是一种功能强大的基于包过滤的网络工具,本文简单介绍了iptables的使用方法,以及如何利用它来构建一个网络防火墙。
Iptables由两个子系统组成,即内核模块和用户接口应用程序,它可以被编译进系统内核,也可以编译成可装卸的内核模块,之后还可以选择安装一些能够完成一定功能的部件,这些部件实现了IP地址伪装,端口映射,包过滤等等一系列功能。
安装iptables
iptables很多组件的配置、编译是与内核的配置、编译相关联的,一些Linux发行版已经预先安装好了iptables,如RedHat,RedFlag等。但是您还是有可能需要自己安装。
首先您需要2.4.X以上版本的内核,可以从http://Kernel.org下载。
您还需要iptables的用户空间程序,它可以从Netfilter主页下载。
当您做好准备工作后就开始编译内核,在Networking Options下找到 Network packet filtering子项,选择Network packet filtering replaces ipchains并进行配置。
使用新内核引导后编译iptables的用户空间程序,安装程序会将可执行文件拷贝到/usr/local/sbin目录。
如果一切都很顺利,我们就已经在内核中成功地安装了对iptables和Netfilter的支持了。
用户可以通过service iptables start启动服务。
表和链
这里我们讨论一下数据包在iptables的各个链和表之间是怎么传递的。
举例来说,一个从外部主机发往本机的数据包需要经过以下的途径才能被应用程序接收:
1. 数据包从网络传入,并由网卡接收
2. 随后转入mangle表的PREROUTING链。
3. 再转入nat表的PRETOUTING链,这个链主要用来做DNAT,即目的地址转发。
4. 路由判断。
5. 因为数据包是传入本机的,因此转入mangle表的INPUT链。
6. 转入filter表的INPUT链。
7. 最终到达接收数据包的应用程序。
同样,一个从本地发往外部主机的数据包也经过了下列途径,才开始真正的网络传输:
1. 应用程序生成数据包,根据源地址,目的地址,外出接口等信息进行路由判断。
2. 随后转入mangle表的OUTPUT链。
3. 再转入nat表的OUTPUT链,这个链可以用来做DNAT。
4. 进入filter表的OUTPUT链,对该数据包进行选择性过滤。
5. 然后进入mangle表的POSTROUTING链。
6. 进入nat表的POSTROUTING链,该链可以做SNAT,即源地址转发,最终进入网络。
对于转发的包,即传入包的目的地址是另一个网络中的某个主机时,也有下列途径:
1. 数据报传入,进入mangle表的PREROUTING链
2. 转入nat表的PREROUTING链。
3. 进行路由判断。该包的目的地址是另一台主机,所以转入mangle表的FORWARD链
4. 再转入filter表的FORWARD链,针对这类包的所有过滤操作都在该链进行。
5. 过滤后转入mangle链的POSTROUTING链,最后通过nat表的POSTROUTING链进行SNAT,最终进入网络。
在对网络数据包的流向有了一些了解后,下一节我们将介绍如何编写iptables规则。