28_1_iptables系列之基础原理

iptables/netfilter:工作在linux内核中的网络防火墙,是一组工具。
    netfilter:正真起作用的是netfilter,它是一个框架;
    iptanles:是生成防火墙规则,并且将其附加在netfilter上真正实现数据报文过滤、nat、mangle等规则生成的工具。

1、一些网络知识:
   ip报文首部,Tcp报文首部
   事实上,网络防火墙的主要功能是根据报文首部实现的。
(1)ip报文首部:
   0:版本号(4),IP首部大小[结果*4](4),服务类型(8),总长度=IP首部+数据[tcp首部](16)   
   4:段标识[用于分段标识](16),R(1),DF:不允许分片(1),MF:更多分片(1),段偏移量:分片拼接(13)
   8:TTL:每经过一个路由-1,为0还没有到达目的地就抛弃(8),协议:TCP,UDP,TCMP等(8),首部校验码(16)
   12:源IP
   16:目的IP
   20:options,可变长度的可选数据
   24:数据

ICMP:互联网控制消息协议
        是三层半协议,根据IP报文实现数据报文的发送,但不是能实现报文控制的协议
    是传输网路控制的协议。

IP报文实现了将一个数据报文发往目标主机,但是真正通信的是两个主机上的进程是哪两个进程呢?
   对于TCP,UDP协议可以根据端口号标记
   端口号:[0-65535],一般在linux主机上0-1023管理员使用
                     在BSD上>5000的端口才允许用户使用
   对linux来说一切皆文件,每打开一个端口就称打开一个套接字文件
   所以众多的应用协议都是基于TCP,UDP协议,来完成再次封装,以标记两个进程的

(2)TCP报文首部:
   0:源端口(16),目标端口(16)
   4:序列号[sequence Number](32)
      TCP是有状态的协议,需要三次握手,四次断开,每一次报文的传输都需要对方确认
      发送方告诉接收方所发送陪的编号,第一次的随机的,以后每一次都加1。
   8:确认号[Acknowledgement Number](32)
      把对方的序列号加1,并回送给对方。
      一次传一批,依次确认,一次发多少个呢?
      滑动窗口的窗口大小是双方用来协商发送缓冲和接收缓冲的大小的。
   12:首部长度(4),保留:现在有两个已经使用(6),下面6个:是否有效[1为有效]:
       URG紧急指针(1),ACK确认号(1),PSH推送[立即送给内核](1),RST重置(1),SYN同步请求(1),FIN断开链接(1)
       窗口大小(16)
   16:TCP校检和(16),紧急指针(16)
   20:options,可变长度的可选数据
   24:数据

例如一个http报文:
   要发送一个http报文,有很多的开销:帧首部,IP首部,TCP首部,http首部,数据
   这些数据都要转换为能够通过网络发送的数据格式:文本,二进制,最后都是转换成0和1

TCP:有限状态机
(3)TCP的三次连接:
   A(client)----> B(server) 发出请求:
              初始状态    1次               2次         3次
    A(client):closed  主动打开          SYN_SEND  ESTABLISHED
    B(sever) :closed  被动打开(Listen)  SYN_RCVD  ESTABLISHED

(4)TCP四次断开
               初始状态                             
  A(主动关闭):ESTABLISHED  FIN_TIME1   FIN_TIME2   TIME_WAIT(等待MSL*2) COLSED
  B(被动关闭):ESTABLISHED  CLOSE_WAIT  LAST_ACK                         CLOSED

MSL:报文段的最大生存时间,一般120秒

2、iptables基础原理
(1)网络防火墙(主机防火墙):
   工作在主机or网络边缘,对于数据报文进行检查,监控,并根据事先规定的规则进行处理。
   是一个组件,可能是硬件,也可以是软件。
   规则:真正实现防火功能的是规则,由匹配标准和处理办法组成
        默认规则:一般采用关闭(通),另一种为开放(堵)。
   简单说,防火墙就是数据报文过滤。

Linux内核实现了网络功能,但是防火墙规则应该写到内核,但又不能直接和内核打交道,那该怎么办呢?
   于是,就有人在TCP/IP协议栈上(就是实现TCP/IP模块上) ,选择几个开放的位置,只开放给用户空间的一个命令
   实现了,用户空间的命令操作内核(特殊的系统调用)。
   早期linux上没有防火墙的,是参考OpenBSD移植过来的。
    Linux2.0:ipfw/firewall
    Linux2.2:ipchain/firewall
    Linux2.4:iptables/netfilter


(2)5个钩子函数,四个表,五个链
  数据报文到达网卡时将其拆分,根据ip判断是发往自己的还是发往其他主机的。
     如果发往自己就发到自己的用户空间所谓某个进程
     如果是发往其他主机的,查看/proc/sys/net/ipv4/ip_forward是否为1,为1是可以转发。

