zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    读书笔记——吴军《态度》
    JZYZOJ1237 教授的测试 dfs
    NOI1999 JZYZOJ1289 棋盘分割 dp 方差的数学结论
    [JZYZOJ 1288][洛谷 1005] NOIP2007 矩阵取数 dp 高精度
    POJ 3904 JZYZOJ 1202 Sky Code 莫比乌斯反演 组合数
    POJ2157 Check the difficulty of problems 概率DP
    HDU3853 LOOPS 期望DP 简单
    Codeforces 148D. Bag of mice 概率dp
    POJ3071 Football 概率DP 简单
    HDU4405 Aeroplane chess 飞行棋 期望dp 简单
  • 原文地址:https://www.cnblogs.com/makefile/p/5092469.html
Copyright © 2011-2022 走看看