• 18 iptables


    参考博客:https://www.cnblogs.com/whych/p/9147900.html

    1 概述

    Linux防火墙通常包含两部分,分别为iptablesnetfilteriptables是管理防火墙的命令行工具,处于用户空间。netfilter执行报文过滤,处于内核空间。
    路由:及路由表不直接参与数据包的传输,而是生成一个指向表。这个指向表仅包含路由算法选择的数据传输优先路径
    PREROUTING: 在进行路由判断之前所要进行的规则
    INPUT:处理入站的数据包
    OUTPUT:处理出站的数据包
    FORWARD:处理转发的数据包
    POSTROUTING: 在进行路由判断之后所要进行的规则

    2 iptables中的表

    iptables将规则写入,内核netfilter执行报文过滤规则。
    filter、nat、mangle、raw、security

    • filter(过滤表)
      报文过滤,包含3个内置规则链
      INPUT输入链,处理目标地址为本机IP地址的报文
      OUTPUT输出链,处理本机地址产生的报文
      FORWARD转发链,处理经过本机路由的报文
    • nat(网络地址转换表)
      nat修改数据包中的源、目标IP地址或端口。
      它也有3个内置的规则链
      PREROUTING:修改到来的报文,只用来做网络地址转换
      OUTPUT:用来修改本机产生的并且在路由处理之前的报文
      POSTROUTING:用于修改准备出去的报文
    • mangle(修改表)
      进行报文修改。有5个内置规则链
      PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING
    • raw(原始表)
      配置连接跟踪相关的内容,在ip_conntrack之前调用。提供两个内置规则链。
      PREROUTING、OUTPUT
    • security(用于安全Linux的防火墙规则)

    3 处理目标

    规则的处理目标可以是用户定义的自定义链名,也可以是系统内置的四种处理方式

    • ACCEPT(接收)表示让这个报文通过
    • DROP(丢弃)表示这个报文丢弃
    • QUEUE(入队)表示把这个报文传递到用户空间的队列中
    • RETURN(返回)表示停止这条规则的匹配。返回到调用这个规则的上一条规则链的规则处执行
    • REJECT(拒绝)REJECTDROP一样丢弃报文,但是REJECT的不同之处在与同时还向发送者返回一个ICMP错误消息
    禁止访问80端口
    iptables -A IPNUT -p tcp --dport 80 -j REJECT
    

    DROPREJECT的区别

    1. DROP不会回包,暴露信息少
    2. REJECT每一条信息都会回一条ICMP不可到达的报文。当有大量访问和攻击时,会导致占用所有带宽,有用的报文不可用(DOS
    • DNAT(目的网络地址转换)
      目的网络地址转换的,就是重写报文的目的IP
      这个处理目标仅用在nat表中的PREROUTINGOUTPUT链。
    将访问路由器的80端口的流量重定向到192.168.6.100
    iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.6.100
    

    这样Web服务器就可以搭建在局域网的主机(192.168.6.100)上对外提供服务。对外仅有路由器的IP保留给用户。

    • SNAT(源网络地址转换)
      网络地址转换。重写报文的源IP
      这个处理目标仅用在nat表的POSTROUTINGINPUT链。
    iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -o eth0 -j SNAT --to-source 10.0.2.15
    
    • MASQUERADE(伪装)
      MASQUERADE作用和SNAT是一样的。两者的区别是MASQUERADE是不需要指定源地址的。
      MASQUERADE只用于nat表的POSTROUTING
    • LOG(开启内核记录)
      为匹配的报文开启内核记录。Linux会通过printk函数打印一些匹配包的信息,然后通过syslog记录在日志中。
      有一下几个选项可以设置
    --log-level         :       日志级别
    --log-prefix        :       prefix在记录log信息前加上特定前缀;最多14个字母
    --log-tcp-sequence  :       记录TCP序列号
    --log-tcp-options   :       记录TCP报文头部的选项
    --log-ip-options    :       记录IP报文头部的选项
    
    • REDIIECT(修改目的IP到机器自身)
      只适用与nat表的PREROUTINGOUTPUT
      修改报文的目的IP地址来发送报文到机器自身(本地生成的报文被设置为地址127.0.0.1
    • --to-ports []
      指定使用的目的端口或端口范围。只适用于指定TCPUDP

    4 报文处理流程

    iptable5个表,每个表中又有几个不同的链,不同的表中有相同名称的规则链。但这些规则链处理的任务是不同的。报文按照预定的流程来顺序进入到各个规则链中,报文处理流程如下图。进入顺序是raw->mangle->filter->nat

    1. 首先网卡从网络上收到IP报文
    2. 报文进入raw表的PREROUTING链。此时在报文连接跟着生效之前对报文进行处理。
    3. 报文进入到连接跟踪处理
    4. 报文进入到mangle表的PREROUTING链。这里是报文进入网关之后,路由之前修改报文的地方
    5. 报文进入到nat表的PREROUTING。在这里我们做目的地址转换(DNET)。这里不能用于报文过滤,因为每一个连接数据流仅第一个报文进入到这里。
    6. 进行路由决策,因为前面的manglenat表可能修改了报文的IP地址信息。如果目的地址为网关,则直接进入到INPUT链中,如果和本机地址不同,则进入路由转发。跳到步骤9
    7. 报文进入到mangle表的INPUT链。这里是报文进入网关时修改报文的地方。在这里不做报文过滤。
    8. 报文进入到filter表的INPUT链,这里是对收到报文做过滤的地方,然后将报文转到应用程序。
    9. 对于转发进入到mangle表的FORWARD链。这里对报文进行修改
    10. 报文进入到filter表中的FORWARD链。对转发报文进行过滤。
    11. 报文进入到mangle表的POSTROUTING链。这条链可能被两种报文遍历,一种是转发报文,另外就是本机产生的报文
    12. 报文进入到nat表的POSTROUTING链。在这里我们做源地址转换(SNAT)这里不能用于报文过滤,因为每一个数据流仅有第一个报文进入到这里
    13. 经由网卡发送

    5 报文规则匹配

    • MAC地址过滤
      MAC地址过滤只对源MAC地址有效
    丢弃指定MAC的报文
    iptables -I INPUT -m mac --mac-source 28:D2:44:15:D5:A4 -j DROP
    
    • IP层过滤
      IP层匹配常用的有协议,源IP和目的IP
      -p用于匹配IP层报文协议。常见有TCP、UDP、IGMP、ICMP。也可以是一个数字,数字代表的协议在文件/etc/protocols描述。数字零表示所有协议。
    禁止UDP 5060报文
    iptables -A FORWARD -p UDP --m udp dport 5060 -j DROP
    

    -s-d用于匹配IP报文的源IP和目的IP

    禁止192.168.1.0网段访问本机
    iptables -A INPUT -s 192.168.1.0/24 -j DROP
    

    6 管理防火墙规则

    iptables [-t table] {-A|-C|-D} chain rule-specification rule-specification = [matches...] [target] match = -m matchname [per-match-options] target = -j targetname [per-target-options]
    
    • A 将防火墙规则添加到规则链的末尾
    • D 删除指定规则链中的规则。
      可以指定规则号来删除,也可以通过规则匹配来删除
    • I 插入到规则链中的指定位置。如果不指定插入位置则插入规则链的第一个位置
    • L 查看防火墙规则。如果没有指定规则链,则显示所有规则链
    • R 修改、替换.指定链中的某一条规则,可以按规则序号和内容替换
    • E 重命名用户定义的链,不改变链本身
    • F 清空防火墙规则。如果没有指定规则链,则清空所有链。
      通常在进行防火墙配置之前需要将以前的规则全部删除
    清空filter表中的INPUT链规则
    iptables -t filter -F INPUT
    
    • N 新建一条用户自己定义的规则链
    • X 删除指定表中用户自定义的规则链
      X删除规则链
      D删除规则链中的规则
      F清空
    • P 设置指定链的默认策略。如果一个报文没有被任何规则匹配,那么默认策略就会命中,执行默认策略
    输入链为默认拒绝
    iptables -P INPUT DROP
    
    • Z 将所有表的所有链的字节和数据包计数器清零
    • n 使用数字形式显示输出结果
    • v 查看规则表详细信息的信息
    • V 查看版本
    • h 获取帮助

    对于iptables命令如果没有指定防火墙表就默认使用filter表,所以查看网络地址转换规则使用iptables -t nat -L

    对于复杂规则,我们通常会创建自定义规则链来进行匹配,并把自定义规则链加入到已有的规则链中。

    iptables -N UDP_FILTER
    

    7 其他工具

    iptables-saveiptables-restore处理大规则集。把规则存入一个与标准脚本代码只有细微差别的特殊格式文件中,或者从中恢复规则。

    • iptables-save
      导出iptables规则到标准输出(屏幕)中。我们使用shell重定向到文件中。内容格式和iptables类似但稍有不同。
    • iptables-restore
      用于加载导出的防火墙规则,使用标准输入的内容导入,一般都是通过shell从重定向的文件中读取规则后向内核导入。
  • 相关阅读:
    生命
    历史的分岔-中日产业发展史的对照和思考
    挑战自已
    丰台往事已成风,上下求索永不停
    VC6.0实现鼠标光标形状及大小的定制
    RelativeLayout
    16进制颜色代码
    html里的option错误
    Android用户界面设计:布局基础
    Activity详细介绍【官网】
  • 原文地址:https://www.cnblogs.com/burnk/p/15843299.html
Copyright © 2020-2023  润新知