那是谁来判断决策数据报文的流向呢?
      根据分析目标IP和路由表来完成路由决策
      路由决策发生在,一个数据报文被网卡接收以后,送到TCP/IP协议栈上的那一刻。

数据报文有三种流向:
     1.从外面进来的:流向主机内部       #input函数  ,图中1号
     2.从里面出去的:从主机内部流出     #output函数, 图中2号
     3.转发的:A-->B经过,B-->A经过     #forward函数,图中3号
  这3个位置:是netfilter的设计者补充在TCP/IP协议栈上的3个钩子函数(hook function)
     任何一个报文经过的时候把报文勾起来进程查看收否符合规则。

还有2个位置:两个特殊的钩子函数      
  做地址转换(NAT):私有的IP不可以上网,公网IP才可以上网
                  公网地址有限,可以申请一个公网地址供多个私有IP主机上网
              把私有IP主机的网关指向这个公网地址,然后通过转换地址就可以上网
                  做nat的主机有一个nat会话表,记录转化过程
  有两种转换类型:   
     目标地址转换:PREROUTING函数,  图中4号
     源地址转换:  POSTROUTING函数, 图中5号

**********************************************************
  5个钩子函数:prerouting,input,output,foreard,postrouting
  5个规则链:PREROUTING,INPUT,OUTPUT,FORWARD,POSTROUTING
  4个表:
     filter[过滤]:INPUT,OUTPUT,FORWARD
     NAT[地址转换]:PREROUTING,POSTROUTING,OUTPUT
     mangle[拆开,修改,封装]:PREROUTING,INPUT,OUTPUT,FORWARD,POSTROUTING
     raw[不改变原状]:PREROUNTING,OUTPUT
  优先级:
     PREROUTING:raw,mangle,nat
     IUPUT:mangle,filter
     OUTPUT:raw,mangle,nat,filter
     FORWARD:mangle,filter
     POSTROUTING:mangle,nat
**********************************************************

能否使用自定义链?
     可以使用自定义链,但只在被调用时才能发挥作用,
     且如果没有定义链中的任何规则匹配,还应该有返回机制。
     用户可以删除自定义的空链
     默认链无法删除

3.规则:匹配标准 + 处理办法
(1)原则:
     从上到下匹配,匹配到就停止。
     规则越少越好,效率高。
     当规则有联系的时候,小范围的在上面
     当规则没有联系的时候,大范围的在上面
     同一链,不同功能不可以交叉存放规则,必须按类存放

(2) 计数器:每个规则都有两个内置的计数器:
          1.被匹配的报文个数
      2.被匹配的报文大小之和

(3)匹配标准:
   IP:SIP(源IP),DIP(目标IP)
   TCP:SPORT(源端口),DPORT(目标端口),还可可以根据标志位匹配:
       如:tcp第一次握手:SYN=1,FIN=0,RST=0,ACK=0
           tcp第二次握手:SYN=1,FIN=0,RST=0,ACK=1
           tcp第三次握手:SYN=0,FIN=0,RST=0,ACK=1(ESTABLISHED)
   UCP:SPORT(源端口),DPORT(目标端口)
   ICMP:icmp-type(ICMP报文类型)
         使用报文来标记,有多种控制消息报文,每种报文的格式不一样
     如:ping的时候,网关不可达,请求超时,主机不在线,主机名称不可解析等,报文类型的区别

匹配标准分类:
     通用匹配:自身能完成的匹配
     扩展匹配:需要依赖模块完成的匹配
         隐式扩展:不用特别指明由哪个模块进行的扩展,此时使用-p{tcp|udp|icmp}
     显示扩展:必须指明由哪个模块进行的扩展,在iptables中使用-n选项可完成此功能

(4)处理办法
   ACCEPT:放行
   DROP:  丢弃
   REJECT:拒绝
   DNAT:  目标地址转换
   SNAT:  源地址转换
   REDIRECT:
   MASQUERADE:
   MASK:  打标记

时间: 2024-11-05 22:33:41

28_1_iptables系列之基础原理的相关文章

邮件服务系列之一基础原理

Mail Server: SMTP:Simple Mail Transfer Protocol 简单邮件传输协议 ESMTP :Extend Simple Mail Transfer Protocol POP3:Post Office Protocol邮局协议版本3 IMAP4:Internet Mail Access Protocol交互式邮件存取协议 邮件系统的工作: 互联网诞生不久出现了UUCP:Unix to Unix Copy unix主机之间复制文件的协议,指定源主机以及目标主机,这

iptables系列之基础原理

