防火墙

防火墙概念

  1.什么是防火墙 

    防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。

    其主要功能是防止恶意访问。

  2.防火墙的分类 

    1.硬件防火墙

      在专用硬件级别实现部分功能的防火墙,如F5。

      硬件防火墙的性能高,但是成本也高。

    2.软件防火墙

      运行于通用硬件平台之上的防火墙的应用软件,如iptables,firlwalld。

      软件防火墙的性能较低,但是成本低。

Iptables

  1.Iptables介绍

      iptables是一种包过滤防火墙,通过系统内设置的过滤逻辑(表)在网络层对数据包进行选择。

  2.Iptables命令如何生效

      用户调用Iptables,通过内核接口来操作ip_tables内核模块,再通过ip_tables内核模块来修改Netfilter(系统安全框架),实现在网络层对数据包的过滤。

 

 

  3.四表五链

    1.四表

      表是某些功能的集合,四表是Iptables的主要功能。

      1.filter:主要负责过滤功能。

      2.nat:负责网络地址的转换

      3.mangle:负责修改数据包内容

      4.raw:负责数据包的追踪

    2.五链

      链指的是某个位置,他不具备功能,但是可以是某个表发挥功能。

      1.PREROUTING:主机外报文进入的位置,允许的表mangle,nat。

      2.INPUT:报文进入本机用户空间的位置,允许的表filter,mangle。

      3.OUTPUT:报文从本机用户空间出去的位置,允许的表filter,mangle,nat。

      4.FOWARD:报文经过路由发觉不是本机决定转发但还没从网卡发出,允许的表filter,mangle。

      5..POSTROUTING:报文经过路由被转发出去,允许的表mangle,nat。

  4.Iptables流程

    Iptables的流程分为3类

    1.流入本机

      当外部的数据通过网卡进入本机后,在网络层时会经过PREROUTING链,在经过了PREROUTING链继续前进到达用户层之前,会经过INPUT链。

      过程可简写为A ——> PREROUTING ——> INPUT ——> B

 

 

    2.流出本机

      当用户从用户层发出数据之后,会先经过OUTPUT链,在经过了了OUTPUT链到达路由转发之前会经过POSTROUTING链,之后再发送出去。

      该过程可简写为:A ——> OUTPUT ——> POSTROUTING ——> B

 

    3.经过本机

      本机作为中转时,报文的最终目的并不是本机,在经过PREROUTING链进入本机发现最终目的不是本机时被转到FORWORD链,经过FORWORD链后经过POSTROUING链转发出去。

      该过程可简写为:A ——> PREROUTING ——> FORWARD ——> POSTROUTING ——> B

 

 

    3.表所在的链

      filter可能在的链:INPUT、OUTPUT、FORWARD

      nat可能在的链:PREROUTING、OUTPUT、POSTROUTING

      raw可能在的链:PREOUTING、OUTING

      mangle可能在的链:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

 

  5.iptables基本使用

    1.下载安装iptables

      1.下载安装iptables

 

 

 

      2.下载完成后将原有的防火墙关闭并开启iptables

 

 

 

 

 

       开启成功后处于active状态。

    2.iptables命令格式

      iptables [参数]

      通常为某个表添加规则的格式为:

      iptables -t 表名 选项 链名称 条件 动作

    3.iptables参数

      -t:指定要操作的表

      -L(--list):显示链的已有规则(默认为filter表的规则)

      -v:显示数据包和数据草包

      -n:不将地址反解

      -A(--append):向指定的链中追加规则(加在底部)。

      -I(--insert):向指定的链的顶部插入规则

      -F(--fiush):清空链的现有规则

      -Z(--zero):清空链中的数据包计数器和字节计数器

      -D(--delete):删除链中的规则

      -R(--replace):替换链中的相应规则

      -S(--list--rules):列出所有的规则

      -N(--new--chain):创建用户自定义的链

      -X(-delete--chain):删除用户自定义的链

      -P(--policy):指定链的默认策略

    4.iptables的规则参数

      -s:指定源地址(发送请求的地址)

      -d:指定目标地址(要访问的地址)

      --sport:指定源端口(发送请求的端口)

      --dport:指定目标端口(访问的端口)

      -i:指定进来的网卡

      -o:指定出去的网卡

      -p:指定网络协议(TCP、UDP、ICMP等或用ALL表示全部)

      -m:指定模块

      -j:执行动作

    5.iptables动作

      ACCEPT:将数据包放行,处理完此动作后将不再向下比对直接前往下一个规则链

      REJECT:阻拦该数据包并通知对方

      DROP:丢弃数据包不处理,之后将不再向下比对直接中断过滤程序

      REDIRECT:将包重新导向另一个端口,处理完此动作后将继续比对其他规则

    6.案例

      案例1:只允许22端口进行访问,其他的端口无法访问

 

        当端口号为22时可以直接通过前往下一条链,不是22时就继续向下匹配,

        由于下一条规则是全部无法通过,则除了22端口都无法访问。

 

      案例2:只允许22,80,端口可以访问,但是本机可以访问百度

 

        和上一案例一样先先添加两条端口的过滤规则,此时如果直接禁止其他端口号会导致访问百度后百度的恢复无法进入本机,由于不确定百度的端口号,可以直接设定允许百度的ip访问。

      

      案例3:要求192.168.15.71对外部不可见

 

       所谓对外部不可见,可以通过拒绝全部的对目标路径的访问来实现。

      一般对本机设置,为演示而使用了其他ip。

 

      案例4:要求拒绝eth0网卡的访问

 

         拒绝某网卡的访问需要通过指定进来的网卡实现。

 

      案例5:要求eth1网卡禁止访问外部

 

         禁止访问外部需要指定的是OUTPUT链,指定某网卡的访问全部拒绝。

 

      案例6:将访问本机的8080端口转发到80端口

 

       由于是转发所以需要使用转发的表nat,还要使用转发时会经过的链,之后指定访问的源端口,使用转发命令REDIRECT将之转发到指定的端口。

 

      案例7:仅允许Windows通过ssh链接192.168.15.81,其他的不允许。

        通过限制源地址和目标地址来实现,通过端口号来限制其他地址无法访问。

 

  6.iptables模块

    模块的作用是拓展iptables的功能

    1.multiport模块 

      multiport模块的作用是能够连续匹配多个端口

      参数:

        --dports:指定多个端口(不同端口之间用逗号分隔,连续的端口号使用冒号分隔)

    2.iprange模块

      iprange模块的作用是能够指定一段连续的IP地址范围。

      参数:

        --src-range from [-to] :指定源地址范围

        --dst-range from [-to] :指定目标地址范围

    3.string模块

      string模块的作用是指定匹配的字符串

      参数:

        --string [匹配内容] :指定要匹配的字符

        --algo [bm/kmp] :匹配的查询算法

    4.time模块

      time模块的作用是根据时间段来匹配报文

      参数:

        --timestart hh:mm[:ss]:指定开始时间

        --timestop hh:mm[:ss]:指定结束时间

        --monthdays day[,day...]:指定一个月的某一天

        --weekday day[,day...]:指定周还是周天

    5.icmp模块

      icmp模块的作用是禁止ping命令,默认本机无法ping别人,别人无法ping本机

      参数:

        --icmp-type  {type[/code] | typename}

          echo-request (8) 请求

          echo-reply (0)回应

    6.connlimt模块

      connlimt模块的作用是限制并发的链接数

      参数:

        --connlimit-upto n :指定当链接数小于等于n时匹配

        --connlimit-above n:指定当连接数大于n时匹配

    7.limit模块

      limit模块的作用是将报文的速率进行限制。单位为每秒、分、时、天

      参数:

        --limit rate [/second|/minute|/hour/day]:指定报文的速率

        --limit-burst n :指定报文数量(默认为5)

    8.案例

      案例1:只允许10到100之间的端口访问。

         当有多数的端口需要筛选时可以使用multiport模块,连续的端口用:号分隔,不连续用,号分隔

 

      案例2:仅允许ip地址在192.168.15.1到192.168.15.10之间的可以访问。

 

         当需要筛选多个ip地址时,可以使用iprange模块,连续的ip用-号连接。

 

      案例3:当数据包中含有字符串hello时拒绝访问。

 

         当需要筛选某个字符时,可以使用string模块,还需要选择查询算法。

 

      案例4:只允许每天的到21点到点进行24点访问

 

         当需要限定时间时可使用time模块,需要注意的是time模块使用的是UTC时间,因此需要根据时区做出改变。

 

      案例5:不允许外部ping本机,但本机可以ping外部

 

         使用icmp模块,可以决定外部和本机能否能使用ping命令

 

      案例6:要求最多能有5个主机同时链接

 

         最多5个主机访问,就可以利用connlimit模块,匹配当主机数大于5时,拒绝访问。

 

      案例7:限制传入速率最大在100k/s左右

 

         限制速率在100k/s,当速率大于100k/s时禁止访问。

        对于流量的限制误差很大,无法准确限制。

posted @   临江沂水  阅读(510)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示