RHCE的学习(11)

第八章 防火墙

什么是防火墙

  • 防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出。

分类:

  • 硬件防火墙:由厂商设计好的主机硬件,其操作系统主要以提供数据包数据的过滤机制为主,并去掉不必要的功能

  • 软件防火墙:保护系统网络安全的一套软件(或称为机制),如Netfilter(数据包过滤机制)

Netfilter(数据包过滤)

定义
  • netfilter 是一个工作在 Linux 内核的网络数据包处理框架,用于分析进入主机的网络数据包,将数据包的头部数据(硬件地址,软件地址,TCP、UDP、ICMP等)提取出来进行分析,以决定该连接为放行或拒绝的机制,主要用于分析OSI七层协议的2、3、4层。
Netfilter分析内容:
  • 拒绝让Internet的数据包进入主机的某些端口

  • 拒绝某些来源IP的数据包进入

  • 拒绝让带有某些特殊标志(flag)的数据包进入,如:带有SYN的主动连接标志

  • 分析MAC地址决定是否连接

防火墙无法完成的任务

  • 防火墙并不能杀毒或清除木马程序(假设主机开放了www服务,防火墙的设置是一定要将www服务的port开放给client端的。假设www服务器软件有漏洞,或者请求www服务的数据包本身就是病毒的一部分时,防火墙是阻止不了的)

  • 防火墙无法阻止来自内部LAN的攻击(防火墙对于内部的规则设置通常比较少,所以就很容易造成内部员工对于网络无用或滥用的情况)

iptables 与 firewalld 区别

  • netfilter数据包过滤机制是由linux内核内建的,不同的内核版本使用的设置防火墙策略的软件不一样,从红帽7系统开始firewalld服务取代了iptables服务

  • iptables 与 firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已,即只是一种服务,而真正使用规则干活的是内核的netfilter

  • 总之,当前Linux 系统中存在多个防火墙管理工具,旨在方便运维人员管理 Linux 系统中的防火墙策略,我们只需要配置妥当其中的一个就足够了。虽然这些工具各有优劣,但它们在防火墙策略的配置思路上是保持一致的

iptables

  • 早期的 Linux 系统中,默认使用 iptables 防火墙来管理服务和配置防火墙,虽然新型的 firewalld 防火墙管理服务已经被投入使用多年,但iptables 在当前生产环境中还继续使用 ,具有顽强的生命力

iptables执行原则

原则
  • 防火墙会从上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为(即放行或阻止)。

  • 如果在读取完所有的策略规则之后没有匹配项,就去执行默认的策略

防火墙规则
  • 通(放行、允许)

  • 堵(阻止、拒绝)

  • 当默认策略为拒绝时,就要设置允许规则,否则数据包都进不来;若默认策略为允时,就要设置拒绝规则,否则数据包都能进来,防火墙也就失去了作用

规则链

概念
  • iptables 服务把用于过滤流量的策略条目称之为规则,多条规则组成一个规则链
分析
  • 数据包经过iptables处理必须闯过5个控制关卡,每个关卡放置5个规则链用于检查规则和处理,每一道关卡中有多个规则,数据报文必须按顺序一个一个匹配这些规则,这些规则串起来就像一条链,所以我们把这些关卡都叫规则链

  • 流程图

规则链分类:
  • ==INPUT链:数据包流入时,即数据包从内核流入用户空间==

  • OUTPUT链:向外发送数据包(流出)时,即数据包从用户空间流出到内核空间,一般不配置

  • FORWARD链:处理数据包转发时,即在内核空间中,从一个网络接口进入,到另一个网络接口去(转发过滤)

  • PREROUTING链:在对数据包作路由选择之前,即互联网进入局域网

  • POSTROUTING链:在对数据包作路由选择之后,即局域网出互联网

  • 注意:从内网向外网发送的流量一般都是可控且良性的,因此使用最多的是INPUT 规则链,该规则链可以增大黑客人员从外网入侵内网的难度

  • 例:物业管理公司有两条规定:

    • 禁止小商小贩进入社区;

    • 各种车辆在进入社区时都要登记。

    • 这两条规定是用于社区正门的(流量必须经过的地方),而不是每家的防盗门。根据防火墙策略的匹配顺序,可能会存在多种情况。

    • 如:来访人员是小商小贩,则会被保安拒之门外,也就无需再对车辆进行登记。若来访人员乘坐一辆汽车进入社区正门,则"禁止小商小贩进入社区"的第一条规则就没有被匹配到,因此按照顺序匹配第二条策略,即需要对车辆进行登记。如果是社区居民要进入正门,则这两条规定都不会匹配到,因此会执行默认的放行策略