Linux网络防火墙 netfilter :frame 过滤,内核中的过滤框架,规则生效的位置框架 iptables:附加在netfilter上,生成防火墙规则,真正实现数据报文过滤,NAT,mangle等规则生成的工具 防火墙:工作在主机或者网络的边缘,对于进出的报文进行检查监控,并根据事先定义好的规则(其中有匹配标准和处理办法),一旦符合标准,对这个报文进行相应的处理规则的组件称为防火墙 iptables的实现实际上是基于报文的过滤,实例如下: 1.IP:源地址,目标地址 TCP:源端口,目

Linux高可用集群方案之heartbeat基础原理及逻辑架构

 这篇文章我们主要学习heartbeat高可用集群的基础原理及逻辑架构,以及heartbeat的简单配置  ll  本文导航    · heartbeat之基本原理   · heartbeat之集群组件   · heartbeat之心跳连接   · heartbeat之脑裂(资源争用.资源隔离) · heartbeat之配置文件   · heartbeat至高可用集群配置  ll  要求  掌握heartbeat高可用集群的相关组件及简单配置   heartbeat之基本原理  heartbea

49 Linux操作系统原理、虚拟化技术基础原理

04 虚拟化技术基础原理 一.配置虚拟化网络 1.编辑配置文件 #关闭NetworkManager [[email protected] ~]# service NetworkManager stop [[email protected] ~]# chkconfig NetworkManager off    [[email protected] ~]# chkconfig --list NetworkManager NetworkManager  0:关闭  1:关闭  2:关闭  3:关闭

web socket and web worker 基础原理及使用

个人认为HTML5最吸引人的两大功能, web socket 和 worker为构建高效能的web应用提供了新的参考方案. 大体来说,web socket提供更高效的传输协议,web worker提供多线程提高web应用计算效率.最近项目有用到,对应两个问题的解决,目前运行效果来看还是很不错. 这里主要是总结这两个技术的基础原理,和常用API.备忘,也列举关键掌握点,入门和基础使用足以. Web Socket websocket是一种协议,本质上和http,tcp一样.协议是用来说明数据是如何传

Windows Azure系列 -《基础篇》- 创建虚拟网络

如何在Windows Azure中创建虚拟网络,以构建云环境中的虚拟局域网: 1.登陆Windows Azure平台,点击侧边栏网络按钮,在中间点击"创建虚拟网络". 2.在接下来的配置页面,填写虚拟网络的名称.选择地理外置和地缘组(如果已有),没有则选择创建新的地缘组. 3.接下来填写DNS服务器地址(没有则留空) 4.规划和配置IP网络,选择适用的地址空间. 5.最后点击确认按钮完成. Windows Azure系列 -<基础篇>- 创建虚拟网络,布布扣,bubuko.

Windows Azure系列 -《基础篇》- 如何创建虚拟机

首先,使用自己的windows azure账号登陆管理平台manage.windowsazure.cn,找到并点击"虚拟机"标签,即可看到目前云平台中你所拥有的虚机实例,在我的环境中现在没有任何的虚机,所以我们可以通过点击图示的新建按钮进行选择或直接点击"创建虚拟机"进行创建: 点击"创建虚拟机",在DNS名称位置填写所建虚机的主机名,并选择映像和虚机大小(可选单核至8核,内存从768M至56G),这里说明一下,处于用户名不可以设置为常用的adm

核花宝典之脑功能成像(fMRI)基础原理

首发于Jinaffe长璟鹿的医学影像小漫画 关注专栏 写文章 核花宝典之脑功能成像(fMRI)基础原理 Jinaffe长璟鹿 4 个月前 我们只看图,不说话... ... 医学科普漫画 4 收藏 分享 举报 文章被以下专栏收录 Jinaffe长璟鹿的医学影像小漫画 不会画小漫画的女博士不是好的长颈鹿呀 进入专栏 2 条评论 写下你的评论 取消评论 筱贰获 长璟鹿姐姐好有才呀~~~ 0 赞 3 个月前 回复赞 举报 王善诚 题主自己画的吗?挺有才 0 赞 16 天前 回复赞 举报 推荐阅读 核花宝

X-ray/CT成像基础原理

首发于Jinaffe长璟鹿的医学影像小漫画 关注专栏 写文章 X-ray/CT成像基础原理 Jinaffe长璟鹿 5 个月前 我们只看图,不说话... ... 医学影像科普漫画 16 收藏 分享 举报 文章被以下专栏收录 Jinaffe长璟鹿的医学影像小漫画 不会画小漫画的女博士不是好的长颈鹿呀 进入专栏 15 条评论 写下你的评论 取消评论 叶茂青 这字看着真心累 0 赞 5 个月前 回复赞 举报 长胜兄 MRI呢 0 赞 5 个月前 回复赞 举报 查看对话 Jinaffe长璟鹿(作者)回复叶