美文网首页
Linux防火墙

Linux防火墙

作者: 一桥长书 | 来源:发表于2017-11-05 15:39 被阅读0次

    防火墙的概念

    • 安全技术
    入侵检测与管理系统(Intrusion Detection Systems): 特点是阻断任何网络访问,量化,定位来自内外网络的威胁情况,主要以提供报告和事后监督为主,提供有针对性的的指导措施和安全决策依据.一般采用旁路部署方式
    入侵检测系统(Intrusion Prevertion System): 以透明模式工作,分析数据包的内容: 溢出攻击,拒绝服务攻击,木马,蠕虫,系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以阻断,主动而有效的保护网络的安全,一般采用在线部署方式
    防火墙(Firewall): 隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时定义的行为进行处理的一组规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是在默认的情况下关闭所有的通过型访问,只开放允许访问的策略
    
    防火墙的分类:
      主机防火墙: 服务范围为当前主机
      网络防火墙: 服务范围为防火墙一侧的局域网
      硬件防火墙: 在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如Checkpoing,NetScreen
      软件防火墙: 运行于通用硬件平台上的防火墙的应用软件
      网络层防火墙: OSI下面三层
      应用层防火墙/代理服务器: 代理网关,OSI七层
    
    网络型防火墙
      包过滤防火墙
      网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每一个数据的源地址,目标地址,所用的端口和协议等状态等因素,或他们的组合来确定是否允许该数据包通过
        优点: 对用来说透明,处理速度快且易于维护
        缺点: 无法检查应用层数据,如病毒等
    应用层防火墙
      应用层防火墙/代理服务器(Proxy Service) 
        将所有跨防火墙的网络通信链路分为两段
        内外网用户的访问都是通过代理服务器上的"链接"来实现
        优点: 在应用层对数据进行检查,比较安全
        缺点: 增减防火墙的负载
    在现实生产中所使用的防火墙一般都是二者的结合,即先检查网络数据,通过后再送到应用层去检查
    
    • Netfilter
    在linux中,防火墙的是在有Netfilter组件实现的
      Netfilter组件
        在内核空间,继承与linux内核中
        扩展各种网络服务的结构化底层框架
        内核选取5个位置放置五个hook(钩子)function(INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables,firewalld)向其写入规则
        由信息过滤表(table)组成,包含控制IP包处理规则集(rules),规则被分组放在chain上
    由此我们可以规定数据包的的三种流向:
      流入本机: PREROUTING --> INPUT --> 用户空间
      流出本机: 用户空间 --> OUTPUT --> POSTROUTING
      转发: PREROUTING -->FORWARD --> POSTROUTING
    
    • 防火墙组成
    四个表table: filter, nat, mangle, raw
      filter表: 过滤规则表,根据预定义的规则过滤符合条件的数据包
      nat: network address translation 地址转换规则表
      mangle: 修改数据标记为规则表
      raw: 关闭nat表上启用的连接追踪机制,加快封装包穿越防火墙速度
        优先级: raw --> mangle --> nat --> filter
    五个内置的链(chain),即上面提到的钩子函数
      INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING
    
    • 数据的流向图
    路由发生的时刻
      报文进入本主机后
        判断目标主机
      报文发出之前
        判断经由哪个接口送往吓一跳
    

    2 iptables命令的使用

    iptables规则
      组成部分 报文的匹配条件 匹配到后处理动作
        匹配条件 根据协议报文特征指定
          基本匹配条件
          扩展匹配条件
        处理动作
          内建处理机制
          自定义处理机制 
        注意 报文不会经过自定义链 只能在内置链上通过规则进行引用后生效
    
    iptables-save > /path/to/file #可以将现在的防火墙规则保存到指定文件
    ipstables-restore < /path/to/file #可以将保存到文件中的防火墙规则重新导入
    iptables [-t table] SUBCOMMAND CHAIN CRETERIA(规则) -j TARGET      
    -t 
      filter nat mangle fraw  默认是filter
    链管理
      -F flush 清空规则链 省略链 表示清空指定表上的所有链
      -N new 自定义规则链 创建自定义的规则链
      -X delete 删除用户自定义的规则链(必须是空的),并切其他链没有和它关联
      -Z zero 清零 置零规则计数器
      -P policy 为指定链设置默认策略 对filter表中的链而言,默认策略通常有ACCEPT,DROP,REJECT
      -E rEname 重命名自定义链 引用计数不为零的自定义链 无法改名 也无法删除
    规则管理
      -A append 将规则追加到指定链的尾部
      -I insert 将规则插入到指定的链的指定位置
      -D delete
        两种指定规则
          1 指定匹配条件
          2 指定规则编号
      -R replace 替换指定链上的指定规则
    查看
      -L list 列出指定链上的所有规则
        -n numberic 以数字格式显示地址和端口
        -v verbose 显示详细信息
          -vv -vvv
        --line-numbers 显示规则行号
        -x exactly 精确值
    目标  jump 跳转
      -j TARGET jump至指定的TARGET
        ACCEPT 接受
        DROP 拒绝
        REJECT 强烈的拒绝
        REDIRECT 端口重定向
        LOG  记录日志
        MARK  做防火墙标记的
        DNAT 目标地址转换
        SNAT 源地址转换
        MASQUERADE 地址伪装
        RETURN 返回指定的链
    
    • 基本匹配
    -s ,--src ,--source IP | NETaddr   检查报文的源地址是否符合此处指定的地址范围
    -d ,--dst ,--destination IP |NETaddr 检查报文的目标地址是否符合此处指定的地址范围
    -p ,--protocol {tcp|udp|icmp} 检查报文中的协议,即ip首部中的protocol所标识的协议
    -i ,--in-interface IFACE 数据报文的流入接口 仅能用于PREROUTING INPUT及FORWARD链上
    -o ,--out-interface IFACE 数据报文的流出接口 仅能用于POSTOUTING OUTPUT及FORWARD链上
      iptables -t filter -A INPUT -d 172.18.23.60 -p tcp -j ACCEPT # 接受目标地址到172.18.23.60 tcp协议的请求
      iptables -A INPUT -d 172.18.23.60 -p icmp -j ACCEPT #接受到172.18.23.60的icmp协议请求
      iptables -A INPUT -d 172.18.23.60 -i eth0 -j ACCEPT #接受到172.18.23.60并且是从eht0接口进来的请求
      iptables -A INPUT -d 172.18.23.60 -j DROP # 最后设置一个默认规则
    
    • 扩展匹配
    -m 指明要是用扩展匹配 match_name --space_options
      例如  -m tcp --dport 22  匹配tcp的22端口
    隐式扩展  对 -p protocol 指明的协议进行的扩展,可省略-m 选项
      -p tcp
        --dport PORT[-PORT] 目标端口,可以是单个端口,也可以是多个端口
          iptables -A INPUT -d 172.18.23.60 -p tcp --dport 22 -j ACCEPT(开启22)
          iptables -A OUTPUT -s 172.18.23.60 -p tcp --sport 22 -j ACCEPT
          iptables -A INPUT -d 172.18.23.60 -p tcp --dport 80 -j ACCEPT(开启80)
          iptables -A OUTPUT -s 172.18.23.60 -p tcp --sport 80 -j ACCEPT
        --tcp-flags: LIST1 LIST2 检查list1所指明的所有标志位,且其中 list2所表示出的所有标记位必须为1 而余下的必须为0 没在list1中指明的,不做检查
          SYN,ACK,FIN,RST,PSH,URG
          请求同步  确认号有效 断开 重置 推送 紧急指令(更快)
          --tcp-flags SYN,ACK,FIN,RST SYN  和 --syn 参数一样效果
          --tcp-flags ALL ALL  所有位都为1
          --tcp-flags ALL NONE 所有位都为0
      -p udp
        --dport
        --sport
      -p icmp
        --icmp-type 
          0 echo-reply
          8 echo-request
          iptables -A OUTPUT -s 172.18.23.60 -p icmp --icmp-type 8 -j ACCEPT #本机请求
          iptables -A INTPUT -d 172.18.23.60 -p icmp --icmp-type 0 -j ACCEPT  #其他主机回应本机
    显式扩展 必须使用-m选项指定使用的扩展
      centos 6 man iptables,手册
      centos 7 man iptables-extensions,手册
    1 multiport 多端口匹配 [!] 可以使用
      以离散方式定义多端口匹配,最多指定15个端口
        --source-ports, --sports port...
        --destination-ports, --dports port...
          iptables -I INPUT -s 172.18.0.0/16 -d 172.18.23.60 -p tcp -m multiport --dports 20,80 -j ACCEPT
    2 iprange扩展 [!]
      指明连续的(但一般不能扩展为整个网络) IP地址范围时,使用
       --src-range from 指明连续的源ip地址范围
       --dst-range from 指明连续的源ip地址范围
        iptables -I INPUT -d 172.18.23.60 -p -tcp -m multiport --dports 22:23,80 -m iprange -src-range 172.18.100.0-172.18.150.0 -j ACCEPT  
    3 string扩展
      检查报文中的出现的字符串
        --algo{bm|kmp}
         bm=boyer-moore
         kmp=knuth-pratt-morris
        --string=pattern  可以使用表达式
         iptables -I OUTPUT -m string --algo bm --string "movie" -j REJECT #根据协议报文匹配到的字符进行控制(不支持加密协议)
    4 time 扩展
      根据报文到达的时间与指定的时间范围进行匹配
        --datastart
        --datastop
        --timestart
        --timestop
        --monthsdays
        --weekdays
          centos6 默认使用的是本地时间,centos7 使用的UTC时间
        iptables -I INPUT -d 172.18.23.60 -p tcp --dport 80 -m timestart 14:00 --timestop 16:00 -j REJECT # 在14:00-16:00之间拒绝到172.18.23.60服务
    5 connlimit 连接限制
      根据没客户端ip(也可以是地址块)做并发连接的匹配
        --connlimit-above n 链接数量大于n
        --connlimit-upto n 链接数量小于等于n
        iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT
    6 limit 扩展
        基于收发报文的速率进行检查
        iptables -A INPUT -d 172.18.23.60 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT
        iptables -A OUTPUT -s 172.18.23.60 -p icmp --icmp-type 0 -j ACCEPT
    7 state扩展 
      根据连接追踪机制检查连接时状态
      调节连接追踪功能能够容纳的最大连接数量
        cat /proc/net/nf_conntrack
      已经追踪并记录下的连接
         /proc/net/nf_conntrack
      不同协议或连接类型追踪的时长
        /proc/sys/net/netfilter
      可追踪的连接状态,不同于http协议的有限状态机
        NEW 新发出的请求 连接追踪模板不存此链接相关的信息条目,因此 将其识别为第一次发出的请求
        ESTABLISHED NEW 状态之后,连接追踪模块为其建立的条目失效之前期间所进行的通信的状态
        RELATED 相关的连接 如ftp协议命令连接与数据连接的之间的关系
        INVALIED 无法识别的连接
        需要指定特定的模块,即state的模块
    如何开放ftp的 防火墙
      如果有必要需手动安装nf_conntack_ftp.io
        1 装载专用模块
          insmod nf_conntrack_ftp.so
        2 放行请求报文
          命令连接 NEW,ESTABLISHED
          数据连接 RELATED,ESTABLISHED 
          iptables -A INPUT -d 172.18.23.60 -p tcp --dport 21 -m state --state NEW,ESTABLISHED - j ACCEPT
          iptables -A INPUT -d 172.18.23.60 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
        3 放行响应报文
          iptables -A OUTPUT -s 172.18.23.60 -p tcp -m state --state ESTABLISHED -j ACCEPT
    8 log的扩展:记录日志,方便后期做检测
       -j LOG --log-levle level --log-prefix "connect:" 
         iptables -I INPUT -s 172.18.0.0/16 -p tcp -m multimport --dports 80,21,22,23 -m state --state NEW -j LOG --log-prefix "new connections: "
    
    • nat
    nat 安全性  完成隐藏本地主机的目的 network address translation 网络层或传输层实现
    proxy  代理  应用层
    redirect #实现端口转发
    nat
    SNAT 只修改请求报文的源地址   在POSTROUTING 位置实现
    DNAT 只修改请求报文的目标地址 在PREROUTING 位置实现
    pnat 端口映射,防止nat的服务,端口冲突,发出去的报文无法回来,地址冲突
    redirect 端口转发
      iptables -t nat -A PREROUTING -d ip -p tcp -m multiport --dports port1,port2 -j REDIRECT --to-ports 80
    网关设置 nat 转换
      iptables -t nat -A POSTROUTING -s 192.168.150.0/24 -d ! 192.168.150.0/24 -p tcp --dport 80  -j SNAT  --to-source 172.18.23.60(有服务的外网主机)
      iptables -t nat -APREROUTING -d 172.18.23.60 -p  tcp  --dport 80 -j DNAT --to-destionation ip(有服务的内网主机)
    ssh
      iptables -t nat -A PREROUTING -d 172.18.23.60 -p tcp --dport 22 -j DNAT --to-destination ip(有ssh服务器的主机)
    端口映射
      iptables -t nat -A PREROUTING -d 172.18.23.60 -p tcp --dport 80 -j DNAT --to-destination ip:8080
      iptables -t nat -A PREROUTING -d 172.18.23.60 -p tcp --dport 22 -j DNAT --to-destination ip:222
    adsl 拨号 ip 地址会经常改变
      iptables -t NAT POSTROUTING -s 192.168.150.0/24 -d ! 192.168.150.0/24 -j MASQUERADE  地址伪装
    

    相关文章

      网友评论

          本文标题:Linux防火墙

          本文链接:https://www.haomeiwen.com/subject/ufncmxtx.html