规则链之间的匹配顺序
  • 主机型防火墙:

    • ==入站数据(来自外界的数据包,且目标地址是防火墙本机):PREROUTING--> INPUT --> 本机的应用程序==

    • 出站数据(从防火墙本机向外部地址发送的数据包) :本机的应用程序--> OUTPUT --> POSTROUTING

  • 网络型防火墙:转发数据(需要经过防火墙转发的数据包) : PREROUTING --> FORWARD --> POSTROUTING

  • 规则链内的匹配顺序

    • 自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)

    • 若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)

iptables 流量处理动作
  • 当规则链匹配后应采用以下几种动作来处理匹配流量

  • ACCEPT:允许流量通过

  • REJECT:拒绝流量通过,拒绝后回复拒绝信息

  • LOG:记录日志信息

  • DROP:拒绝流量通过,流量丢弃不响应

  • 例:若某天您正在家里看电视,突然听到有人敲门,透过防盗门的猫眼一看是推销商品的,便会在不需要的情况下开门并拒绝他们(REJECT)。但如果您看到的是债主带了十几个小弟来讨债,此时不仅要拒绝开门,还要默不作声,伪装成自己不在家的样子(DROP)

iptables表

  • 规则链容纳了各种流量匹配规则,规则表则存储了不同功能对应的规则链,总之表里有链,链里有规则
四种规则表
  • ==filter表==:用于对数据包过滤,根据具体的规则决定是否放行该数据包(如DROP、ACCEPT、REJECT、LOG),包含三个规则链,INPUT、 FORWARD、 OUTPUT,所谓的防火墙其实基本上是指这张表上的过滤规则,常用

  • nat表:network address translation,网络地址转换功能,主要用于修改数据包的源、目标IP地址、端口,包含三个规则链,OUTPUT、 PREROUTING、 POSTROUTING

  • mangle表:拆解报文,做出修改,并重新封装,主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,由于需要相应的路由设备支持,因此应用并不广泛,包含全部五个规则链

  • raw表:是自1.2.9以后版本的iptables新增的表,用于是否对该数据包进行状态跟踪,在匹配数据包时,raw表的规则要优先于其他表,包含两个规则链,OUTPUT、PREROUTING

  • 注意:最终定义的防火墙规则链,都会添加到这四张表中的其中一张表中,如图:

安装iptables

预处理
  • Euler中默认使用的是firewalld,且与iptables之间有冲突,如果需要使用 iptables 需要先停止firewalld再进行安装:

    [root@server ~]# systemctl stop firewalld
    [root@server ~]# systemctl disable firewalld

    #默认没有安装
    [root@server ~]# dnf install iptables-services

    [root@server ~]# which iptables
    /usr/sbin/iptables

    [root@server ~]# systemctl status iptables
    ○ iptables.service - IPv4 firewall with iptables
    Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
    Active: inactive (dead)

管理命令
[root@server ~]# systemctl start  iptables   # 启动

[root@server ~]# systemctl enable  iptables  # 开机启动

[root@server ~]# systemctl status  iptables  # 查看状态

[root@server ~]# service  iptables save  # 保存设置,否则重启系统后恢复默认设置
# 注意:不能使用systemctl  save  iptables 命令
规则链存储文件
[root@server ~]# vim   /etc/sysconfig/iptables

# Generated by iptables-save v1.8.7 on Wed Nov 15 13:01:36 2023
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [15:2100]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Nov 15 13:01:36 2023
  • 前1行为注释:

  • filter表的规则链

iptables 命令

原则
  • iptables 命令根据流量的源地址、目的地址、传输协议、服务类型等信息进行匹配,若匹配成,则iptables 会根据策略规则所预设的动作来处理这些流量,由于策略规则的匹配顺序是从上至下,则要把较为严格、优先级较高的策略规则放到前面,以免发生错误
格式:
  • 简化:

    iptables [-t 表名] 选项 [链名] [条件] [-j 控制动作]

  • 详细:

    iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 控制动作

