iptables基础配置

Posted lastyear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iptables基础配置相关的知识,希望对你有一定的参考价值。

防火墙

IPTABLES

  • 防火墙,工作在主机或网络的边缘。对进出本主机或网络段的数据报文,根据规则做匹配,根据匹配的结果做相应的处理。是一种隔离技术,实现内网以及外网传输控制,最大限度阻止黑客破坏企业网络,加强企业网络安全,基于本机内核中的TCP/IP协议栈内核

  • 按照作用对象分类

    • 主机型防火墙 :为单台主机提供防护,保护主机数据安全
    • 网络型防火墙 :为整个网络内的主机提供防护,保护网络内的安全
  • 按照实现方式分类

    • 软件防火墙:通过软件的形式实现防火墙
    • 硬件防火墙:通过硬件的方式实现防火墙
  • Centos7上使用的防火墙为firewall,Centos 6上为iptables,firewall基于iptables进行封装,防火墙组成包括两部分:iptables与netfilter,iptables是用于用户定义防火墙规则的工具,netfilter是工作于内核中,对网络层的数据包进行过滤,实现用户定义的规则

  • iptables的表

    • 表是链的容器,按照功能划分
    • 包括:
      • filter:过滤,确认是否放行该数据包。
      • mangle:拆解报文,做出修改,封装报文,主要为数据包设置标记
      • nat:network address translation 网络地址转换(修改数据包中的源、目标IP地址或端口。)
      • raw:关闭nat表上启用的连接追踪机制,确定是否对该数据包进行状态跟踪
    • 优先级:filter > mangle > nat > raw
  • iptables的链

    • 规则的容器,按照处理动作划分
    • 包括:
      • PREROUTING:在进行路由选择前处理数据包
      • INPUT:处理入站数据包
      • FORWARD:处理转发数据包
      • OUTPUT:处理出站数据包
      • POSTROUTING:在进行路由选择后处理数据包
  • 各个表上分布的链

    • filter:INPUT、FORWARD、OUTPUT
    • mangle:PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING
    • nat:PREROUTING(DNAT)、OUTPUT、POSTROUTING(SNAT)
    • raw:PREROUTING、OUTPUT
  • 规则链的顺序

    • 流出:OUTPUT-->POSTROUTING
    • 流入:PREOUTING-->INPUT
    • 转发:PREROUTING-->FORWARD-->POSTROUTING
  • 规则匹配:

    • 按顺序从上往下依次检查,匹配即停止
    • 若找不到匹配规则,按照该链的默认策略处理
  • 链上规则编写次序注意事项:

    1. 规则编写的时候,同类(同一应用)规则,匹配范围小的放在上面。
    2. 不同类规则,访问频率较大的放最上面
    3. 尽量将可以由一条规则描述的多个规则合并为一条规则
    4. 设置默认策略
  • 流程图

    技术图片

  • iptables命令(Centos6)

    • 用于指定匹配规则

    • iptables的控制

      • service iptables start #启动
      • service iptables restart #重启
      • service iptables stop #关闭
      • chkconfig iptables --level 35 off #在3、5级别永久关闭,开机不启动
      • chkconfig iptables --level 35 on #在3、5级别开机启动
    • 格式:iptables [-t 表名] 选项 [链名] [条件] [-j 动作]

      • 不指定表名时默认为filter表
      • 不指定链时默认为所有链
      • 除设置默认规则,必须指定匹配条件
      • 选项、链名、动作为大写,其余为小写
    • 规则的查看

      • -L #列出指定链上的所有规则,后面紧跟要查看的链

      • -n #以数字格式显示地址和端口号(不反解)

      • -v #显示详细信息

      • -vv #更加详细信息

      • -t 表名#查看指定的表

      • --line-numbers #显示行号

        技术图片

        Chain INPUT (policy ACCEPT 0 packets, 0 bytes) #INPUT链
        num   pkts bytes target     prot opt in     out     source               destination         
        1      277 20728 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
        2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
        3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
        4        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
        5        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
        #num 行号 pkts 数据包数量 bytes 字节数 target 对应的动作
        #prot 协议端口号  opt 选项 in 数据包流入的网卡 out 数据包流出的网卡
        #source 源地址 destination 目标地址 地址全为0表示anywhere,是默认规则  
        Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) #FORWARD链
        num   pkts bytes target     prot opt in     out     source               destination         
        1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
        
        Chain OUTPUT (policy ACCEPT 164 packets, 21024 bytes) #OUTPUT链
        num   pkts bytes target     prot opt in     out     source               destination         
        #未指定表所以默认只显示filter表中的链
        #常见动作
            #ACCEPT:允许通过
            #DROP:直接丢弃,不给出任何回应
            #REJECT:拒绝通过,必要时会给出提示
            #REDIRECT:端口重定向
            #LOG:记录日志信息,然后传给下条规则继续匹配
            #DNAT:目标地址转换
            #SNAT:源地址转换
            #MASQUERADE:地址伪装
        #使用-j指定动作

        技术图片

    • 清空规则

      • -F #清空所有规则

        技术图片

    • 设置默认规则

      • -P #设置默认规则(大写)

        技术图片

        表示将filter表(默认指定)中的INPUT链上所有匹配到默认规则的数据包丢弃

    • 添加规则

      • -A #在链的末尾添加规则

        技术图片

        技术图片

        表示允许来自192.168.10.0网段访问192.168.10.120主机的数据包在filter表的INPUT链通过,-A将该规则追加在链的末尾(规则匹配时从上到下匹配,要注意规则的顺序)

      • -I 链名 [N]#讲规则插入链的指定位置省略表示插入第一行

        技术图片

    • 修改规则

      • -R #修改规则

        技术图片

    • 删除规则

      • -D #删除规则(指定链名和行号)

        技术图片

    • 保存规则

      1. 将规则保存至指定文件中

        技术图片

      将iptables配置保存至/root/iptables.bak文件中

        ![image-20191107161831552](https://img2018.cnblogs.com/blog/1241092/201911/1241092-20191107220928853-88579266.png)
      
        使用时,将配置从文件中读取出来
      1. 使用命令永久保存

        技术图片

        相当于iptables-save > /etc/sysconfig/iptables ,重启后会自动重载规则

    • 规则的匹配条件设置

      • [!]-s <IP|NETADDR> #指定报文中源IP的地址范围,!表示取反

      • [!]-d <IP|NETADDR> #指定报文中目的IP的地址范围

        技术图片

        iptables -I INPUT 2 -s 192.168.10.0/24 -d 192.168.10.120 -j ACCEPT
        #-s 192.168.10.0/24 源地址为192.168.10.0网段 掩码位24
        #-d 192.168.10.120  目的地址为192.168.10.120 
      • [!]-p 协议名 #指定报文中的协议

        技术图片

         iptables -I INPUT -s 192.168.10.1 -d 192.168.10.120 -p 22 -j ACCEPT
        #-p 指定协议端口号或协议名如:tcp、udp、icmp
      • [!]-i 网卡名 #指定报文中流入接口网卡,仅用于PREROUTING,INTPUT,FORWARD链

      • [!]-o 网卡名 #指定报文中流出接口网卡,仅用于FORWARD,OUTPUT,POSTROUTING链

        技术图片

        技术图片

        iptables -I INPUT -i eth0 -j DROP
        #从eth0网卡进入的数据包全部丢弃
        iptables -A OUTPUT -o eth0 -j DROP
        #从eth0网卡发出的数据包全部丢弃
    • 扩展的规则匹配

      • 需要对应扩展模块的支持

      • 模块存放位置/lib64/xtable/*.so

        技术图片

      • 使用扩展的匹配规则时需要-m选项(部分扩展匹配选项与-p配合使用时可以省略-m)

      • --dport PORT 目标端口匹配,可以单个端口,可以是连续的端口如:22:25表示22、23、24、25、80端口

      • --sport PORT 源端口匹配,同dport

        技术图片

        技术图片

        iptables -A OUTPUT -p udp --sport 445:450 -j ACCEPT
        #主机源udp端口为445/446/447/448/449/450的允许通过
        iptables -A OUTPUT -p udp --dport 8080:8090 -j DROP
        #拒绝目标主机位udp端口8080~8090之间的所有数据包
      • --tcp-flags LIST1 LIST2 #标记位匹配,LIST1为检测的标记位,LIST2表示为1的标记位

        技术图片

        技术图片

        iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN -j DROP
        #拒绝SYN为1ACK为0的请求
        iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST -j DROP
        #所有标志为中SYN为1其余为0的拒绝
        #可用标记位
        #   SYN 同步; 表示开始会话请求
        #   ACK 应答
        #    FIN 结束、结束会话
        #    RST 复位、中断一个连接
        #    PSH 推送、数据包立即发送
        #    URG 紧急 
        #   ALL 指选定所有的标记
        #   NONE 指未选定任何标记
      • -p icmp --icmp-type #icmp类型匹配

        技术图片

        技术图片

        iptables -A INPUT -d 192.168.10.120 -p icmp --icmp-type 8 -j DROP
        #拒绝对主机192.168.10.120发起的ping请求
        iptables -A INPUT -s 192.168.10.120 -p icmp --icmp-type 0 -j ACCEPT
        #允许主机192.168.10.120向外发出的ping应答通过
        #icmp type
        #   0 ping应答
        #   8 ping请求

        注:详细ICMP类型参考004ICMP-type对应表

      • multiport #匹配离散方式指定的多个端口,最多15个
        技术图片
        技术图片

        iptables -A OUTPUT -p udp  -m multiport --sport 1024:1030,1096 -j ACCEPT
        #允许源端口为udp的1024~1030和1096的数据包通过
        iptables -A OUTPUT -p udp  -m multiport --sport 1024:1030,1096 -m multiport --dport 80:85,8080:8085 -j ACCEPT
        #允许源端口为udp的1024~1030和1096且目标端口为udp的80~85和8080~8085端口的数据包访问
        
      
      - -m iprange #匹配连续的ip地址范围
      
          ![image-20191107201317022](https://img2018.cnblogs.com/blog/1241092/201911/1241092-20191107220924861-278427492.png)
      
          ![image-20191107201349317](https://img2018.cnblogs.com/blog/1241092/201911/1241092-20191107220924612-954619567.png)
      
          ```shell
          iptables -A INPUT -m iprange --src-range 192.168.10.111-192.168.10.130 -j ACCEPT
          #允许源地址为192.168.10.111~192.168.10.130范围内的主机通过
          iptables -A INPUT -m iprange --dst-range 192.168.20.110-192.168.20.130 -j ACCEPT
          #允许目的地址为192.168.20.110~192.168.20.130范围内的主机通过
          #-m iprange --src-range #指定连续的源ip地址范围
          #-m iprange --dst-range #指定连续的目的ip地址范围
      
      • -m time #匹配时间或日期

        技术图片

        技术图片

        iptables -A INPUT -d 192.168.10.110 -m time --timestart 00:00 --timestop 05:00 -j DROP
        #主机192.168.10.110在0点到5点禁止被访问
        iptables -A INPUT -s 192.168.10.110 -m time --datestart 2019-11-07 --datestop 2019-11-08 -j DROP
        #主机192.168.10.110在2019年11月7号到2019年11月8号禁止访问其他主机
        #--datestart 起始日期 日期格式为YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
        #--datestop 结束日期
        #--timestart 起始时间 时间格式为hh:mm[:ss]
        #--timestop 结束时间
        #--weekdays 指定固定的天,Mon,Tue,Wed,Thu,Fri,Sat,Sun 或 1 to 7
        
      • -m string #对明文字符进行匹配

        技术图片

        iptables -A INPUT -d 192.168.10.110 -m string --algo kmp --string "fuck" -j DROP
        #拒绝访问192.168.10.110主机的数据中包含敏感词的数据包
        #--algo <bm|kmp> 指定字符串匹配的算法
        #[!]--string 指定匹配的字符,!取反
        #[!] --hex-string 16进制字符,!取反
        
      • -m connlimit #对单个ip发起的请求数量进行匹配

        技术图片

        iptables -A INPUT -d 192.168.10.110 -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
        #192.168.10.110主机的tcp22端口只允许同时建立3个连接,超出的请求包均被丢弃
        #--connlimit-upto 匹配请求数小于等于某个值时执行动作(centos-6不支持)
        #--connlimit-above 匹配请求数大于3时执行动作
        
      • -m limit #对响应的速率进行匹配

        技术图片

        iptables -A INPUT -d 192.168.10.110 -p tcp --dport 22 -m limit --limit-burst 5 --limit 10/minute -j ACCEPT
        #对主机192.168.10.110的tcp22号端口的请求空闲时最大为5个,每分钟最多增加10个范围内的请求允许通过
        #--limit-burst 空闲峰值数量
        #--limit NUM/minute 单位时间增长速率
        
      • -m state #对连接的状态进行匹配

        技术图片

        iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        #对连接状态为已建立连接或与已建立连接有关的请求允许通过
        #可以使用的状态类型包括:
        #   NEW 主机连接目标主机,在目标主机上看到的第一个想要连接的包
        #   ESTABLISHED 主机已与目标主机进行通信,判断标准只要目标主机回应了第一个包,就进入该状态。
        #   RELATED 主机已与目标主机进行通信,目标主机发起新的链接方式,例如ftp
        #   INVALID 无效的封包,例如数据破损的封包状态
        #   UNTRACKED 没有被跟踪的
        

以上是关于iptables基础配置的主要内容,如果未能解决你的问题,请参考以下文章

[vscode]--HTML代码片段(基础版,reactvuejquery)

Linux防火墙------iptables(基础概述)

iptables基础知识

iptables基础知识

基础部分之Firewall和iptables

kali linux怎么配置iptables