• Linux防火墙


    1 防火墙简介

    Linux的防火墙主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙。
    防火墙可以单独/批量禁止/允许某个/多个端口的数据通过,也可以将某个端口的数据转发到另外一个端口/ip。

    2 Linux防火墙工具

    • 在Centos 6中主要使用:
      iptables(命令管理工具);操作较复杂。
    • 在Centos 7中主要使用:
      firewall-config(图形化管理工具);
      firewall-cmd(命令管理工具),在生产环境中用的较多。

    3 Firewalld防火墙

    (1)支持网络区域所定义的网络连接及接口安全等级的动态防火墙管理工具
    (2)支持IPv4,IPv6防火墙设置
    (3)支持服务或应用程序直接添加防火墙规则接口
    (4)拥有两种配置模式:运行时配置和永久配置。

    3.1 firewalld防火墙区域介绍

    为了简化管理,firewalld防火墙将所有的网络流量分为多个区域,每个区域都具有不同程度的规则,默认情况下,public公共区域是默认区域,包含所有接口网卡。
    firewalld预定义的网络区域:trusted、public、work、home、internal、external、dmz、block、drop

    3.2 firewalld防火墙的工作流程

    • 检查数据来源的源地址:
    • 若源地址关联到特定的区域,则执行该区域所指定的规则;
    • 若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所指定的规则;
    • 若网络接口未关联到特定的区域,则使用默认区域并执行该区域所指定规则。

    3.3 Firewalld防火墙的配置方法

    3.3.1 运行时配置

    • 实时生效,并持续至Firewalld重新启动或重新加载配置;
    • 不中断现有连接;
    • 不能修改服务配置。

    3.3.2 永久配置

    • 不立即生效,除非Firewalld重新启动或重新加载配置;
    • 中断现有连接;
    • 可以修改服务配置。

    3.4 firewall-cmd常用命令

    firewall-cmd是firewalld防火墙自带的字符管理工具,可以用来设置防火墙的各种规则。

    特点:
    (1)支持全部防火墙特性;
    (2)–permanent参数:携带该参数表示永久配置,否则表示运行时配置;
    (3)[–zone=]选项:不携带此选项表示针对默认区域操作,否则针对指定区域。

    3.4.1 防火墙区域操作命令

    (1)显示所有区域及其规则
    #firewall-cmd --list-all-zones
    (2)显示internal区域的所有规则
    #firewall-cmd --zone=internal --list-all
    (3)显示默认区域的所有规则
    #firewall-cmd --list-all
    (4)显示网络连接或接口的默认区域
    #firewall-cmd --get-default-zone
    (5)设置网络连接或接口的默认区域为internal
    #firewall-cmd --set-default-zone=internal
    #firewall-cmd --get-default-zone
    (6)显示已激活的所有区域
    激活条件:区域至少关联一个接口或一个源地址/网段
    #firewall-cmd --get-active-zones
    (7)显示ens33网卡接口绑定的区域
    #firewall-cmd --get-zone-of-interface=ens33
    (8)为work区域更改绑定的网络接口ens33
    #firewall-cmd --zone=work --change-interface=ens33 '#更改接口'
    #firewall-cmd --get-zone-of-interface=ens33 '#显示接口绑定区域'
    (9)为work区域删除绑定的接口ens33
    #firewall-cmd --zone=work --remove-interface=ens33 '#删除接口'
    #firewall-cmd --get-zone-of-interface=ens33 '#显示接口绑定区域'
    (10)查询区域中是否包含ens33接口
    #firewall-cmd --zone=work --query-interface=ens33

    3.4.2 防火墙端口操作命令

    (1)启用internal区域22端口的TCP协议组合
    #firewall-cmd --zone=internal --add-port=22/tcp --timeout=5m
    –timeout=5m:表示5分钟后删除该端口。
    (2)显示internal区域内允许访问的端口号
    #firewall-cmd --zone=internal --list-ports
    (3)禁用internal区域22端口的TCP协议组合
    #firewall-cmd --zone=internal --remove-port=22/tcp
    (4)查询internal区域中是否启用了22端口TCP
    #firewall-cmd --zone=internal --query-port=22/tcp

    3.4.3 防火墙阻塞ICMP操作命令

    (1)为work区域设置阻塞echo-request类型的ICMP
    #firewall-cmd --zone=work --add-icmp-block=echo-request
    (2)显示work区域内阻塞的所有ICMP类型
    #firewall-cmd --zone=work --list-icmp-blocks
    (3)删除work区域已阻塞的echo-request类型的ICMP
    #firewall-cmd --zone=work --remove-icmp-block=echo-request
    (4)查询work区域的echo-request类型的ICMP是否阻塞
    #firewall-cmd --zone=work --query-icmp-block=echo-request

    4 iptables防火墙

    4.1 iptables的表、链结构

    4.1.1 防火墙的结构

    表: 表是链的容器,一个表包含多个链,不同的表功能不同;
    链: 链是规则容器,链有多条规则;
    规则: 真正执行的命令;

    规则链:
    规则的作用:对数据包进行过滤或处理
    链的作用:容纳各种防火墙规则
    链的分类依据:处理数据包的不同时机
    规则表:
    表的作用:容纳各种规则链
    表的划分依据:防火墙规则的作用相似

    • 默认的5种规则链
      • INPUT:处理入站数据包
      • OUTPUT:处理出站数据包
      • FORWARD:处理转发数据包
      • PREROUTING:在进行路由选择前处理数据包
      • POSTROUTING:再进行路由选择后处理数据包
    • 默认的4个规则表
      • raw表:确认是否对该数据包进行状态跟踪,存放链接跟踪记录的表
      • mangle表:打标签的表,为数据包设置标记,知道数据包去向
      • nat表:对经过防火墙的数据包进行 源地址和目的地址 转换(修改数据包种的源、目标IP地址或端口)
      • filter表:过滤作用,决定什么包可以通过,什么包不能通过

    4.1.2 数据包匹配的流程

    (1)规则表之间的顺序
    raw -> mangle -> nat -> filter
    (2)规则链之间的顺序
    入站:PREROUTING -> INPUT
    出站:OUTPUT -> POSTROUTING
    转发:PREROUTING -> FORWARD -> POSTROUTING
    (3)规则链内的匹配顺序
    按顺序依次检查,匹配即停止(LOG策略例外)
    若找不到相匹配的规则,则按该链的默认策略处理

    先表的优先级再链的优先级
    进来的数据包:nat判断是给本机的还是转发,本机的就是iput拿去,转发的就forward
    出去的数据包:从out,然后交给postrouting发出去

    4.2 iptables常用命令

    4.2.1 控制类型命令

    语法:iptables [-t 表名] 选项 [链名] [-j 控制类型]

    不指定表名时,默认指filter表;
    不指定链名时,默认指表内的所有链;
    除非设置链的默认策略,否则必须指定匹配条件;
    选项、链名、控制类型使用大写字母,其余均为小写

    数据包常见控制类型

    • ACCEPT:允许通过
    • DROP:直接丢弃,不给任何回应
    • REJECT:拒绝通过,必要时会给出提示
    • LOG:记录日志信息,然后传给下一条规则继续匹配

    4.2.2 添加/查看/删除/设置默认规则

    (1)查看规则

    -L:列出所有的规则条目
    -n:以数字形式显示地址、端口等信息
    -v:以更详细的方式显示规则信息
    –line-numbers:查看规则时,显示规则的序号

    查看所选链的所有规则:
    #iptables -L INPUT -nv --line-number

    (2)添加规则

    -A:在链的末尾追加一条规则
    -I:在链的开头(或指定序号)插入一条规则

    #iptables -t filter -A INPUT -p tcp -j ACCEPT
    #iptables -I INPUT -p udp -j ACCEPT
    #iptables -I INPUT 2 -p icmp -j ACCEPT

    (3)清空/删除规则

    -D:删除链内指定序号(或内容)的一条规则
    -F:清空所有规则

    #iptables -D INPUT 3
    #iptables -F
    #iptables -t nat -F

    注:不指定清空的表和链,就会情况默认表的所有链,其中filter是默认表
    从所选链中删除规则:

    • 删除时将规则完整列出来
      #iptables -D INPUT --dport 80 -j DROP
    • 删除时指定规则在所选链中的序号
      #iptables -D INPUT 1

    清空所选链:
    #iptables -F INPUT

    (4)设置默认策略

    -P:为指定的链设置默认规则

    #iptables -t filter -P FORWARD DROP
    #iptables -P OUTPUT ACCETP

    4.2.3 规则的匹配条件

    协议匹配:-p 协议名
    地址匹配:-s 源地址;-d 目的地址
    接口匹配:-i 入站网卡;-o 出站网卡
    !:条件取反
    端口匹配:–sport 源端口;–dport 目的端口
    TCP标记匹配:–tcp-flags 检查范围被设置的标记
    ICMP类型匹配:–icmp-type ICMP类型
    多端口匹配:-m multiport --sports 源端口列表;-m multiport --dport 目的端口列表
    IP范围匹配:-m iprange --src-range IP范围
    MAC地址匹配:-m mac --mac-source MAC地址
    状态匹配:-m state --state 连接状态

    #iptables -I INPUT -p icmp -j ACCEPT
    #iptables -A FORWARD ! -p icmp -j ACCEPT
    #iptables -A FORWARD -s 192.168.11.11 -j REJECT
    #iptables -A INPUT -i eth0 -s 192.168.0.0/12 -j DROP
    #iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.13-192.168.1.52 -j ACCEPT

    注:
    资料参考:https://blog.csdn.net/m0_51553670/article/details/130948978

  • 相关阅读:
    15 高阶导数的概念
    深度相机辅助导航避障(三):地面点云滤除
    操作系统学习——第一类R/W问题和第二类R/W问题
    为什么混合云是未来云计算的主流形态?
    iOS——KVO底层学习
    PAD 踩坑记录
    【ES6】Promise.race的用法
    位运算合集
    人生阶段总结
    手把手教你用Java获取IP归属地
  • 原文地址:https://blog.csdn.net/qq_41943900/article/details/133304008