iptables详解(1):iptables概念
防火墙相关概念。
逻辑上,防火墙可以分为主机防火墙和网络防火墙。
主机防火墙:针对单个主机进行防护
网络防火墙:处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网
网络防火墙和主机防火墙并不冲突,网络防火墙主外(集体),主机防火墙主内(个人)
物理上,防火墙可以分为硬件防火墙和软件防火墙
硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。
软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。
iptables其实不是真正的防护群殴爱你个,理解为一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应内核空间netfilter
iptables是命令行工具,位于用户空间,利用命令行操作内核空间的netfilter,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
netfilter是Linux操作系统核心层内部的数据包处理模块,功能如下:
1.网络地址转换(Network Address Translate)
2.数据包内容修改
3.数据包过滤的防火墙功能
iptables基础
iptables是按照规则处理数据包。
规则 存储在内核空间的信息包过滤表中。
规则指定 源地址、目的地址、传输协议(如TCP、UDP、ICMP)、服务类型(如HTTP、FTP、SMTP)等。
处理 当数据包的包头符合规则指定的内容,iptables就执行所定义的方法来处理这些数据包。
处理方法主要有放行(accept)、拒绝(reject)、丢弃(drop)
配置防火墙的主要工作就是添加、修改和删除这些规则。
客户端访问服务器的web服务时,客户端发送报文到网卡,而tcp/ip协议栈是属于内核一部分,客户端信息会通过内核的TCP协议传输到用户空间的web服务中,此时的客户端报文的目标终点为web服务所监听的套接字(IP:port)上,当web服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,这个时候,web服务所监听的ip和端口反而变成了原点。
①客户端报文访问目标地址是本机某进程。经过的内核链是 PREROUTING链 --> INPUT链--> web服务
②由本机某进程发出的报文。OUTPUT链 --> POSTROUTING链
③客户端访问的目标地址是其他服务器,转发作用,则不会经过INPUT链,也不会发往用户空间,而是直接在内核空间中经过forward链和postrouting链转发出去,经过的链是路由前、转发、路由后,PREROUTING链 --> FORWARD链 --> POSTROUTING链
链的概念
因为经过一个链的时候不可能只有一条规则,所以很多规则在链上就是下图
表的概念
每个链上都有一串规则,但是有些规则是类似的A类规则都是对 ip 或者 端口的过滤,B类规则都是修改报文,实现相同规则的报文应该是可以放在一起的,规则分类相同功能放在一起的集合叫做“表”
filter表:过滤。 内核模块:iptables_filter
nat表:网络地址转换。 内核模块:iptables_nat
mangle表:拆解报文,做出修改,并重新封装。内核模块:iptables_mangle
raw表:关闭nat表上启用的连接追踪机制。 内核模块:iptables_raw
表和链的关系
某些 “链” 中注定不会包含某种规则,就好像游戏中A关卡只负责打击陆地敌人,没有防空能力,B关卡可能只负责空中敌人没有防御步兵能力
prerouting链只拥有 nat 表、raw表和mangle表所对应功能,prerouting规则只存放在nat、raw和mangle表
PREROUTING 规则可以存在 raw表,mangle表,nat表
INPUT 规则可以存在 mangle表,filter表
FORWARD 规则可以存在 mangle表,filter表
OUTPUT 规则可以存在 raw表, mangle表,filter表,nat表
POSTROUTING 规则可以存在 mangle表,nat表
但是在实际的使用过程中,是以“表”作为操作入口,对规则进行定义,表(功能)< -- > 链 (钩子)
raw表 用于处理异常
PREROUTING链、OUTPUT链
mangle表 用于指定如何处理数据包,能改变TCP头中的Qos位
PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING 所有的链都可以被使用
nat表
PREROUTING链(刚到本机在路由器转发前的数据包,会转换目标ip地址,通常用于DNAT)
POSTROUTING链(处理即将离开本机的数据包,转换源ip地址,通常用于SNAT) (centos7中有INPUT centos6中没有)
OUTPUT链(处理本机产生的数据包)
filter表
INPUT链 (处理 来自外部的数据)
FORWARD链(将数据转发到本机的其他网卡设备)
OUTPUT链(处理向外发送的数据)
数据包经过一个“链” 会将当前的规则都匹配一遍 匹配有顺序 可看当前的哪些链是最先开始执行的呢
raw --> mangle --> nat
同一条链中的表的执行优先级从高到低是这样的,目前一条链中所有的都有的只有OUTPUT表
raw --> mangle --> nat --> filter
为了方便管理 还会在某个表中创建自定义链,针对某个应用程序所设置的规则放置在这个自定义链中,但是自定义链不能直接使用,只能被某个默认的链当做 动作 去调用才能起租用,自定义链可以想象成比较短的链,这条短链规则是针对某个应用程序制定,这条链不能直接使用,需要焊接在iptables默认定义链上,才能被iptables使用,所以自定义链都要被当做 “动作”去引用。
数据经过防火墙的流程
在写iptables规则的时,需要牢记这张图的规则
centos7 的nat 有INPUT的 但是centos6没有INPUT
匹配条件 和 动作 组成了 规则
--匹配条件分为(基本匹配条件)和(扩展匹配条件)
1、基本匹配条件: 源地址、目标地址
2、扩展条件是在上面的基础上加上其他条件,以模块的形式存在,使用这些条件需要依赖对应扩展模块,如 源端口,目的端口
--处理动作 在规则中 为 target 分为(基本动作)和(扩展动作)
1、ACCECPT:允许数据包通过
2、DROP:直接丢弃数据包不给任何回应信息,客户端只有从超时的时候才知道
3、REJECT:拒绝数据包通过,客户端会收到数据发送端的响应拒绝信息
4、SNAT:源地址转换,解决内网用户用同一个公网上网的问题
5、MASQUERADE:SNAT的特殊形式,使用在动态临时会变的ip地址上
6、DNAT:目标地址转换
7、REDIRECT:在本机做端口映射
8、QUEUE:将数据包移交到用户空间
9、RETURN:防火墙停止执行当前链中的后续rules 并返回到调用链(the calling chain)中
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,只做操作过程的记录。
参考链接 :http://www.zsythink.net/archives/1199