Iptables 简介

Github-blog
CSDN-blog

docker,K8s的内部网络很多是基于Iptables实现的。这篇文章就Iptables进行简单的介绍。

简介

基本的Iptables由4张表和5条链组成。4张表分别是raw表、mangle表、nat表,以及filter表。5条链分别是PREROUTING、INPUT、FORWARDING、OUTPUT,以及POSTROUTIONG。docker和k8s在这五条链的基础上又增加了,诸如DOCKER-USER、KUBE-SERVICES等链。本文仅对基本的表、链进行介绍,docker、k8s后续我们在讨论。

raw表

raw表的优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能;raw 表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链 上,raw表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.
raw表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度。

mangle表

mangle表的主要功能是根据规则修改数据包的一些标志位,以便其他规则或程序可以利用这种标志对数据包进行过滤策略路由。例如,你可以使用mangle匹配来改变包的TOS(type-of-service)、TTL、MARK等特性。

nat表

nat即Network Address Translation,NAT主要可以实现以下几个功能:数据包伪装、平衡负载、端口转发和透明代理。nat详细介绍
数据伪装: 可以将内网数据包中的地址信息更改成统一的对外地址信息,不让内网主机直接暴露在因特网上,保证内网主机的安全。同时,该功能也常用来实现共享上网。
端口转发: 当内网主机对外提供服务时,由于使用的是内部私有IP地址,外网无法直接访问。因此,需要在网关上进行端口转发,将特定服务的数据包转发给内网主机。
负载平衡: 目的地址转换NAT可以重定向一些服务器的连接到其他随机选定的服务器。
失效终结: 目的地址转换NAT可以用来提供高可靠性的服务。如果一个系统有一台通过路由器访问的关键服务器,一旦路由器检测到该服务器当机,它可以使用目的地址转换NAT透明的把连接转移到一个备份服务器上。
透明代理: NAT可以把连接到因特网的HTTP连接重定向到一个指定的HTTP代理服务器以缓存数据和过滤请求。一些因特网服务提供商就使用这种技术来减少带宽的使用而不用让他们的客户配置他们的浏览器支持代理连接.

filter表

filter 表用来过滤数据包,我们可以在任何时候匹配包并过滤它们。 我们就是在这里根据包的内容对包做DROP或ACCEPT的。当然,我们也可以预先在其他地方做些过滤,但是这 个表才是设计用来过滤的。几乎所有的target都可以在这儿使用。

prerouting

数据包进入路由表之前的操作在此进行

input

通过路由表后发现目的地址为本机,则匹配该链中规则

forwarding

通过路由表后发现目的地址非本机,则匹配该链中规则

output

由本机产生的,向外转发的匹配该链中的规则

postrouting

发送到网卡接口之前,进行该链中规则的匹配

4表5链的工作流程大致可如下图所示:
iptables工作流程示意图

数据包先经过PREOUTING,由该链确定数据包的走向:

1、目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,
     即:PREROUTIGN--->INPUT;  
2、若满足PREROUTING的nat表上的转发规则,则发送给FORWARD,然后再经过POSTROUTING发送出去,
     即:PREROUTING--->RORWARD--->POSTROUTING  

主机发送数据包时,流程则是:OUTPUT--->POSTROUTING

以上~

猜你喜欢

转载自blog.csdn.net/xftony/article/details/80584251