zoukankan      html  css  js  c++  java
  • 防火墙之iptables工具

    防火墙之IPTABLES

    防火墙分类(实现划分、范围划分、协议划分)

    • 硬件防火墙
    • 软件防火墙
    • 主机防火墙
    • 网络防火墙
    • 下四层防火墙
    • 应用层防火墙

    linux内核集成于2.4往后版本

    • 由Netfilter组件提供
    • 实现功能的软件之一:Iptables

    netfilter 中的hook

    • input
    • outpu
    • forword
    • prerouting
    • postrouting

    数据流向

    • 流入:到本地用户空间
    • 流出:访问外部web
    • 穿过:转发数据包

    iptables对应hook的表chain

    • filter、nat、mangle、raw、security
    • filter表:过滤规则表,根据预定义的规则过滤符合条件的数据包
    • nat表:network address translation 地址转换规则表
    • mangle:修改数据标记位规则表
    • raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
    • security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如 SELinux)实现

    动作

    • ACCEPT、DORP、REJECT...
    详细动作:
     RETURN:#返回调用链
     REDIRECT:#端口重定向
     LOG:#记录日志,dmesg
     MARK:#做防火墙标记
     DNAT:#目标地址转换
     SNAT:#源地址转换
     MASQUERADE:#地址伪装
     自定义链
    

    规则rule

    • 语法:

    -t filter 默认可省略,故后面未填写的都为 -t filter

    
    iptables -t [filter] -A [INPUT] -s [192.168.47.106] -j [DORP]
    
    iptables -t [表] -A  附加链  -s 规则 -j 满足规则的处理动作
     
    
    # 指定表
    -t table #指定表raw, mangle, nat, [filter]默认
    
    # 子命令
    N:#new, 自定义一条新的规则链
    -E:#重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除
    -X:#delete,删除自定义的空的规则链
    -P:#Policy,设置默认策略;对filter表中的链而言,其默认策略有:
    ACCEPT:#接受
    DROP:#丢弃
    
    # 查看选项
    -L:#list, 列出指定鏈上的所有规则,本选项须置后
    -n:#numberic,以数字格式显示地址和端口号
    -v:#verbose,详细信息
    -vv #更详细
    -x:#exactly,显示计数器结果的精确值,而非单位转换后的易读值
    --line-numbers:#显示规则的序号
    -S #selected,以iptables-save 命令格式显示链上规则
    
    
    # 规则管理类
    A:#append,追加
    -I:#insert, 插入,要指明插入至的规则编号,默认为第一条
    -D:#delete,删除 (1) 指明规则序号(2) 指明规则本身
    -R:#replace,替换指定链上的指定规则编号 然后添加修改后的规则
    -F:#flush,清空指定的规则链
    -j:#targetname [per-target-options] 前面的**动作**
    -Z:#zero,置零包大小, iptables的每条规则都有两个计数器,(1) 匹配到的报文的个数 (2) 匹配到的所有报文的大小之和
    
    例:
    iptables -A INPUT  -s 192.168.47.119 -j REJECT
    iptables -I INPUT  -s 192.168.47.120 -j ACCEPT
    iptables -D INPUT 2 ,第二种 (iptables -D INPUT -s 192.168.47.120 -j ACCEPT)
    iptables -R INPUT 2 -i lo -j REJECT 
    
    

    基本匹配条件

    • 基本匹配条件:无需加载模块,由iptables/netfilter自行提供
    
    
     -s, --source address[/mask][,...]:#源IP地址或范围
     -d, --destination address[/mask][,...]:#目标IP地址或范围
     -p, --protocol protocol:#指定协议,可使用数字如0(all)protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or "all" 参看:/etc/protocols
      -i, --in-interface name:#报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链
      -o, --out-interface name:#报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链 
     
     例:
     iptables -A INPUT  -s 192.168.47.119 -j REJECT
     iptables -A INPUT  -p tcp/icmp... -j REJECT 
     iptables -A INPUT  -i lo/eth0... -j REJECT
     
     
    
    

    扩展的匹配规则(使用模块)

    • 使用帮助 man iptables-extensions
    • 模式: 隐式扩展,显示扩展,且如果没有该模块,需要自己加载模块才能生效
    • 隐式: 使用特定协议,即可不使用-m 指定特定模块
    
    例如: tcp udp ...协议
    tcp:
    --tcp-flags SYN,ACK,FIN,RST SYN #表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0
    --tcp-flags SYN,ACK,FIN,RST SYN,ACK 
    --tcp-flags ALL ALL
    --tcp_flags ALL NONE
    
    
    实例:iptables I INPUT 2 -p tcp --tcp-flags SYN,ACK,FIN,RST SYN  -j DROP (第一次握手的包)
    
    • 显式:使用-m 后调用模块,然后更上模块需要的参数
    
    例如: time,string...等
    time:
    --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
    --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
    --timestart hh:mm[:ss] 时间
    --timestop hh:mm[:ss]
    --monthdays day[,day...] 每个月的几号
    --weekdays day[,day...] 星期几,1 – 7 分别表示星期一到星期日
    
    实例:
    iptabes -I INPUT 3 -m time --timestart 4:00 --timestop 6:00 -j ACCPET #(在中午午休时间允许访问12点到2点,这里使用TUC时区,需要减8个小时)
    

    关于设置白名单机制

    • iptables -I INPUT (最后一条的位置例5) -j DROP (设置除了已允许的能够访问之外,其余都不能访问)

    防Dos 攻击:

    • iptables -A INPUT -d 172.16.100.10 -p tcp --dport 80 -m connlimit --connlimit-above 1000 -j REJECT ( 在访问数量超过1000次80 端口后就拒绝访问 )

    优化

    1. 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条
    2. 谨慎放行入站的新请求
    3. 有特殊目的限制访问功能,要在放行规则之前加以拒绝
    4. 同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理
    5. 不同类的规则(访问不同应用),匹配范围大的放在前面
    6. 应该将那些可由一条规则能够描述的多个规则合并为一条
    7. 设置默认策略,建议白名单(只放行特定连接)
    

    规则保存

    • 默认生命周期 :kerenl存活期间
    • iptables-save > /etc/iptables.conf (保存规则方法)
    • iptables-restore < /etc/iptables.conf (添加文件的规则方法,-n 不清除原有规则)
  • 相关阅读:
    欢庆入住博客园
    指定线程所运行的CPU核心
    [GNU/Linux MakeFile] 第一章:概述
    [.NET][编程之美][1.1]C# 实现让CPU占用率曲线听你的指挥 – 可指定运行核心
    vmware workstation 7.1 正式版 序列号 注册机
    linux:设置 linux定时运行命令脚本 (crontab详解)
    守护进程(Daemon)
    Linux下定时执行脚本
    二叉树的遍历(转)
    dup,dup2,fcntl,ioctl用法简述
  • 原文地址:https://www.cnblogs.com/Justin0717/p/12096247.html
Copyright © 2011-2022 走看看