• 1.iptables概念


    常见的攻击手段

    拒绝服务
    口令破解
    欺骗用户(社工)
    已知漏洞

    常见的安全防御手段

    基础类防火墙设备
    IDS类,入侵检测系统
    IPS类,入侵防御系统
    主动安全类设备

    防火墙有关概念

    1.防火墙定义
    防火墙是工作在"主机边缘"处或在"网络边缘"处对数据报文进行检测,并且能够根据事先定义好的规则,对数据报文进行"相关处理"的模块。
    2.防火墙的分类
    (1)根据构造方式分类
    硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现;性能高,成本也高。
    软件服务器:应用软件处理逻辑,运行于通用硬件平台上的防火墙;性能低,成本也低。
    (2)根据工作机制分类
    包过滤防火墙:应用于内部主机和外部主机之间,过滤系统是一台服务器或是一台主机;过滤系统根据过滤规则来决定是否让数据包通过;主要过滤数据包内的信息有:SIP/DIP、SPORT/DPORT等
    应用层防火墙:一般指应用层网关ALG,应用层防火墙顾名思义可以对七层的应用层进行防护。

    iptables基础

    1.iptables与netfilter

    iptabels并不是真正的防火墙,可以理解为客户端代理,用户通过iptables,将用户的安全设定执行到对应的"安全框架"中,这个框架就是"netfilter"。

    netfilter是Linux2.4内核防火墙架构,位于内核空间;
    iptables是它的命令行工具,位于用户空间。

    netfilter可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、NAT地址转换,以及基于用户及媒体控制地址的过滤和基于状态的过滤、包速率限速等。

    2.聊聊iptables

    客户端访问web服务时,客户端应用层产生数据,经过层层封装后,最终报文到网卡;
    而TCP/IP协议栈是属于内核的一部分,所以,客户端的信息会通过内核的TCP协议传到用户空间的web服务器中,
    而此时,客户端报文的目标终点为web服务所监视的socket上,当web服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,
    这时,web服务所监听的ip和port反而成了原点。
    netfilter是内核的一部分,所以如果我们想要防火墙能够生效,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡,
    经过检查后,符合条件的才能放行,于是就出现了进站`input`关卡和出站`output`关卡;在IP tables中关卡即为"链"。
    如果客户端发来的报文访问的目标地址可能不是本机,而是其他服务器,当本机内核中支持"ip forward"时,我们可以将报文转发给其他服务器;
    所以,就会有其他的"关卡"制定相应的放行规则,分别为 路由前`PREROUTING`,转发`FORWARD`,路由后`POSTROUTING`。
    

    3.什么是"链"?

    我们知道防火墙的作用就在于对经过的报文匹配"规则",然后执行对应的动作,当报文经过这些关卡的时候,就必须匹配这个关卡上的规则;一个关卡上往往有多条规则,将这些规则串起来就形成了"链"。
    没经过这个关卡的报文,都要将这条链上的规则匹配一遍,如果有符合条件的规则,则执行规则对应的动作。

    iptables共涉及五种默认规则链,从应用时间点的角度进行理解:

    1.INPUT

    入站,当接收到防火墙本机地址的数据包时,应用此链中的规则

    2.OUTPUT

    出站,当防火墙向外发送数据包时,应用此链中的规则

    3.FORWARD

    转发,当接收到需要防火墙发送给其他地址的数据包时,应用此链中的规则

    4.PREROUTING

    在对数据包作路由选择之前,应用此链中的规则,如DNAT

    经过此链的数据分为两种:1.留在本机处理 2.被转发到其他目的地

    5.POSTROUTING

    在对数据包作路由选择之后,应用此链中的规则,如SNAT

    4.什么是表?

    具有相同功能的规则的集合称为"表",不同功能的规则,我们可以放置在不同的表中进行管理,而iptables中定义了四张表,每张表中对应了不同的功能。

    (1)filter表:主要用于对数据包进行过滤;内核模块:iptables_filter
    (2)nat表:网络地址转换(SNAT/DNAT);内核模块:iptables_nat
    (3)mangle表:修改数据包,并重新封装;内核模块:iptables_mangle
    (4)raw表:用于决定数据包是否被状态跟踪机制处理,优先级最高;内核模块:iptables_raw

    iptables中数据包和4种被跟踪连接的4种不同状态

    • NEW:该包想要开始一个连接(重新连接或将连接重定向)

    • RELATED:该包是属于某个已经建立的连接所建立的新请求
      例如:FTP的数据传输连接就是控制连接所 RELATED出来的连接

    • ESTABLISHED只要发送并接到应答,一个数据连接从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接的后续数据包

    • INVALID:数据包不能被识别属于哪个连接或者没有任何状态比如内存溢出,收到不知属于哪个连接的ICMP错误信息,一般应该DROP这个状态的任何数据。

    5.链表关系

    优先级次序
    (由左到右)
    raw --> mangle --> nat --> filter

    为了更方便管理,我们还可以在某个表里面中创建自定义链,将针对某个应用程序所设置的放置在这个自定义链中;但是自定义链不能直接使用,只能被某个默认的链当作动作去调用才能起作用。

    6.数据经过防火墙的流程

    当一个数据包进入网卡时,数据包首先进入PREROUTING链,在PREOUTING链中我们有机会修改数据包的目的IP,然后内核的"路由模块"根据"数据包的目的IP"以及"内核中的路由表"判断是否需要转送出去;

    1.如果数据包就是进入本机的,即目的IP就是本机的网口IP,数据包就会到达INPUT链,数据包到达INPUT链后,这个数据包通过传输层进入用户空间,交给用户进行处理,而处理完成之后,用户进程会通过本机发出返回的数据包;

    此时,这些数据包首先还是会经过主机的路由表进行路由,结束后,进入OUTPUT链,然后到达POSTROUTING链输出,这时数据包的源IP就有可能以及被我们修改了

    2.如果数据包是要转发出去的,即目的IP地址不在当前子网中,且内核允许转发,数据包就会经过FORWARD链,IP包由于目的地址已经确认,就不会再经过路由,也自然不会 OUTPUT链了 而是会进入POSTROUTING链输出,选择对应子网的网卡发送出去。

    如何开启Linux内核的路由转发功能?

    vim /etc/sysct.conf
    net.ipv4.ip_forward = 1  #修改为1,默认0
    
    sysctl -p  #重新加载内核参数
    

    7.iptables的规则

    (1)书写规则
    iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]

    注意

    不指定表名时,默认指filter表(数据包过滤)
    不指定链名,默认指表内的所有链
    除非设置链的默认策略(书写外的其他策略),否则必须指定匹配条件
    选项、链名、控制类型使用大写字母,其余均为小写,否则不生效

    (2)控制类型(动作类型)

    ACCEPT	 #允许通过
    DROP   	 #直接丢弃,不给出任何回应
    REJECT   #拒绝通过,必要时会给出提示
    LOG    	 #匹配不会停止,记录日志信息,然后传给下一条规则继续匹配
    SNAT     #修改数据包源地址
    DNAT	 #修改数据包目的地址
    REDIRECT #重定向
    
    作者:ccku
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。
  • 相关阅读:
    atom编辑器中编辑C代码调用printf函数打印中文字符出现乱码
    C 库函数
    函数原型、函数声明和函数定义之间关系
    函数指针
    const 类型限定符
    AttributeError: 'str' object has no attribute '__buffer__'
    python3继承中发生的显式覆盖
    python3中的隐式继承
    黑科技
    理解jquery的$.extend()、$.fn和$.fn.extend()
  • 原文地址:https://www.cnblogs.com/ccku/p/13675269.html
Copyright © 2020-2023  润新知