• linux系统中firewalld防火墙管理工具firewallcmd(CLI命令行)


    linux系统中firewalld防火墙拥有基于CLI(命令行界面)和基于GUI(图形用户界面)两种管理方式

    相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板)

    用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。

    firewalld中常见的区域名称(默认为public)以及相应的策略规划如下图:(linux就该这么学p160)

    终端管理工具CLI(命令行界面)

    firewall-cmd是firewalld防火墙配置管理工具的CLI(命令行界面)版本。firewall-cmd命令的参数一般都是长格式的。

    firewall-cmd命令中使用的参数以及作用

            与linux系统中其他的防火墙策略配置工具一样,使用firewalld配置的防火墙策略默认为运行时模式,又称为当前生效模式,而且随着系统的重启会失效。如果想让配置策略一致存在,就需要使用永久模式了。

    方法就是在用firewall-cmd命令正常设置防火墙策略是添加 --permanent参数,这样配置的防火墙策略就可以永久生效了。但是,永久生效模式有一个不近人情的特点,就是使用它设置的策略只有在系统重启

    之后才能自动生效。如果想让配置的策略立即生效,需要手动执行firewall-cmd  --reload命令。

    1、查看firewalld服务当前所使用的区域:

    [linuxprobe@linuxprobe Desktop]$ firewall-cmd --get-default-zone 
    public

    2、查询eno16777728网卡在firewalld服务中的区域:

    [linuxprobe@linuxprobe Desktop]$ ifconfig | head -n 3  ## 查看网卡名称
    eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.13  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::20c:29ff:feab:7b00  prefixlen 64  scopeid 0x20<link>
    [linuxprobe@linuxprobe Desktop]$ firewall-cmd --get-zone-of-interface=eno16777728  ## 查看网卡在firewalld服务中的区域
    public

    3、把firewalld服务中eno16777728网卡的默认区域修改为external,并在系统重启后生效

    [root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777728  ## 查看网卡在firewalld服务中的区域
    public
    [root@linuxprobe ~]# firewall-cmd --permanent --zone=external --change-interface=eno16777728  ##将网卡的默认区域永久修改为external,但是不能立即生效(需要重启系统生效,或者firewall-cmd --reload)
    success
    [root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777728  ## 查看网卡在firewalld服务中的区域,仍然为public
    public
    [root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777728 --permanent ## 加--permanent,变为external(或者重启)
    external

    4、修改firewalld服务的默认区域

    [root@linuxprobe ~]# firewall-cmd --get-default-zone ## 查看当前firewalld服务所在的区域
    public
    [root@linuxprobe ~]# firewall-cmd --set-default-zone=external   ## 设为external
    success
    [root@linuxprobe ~]# firewall-cmd --get-default-zone   ## 查看
    external 
    [root@linuxprobe ~]# firewall-cmd --set-default-zone=home  ## 设为home
    success
    [root@linuxprobe ~]# firewall-cmd --get-default-zone   ## 查看
    home
    [root@linuxprobe ~]# firewall-cmd --set-default-zone=trusted 
    success
    [root@linuxprobe ~]# firewall-cmd --get-default-zone 
    trusted
    [root@linuxprobe ~]# firewall-cmd --set-default-zone=drop 
    success
    [root@linuxprobe ~]# firewall-cmd --get-default-zone 
    drop
    [root@linuxprobe ~]# firewall-cmd --set-default-zone=public 
    success
    [root@linuxprobe ~]# firewall-cmd --get-default-zone 
    public

    5、启动/关闭firewalld防火墙服务的应急状况模式,阻断一切网络连接(当远程控制服务时慎用):

    [root@linuxprobe ~]# firewall-cmd --panic-on  ## 开启
    success
    [root@linuxprobe ~]# firewall-cmd --panic-off  ## 关闭
    success

    6、查询public区域是否允许请求SSH和HTTPS协议的流量:

    [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=ssh  ## 允许
    yes
    [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https  ## 拒绝
    no
    [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=dhcpv6-client   ## 允许
    yes
    [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=ipp-client   ## 拒绝
    no

    7、把firewalld服务中请求HTTPS协议的流量设置为永久允许,并立即生效

    [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https ## 查看当前是否允许
    no
    [root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-service=https  ## 加--permanent设置为永久允许
    success
    [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https  ## 查看,未立即生效
    no
    [root@linuxprobe ~]# firewall-cmd --reload   ## 执行reload
    success
    [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https  ## 立即生效
    yes

    8、把firewalld服务中请求HTTP协议的流量设置为永久拒绝,并立即生效:

    [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=http  ## 查看当前http在firewalld服务中的状态,为拒绝
    no
    [root@linuxprobe ~]# firewall-cmd --zone=public --add-service=http --permanent ## 设置为永久允许
    success
    [root@linuxprobe ~]# firewall-cmd --reload   ## 使其立即生效
    success
    [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=http  ## 查看是否生效,是
    yes
    [root@linuxprobe ~]# firewall-cmd --zone=public --remove-service=http --permanent  ## 设置为永久拒绝
    success
    [root@linuxprobe ~]# firewall-cmd --reload   ## 使其立即生效
    success
    [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=http  ## 查看是否生效,是
    no

    9、把在firewalld服务中访问8080和8081端口的流量策略设置为允许,但仅限当前生效:

    [root@linuxprobe ~]# firewall-cmd --zone=public --list-ports ## 列出当前的端口
    [root@linuxprobe ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp  ## 增加端口
    success
    [root@linuxprobe ~]# firewall-cmd --zone=public --list-ports   ## 列出端口
    8080-8081/tcp

    10、把原本访问本机888端口的流量转发到22端口,且要求当前和长期均有效:

    测试修改前的情况:

    [root@linuxprobe ~]# ifconfig | head -n 5  ## 查看当前主机的IP
    eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.13  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::20c:29ff:feab:7b00  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:ab:7b:00  txqueuelen 1000  (Ethernet)
            RX packets 319  bytes 31578 (30.8 KiB)
    [root@linuxprobe ~]# ifconfig | head -n 5  ## 登录另一台主机,并查看IP
    ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.14  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::d7fe:9dfc:42ec:c255  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:ef:86:f2  txqueuelen 1000  (Ethernet)
            RX packets 562  bytes 68551 (66.9 KiB)
    [root@linuxprobe ~]# ssh -p 888 192.168.3.13  ## 测试端口为888的远程控制情形,无法连接
    ssh: connect to host 192.168.3.13 port 888: No route to host

    执行修改:

    [root@linuxprobe ~]# firewall-cmd --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.3.13 --permanent  ## 执行端口转移
    success
    [root@linuxprobe ~]# firewall-cmd --reload ## 重新加载,立即生效
    success

    测试修改效果:

    [root@linuxprobe ~]# ifconfig | head -n 5 ## 登录另一台主机,并查看IP
    ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.14  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::d7fe:9dfc:42ec:c255  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:ef:86:f2  txqueuelen 1000  (Ethernet)
            RX packets 650  bytes 76761 (74.9 KiB)
    [root@linuxprobe ~]# ssh -p 888 192.168.3.13  ## 测试端口流量转移后远程控制,通过
    root@192.168.3.13's password:
    Last login: Fri Oct 30 22:01:12 2020

    11、firewalld中的富规则表示更细致、更详细的防火墙策略配置,优先级在所有的防火墙策略中是最高的,比如我们可以在firewalld服务中配置一条富规则,使其拒绝192.168.3.0/24网段的所有用户访问本机的ssh服务(22端口):

    测试修改前的ssh服务:

    [root@linuxprobe ~]# ifconfig | head -n 5  ## 查看当前主机IP
    eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.13  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::20c:29ff:feab:7b00  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:ab:7b:00  txqueuelen 1000  (Ethernet)
            RX packets 360  bytes 37008 (36.1 KiB)
    [root@linuxprobe ~]# ifconfig | head -n 5  ## 登录另一台主机,查看IP
    ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.14  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::d7fe:9dfc:42ec:c255  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:ef:86:f2  txqueuelen 1000  (Ethernet)
            RX packets 963  bytes 110176 (107.5 KiB)
    [root@linuxprobe ~]# ssh 192.168.3.13  ## 测试ssh远程控制服务,通过
    root@192.168.3.13's password:
    Last login: Fri Oct 30 22:51:22 2020 from 192.168.3.13
    [root@linuxprobe ~]# ifconfig | head -n 5  ## 登录另一台主机,并查看IP
    ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.8  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::54f8:bbf7:7760:3745  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:8d:79:f8  txqueuelen 1000  (Ethernet)
            RX packets 226  bytes 211739 (206.7 KiB)
    [root@linuxprobe ~]# ssh 192.168.3.13  ## 测试ssh远程控制服务,通过
    root@192.168.3.13's password:
    Last login: Fri Oct 30 22:52:04 2020 from 192.168.3.14

    执行修改,测试192.168.10.0/24网段:

    [root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"  ## 执行修改
    success
    [root@linuxprobe ~]# firewall-cmd --reload   ## 立即生效
    success
    [root@linuxprobe ~]# ifconfig | head -n 5 ## 登录另一主机,查看IP
    ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.14  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::d7fe:9dfc:42ec:c255  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:ef:86:f2  txqueuelen 1000  (Ethernet)
            RX packets 1109  bytes 127776 (124.7 KiB)
    [root@linuxprobe ~]# ssh 192.168.3.13 ## 测试远程服务,通过
    root@192.168.3.13's password:
    Last login: Fri Oct 30 22:53:55 2020 from 192.168.3.8
    [root@linuxprobe ~]# ifconfig | head -n 5  ## 登录另一主机,查看IP
    ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.8  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::54f8:bbf7:7760:3745  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:8d:79:f8  txqueuelen 1000  (Ethernet)
            RX packets 1875  bytes 2376094 (2.2 MiB)
    [root@linuxprobe ~]# ssh 192.168.3.13  ##  测试远程服务,通过
    root@192.168.3.13's password:
    Last login: Fri Oct 30 23:00:27 2020 from 192.168.3.14

     执行修改,测试192.168.3.0/24网段:

    [root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.3.0/24" service name="ssh" reject"  ## 执行修改
    success
    [root@linuxprobe ~]# firewall-cmd --reload   ## 立即生效
    success
    [root@linuxprobe ~]# ifconfig | head -n 5  ## 登录另一主机,查看IP
    ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.14  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::d7fe:9dfc:42ec:c255  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:ef:86:f2  txqueuelen 1000  (Ethernet)
            RX packets 1300  bytes 152392 (148.8 KiB)
    [root@linuxprobe ~]# ssh 192.168.3.13  ## 测试ssh远程服务,拒绝
    ssh: connect to host 192.168.3.13 port 22: Connection refused
    [root@linuxprobe ~]# ifconfig | head -n 5  ## 登录另一主机,查看IP
    ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.8  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::54f8:bbf7:7760:3745  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:8d:79:f8  txqueuelen 1000  (Ethernet)
            RX packets 1990  bytes 2390926 (2.2 MiB)
    [root@linuxprobe ~]# ssh 192.168.3.13  ## 测试ssh远程服务,拒绝
    ssh: connect to host 192.168.3.13 port 22: Connection refused
  • 相关阅读:
    如何用Baas快速在腾讯云上开发小程序-系列2:搭建Phabricator开发管理平台
    如何用Baas快速在腾讯云上开发小程序-系列1:搭建API & WEB WebSocket 服务器
    腾讯云极速配置NodeJS+LNMP运行环境
    Python GTK + 3教程 学习笔记 ——(4)Widget 小部件
    Python GTK + 3教程 学习笔记 ——(3)基础
    Python GTK + 3教程 学习笔记 ——(2)入门
    Python GTK + 3教程 学习笔记——(1)安装
    打包工具pyinstaller
    pip换源
    mac brew
  • 原文地址:https://www.cnblogs.com/liujiaxin2018/p/13903527.html
Copyright © 2020-2023  润新知