Linux防火墙详解(一)

本文涉及的产品
云防火墙,500元 1000GB
公网NAT网关,每月750个小时 15CU
简介:
1
2
3
4
Linux防火墙详解(一)
一、Linux防火墙简介
二、iptables的表和链
三、TCP/IP和iptables

一、Linux防火墙简介
1.iptables/netfilter:
    防火墙:就是一个数据报文过滤工具
        网络防火墙
        主机防火墙
    
        工作于网络或主机的比边缘(通信报文的进出口),对于进出本网络的报文根据事先定义的检查规则作匹配检测,对于匹配到规则的作出相应处理
    防火墙:
        硬件:需要软件的结合实现,NetScreen,CheckPoint//在硬件级别就能够实现对报文流量的分析,对常见的攻击进行处理
        软件:
        
2.内核的基本功能:网络协议栈
    1.从协议角度,看数据包流程:

1.png
    2.从内核角度
        进如该主机->流入,解封
        从该主机出去->流出,封装各层
    3.外部报文流向
        1.请求进入本机://流入
        进程间通信,需要向内核注册端口,内核通过查看端口映射查找该进程,然后拆掉首部信息,交给该进程处理
            注册的目的:1.用于监听在某个端口
                        2.访问其他主机通信
        2.经过我转发
            目标地址不是我的,就不会到达我的用户空间
            要么转发,要么丢弃
        3.从本机出去的报文://流出
        
        //流入和留出都有缓冲区,缓冲区:内存中的一段空间
        //虽然网卡有全双工模式,但是流入和留出的传输速率很有可能不一致,内核有时候也很忙
        //用户空间的访问控制,仅针对于特定应用有效,流入httpd的allow from和deny from
        //内核可以针对用户空间的所有应用进行防护
    防火墙:肯定会对系统性能有所影响
数据包流向:    

1.png
报文流向:
    1.流入本机:PREROUTING-->INPUT==>用户空间流程
    2.留出本机:用户空间进程==>OUTPUT-->POSTROUTING
    3.转发:PREROUTING-->FORWARD-->POSTROUTING
    
二、iptables的表和链    
1.iptables/netfilter    
        netfilter:
            hooks function :钩子函数,真正执行工作的
        iptables:定义规则的,用户空间的命令行接口
    钩子函数:内核的功能    
    netfilter:内核级别已经支持v6
    iptables:主要用于v4
    ip6tables //实现v6的支持
2.netfilter的五个钩子函数
    PREROUTING //路由之前,进入本机前
    INPUT
    OUTPUT
    FORWARD
    POSTROUTING    //路由之后,从本机出去之前
3.iptables的表和链
表:
    filter:过滤,防火墙
    mangle:拆解报文,按需修改,重新封装
    nat:network address translation(IP层,传输层地址)
    raw:关闭在nat表启用的连接追踪机制
    
    表的优先级由高到低的顺序为:raw-->mangle-->nat-->filter
链:
iptables
    内置链:
        PREROUTING
        INPUT
        OUTPUT
        FORWARD
        POSTROUTING
    自定义链
        手动添加,需要和内置链关联,具有调用和返回机制
        主链:上有调用机制
        自定义链:上有返回主链的条目,假如都没有匹配的话,就返回主链
        
4.表和链的关系
    filter:INPUT,FORWARD,OUTPUT
    mangle:PREROUTING,INPUT,OUTPUT,FORWARD,POSTROUTING //随地都可以修改
    nat:PREROUTING,OUTPUT,POSTROUTING//nat和ip相关
    raw:PREROUTING,OUTPUT
    
RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。
    一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.
RAW表可以应用在那些不需要做nat的情况下,以提高性能。
    如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度。

同一链上的不同的表的规则的应用优先级(高-->低)
    raw-->mangle-->nat-->filter
        
iptables是netfilter的实现
    因为netfilter是内核的功能应该是不用启动的,默认就是随内核开启的
    但是centos6:有iptables服务启用与关闭
    
5.规则:
组成部分:根据规则的匹配条件去匹配报文,对匹配成功的报文根据队则定义的处理动作做出处理
    匹配条件:n个,与或非,默认是与
        基本匹配:
        扩展匹配:
    处理动作:
        基本处理动作:
        扩展处理动作:
        自定义处理动作:
    匹配规则:
        自上而下,逐条匹配,匹配到的话,就处理
        都未能匹配,使用最后默认规则
    
    添加规则的考量点:
        1.要实现何种功能,判断添加规则至哪个表上
        2.报文流经的位置;判断添加规则到哪条链上
        
三、TCP/IP和iptables        
1.IP首部
    s_ip,d_ip,version,Hdr Len[包头长度],
        Identification:说明是哪一个报文的分片,有的报文太大的话,需要分片
        Fragment offset:是哪个报文的第几个片段
        DF:don't fragment
        MF:报文不完整,需要等待其他分片合并以后才是完整的
        TTL:生存周期,过一个路由-1,防止环路,一般是64,最大255=2^8
            //路由器可以修改此值,防止被追踪到
        Protocl:上层协议,tcp,udp,2^8
        Header Checksum:首部校验和
        
    报文:包头长度:小于64Bytes,
    1480+20Bytes =1500
    1460+20 = 1480 //
    [20B:s_ip,D_ip,...][40B:Options][data]
