• iptables常规使用


    0x00 简介

    iptables防火墙由Netfilter项目开发,自linux2.4就融入了内核。linux内核中的Netfilter框架可将数据包操作函数挂接至网络栈。iptables便在这个框架之上提供了数据包过滤等操作。iptables组件提供了同名的用户层工具,解析命令行参数传递给内核来设置防火墙策略。

    iptables工作于网络层,可以基于数据链路层的MAC地址来过滤IP数据包,不能用于数据链路层(如ARP协议)。

    0x01 术语&结构

    iptables共有4个表:filter,nat,mangle,raw  功能对应于过滤规则,NAT规则,修改分组数据的特定规则,独立于Netfilter链接跟踪子系统起作用的规则。

    表tables由链chains组成,chains由规则rules组成。

    最重要的链是filter表中的INPUT、OUTPUT、FORWARD 和 nat表中的PREROUTING、POSTROUTING。

    enter image description here

    0x02 规则匹配

    iptables对满足匹配的目标执行相应的动作,匹配方式常见的如下:

    -s(--source) 匹配源地址,指定数据包的源地址参数(IP、网络地址、主机名)
    -d(--destination) 匹配目标地址
    -p(--protocol) 指定规则协议,如tcp, udp,icmp等,可以使用all来指定所有协议
    -i(--in-interface) 流入的网络接口(如eth0)
    -o(--out-interface) 流出接口
    --state 连接状态(INVALID、ESTABLISHED等)
    --string 匹配应用层数据字节序列
    --comment 在内核内存中为一条规则关联注释数据

    上述参数为基本匹配,还有隐式扩展和显示扩展匹配:

    enter image description here

    enter image description here

    0x03 目标

    每条匹配条件之后跟一个目标,触发动作。

    ACCEPT:允许数据包通过。 
    DROP:直接丢弃数据包,不给出任何回应信息。就像是没有收到过数据包。
    REJECT:拒绝数据包通过,丢弃数据包,同时发送适当响应报文。
    LOG:将数据包信息记录到syslog,然后将数据包传递给下一条规则。 
    QUEUE:防火墙将数据包移交到用户空间 
    RETURN:防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain),在调用链中继续处理数据包。

    0x04 命令行选项

    iptables [ -t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
         不指定-t默认为filter表,-j也许是jump的缩写
    -A 在指定链的末尾添加(--append)一条新的规则
    -D 删除(--delete)指定链中的某一条规则,按规则序号或内容确定要删除的规则
    -I 在指定链中插入(--insert)一条新的规则,默认在链的开头插入
    -R 修改、替换(--replace)指定链中的一条规则,按规则序号或内容确定
    -L 列出(--list)指定链中的所有的规则进行查看,默认列出表中所有链的内容
    -F 清空(--flush)指定链中的所有规则,默认清空表中所有链的内容
    -N 新建(--new-chain)一条用户自己定义的规则链
    -X 删除指定表中用户自定义的规则链(--delete-chain)
    -P 设置指定链的默认策略(--policy)
    -n 用数字形式(--numeric)显示输出结果,若显示主机的 IP地址而不是主机名
    -P 设置指定链的默认策略(--policy)
    -v 查看规则列表时显示详细(--verbose)的信息
    -V 查看iptables命令工具的版本(--Version)信息
    -h 查看命令帮助信息(--help)
    --line-number 查看规则列表时,同时显示规则在链中的顺序号

    0x05 示例

    1.清空规则

    iptables -F        #flush filter
    iptables -F -t nat    #flush nat
    iptables -X        #删除用户自定义的规则链
    iptables -P INPUT DROP  #设置指定链的策略
    iptables -P OUTPUT DROP    
    iptables -P FORWARD DROP 

    2.端口访问控制

    #容许远程ssh到本地
    iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT 
    iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
    #允许本地主机进行SSH连接
    iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT 
    iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT 

    3.增删改查

    #增加一条规则到最后-A
    iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 
    
    #删除一条规则-D,全部删除-F
    iptabels -D INPUT 2 #删除INPUT链中的2号规则,下标从1开始(通过-L组合--line-number查看)
    
    #修改一条规则
    iptables -R INPUT 3 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 
    
    #查看iptables规则
    iptables –L(iptables –L –v -n)

    4.防御措施

    #防止单个ip访问量过大
    iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP 
    
    #防止ping攻击,限制会响应的icmp数据包的大小
    iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT 
    #或者干脆不响应
    iptables -A INPUT -p icmp --icmp-type echo-request -j DROP(或REJECT)
    
    #防止DOS攻击
    利用recent模块抵御DOS攻击
    iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP 
    
    单个IP最多连接3个会话
    iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH  
    
    只要是新的连接请求,就把它加入到SSH列表中
    Iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP  
    
    5分钟内你的尝试次数达到3次,就拒绝提供SSH列表中的这个IP服务。被限制5分钟后即可恢复访问。
    
    #防止syn洪水攻击
    思路一:限制syn的请求速度(这个方式需要调节一个合理的速度值,不然会影响正常用户的请求)
    iptables -N syn-flood 
    iptables -A INPUT -p tcp --syn -j syn-flood 
    iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN 
    iptables -A syn-flood -j DROP 
    
    思路二:限制单个ip的最大syn连接数
    iptables –A INPUT –i eth0 –p tcp --syn -m connlimit --connlimit-above 15 -j DROP 

    5.FORWARD转发

    待续。。。

    0xFF 参考

    1.《linux防火墙》,Michael Rash

    2.Iptables入门教程 http://drops.wooyun.org/tips/1424

  • 相关阅读:
    Java基础-String、StringBuffer、StringBuilder的区别
    Java基础-String类能被继承吗,为什么
    Java基础-Java中的基本数据类型是什么,各自占用多少字节
    JAVA关键字
    Java 栈(stack)与堆(heap) 详解
    Hibernate--hibernate.hbm.xml详解
    Hhibernate--映射继承关系
    C--c语言模拟java的linkedList
    C--调试基本命令
    C--指针
  • 原文地址:https://www.cnblogs.com/makefile/p/5092469.html
Copyright © 2020-2023  润新知