博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
打造嵌入式ARM Linux防火墙:1. iptables基础
阅读量:4170 次
发布时间:2019-05-26

本文共 1521 字,大约阅读时间需要 5 分钟。

iptables 包含多个tables,tables中可以包含多个chains,chains可以是自定义也可以是builtin的,其可以包含多个rules。 而rules对应的是packets

iptables的4个内置tables

1. Filter Table

iptables的默认table,因此如果不指定,那么默认就使用的是这个。

Filter Table的3个内置Chains

  1. IP INPUT chain:指到达防火墙的网络数据,即发送到本地(当前)OS的Packets
  2. IP OUTPUT chain:本地生成的,从防火墙出去的数据,即我们要发送出去的Packets。
  3. IP FORWARD chain:当前系统中其他NIC(网卡)发过来的数据,一般是本地Router。

2. NAT Table

什么是NAT

NAT是Network Address Translation的缩写,分为SNAT与DNAT,即Source NAT与Destination NAT

为何需要NAT

主要是处于多个终端共享外网IP(假设使用路由器联网)的时候,需要路由器等设备来进行转发,那么对于外部而言,如果要传数据过来,那么它会指定Destination 的IP为这个路由器的IP,而不是路由器内部的局域网中的机器。

一般,防火墙(ipbatables)位于与外网的接口处,可以“简单的认为”其在路由器上,因此iptables需要对来到路由器的数据进行转发,传送到对应的内网终端中。

而NAT Table中的规则的作用就是,在packet转送的时候更改NAT,从而使数据正确到达终端或者外网。

与NAT相关的iptables中的MASQUERADE

MASQUERADE的作用是在一个动态的IP下,自动的获取某个网卡的IP地址来作NAT,例如PPPoE拨号上网可能每一次传输数据后IP地址变了。

对此NAT有三个builtin的Chains

  1. PROROUTING chain:在routing之前改变packets,用于DNAT(发送之前更改目的IP),即packets到达了防火墙之后,发送到外网之前更改Destination NAT
  2. POSTROUTING chain:在routing字符改变packets,用于SNAT,从外网获取数据之后,在发送到局域网及其之前,更改Source NAT
  3. OUTPUT chain:防火墙自身产生的packet

Mangle Table

这个Table改变TCP头部的QoS bit位,有以下几张表:

  1. PREROUTING chain
  2. OUTPUT chain
  3. FORWARD chain
  4. INPUT chain
  5. POSTROUTING chain
Raw Table
用于配置异常情况下的处理:
  1. PREROUTING chain
  2. OUTPUT chain
iptables的规则
先是三个规则:
    Rules包括一个准则和一个目标(target)
    如果准则条件,就执行目标(target)中的rule的规定。
    如果不满足条件,就判断下一条Rules。

Packet flow

网上找了两张图片,下面这张展示从packet flow的进入到离开,水平方向展示了input path到forward path再到output path中的chain,而垂直方面为TCP/IP中不同层次经过的table/chain
下图为简洁版的Process流程,
注意颜色,不同的颜色分别属于前面介绍过的那些table中的chain:

参考

https://en.wikipedia.org/wiki/Netfilter

你可能感兴趣的文章
Android 图标上面添加提醒(二)使用开源UI类库 Viewbadger
查看>>
Android 图标上面添加提醒(一)使用Canvas绘制
查看>>
Android WebView加载Html右边空白问题的解决方案
查看>>
Android 仿网易新闻v3.5:上下滑动的引导页
查看>>
Android 天气预报图文字幕垂直滚动效果
查看>>
Android硬件加速
查看>>
智慧平安社区系统开发解决方案,智慧小区大数据分析平台建设
查看>>
NQI国家质量技术基础系统开发,国家质量基础设施平台建设
查看>>
nc命令用法举例
查看>>
Linux vmstat命令详解
查看>>
linux watch命令
查看>>
Linux lsof命令详解
查看>>
Ubuntu安装Anaconda
查看>>
蓝桥杯特别数的和(编程大题)
查看>>
Linux系统卡死,只有鼠标能动,解决办法
查看>>
三通道图像和四通道图像
查看>>
win10系统调出计算机和网络图标
查看>>
C/C++中字符串操作函数strcpy,strcat,strlen等
查看>>
贝壳找房机试题(笔试题)
查看>>
Xerces的下载,编译和在VS 2019中的配置
查看>>