Linux IPTABLES防火墙
我们可能听说过Netfilter。
通常,人们可以互换使用术语“ Netfilter”和“ Iptables”。
而且为什么不这样做,他们(http://www.netfilter.org)是开发此工具的人。
从Linux内核2.4.X开始,netfilter/Iptables是Linux系统使用的默认数据包过滤方案。
使用Iptables,我们可以定义一组规则,Linux内核将遵循这些规则来验证所有传入和传出的流量/数据包。
关于iptables的一些重要事项,在我们继续进行此操作之前以及本系列的下一篇教程中将在下面提到。
- 我们使用iptables定义的控件和规则已与Linux内核很好地集成在一起。
- 我们在iptables中定义的规则不过是一组分类的流量模式,对于这些流量模式,我们将根据适当的匹配采取已定义的操作。
- iptables防火墙功能所需的任何内容,默认情况下都作为内核中的不同组件包括在内
- Netfilter/iptables已成为非常成熟的软件,默认情况下,2.4以后发布的每个内核版本均附带该软件。
- Linux内核会根据我们定义的规则对数据包进行所有必需的处理
如前所述,“ iptables”和“ netfilter”这两个术语在行业中是可以互换使用的,因此避免了混淆,最后对它们之间的区别做了说明。
Netfilter是Linux内核中的框架,它通过称为iptables的用户可用接口来实现用户提供的规则和过滤器。
iptables背后的主要思想是为用户提供更高级别的控制权,他们可以指定规则,内核将匹配这些规则并在收到的每个IP数据包上进行验证。
换句话说,内核将基于一组规则对接收到的流量进行操作。
由于多年来的改进和各种功能的增加,Iptable防火墙已成为非常成熟的防火墙。
它几乎包括专有商业防火墙提供的所有功能。
它包括的某些功能在下文中提到。
(不用担心下面提到的术语,在本教程系列中,我将介绍所有这些术语。
)
- 限速
- 状态追踪
- 应用层检查
如前所述,iptable防火墙或者任何其他防火墙的主要目标是定义一组规则,在该规则的基础上进行检查,最终结果将是防火墙采取的措施。
防火墙采取的措施可以是以下任何a)
- 允许小包进入
- 拒绝数据包
- 甚至有时修改数据包
用户在iptables中定义的规则会根据其广泛用途归类到不同的表中。
例如,当我们说术语“包过滤”时,这是一个可以理解的事实,即根据我们提供的规则进行了某种过滤。
iptable过滤是一种过滤流量(允许,禁止或者拒绝或者丢弃)的方法。
因此,iptable中的第一个表和基本表非常重要,通常由普通用户使用,它被称为FILTER表。
如前所述,ip table是一个非常成熟的防火墙,除了基本过滤之外,它还包含许多其他功能。
它具有根据我们定义的规则重新发送数据包的功能。
我在谈论网络地址转换。
网络地址转换的基本思想是修改数据包的源和目标。
如果我们是新手,并且想了解什么是网络地址转换,我建议我们阅读以下文章,以了解一个想法。
iptable防火墙具有为我们执行NAT的功能。
实际上,所有Linux系统使用的默认NAT机制是通过iptables。
这就是原因,具有正确配置的iptables的linux服务器可以充当我们环境的路由器。
由于具有执行网络地址转换的功能,因此iptables拥有一个单独的表。
该表的名称是NAT表。
iptables中的下一个表是一个很少使用的表,称为“ mangle表”。
该表包含规则,这些规则将用于更改IP数据包中的默认值。
当我们要修改TTL(生存时间),TOS(服务类型)或者有时甚至标记数据包时,此表非常有用。
不用担心!在讨论mangle表时,我们将详细讨论这些事情。
最后一个表和最后一个表称为“原始表”。
该表主要仅用于一个目的。
iptable会跟踪它获取的每个数据包的状态(当我讨论本文中未描述的一些术语时,请忽略该内容,因为我们将在该主题上有专门的文章,这将是本教程系列的一部分) )。
该表用于添加规则,我们可以使用该规则指定不需要跟踪的特定数据包。
因此,在继续之前,这里是表及其用例的列表。
表名 | 用例 |
---|---|
筛选表 | 用于基于用户定义的规则,如接受,拒绝等的规则用于正常过滤流量。这是iptables防火墙中的高度用表。并且非常有助于进行正常的日常拦截和过滤。 |
NAT表 | Iptable防火墙是成熟的防火墙,具有普通过滤以外的功能。可容纳可用于网络地址转换目的。此表包含与NAT相关的规则 |
剪辑表 | 此表中的规则可用于基于给定标准的基于用户修改数据包。用户可以修改TTL,MSS值,服务条款(如哪个流量应该提供更多优先级等) |
原始表 | 主要用于添加无连接跟踪规则。 |
如前所述,我们看到的表格是为不同目的而分开的宽泛类别。
在iptables出现之前,Linux中使用了两种不同的防火墙。
有下面提到的。
- Ipchains
- Ipfwadm
iptable仍然使用ipfwadm和ipchains的一些想法。
ipchains防火墙在不同的链中定义了其规则。
链只不过是规则的进一步分类。
iptable承载了来自ipchains防火墙的链条概念,用于在前面提到的过滤器中添加规则。
链条非常简单明了,链条的名称很容易说明。
让我们看看iptable防火墙中的主要链。
- 输入链:此链用于适用于流向服务器的流量/数据包的规则。
- 输出链:此链用于需要将规则应用于服务器的传出流量/数据包的规则。
- 前进链:我们已经讨论过iptable防火墙可用于除基本过滤之外的目的。该链用于添加与IP数据包转发有关的规则。当我们将Linux计算机用作将两个网络连接在一起的路由器时,通常使用此方法。
- 预路由链:基本上,此链用于添加规则,这些规则将定义内核做出路由决定之前需要执行的操作。
- POST-ROUTING:此链用于添加规则,这些规则将定义内核做出路由决定后需要执行的操作。在讨论NAT表时,我们将详细讨论这些链。
因此,我们在iptable防火墙中看到了4个表。
那四个表将包含上述链。
并非所有表都将包含所有这些链,但是所有表都将包含其中一些链。
让我们看一下不同表中的链。
哦,等等。
在看到表中的这些链之前,让我们在系统上运行一些命令,并查看iptables中的一些基本内容。
我们可以在系统上运行的第一个命令是检查安装了哪个版本的iptable。
可以使用以下命令完成此操作。
# iptables -V iptables v1.4.12
现在让我们看看我们的系统上是否已经应用了一些规则...
# iptables -L 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
上面的命令显示了INPUT,FORWARD和OUTPUT链中的当前值。
在讨论过滤器表时,我们看到它是使用率很高的表。
因此,如果我们没有明确提及表名,则它是iptable命令显示的默认表。
上面显示的链是过滤器表的一部分(因为它是iptable显示的默认表)。
过滤器表的输出也应该完全相似,因为它显示了默认表。
#iptables -t filter -L 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
上面命令中使用的-t选项指定表名。
而-L选项表示列出规则。
如果看到输出,则不会显示任何规则集。
这是因为到目前为止,我们还没有设置任何规则。
但是,某些企业Linux(例如Red Hat Linux)已具有默认规则集,该规则集会拒绝大量传入数据包。
从上面显示的输出中可以很清楚地看出一件事,过滤器表具有bot三个默认链(INPUT,FORWARD,OUTPUT)
现在,让我们看看NAT表,Mangle表和Raw表中包含哪些链。
# iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination
默认情况下,Nat表由“前路由”,“后路由”,“输入”,“输出”链组成。
# iptables -t mangle -L Chain PREROUTING (policy ACCEPT) target prot opt source destination 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 Chain POSTROUTING (policy ACCEPT) target prot opt source destination
默认情况下,Mangle表具有INPUT,FORWARD,OUTPUT,POST-ROUTING,PRE-ROUTING链。
# iptables -t raw -L Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
原始表默认具有“预路由”和“输出”链。
除了这些链之外,我们还可以创建自己的自定义链,其中可以定义规则。
我们将在本教程系列的后续文章中看到所有这些内容。
在本文的开头,我们已经看到过滤和netfilter框架的整个展示是由内核执行的。
因此,为了使iptable防火墙正常工作,必须已经加载了一些模块。
让我们看看默认情况下加载了哪些iptable模块以及它们提供了哪些功能。
# lsmod | grep ip_tables ip_tables 27473 4 iptable_raw,iptable_nat,iptable_mangle,iptable_filter x_tables 29938 4 iptable_raw,iptable_mangle,iptable_filter,ip_tables
lsmod命令用于列出当前加载的内核模块。
我们可以清楚地看到,基于不同表的功能是由不同的内核模块添加的。