• linux防火墙


    目录

    一、Linux防火墙

    二、iptables的表结构链结构

    规则表:

    规则链:

    三、编写防火墙规则

    (1)安装iptables

    (2)编写的基本语法

    (3)常用的控制类型

    (4)常用的管理选项

    四、 增,查,删防火墙的规则

    Ⅰ、增加规则

    Ⅱ、查看规则

     Ⅲ、删除规则

    Ⅳ、设置默认策略

    五、防火墙规则的匹配条件

    Ⅰ、通用匹配

    Ⅱ、隐含匹配

    Ⅲ、显式匹配


    一、Linux防火墙

    Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux系统的防火墙体系基于内核编码实现,具有非常稳定的性能和极高的效率,也因此获得广泛的应用。

    netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”(Kernel Space 内核空间)的防火墙功能体系。

    iptables:指的是用来管理linux防火墙的命令程序,通常位于/sbin/iptables目录下,属于“用户态”(User Space 用户空间)的防火墙功能体系。

    二、iptables的表结构链结构

    iptables是为包过滤机制的实现提供规则,通过各种不同的规则,告诉netfilter对来自某些源、前往某些目的或具有某些协议特征的数据包应该如何处理。为了更方便的管理防火墙规则,iptables采用了" 表"和“链”的分层结构。

    规则表:

    1、filter表:用来对数据包进行过滤,根据具体的规则要求决定如何处理一个数据包。filter表对应的内核模块威为iptable_filter,表内含INPUT,FORWARD,OUTPUT三个链。

    2、nat表:(Network Address Translation)用来修改数据包的ip地址、端口号等信息。nat表对应的内核模块为iptable_nat,表内含PREROUTING,POSTROUTING,OUTPUT三个链。

    3、mangle表:用来修改数据包的TOS(Type Of Service)TTL(Time To Live),或者为数据包设置Mark标记,以实施流量整形、策略路由等高级应用。mangle表对应的内核模块为iptable_magle,表内含PREROUTING,POSTROUTING,INPUT,OUTPUT五个链。

    4、raw表:这是自1.2.9以后版本新增的表,用于决定是否对数据包进行状态跟踪。raw表对应的内核模块为iptable_raw。内含OUTPUT,PREROUTING两个链。

    在四个规则表中,常用filter表和nat表,因此在这里只讨论介绍这两个表的防火墙应用。

    规则链:

    1、INPUT链:当收到访问防火墙本机地址的数据包时,应用本链中的规则。

    2、OUTPUT链:当防火墙本机向外发送数据包时,应用本链中规则。

    3、FORWARD链:当接收到需要通过防火墙中转发送给其他地址的数据包时,应用本链中规则

    4、PREROUTING:在数据包做路由选择之前,应用本链中规则

    5、POSTROUTING:在对数据包做路由选择之后,应用本链中规则

    其中,INPUT,OUTPUT链主要用在“主机型防火墙”中,即主要针对服务器本机进行保护的防火墙,而FORWARD,PREROUTING,POSTROUTING链多用在“网络型防火墙”中,如使用Linux防火墙作为网关服务器,在公司内网与internat之间进行安全控制。

    规则表之间的顺序:raw>mangle>nat>filter

    规则链之间的顺序

    1.入站数据流向:

    来自外界的数据包到达防火墙后,首先被 PEROUTING 链处理(是否修改数据包地址等),然后进行路由选择(判断该数据包应该发往何处);如果数据包的目标地址是防火墙本机,那么内核将其传递给 INPUT 链进行处理(决定是否允许通过),通过后再交给系统上层的应用程序进行相应

    2.转发数据流向:

    来自外界的数据包到达防火墙后,首先被 PREOUTING 链处理,然后再进行路由选择;如果数据包的目标地址是其他外部地址,则内核将其传递给 FORWARD 链进行处理(允许转发、拦截或丢弃),最后交给 POSTROUTING 链进行处理(是否修改数据包的地址等)

    3.出站数据流向:

    防火墙本机向外部地址发送数据包,首先被 OUTPUT 链处理,然后进行路由选择,再交给 POSTROUTING 链进行处理(是否修改数据包的地址等)

    三、编写防火墙规则

    (1)安装iptables

    CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables

    1. #关闭firewalld防火墙
    2. [root@localhost ~]# systemctl stop firewalld
    3. [root@localhost ~]# systemctl disable firewalld
    4. #安装iptables防火墙
    5. [root@localhost ~]# yum -y install iptables iptables-services.x86_64
    6. #设置iptables开机自启并启动
    7. [root@localhost ~]# systemctl enable --now iptables.service

    (2)编写的基本语法

    iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
    
    •         注意事项:
      • 不指定表名时,默认指 filter 表
      • 不指定链名时,默认指表内的所有链
      • 除非设置链的默认策略,否则必须指定匹配条件
      • 选项、链名、控制类型使用大写字母,其余均为小写

    (3)常用的控制类型

    对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵及做相应的日志记录等。在 iptables 防火墙体系中,最常用的几种控制类型如下。

    ACCEPT:允许数据包通过

    DROP:直接丢弃数据包,不给出任何回 应信息

    REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息

    LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则

    SNAT:修改数据包的源地址

    DNAT:修改数据包的目的地址

    MASQUERADE:伪装成一个非固定公网IP地址

    防火墙规则的“匹配即停止”对于 LOG 操作来说是一个特例,因为 LOG 只是一种辅助 动作,并没有真正处理数据包。 注:需要大写

    (4)常用的管理选项


    在熟练编写各种防火墙规则之前,首先要掌握查看规则、添加规则、删除规则、清空链内规则等基本操作

    选项    功能
    -A        在指定链末尾追加一条iptables -A INPUT(操作)
    -I         在指定链中插入一条新的,未指定序号默认作为第一条iptables -I INPUT(操作)
    -P        指定默认规则iptables -P OUTPUT ACCEPT(操作)
    -D        删除iptabies -t nat -D INPUT(操作)
    -R        修改、替换某一条规则iptables -t nat -R INPUT(操作)
    -L         查看iptables -t nat -L(查看)
    -n        所有字段艺术字形式显示(比如任意ip地址事0.0.0.0而不是anywhere,比如显示协议端口号而不是服务名)iptables -L -n,iptables -nL,iptables -vnL
    -V        查看时显示更详细信息,常跟-L一起使用(查看)
    –line-numbers    规则带编号iptables -t nat -L -n --line-numbers /iptables -t nat -L --line-numbers
    -F        清除链中所有规则iptables -F(操作)
    -x        清空自定义链的规则,不影响其他链iptables -×
    -Z        清空链的计数器(匹配到的数据包的大小和总和)iptables -Z
    -S        查看链的所有规则或者某个链的规则/某个具体规则后面跟编号Iptables -t nat -S,iptables -t nat -S POSTROUTING 1

    四、 增,查,删防火墙的规则

    Ⅰ、增加规则

    1. iptables -t filter -A INPUT -p tcp -j ACCEPT
    2. #在末尾增加规则
    3. iptables -I INPUT 2 -p tcp -dport -j ACCEPT
    4. #在第二行插入规则

    Ⅱ、查看规则

    1. iptables [-t 表名] -n -L [链名] [--line-numbers]
    2. #或
    3. iptables - [vn]L

      若要查看 filter表OUTPUT链的所有规则,并显示序号,可以执行以下操作

     查看所有规则

     Ⅲ、删除规则

    -D 删除

    -F 清空

    1. iptables -D INPUT 4
    2. # 删除fieter表的INPUT链的第四个规则
    3. iptables -t filter -D INPUT -p icmp - j REJECT
    4. #如果规则比较多,把匹配条件写完整更稳妥
    5. iptables -F INPUT
    6. #清空filter表的INPUT规则

    注意:
    l.-F仅仅是清空链中的规则,并不影响-P设置的默认规则,默认规则需要手动进行修改
    2.-P设置了DROP后,使用-F 一定要小心!
    防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决
    3.如果不写表名和链名,默认清空filter表中所有链里的所有规则


    Ⅳ、设置默认策略

    iptables 的各条链中,默认策略是规则匹配的最后一个环节——当找不到任何一条能够匹配数据包的规则时,则执行默认策略。默认策略的控制类型为 ACCEPT(允许)、DROP(丢弃)两种。

    iptables [-t表名] -P <链名> <控制类型>

    要设置默认策略,需要先进行清空规则 

    1. iptables -F
    2. iptables -P FORWARD DROP
    3. #–般在生产环境中设置网络型防火墙、主机型防火墙时都要设置默认规则为DROP,并设置白名单
    4. iptables -t filter -P FORWARD DROP
    5. iptables -P OUTPUT ACCEPT

    上面提到过,设置的默认策略是不受-F清空影响的,所以想要重新设置默认策略,需要使用iptables -P 重新进行设置。

    五、防火墙规则的匹配条件

    在编写防火墙规则时,匹配条件的设置起着决定性的作用。只有清晰、准确地设置好匹配条件,防火墙才知道要对符合什么条件的数据包进行处理,避免“误杀”。对于同一条防火墙规则,可以指定多个匹配条件,表示这些条件必须都满足规则才会生效。
    根据数据包的各种特征,结合iptables的模块结构,匹配条件的设置包括三大类:通用匹配、隐含匹配、显式匹配

    Ⅰ、通用匹配

    可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。
    协议匹配: -p 协议名
    地址匹配:-s 源地址、-d目的地址      #可以是IP、网段、域名、空(任何地址)
    接口匹配: -i入站网卡、-o出站网卡

    例如,若要丢弃通过icmp协议访问防火墙本机的数据包,允许转发经过防火墙的除ICMP协议之外的数据包

    iptables -A FORWARD ! -p icmp -j ACCEPT   //感叹号”!”表示取反

    Ⅱ、隐含匹配

    要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件。
    端口匹配: --sport 源端口、–dport 目的端口
    可以是个别端口、端口范围
    –sport 1000 匹配源端口是1000的数据包
    –sport 1000:3000 匹配源端口是1000-3000的数据包
    –sport :3000 匹配源端口是3000及以下的数据包
    –sport 1000: 匹配源端口是1000及以上的数据包

    注意: --sport和–dport 必须配合-p <协议类型>使用

    Ⅲ、显式匹配

    要求以“-m扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件。

    多端口匹配:
    -m multiport --sport 源端口列表
    -m multiport --dport 目的端口列表

    IP范围匹配:
    -m iprange --src-range IP范围
    [root@localhost ~]# iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-192.168.80.200 -j DROP #禁止转发源地址位于192.168.80.100-192.168.80.200的udp数据包

    MAC地址匹配:
    -m mac --mac-source MAC地址
    [root@localhost ~]# iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP #禁止来自某MAC地址的数据包通过本机转发

    状态匹配:
    -m state --state 连接状态
    常见的连接状态:
    NEW :与任何连接无关的,还没开始连接
    ESTABLISHED :响应请求或者已建立连接的,连接态
    RELATED :与已有连接有相关性的(如FTP主被动模式的数据连接),衍生态,一般与ESTABLISHED 配合使用
    INVALID:不能被识别属于哪个连接或没有任何状态S
    [root@localhost ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP #禁止转发与正常TCP连接无关的非–syn请求数据包(如伪造的网络攻击数据包)
     

  • 相关阅读:
    JS数组对象去重
    获取DataFrame中各列最大值所在行的行号(索引号)idxmax()
    【小白专属02】SpringBoot集成MybatisPlus
    【SpringBoot篇】分页查询 | 扩展SpringMvc的消息转换器
    C++交叉编译grpc
    delphi 在代码中 添加 TO-DO 并且 管理
    上海控安SmartRocket系列产品推介(二):SmartRocket Modeler可视化建模开发工具
    基于Java毕业设计在线图书超市源码+系统+mysql+lw文档+部署软件
    canvas入门教学(1)
    Windows平台Qt6中UTF8与GBK文本编码互相转换、理解文本编码本质
  • 原文地址:https://blog.csdn.net/m0_71518373/article/details/126332217