linux网络Netfilter与iptables技术

本文深入解析了Linux的Netfilter子系统与iptables的工作原理,包括Netfilter的钩点机制、iptables的表与规则链,以及filter、NAT、mangle和raw表的功能与应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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中表和链的对应关系

 INPUTFORWARDPREROUTINGOUTPUTPOSTROUTING
filterYESYESNOYESNO
NATNONOYESYESYES
mangleYESYESYESYESYES
rawNONOYESYESNO

 

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做数据包的链接跟踪处理,以提高用户的访问速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值