IP包头

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     ============================================
     version( 4 )|包头长度( 4 ) | TOS( 8 )| 总长度( 16 )    //共 32 bit= 4 bytes  || v 4 /v 6     
     =============================================
     标识( 16 )         标志( 3 )  片偏移( 13 )
     =============================================
     TTL( 8 )        协议( 8 )        首部校验和( 16 )
     ==============================================
         Sip( 32 )
     ==============================================
         DIP( 32 )
     ==============================================
         选项( 32 ) //可选
     ===============================================
         数据
     ===============================================

        
        包头长度:4(byte)*5=20bytes,带选项的4(byte)*6=24byte,不带数据
    version:ipv4或者ipv6,包头长度:该部分占4个bit位,单位为32bit(4个字节)最大2^4*4(byte)=64byte,TOS:服务类型,总长度:2^16=65536bytes,,
            //也即是说数据包的最大长度为65536bytes,常规的无选项的IP包头长度为20bytes,可以通过MTU计算出DATA数据字段的最大长度为1480bytes。
    标识:16bit的标识字段唯一的标识主机发送的每一份数据报,由主机生成具有唯一性。通常每发送一份报文该值加1。该值在数据包分片时,会复制到每一个片中。所以在重组分片包的时候会观察该值,把该值相同的分片收集到一起重组,后面会继续讨论分片。
            标志:该字段主要用来分片和重组
            片偏移:
    TTL:该IP数据包可以经过的路由器的最大数量 //最大2^8=256
    协议:8bit的协议字段表示在IP上层承载的是什么协议。比如:0x01表示ICMP协议、0x06表示TCP协议、0x11表示UDP协议等。
    首部校验和:一般不使用该字段,该字段的值以32bit为单位,不足时以0补充。
    
    
2.TCP首部:
2.png    

    s_port,d_port //各16bit
    Sequence Number 32bits
    Ack Number        32bits
端口是用来标记进程地址,ip用来标记主机地址    
    
3.数据包流向解析
匹配PREROUTING:
    raw.PREROUTING
    mangle.PREROUTING
    nat.PREROUTING
    //逐个匹配,假如mangle的第2条匹配到了,需要打个标记,那就直接打个标记,然后接着由nat匹配,
    
假如有数据包从Network IN要通过iptables,数据包流向如下:

3.png

=============================================================================
1.Network IN数据包到达服务器的网络接口
2.进入raw表的 PREROUTING 链,这个链的作用是决定数据包是否被状态跟踪。
  进入 mangle 表的 PREROUTING 链,在此可以修改数据包,比如 TOS 等。
  进入 nat 表的 PREROUTING 链,可以在此做DNAT(目标地址转换)
3.决定路由,查看目标地址是交给本地主机还是转发给其它主机。
4.到这里分两种情况,一种情况是数据包要转发给其它主机(一般情况下它是在担任网关服务器),数据包会依次经过:
路径一:
    5.进入 mangle 表的 FORWARD 链,
      进入 filter 表的 FORWARD 链,在这里我们可以对所有转发的数据包进行过滤。
    6.进入 mangle 表的 POSTROUTING 链
      进入 nat 表的 POSTROUTING 链,在这里一般都是用来做 SNAT (源地址转换)
    7.数据包流出网络接口,发往network out。
路径二:
    8.另一种情况,数据包的目标地址就是发给本地主机的,它会依次穿过:    
    9.进入 mangle 表的 INPUT 链,
      进入 filter 表的 INPUT 链,在这里我们可以对流入的所有数据包进行过滤,数据包交给本地主机的应用程序进行处理。
    10.应用程序处理完毕后发送的数据包进行路由发送决定。
    11.进入 raw 表的 OUTPUT 链。
       进入 mangle 表的 OUTPUT 链,
       进入 nat 表的 OUTPUT 链,
       进入 filter 表的 OUTPUT 链。
    12.进入 mangle 表的 POSTROUTING 链,
       进入 nat 表的 POSTROUTING 链。
    13.进入出去的网络接口,发送往network out。    
1.png











本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/2046884,如需转载请自行联系原作者

相关文章
|
4月前
|
安全 Linux 应用服务中间件
在Linux中,包过滤防火墙与代理应用防火墙有什么区别?有哪些相应的产品?
在Linux中,包过滤防火墙与代理应用防火墙有什么区别?有哪些相应的产品?
|
3月前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
232 73
|
16天前
|
存储 运维 Linux
Linux防火墙firewall的使用
CentOS 7 中的 firewalld 是基于 Netfilter 的防火墙服务,支持动态配置,无需重启服务即可生效。它通过区域管理网络流量,每个区域可以设置不同的防火墙规则。默认区域为 public,可以通过命令行工具 firewall-cmd 进行管理和配置。firewalld 提供了丰富的预定义服务和区域,方便用户根据需求进行灵活配置。
36 0
|
4月前
|
Linux 网络安全
linux关闭方防火墙的命令
linux关闭方防火墙的命令
84 2
|
4月前
|
Linux 网络安全
在Linux中,如何设置防火墙规则?
在Linux中,如何设置防火墙规则?
|
4月前
|
安全 Linux 测试技术
在Linux中,如何配置防火墙和安全规则?
在Linux中,如何配置防火墙和安全规则?
|
4月前
|
监控 安全 Linux
在Linux中,什么是入侵检测系统(IDS)和入侵防御系统(IPS)?
在Linux中,什么是入侵检测系统(IDS)和入侵防御系统(IPS)?
|
5月前
|
网络协议 Linux 网络安全
入职必会-开发环境搭建39-Linux常用操作-Linux防火墙操作
在CentOS 7中,新引入了firewalld服务(防火墙),取代了CentOS 6之前的iptables服务(防火墙)。
入职必会-开发环境搭建39-Linux常用操作-Linux防火墙操作
|
4月前
|
Linux 网络安全
在Linux中,iptables和firewalld两种防火墙如何使用?
在Linux中,iptables和firewalld两种防火墙如何使用?
|
4月前
|
前端开发 Linux 网络安全
在Linux中,如何配置防火墙?
在Linux中,如何配置防火墙?