IPTABLE:Linux下的网络防火墙
引言
在Linux系统中,IPtable是一种强大的网络防火墙工具,广泛应用于各种网络环境中。它不仅可以实现基本的包过滤功能,还能进行网络地址转换(NAT)、数据包记录、流量统计等高级功能。本文将详细介绍IPtable的定义、架构、原理、应用场景以及常见的命令体系,帮助读者更好地理解和使用这一工具。
一、IPtable定义
IPTABLE是一种网络防火墙,在LINUX下使用,RedHat9.0版本以上自带。它可以实现NAT转换,做上网代理。IPtable位于/sbin/iptables,是Linux防火墙的管理工具,而真正实现防火墙功能的是Netfilter,它是Linux内核中实现包过滤的内部结构。
防火墙(firewall)一词本是建筑用语,本意是为了保护建筑物不受火灾侵害的,后来被借鉴到了网络通信领域中,表示保护局域网或主机不受网络攻击的侵害。防火墙工作在主机或者网络边缘,对于进出的数据报文按照事先定义好的规则进行检查、监控,一旦符合标准,就按照事先定义好的规则处理动作。
二、IPtable架构
IPtable的架构基于Linux内核中的Netfilter子系统,Netfilter提供了数据包过滤、网络地址转换、数据包修改和数据跟踪等功能。IPtable则是控制Netfilter的工具,它将复杂的规则组织成易于管理的方式,方便管理员进行分组测试、启动或关闭某组规则。
1. Netfilter子系统
Netfilter是Linux内核中负责网络数据包处理的子系统,它提供了以下四个表:
- Filter表:用于包过滤,包含INPUT、FORWARD、OUTPUT三个链。
- NAT表:用于网络地址转换(IP、端口),包含PREROUTING、POSTROUTING、OUTPUT三个链。
- Mangle表:用于修改数据包的服务类型、TTL等,包含PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD五个链。
- Raw表:用于决定数据包是否被状态跟踪机制处理,包含OUTPUT、PREROUTING两个链。
这些表具有一定的优先级:raw -> mangle -> nat -> filter。当数据包经过内核时,会按照这些表的优先级顺序进行检查和处理。
2. 规则链与规则表
IPtable中定义了五个规则链,分别对应数据包经过内核的五个关键地方,称为钩子函数:
- PREROUTING:在数据包进行路由选择前应用此链中的规则。
- INPUT:进入防火墙主机的数据包应用此链中的策略。
- FORWARD:转发数据包时应用此链中的策略。
- OUTPUT:防火墙主机向外部地址发送的数据包应用此链中的策略。
- POSTROUTING:在数据包进行路由选择后应用此链中的规则。
每个钩子函数中可以定义多条规则,每当数据包到达一个钩子函数时,IPtable就会从该钩子函数中的第一条规则开始检查,看数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理数据包;否则IPtable将继续检查下一条规则。如果该数据包不符合钩子函数中任一条规则,IPtable就会根据该函数预先定义的默认策略来处理数据包。
三、IPtable原理
IPtable的原理在于对经过内核的数据包进行过滤和处理。数据包在内核空间中处理时,会根据预设的规则链和规则表进行检查和决策。
1. 数据包处理流程
当主机收到一个数据包后,数据包先在内核空间中处理。若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理;若发现目的不是自身,则会将包丢弃或进行转发。
IPtable在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数。IPtable这款用户空间的软件可以在这五处地方写规则,对经过的数据包进行处理。
具体的数据包处理流程如下:
- 入站流程:
- 数据包到达防火墙后,首先被PREROUTING链处理(是否修改数据包地址等)。
- 然后进行路由选择(判断数据包发往何处)。
- 如果数据包的目标地址是防火墙本机(如Internet用户访问网关的Web服务端口),则内核将其传递给INPUT链进行处理(决定是否允许通过等)。
- 出站流程:
- 防火墙本机向外部地址发送的数据包(如在防火墙主机中测试公网DNS服务时),首先被OUTPUT链处理。
- 然后进行路由选择。
- 再交给POSTROUTING链(是否修改数据包的地址等)进行处理。
- 转发流程:
- 来自外界的数据包到达防火墙后,首先被PREROUTING链处理。
- 然后进行路由选择。
- 如果数据包的目标地址是其他的外部地址(如局域网用户通过网关访问QQ服务器),则内核将其传递给FORWARD链进行处理(允许转发、拦截、丢弃)。
- 最后交给POSTROUTING链(是否修改数据包的地址等)进行处理。
2. 规则匹配与动作
IPtable中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪)。当数据包到达一个钩子函数时,IPtable会从该钩子函数中的第一条规则开始检查,看数据包是否满足规则所定义的条件。规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。
IPtable中常见的动作有:
- ACCEPT:允许数据包通过。
- DROP:直接丢弃数据包,不给出任何回应。
- REJECT:拒绝数据包通过,必要时会给出提示。
- LOG:记录日志信息,然后传给下一条规则继续匹配。
如果数据包满足某条规则的条件,IPtable就会根据该条规则所定义的动作处理数据包;否则,IPtable将继续检查下一条规则。如果该数据包不符合钩子函数中任一条规则,IPtable就会根据该函数预先定义的默认策略来处理数据包。
四、IPtable应用场景
IPtable广泛应用于各种网络环境中,可以实现多种网络功能。以下是一些常见的应用场景:
1. 网关服务器安全策略
目标:网关服务器系统自生安全策略,只对内网用户开放特定端口(如sshd服务)。
配置步骤:
- 清空filter表和nat表。
- 设置默认策略(INPUT链默