linux网络——iptables与网关
扫描二维码
随时随地手机看文章
最近做关WiFi家庭网关项目,接触到很多新的知识,本文对linux的iptables、网关中的NAT转换、DMZ、端口映射和端口触发等概念进行总结
linux iptableslinux iptables是linux2.6内核以后使用的一套网络工具,对其进行合理的配置,可实现防火墙、NAT转换等网关功能
好,那么iptables怎么配置,这些配置是如何实现的呢
iptables配置方法应用层的iptables是一个可执行程序,iptabltes- h可看到命令帮助,这里首先要说明一下iptables中的3个层次递进的概念:表(table)、链(chain)和规则(target),iptables应用程序命令就是对某个表的某个链的某个规则操作
iptables默认有4张表,nat、filter、mangle和raw,项目中使用了nat和filter,所以这里只说nat和filter
每个表都有几条默认的链,nat默认有PREROUTING、INPUT、OUTPUT、POSTROUTING4个链,filter默认有INPUT、FORWARD、OUTPUT3个链,表不可增减,但是表中的链可自定义增加或删除
命令格式 : iptables -t [table] -[opt] [chain] -j ...
命令的格式变化太多,且无需记住所有命令,关键是实际中如何使用,常用哪些,后续再说
这里不会分析源码,只注重大局和框架,上图最方便
上图表示的是网络数据从网卡驱动接收程序中跳转到协议层后,都经历了哪些东东,这些过程属于linux的net子系统,与设备无关
所有报文都经过这个图,从PREROUTING这里,报文的mac已经被剥离,即从以后是三层处理,主要关注报文的ip地址,先抛开这些点是干嘛的,理一理数据报的流向
PREROUTING点表示还未进行路由之前,经过路由后,报文的流向无非是两个结果,要么该报文是发往本机的,即上面一条路,要么是发往其他设备的,走下面一条路
如果是发往本机,则经过IUPUT点,到达Localhost,即发往上层协议处理,处理之后,还会经过一个路由,判断发往哪里
如果是发往其他设备,则经过FORWARD点进行转发
最后所有数据报都会经过POSTROUTING点,出设备
这些点和iptables中的表和链是什么关系?此即彼
iptables在内核中的实现是通过netfilter完成的,本质上是在这些预先设置好的点上添加各种内核钩子函数,当程序执行到这些点上时,按照iptables应用程序配置的规则进行处理,是接收、丢弃、转发,还是NAT转换…,iptables和内核通信通过netlink完成,当然出于某些特殊需求,你也可以自己添加钩子函数,怎么添加,看/linux-2.6-xxx/net/netfilter/下的几个源码自然会了
NAT转换NAT转换是干嘛?转换ip地址,为什么要转换?一是地址不够了,二是保护内网
地址不够的问题就要涉及到网络地址划分了,不展开说,地址分为A、B、C、D、E五类,所有地址中选取一些地址作为私有地址,只用于内网,它们是
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
怎么保护,外网不可访问内网,内网可以访问外网
iptables的表nat专门用于设置和处理NAT转换的规则,内网访问外网资源时,将源ip地址转换为一个外网地址,该过程叫SNAT,iptables设置后,也可以让外网访问内网部分资源,将目的ip地址转换为一个内网地址,该过程叫DNAT,说白了,核心在于对网络结构的理解,对iptables进行配置,以控制数据流的走向
DMZDMZ是干嘛的,官话是位于外网和防火墙之间的一个区域,可放置一些私人服务器资源,供外网访问,上图来理解
上图中,共有三个区域,外网、DMZ和内网,一般用户家中如果不放置私人服务器等东东,没有DMZ
外网在网关左侧,DMZ和内网在网关右侧,表明DMZ和内网都是私有地址,内网包括用户会使用的PC、手机等设备,这些设备必须与外网严格隔离,不可被外网入侵,DMZ区域放置一些可以被外网访问的服务器
一般的规则是:外网可访问DMZ,不可访问内网,DMZ不可访问外网和内网,内网可访问外网和DMZ
但是规则都是人定的,关键在于iptables的配置,怎么玩都行其实