参数
参数 作用
-n 地址用IP标识,不用域名标识
-t 对指定的表进行操作,table必须是raw,nat,filter,mangle中的一个,默认是filter
-p 指定要匹配的数据包协议类型
-s 匹配源地址IP/MASK,若有!表示取反
-d 匹配目的地址IP/MASK
-i 网卡名 匹配从这块网卡流入的数据
-o 网卡名 匹配从这块网卡流出的数据
-L 列出规则链上的所有规则,如果没有指定链,列出表上所有链的所有规则
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除指定规则,要指定链,在-D 与num中间
-R num 替换/修改第几条规则
-P 设置默认策略
-F 清空所有规则(F:flush是"冲洗、冲掉"的意思)
-N 创建新规则链
-X 删除指定规则链,这个链必须没有被其它任何规则引用,而且这条链上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链
-E 用指定的新名字去重命名指定的链
-Z 把指定链,或者表中的所有链上的所有计数器清零
-j 满足某条件时该执行什么样的动作
-h 显示帮助信息
示例
  • 查看已有的防火墙规则链

    [root@server ~]# iptables -nvxL --line

    -n 显示源 -v 详细信息 -x 自动转换为KB\MB等单位 -L写在最后列出所有规则 --line 增加行号

    num:规则的编号(行号)

    pkts:数据包的数量

    bytes:数据包的字节数

    target:动作(放行、拒绝)

    port:端口

    in:入站的网卡

    out:出站网卡

  • 清空规则

    [root@server ~]# iptables -F # 清空规则
    [root@server ~]# iptables -nL # 查看规则链
    [root@server ~]# systemctl restart iptables
    [root@server ~]# iptables -nL # 由于未保存,则恢复原状

    [root@server ~]# iptables -F # 再次尝试清空规则链
    [root@server ~]# service iptables save # 保存服务状态
    iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
    [root@server ~]# systemctl restart iptables # 重启服务
    [root@server ~]# iptables -nL # 查看
    [root@localhost ~]# iptables --line-numbers -nL #前面加序号

