特别说明:此系列博文根据 朱双印博客-iptables系列博文,个人实践后总结,此为个人笔记精简版,更通俗易懂请参考 朱双印博客-iptables系列博文 原文内容,诸君必能有所收获
01 Iptables概念
相关概念:防火墙
- 防火墙可以从逻辑上大体分为主机防火墙和网络防火墙,主机防火墙针对单个主机进行防护,网络防火墙则往往处于网络入口或边缘,针对网络入口进行防护,服务于防火墙背后的本地局域网
- 防火墙可以从物理上大体分为硬件防火墙和软件防火墙,硬件防火墙在硬件级别实现部分防火墙功能,另一部分基于软件实现,性能高,成本高;软件防火墙则是应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低
Linux中的iptables:
- iptables其实并不是真正的防火墙,更像是一个客户端代理,用户通过iptables这个代理,可以将安全设定执行到对应的"安全框架"即netfilter,netfilter才算得上是防火墙
- iptables位于用户空间,我们能通过命令行进行操作,netfilter位于内核空间,是防火墙真正的安全框架(framework),iptables和netfilter一起组成Linux的包过滤防火墙,实现封包过滤,封包重定向和网络地址转换(NAT)等功能
iptables基础
-
iptables是按照规则进行工作的,那么什么是规则?规则其实就是网络管理员预定义的条件,一般定义为"如果数据包头符合XX条件,就按照YY的方式去处理这个数据包",规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(TCP、UDP、ICMP)和服务类型(HTTP、FTP、SMTP)等;每当数据包和规则匹配,iptables就按照相应的规则去处理这些数据包,包括放行(accept)、拒绝(reject)和丢弃(drop)等
-
网络数据包在接收过程中,首先发送到网卡,经过内核空间的协议栈处理后,才会到达用户空间的各种服务的套接字;相反,发送则刚好与之颠倒;我们需要达到防火的目的,则需要严格的把控进出入服务的报文,在iptables中,我们利用input链和output链进行把控
-
由于客户端收到的报文并不是想发送给本机的,而是其他服务器的,当本机的内核支持IP_FORWARD时,我们可以将报文转发给其他服务器,这时我们会用到iptables的其他"链",即"路由前"、“转发”、“路由后”,英文分别是PREROUTING、FORWARD、POSTROUTING
-
这样说来,数据报文是否进入用户空间,还需要根据实际情况不同而定,如需要转发的报文,那么报文就不会经过INPUT链,而是在内核空间中经过FORWARD链和POSTROUTING链被转发出去
到本机的某进程的报文:PREROUTING----> INPUT由本机转发的报文:PREROUTING —> FORWARD —> POSTROUTING
由本机的某进程发出的报文(响应报文):OUTPUT —> POSTROUTING
链的概念
在iptables中,防火墙关卡为什么称之为链呢?我们知道,防火墙是按照规则来对经过的报文进行筛选的,当报文经过防火墙上的"关卡"时,就必须匹配这个"关卡"的规则,但是可能这个"关卡"上不止一条规则。这样,当我们把这些规则依次连在一起,是不是就成为了链呢?每个经过这个"关卡"的报文,都要依次匹配链上所有的规则,如果有触发规则,将会执行相应的动作
表的概念
我们在一条链上放置了一系列的规则,但是这些规则有可能会存在一些相似的功能,我们把这些具有相似功能的规则整合在一起,这就是表,表就是这些相似或相同规则的集合
在iptables中,为了方便我们管理配置防火墙,iptables已经定义了4种表,每种表对应着不同的功能,我们定义的规则基本上都是处于这4种表的功能范围内,所以知道每个表的作用也就很重要了
- filter表:负责过滤功能,防火墙;内核模块:iptable_filter
- nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
- mangle表:拆解报文,做出修改,并重新封装功能;内核模块:iptable_mangle
- raw表:关闭nat表上启用的连接追踪机制;内核模块:iptable_raw
表链关系
我们需要记得,某些链不具备某些规则,所以不具备某些功能,有点链什么规则都有,所以具备很强的功能,具体来说有什么功能,要看链上的规则存在于那些表中
以上的图什么意思呢?它表示,PREROUTING"链"拥有raw表、mangle表和nat表所对应的功能,PREROUTING链中的规则只能存放在nat表、mangle表和nat表中
现在,我们总结一下各个关卡(链)都有那些表吧:
- PREROUTING:规则可以存在于raw表、mangle表、nat表
- INPUT:规则可以存在于mangle表、filter表、(CentOS7中还有nat表,CentOS6里没有)
- FORWARD:规则可以存在于mangle表、filter表
- OUTPUT:规则可以存在于raw表、mangle表、nat表、filter表
- POSTROUTING:规则可以存在于mangle表、nat表
由于实际情况下,我们都是以"表"来操作规则定义的,所以我们再看看各个表对应的链关系:
表(功能) < — > 链(钩子):
- raw表:规则可以被哪些链使用:PREROUTING,OUTPUT
- mangle表:规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
- nat表:规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING (CentOS7中还有INPUT,CentOS6里没有)
- filter表:规则可以被哪些链使用:INPUT,FORWARD,OUTPUT
那么规则匹配有顺序吗?总不会胡乱匹配吧,事实上,iptables已经明确的规定了匹配顺序,即按照表的优先级进行匹配
上图中,表示的是PREROUTING链的规则执行顺序,是按照表的优先级
raw > mangle > nat
但iptables有四张表,那么他们都在一起时优先级是怎样的?
raw > mangle > nat > filter
数据经过防火墙的流程
为了更近一步理解防火墙,理解iptables的工作,我们可以试着看下面的图
规则的概念
规则:根据指定的匹配条件来尝试匹配每个经过此处的报文,一旦匹配成功,触发规则,则执行规则后面指定的处理动作进行处理
规则的组成:匹配条件 + 处理动作
匹配条件:
匹配条件分为基本匹配条件和扩展匹配条件
基本匹配条件:
- 源地址Source IP,目标地址 Destination IP
扩展匹配条件:
- 扩展匹配条件是netfilter的一部分,只是以模块的形式存在,如果想使用这些条件,则需要依赖对应的扩展模块
- 源端口 Source Port,目标端口 Destination Port
处理动作:
处理动作在iptables中被称为target,同样,也分为基本动作和扩展动作
常用处理动作:
- ACCEPT:允许数据包通过
- DROP:直接丢弃数据包,不给出任何回应信息,这时候客户端会感觉自己的请求久久没有回应,直到超时
- REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息,客户端刚请求就会收到拒绝访问的信息
- SNAT:源地址转换,解决内网用户同一个公网地址上网问题
- MASQUERADE:是SNAT的一种特殊形式,适用于动态的,临时的,会变化的IP上
- DNAT:目标地址转换
- REDIRECT:在本机做端口映射
- LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,交给下一条规则处理,也就是说除了记录以为,不对数据包做任何处理