1、iptables基础
1.1 Netfilter与iptables引入
百度百科:Netfilter是Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能。netfilter的架构就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理。
iptables是使用这个模块的软件,位于应用空间,Netfilter组件位于内核空间,是内核网络的一部分。通过它可以插入、修改、删除一些表,从而很好对对网络数据包进行有效安全管控。
1.2 Netfilter钩点
1.3 表与规则
表是链的容器、链是规则(policys)的容器。规则(policy)就是iptables过滤信息的具体方法。
表分为四种, 链分为五种。
表名包括:
-
raw:高级功能,如:网址过滤。
- mangle:数据包修改(QOS),用于实现服务质量。
- net:地址转换,用于网关路由器。
- filter:包过滤,用于防火墙规则。
规则链包括:
- INPUT链:处理输入数据包。
- OUTPUT链:处理输出数据包。
- PORWARD链:处理转发数据包。
- PREROUTING链:用于目标地址转换(DNAT)。
- POSTOUTING链:用于源地址转换(SNAT)。
表(table) | 链(chain) | |
filter | 默认表,实现防火墙数据过滤功能。 | |
INPUT | 对于指定到本地套接字的包,即到达本地防火墙的数据包。 | |
OUTPUT | 本地创建的数据包。 | |
FORWARD | 路由穿过的数据包,即经过防火墙的数据包。 | |
NAT | 当遇到新创建的数据包连接时将参考这个表。 | |
PREROUTING | 一进来就对数据包进行改变。 | |
OUTPUT | 本地创建的数据包在路由之前进行改变。 | |
POSTROUTING | 在数据包即将出去时改变数据包信息。 | |
mangle | 专门用于改变数据包 | |
INPUT | 进入到设备本身的包 | |
FORWARD | 对路由后的数据包进行修改 | |
PREROUTING | 在路由之前更改传入的包 | |
OUTPUT | 本地创建的数据包在路由之前进行改变 | |
POSTROUTING | 在数据包即将离开时更改数据包信息 | |
raw | 有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能 |
iptables中表和链的对应关系
INPUT | FORWARD | PREROUTING | OUTPUT | POSTROUTING | |
filter | YES | YES | NO | YES | NO |
NAT | NO | NO | YES | YES | YES |
mangle | YES | YES | YES | YES | YES |
raw | NO | NO | YES | YES | NO |
filter表
filter表 | 强调:主要和主机自身相关,真正负责主机防火墙功能的(过滤流入流出主机的数据包) filter表示iptables默认使用的表,定义了三个链 企业工作场景:主机防火墙 |
INPUT | 负责过滤所有目标地址是本机地址的数据包 |
FORWARD | 负责转发流经主机的数据包。起转发作用,和NAT关系很大。 LVS NAT模式:net.ipv4.ip_forward=0 |
OUTPUT | 处理所有源地址是本机地址的数据包 |
NAT表
NAT表 | 负责网络地址转换的,即来源和目的ip地址的port的转换 应用:和主机本身无关,一般用于局域网共享上网或者特殊的端口转换服务相关。 工作场景: 1. 用于企业路由(zebra)或网关(iptables),共享上网(POSTROUTING) 2. 做内部外部IP地址一对一映射(dmz),硬件防火墙映射IP到内部服务器,FTP服务(PREROUTING) 3. WEB,单个端口的映射,直接映射端口80端口(PREROUTING) |
OUTPUT | 和主机放出去的数据包有关,改变主机发出数据包的目的地址 |
PREROUTING | 在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址,目的端口等。 |
POSTROUTING | 在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等。 |
mangle表
mangle表 | 主要负责修改数据包中特殊的路由标记,例如TTL,TOS,MARK等。 |
raw表
有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能。RAW 表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链 上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度。