实验
  • 例1:搭建web服务器,设置任何人都能通过80端口访问http

    [root@server ~]# mkdir -p /www/web
    [root@server ~]# echo "hello world" > /www/web/index.html
    [root@server ~]# dnf install nginx -y
    [root@server ~]# vim /etc/nginx/nginx.conf
    root /www/web;
    [root@server ~]# systemctl start nginx

    [root@server ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    [root@server ~]# service iptables save
    iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
    [root@server ~]# systemctl restart iptables
    [root@server ~]# iptables -nL
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80

  • 例2:禁止所有人使用ssh进行远程登录

    [root@server ~]# iptables -F # 清空
    [root@server ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT

    此时ssh已断开连接,可以尝试新来你姐

    恢复ssh连接

    [root@server ~]# iptables -D INPUT 1 # 删除INPUT链中第1条规则,恢复ssh
    [root@server ~]# iptables -nL
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80

    [root@server ~]# service iptables save # 保存服务
    iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
    [root@server ~]# systemctl restart iptables # 重启服务

  • 例3:禁止某主机(192.168.48.131) ssh远程登录,允许访问web服务

    [root@server ~]# iptables -F
    [root@server ~]# iptables -I INPUT -p tcp -s 192.168.48.131 --dport 22 -j REJECT

    -I 表示在已存在的记录之前插入一条新纪录


    [root@server ~]# iptables -I INPUT -p tcp -s 192.168.48.131 --dport 80 -j ACCEPT

    [root@server ~]# iptables -nL
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    ACCEPT tcp -- 192.168.48.131 0.0.0.0/0 tcp dpt:80
    REJECT tcp -- 192.168.48.131 0.0.0.0/0 tcp dpt:22 reject-with icmp-port-unreachable

    [root@server ~]# service iptables save
    iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
    [root@server ~]# systemctl restart iptables

  • 例4:iptable的规则备份

    [root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -s 192.168.24.0/24 -j DROP

    [root@localhost ~]# iptables-save > /etc/sysconfig/iptables.bak
    [root@localhost ~]# iptables-restore < /etc/sysconfig/iptables.bak
    [root@localhost ~]# iptables -L

  • 例5:对当前linux主机不允许某个用户进行远程连接

    vim /etc/sshd/sshd_config

    denyUsers 用户名

    密码锁定

    用户shell改为/sbin/nologin

案例分析:
  1. 封堵网段(10.20.30.0/24),两小时后解封。
    1.

       # iptables -I INPUT -s 10.20.30.0/24 -j DROP
    
       # iptables -I FORWARD -s 10.20.30.0/24 -j DROP
    
       # at now 2 hours at> iptables -D INPUT 1 at> iptables -D FORWARD 1
    
  2. 丢弃从外网接口(eth1)进入防火墙本机的源地址为私网地址的数据包

    1. 私网地址是:

    2. A类地址:10.0.0.0~10.255.255.255

    3. B类地址:172.16.0.0 ~172.31.255.255

    4. C类地址:192.168.0.0~192.168.255.255

       iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
    
       iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
    
       iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
    
  3. 允许本机开放从TCP端口20-1024提供的应用服务
    1.

       iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT
    
       iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEP
    
  4. 禁止转发来自MAC地址为00:0C:29:27:55:3F的和主机的数据包
    1.

       iptables -A FORWARD -m mac --mac-source 00:0c:29:27:55:3F -j DROP
    
  5. 允许防火墙本机对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280
    1.

       ***iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
    
  6. 禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包。
    1.

       iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
    
  7. 禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主机
    1.

       iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP
    
       iptables -I OUTPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
    
       iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT
    

  8. 1.

       RELATED,ESTABLISHED
    
       iptables -t nat -A POSTROUTING -s 172.24.8.0/24 -o eno16777736 -j MASQUERADE
    
  9. 也可以使用--to-source(公网地址)
    1.

       #iptables -t nat -A POSTROUTING -s 172.24.8.0/24 -o eno16777736 -j SNAT --to-source 192.168.150.148
    
       #firewall-cmd --permanent --add-masquerade --zone=public
    
  10. 使用iptables配置
    1.

       ​
       #iptables -t nat -A PREROUTING -d 192.168.150.148 -p tcp --dport 80 -i eno16777736 -j DNAT --to-destination 172.24.8.100:8080
    
       [root@A ~]# firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=172.24.8.100 --permanent
    
       success
    
       [root@kongd ~]# firewall-cmd --reload
    
       外网客户端测试
    
       http://192.168.150.148 --> http://172.24.8.100:8080
    
       ​
    

firewalld

概述

概念
  • firewalld(Dynamic Firewall Manager of Linux systems,Linux 系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,从RHEL 7开始,用firewalld服务替代了iptables服务

  • RHEL 9采用firewalld管理netfilter子系统,默认情况,firewalld则是交由内核层面的nftables包过滤框架来处理

firewalld特点
  • firewalld可以动态修改单条规则,不需要像iptables那样,修改规则后必须全部刷新才可生效

  • firewalld默认动作是拒绝,则每个服务都需要去设置才能放行,而iptables里默认是每个服务是允许,需要拒绝的才去限制

  • iptables防火墙类型为静态防火墙firewalld 防火墙类型为动态防火墙

  • firewalld和iptables一样自身并不具备防火墙功能,它们的作用都是用于维护规则,而真正使用规则干活的是内核防火墙模块

  • firewalld 加入了区域(zone)概念

区域 zone

作用
  • firewalld防火墙为了简化管理,将所有网络流量分为多个区域(zone),然后根据数据包的源IP地址或传入的网络接口等条件将流量传入相应区域,每个区域都定义了自己打开或者关闭的端口和服务列表

  • 区域:zone本质为firewalld 预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换

例:有一台笔记本电脑,每天都要在公司、咖啡厅和家里使用。

这三者的安全性按照由高到低的顺序是:家庭、公司办公室、咖啡厅。

若希望指定如下防火墙策略规则:在家中允许访问所有服务;在公司办公室内仅允许访问文件共享服务;在咖啡厅仅允许上网浏览。

以往,我们需要频繁地手动设置防火墙策略规则,而现在只需要预设好区域集合,然后只需轻点鼠标就可以自动切换了,从而极大地提升了防火墙策略的应用效率。

分析
  • firewalld的一个zone就是一个可信等级,一个等级对应一套过滤规则(规则集合)

  • 数据包必须要经过某个zone才能入站或出站

  • 每个zone都有一个处理行为(default、ACCEPT、REJECT、DROP)

  • firewalld的zone根据信任级别分成9个默认zone:

区域 默认规则策略
阻塞区域 (block) 拒绝流入的流量,除非与流出的流量相关
工作区域 (work) 拒绝流入的流量,除非与流出的流量相关
家庭区域 (home) 拒绝流入的流量,除非与流出的流量相关
公共区域 (public) 不相信网络上的任何计算机,只有选择接受传入的网络连接。 ssh
隔离区域 (DMZ) 隔离区域也称为军事区域,内外网络之间增加的一层网络,起到缓冲作用。对 于隔离区域,只有选择接受传入的网络连接。
信任区域 (trusted) 允许所有的数据包。
丢弃区域 (drop) 拒绝流入的流量,除非与流出的流量相关
内部区域 (internal) 等同于home区域
外部区域 (external) 拒绝流入的流量,除非与流出的流量有关;而如果流量与ssh服务相关,则允许 流量
  • firewalld的配置文件有两个主要的目录/usr/lib/firewalld/zones(系统配置文件,尽量不要修改)和/etc/firewalld/zones(用户配置文件,可以自行修改),每个zone单独对应一个xml配置文件,文件名为<zone名称>.xml

    [root@server ~]# cd /usr/lib/firewalld/zones
    [root@server zones]# ls
    block.xml dmz.xml drop.xml external.xml home.xml internal.xml public.xml trusted.xml work.xml

    [root@server zones]# cd /etc/firewalld/zones
    [root@server zones]# ls
    public.xml public.xml.old
    [root@server zones]# cd ~

  • 用法是:把可信任的IP地址添加到trusted区域,把不可信任的IP地址添加到block区域,把要公开的网络服务添加到public区域,所以常用区域为:trusted、block、public

zone文件中的过滤规则
  • 过滤规则优先级:

    • source(最高)

    • interface(次之)

    • 默认zone(最低)

  • 规则:

规则 作用
scource 源IP地址过滤(常用)
interface 网卡过滤
service 服务名(实际是关联端口)过滤
port 端口过滤
icmp-block ICMP报文过滤
masquerade IP地址伪装
forward-port 端口转发过滤
rule 自定义规则

firewall-cmd可视化界面工具

安装
# 注意:需要再可视化界面下使用

[root@server ~]# systemctl  start firewalld     # 启用

[root@server ~]# systemctl  enable  firewalld   # 开机启动

		# 安装DDE图形化桌面

[root@server ~]# dnf  install  firewall-config  -y  # 安装图形化界面
使用
# 虚拟机中执行,不要在xshell执行
[root@server ~]# firewall-config

firewall-cmd命令行工具

firewalld命令生效模式
  • runtime模式:运行时模式,立即生效,重启失效

  • permanent模式:永久模式,重启生效

管理命令
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# systemctl start firewalld
[root@server ~]# systemctl enable firewalld
[root@server ~]# systemctl status firewalld
设置命令:firewall-cmd 参数
参数 作用
--get-default-zone 查询默认的区域名称
--set-default-zone=<区域名称> 设置默认的区域,使其永久生效
--get-zones 显示可用的区域
--get-services 显示预先定义的服务
--get-active-zones 显示当前正在使用的区域与网卡名称
--add-source= 将源自此 IP 或子网的流量导向指定的区域
--remove-source= 不再将源自此 IP 或子网的流量导向某个指定区域
--add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称> 将某个网卡与区域进行关联
--list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息
--list-all-zones 显示所有区域的网卡配置参数、资源、端口以及服务等信息
--add-service=<服务名> 设置默认区域允许该服务的流量
--add-port=<端口号/协议> 设置默认区域允许该端口的流量
--remove-service=<服务名> 设置默认区域不再允许该服务的流量
--remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
  • 例1:基本命令

    [root@server ~]# firewall-cmd --version # 查看版本

    [root@server ~]# firewall-cmd --help # 查看帮助信息

    [root@server ~]# firewall-cmd --state # 显示状态

    [root@server ~]# firewall-cmd --get-services # 查看防火墙管理的服务

    [root@server ~]# firewall-cmd --list-all # 查看区域中的规则

    [root@server ~]# firewall-cmd --panic-on # 启用紧急模式

    [root@server ~]# firewall-cmd --panic-off # 关闭紧急模式

使用firewalld配置的防火墙策略默认为当前生效,会随着系统的重启而失效。如果想让策略一直存在,就需要使用永久模式了,即在使用firewall-cmd命令设置防火墙策略时添加--permanent参数,这样配置的防火墙策略就可以永久生效了,最后想要使用这种方式设置的策略生效,只能重启或者输入命令:firewall-cmd --reload。

图形化工具 firewall-config

firewall-config

  • 例2:设置当前zone

    [root@server ~]# firewall-cmd --get-zones # 查看所有支持的区域

    [root@server ~]# firewall-cmd --get-default-zone # 查看当前默认的区域

    [root@server ~]# firewall-cmd --set-default-zone=trusted # 设置当前默认区域为信任区域
    [root@server ~]# firewall-cmd --get-default-zone # 查看你当前默认区域
    [root@server ~]# firewall-cmd --set-default-zone=public # 设置当前默认区域为public区域
    success
    [root@server ~]# firewall-cmd --get-default-zone # 查看你当前默认区域

  • 例3:firewalld区域中添加http服务,使其为放行状态

    [root@server ~]# yum install nginx -y
    [root@server ~]# systemctl start nginx

    浏览器测试网页,被拒绝

    [root@server ~]# firewall-cmd --get-default-zone
    [root@server ~]# firewall-cmd --list all # 查看当前区域中开方的服务

    [root@server ~]# firewall-cmd --permanent --zone=public --add-service=http
    success
    [root@server ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp
    success
    [root@server ~]# firewall-cmd --reload
    success
    [root@server ~]# firewall-cmd --list-all
    public (active)
    target: default
    icmp-block-inversion: no
    interfaces: ens32
    sources:
    services: cockpit dhcpv6-client http ssh
    ports: 80/tcp
    protocols:
    forward: yes
    masquerade: no
    forward-ports:
    source-ports:
    icmp-blocks:
    rich rules:

    浏览器测试通过

    放行服务格式:

    firewall-cmd --permanent --zone=public --add-service=服务名

    放行端口格式:

    firewall-cmd --permanent --zone=public --add-port=端口号/传输协议

  • 例4:某些服务需要编辑zone文件才能添加服务,添加nginx服务

    [root@server ~]# firewall-cmd --get-services # 查看所有区域支持的服务

    [root@server ~]# dnf install nginx -y # 安装nginx

    [root@server ~]# firewall-cmd --add-service=nginx --permanent # 报错,需要编辑区域文件
    [root@server ~]# vim /etc/firewalld/services/nginx.xml # 编辑服务配置文件,添加:
    <service>
    <short>Nginx</short>
    <description>nginx</description>
    <port protocol="tcp" port="80"/>
    <port protocol="tcp" port="443"/>
    </service>

    再次添加服务

    [root@server services]# firewall-cmd --add-service=nginx --permanent

    重置

    [root@server services]# firewall-cmd --reload

    查看当前区域支持的服务

    [root@server services]# firewall-cmd --zone=public --list-service

  • 例5:禁止192.168.48.131 网段的地址进行ping

    • firewalld 富规则:用于更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有正对性的策略配置

    • 富规则优先级最高

    • 格式:

# 如:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="源IP" service name="http"   reject'
  • 你不得不吐嘈:"==这是地球上最丑陋的命令形式,没有之一==",书写时很容易出错,所以建议你在文件编辑器修改到没有毛病再粘贴到shell终端窗口中

  • 可以通过输入 \ 换行书写

  • 示例:

    [root@server ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.48.131" protocol value="icmp" reject'
    success
    [root@server ~]# firewall-cmd --reload # 重置
    success
    public (active)
    target: default
    icmp-block-inversion: no
    interfaces: ens32
    sources:
    services: dhcpv6-client mdns nginx ssh
    ports:
    protocols:
    forward: yes
    masquerade: no
    forward-ports:
    source-ports:
    icmp-blocks:
    rich rules:
    rule family="ipv4" source address="192.168.48.131" protocol value="icmp" reject

    客户端输入ping 192.168.48.130 进行测试,发现无法ping,成功

    注意:恢复客户端ping,不能在服务端添加一条放行富规则,应为禁止的富规则还在,ping还是无法通信,如:

    [root@server ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.48.131" protocol value="icmp" accept'
    [root@server ~]# firewall-cmd --reload

    客户端测试ping 192.168.48.130 失败

    注意:只需删除对应规则即可

相关推荐
幽兰的天空1 小时前
介绍 HTTP 请求如何实现跨域
网络·网络协议·http
lisenustc1 小时前
HTTP post请求工具类
网络·网络协议·http
心平气和️1 小时前
HTTP 配置与应用(不同网段)
网络·网络协议·计算机网络·http
心平气和️1 小时前
HTTP 配置与应用(局域网)
网络·计算机网络·http·智能路由器
hunter2062062 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
不会飞的小龙人2 小时前
Docker Compose创建镜像服务
linux·运维·docker·容器·镜像
不会飞的小龙人2 小时前
Docker基础安装与使用
linux·运维·docker·容器
Mbblovey2 小时前
Picsart美易照片编辑器和视频编辑器
网络·windows·软件构建·需求分析·软件需求
北顾南栀倾寒3 小时前
[Qt]系统相关-网络编程-TCP、UDP、HTTP协议
开发语言·网络·c++·qt·tcp/ip·http·udp
GZ_TOGOGO3 小时前
PIM原理与配置
网络·华为·智能路由器