iptables按照规则进行处理,而iptables的规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包和规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。

我们启用防火墙时,报文需要经过如下链,根据实际情况的不同,报文经过的链可能不同,如果报文需要转发,那么报文则不会经过input链发往用户空间,而是直接在内核空间经过forward链和postrouting链转发出去。如下图。

根据上图,

如果目的地址为本机,报文的方向为: PREROUTING --> INPUT-->OUTPUT-->POSTROUTING

目的地址为其他主机,报文方向为: PREROUTING --> FORWARD --> POSTROUTING -->其他主机

链的概念

防火墙的作用在于对经过的报文匹配“规则”,然后执行对应的“动作”,所以,当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上的规则可能不止有一条规则,而是很多条规则,当我们把这些规则串到一个链条上的时候,就形成了“链”。

表的概念

每个“链”上都放置一串规则,但是对这些规则有些很相似,比如,A类规则都是对IP或者端口的过滤,B类规则是修改报文,那么这个时候,我们可以把这些实现相同功能的规则放在一起。

我们把具有相同功能的规则的集合叫做“表”,所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了四种表,每种表对应了不同的功能,而我们定义的规则都在这4种功能的范围,所以,必须要了解每个表的作用。

filter表:负责过滤功能,防火墙;内核模块,iptable_filter

nat表:network address translation,网络地址转换功能;内核模块:iptable_nat

mangle表:拆解报文,做出修改,并重新封装的功能;内核模块:iptable_mangle

raw表:关闭nat表上启用的连接追踪机制;内核模块:iptable_raw

表链关系

PREROUTING的规则可以存在于: raw表,mangle表,nat表 INPUT的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有) FORWARD的规则存在于: mangle表,filter表 OUTPUT的规则存在于: raw表,mangle表,nat表,filter表 POSTROUTING的规则在于: mangle表,nat表

但是,在实际使用过程中,往往是通过“表”作为操作入口,对规则进行定义,之所以上面介绍iptables,是因为从“关卡”的角度更容易从入门的角度理解,但是为了以便于在实际使用的时候,更加顺畅的理解它们,此处我们将各“表”与“链”的关系罗列出来。

表(功能) 链(钩子)
raw PREROUTING, OUTPUT
mangle PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
nat PREROUTING, OUTPUT, POSTROUTING (CentOS7中还有INPUT,CentOS6没有)
filter INPUT, FORWARD,OUTPUT

数据经过防火墙流程

iptables常用的处理动作

  ACCEPT:允许数据包通过

  DROP:直接丢弃数据包,不给任何回应信息

  REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息

  SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题

  MASQUERADE:是SNAT的一种特殊形式,适用于动态的,临时会变的ip上

  DNAT:目标地址转换

  REDIRECT:在本机做端口映射

  LOG:在/var/log/message文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作

最新文章

  1. Java_Array数组1
  2. Educational Round 15
  3. 终于解决:升级至.NET 4.6.1后VS2015生成WCF客户端代理类的问题
  4. spring源码分析之spring-core asm概述
  5. Linux服务器
  6. http://www.ruanyifeng.com/blog/2007/03/metadata.html
  7. Android如何在ListView中嵌套ListView
  8. PHP开发搜索引擎技术全解析
  9. [MODx] 4. getResources
  10. 简单地使用jquery的validate
  11. 跨浏览器resize事件分析
  12. PHP系列目录
  13. C++编程练习(11)----“图的最短路径问题“(Dijkstra算法、Floyd算法)
  14. 渗透测试入门DVWA 教程1:环境搭建
  15. FineUIMvc的分部视图连接器 --VS-- FineUIPro的用户控件连接器
  16. 序列比对和构建进化树(clustalw和phylip)
  17. oracle数据库SQL入门
  18. DPI 计算及速查表
  19. for循环 while循环 break跳出循环 continue结束本次循环 exit退出整个脚本
  20. tf.while_loop

热门文章

  1. Java单例设计模式和多例设计模式
  2. SQL 遍历删除所有表的数据
  3. SAP Kyma(Extension Factory on SAP Cloud Platform)的架构简介
  4. pcntl
  5. SOAP与restful webservice
  6. Flutter——Wrap组件(流式布局)
  7. 文本三剑客之grep及正则表达式
  8. 搭建一个jumpserver跳板机
  9. 动态规划1——最长递增子序列、最长公共子序列、最长公共子串(python实现)
  10. Mysql读写分离 及高可用高性能负载均衡实现