• 在 CentOS 8 上使用 FirewallD 设置防火墙


    简介

    一个 Linux 防火墙可用于保护您的工作站或服务器免受不需要的流量干扰。您可以设置规则来阻止或允许流量通过。CentOS 8 带有一个动态的、可定制的基于主机的防火墙和一个 D-Bus 接口。您可以添加、删除或更新防火墙的规则,而无需重新启动防火墙守护程序或服务。firewall-cmd 充当着 nftables 的前端。在 CentOS 8 中,nftables 取代了 iptables 作为默认的 Linux 网络包过滤框架。本页展示了如何为您的 CentOS 8 设置防火墙,和如何在 firewall-cmd 工具的帮助下进行管理。

    FirewallD 的基本概念

    firewalld 简化了网络流量管理的概念。当谈到 CentOS 8 上的 firewalld 时,我们有以下两个主要的概念。

    1. 区域

    Firewalld 区域(Zone)只不过是预定义的规则集。您可以通过运行以下 ls 命令查看所有区域:

    $ ls -l /usr/lib/firewalld/zones/
    

    使用 cat 命令查看 public 区域:

    $ cat /usr/lib/firewalld/zones/public.xml
    

    了解预定义区域

    • block:所有传入的网络连接都被拒绝。只可以从系统内部发起网络连接。
    • dmz:经典的非军事区 (DMZ) 区域,提供对 LAN 的有限访问,并且只允许指定的传入端口。
    • drop:丢弃所有传入的网络连接,只允许传出的网络连接。
    • external:对于路由器类型的连接很有用。您还需要 LAN 和 WAN 接口才能使伪装 NAT 正常工作。
    • home:适用于您信任其他计算机的 LAN 中的家用计算机,例如笔记本电脑和台式机。仅允许指定的 TCP/IP 端口。
    • internal:用于内部网络,当您非常信任 LAN 上的其他服务器或计算机时适用。
    • public:您不信任网络上的任何其他计算机和服务器。您只允许所需的端口和服务。对于托管在您所在地的云服务器或服务器,请始终使用公共区域。
    • trusted:接受所有网络连接。我不建议将此区域用于连接到 WAN 的专用服务器或虚拟机。
    • work:用于您比较信任的同事和其他服务器的工作场所。

    运行以下命令以查看 CentOS 8 上的所有区域:

    $ firewall-cmd --get-zones
    

    如何找出您的默认区域

    可以将网络接口和源分配给区域。这些区域中的一员可被设置为默认区域。以下命令可以让您的默认区域运行:

    $ firewall-cmd --get-default-zone
    

    要查看您的网络接口名称,请运行 ip 命令或 nmcli 命令:

    $ ip link show
    $ nmcli device status
    

    当向 NetworkManager 添加新的接口连接(例如 eth0 或 ens3)时,它们将被附加到默认区域。通过运行以下命令进行验证:

    $ firewall-cmd --get-active-zones
    

    服务

    服务不过是本地端口、协议、源端口、目标端口和防火墙帮助模块的列表。举些例子:

    • 端口:443、25 或 110
    • 服务:SSH、HTTP
    • 协议:ICMP

    如何查看与公共(public)区域相关的防火墙规则或服务

    运行

    $ sudo firewall-cmd --list-all
    

    或者

    $ sudo firewall-cmd --list-all --zone=public
    

    上面的命令表明我的默认区域是 public,并且我允许传入 SSH 连接(端口 22)、dhcpv6-client 和 CentOS 8/RHEL 8 上的 cockpit 服务端口。所有其他流量默认被丢弃。如果我在 CentOS 8 上配置 Apache 或 Nginx,则我需要使用 firewall-cmd 打开 80/443 端口。假设您不想要 cockpit 或 dhcpv6-client 等不必要的服务,您可以通过修改规则来删除它们。例如,删除服务 dhcpv6-client 和 cockpit:

    $ sudo firewall-cmd --remove-service=cockpit --permanent
    $ sudo firewall-cmd --remove-service=dhcpv6-client --permanent
    $ sudo firewall-cmd --reload
    $ sudo firewall-cmd --list-services
    

    如何查看当前区域允许的服务

    $ sudo firewall-cmd --list-services
    

    或者

    $ sudo firewall-cmd --list-services --zone=public
    $ sudo firewall-cmd --list-services --zone=home
    

    或使用 bash 的 for 循环,如下所示:

    ## or just use 'sudo firewall-cmd --list-all-zones' ##
    for z in $(firewall-cmd --get-zones)
    do  
        echo "Services allowed in $z zone: $(sudo firewall-cmd --list-services --zone=$z)"
    done
    

    如何在 CentOS 8 上启动、停止、重启 firewalld 服务

    到目前为止,您已经了解了 firewalld 区域、服务以及如何查看默认值。是时候在 CentOS 8 Linux 机器上激活和配置我们的防火墙了。

    启动并启用 firewalld

    $ sudo systemctl start firewalld
    $ sudo systemctl enable firewalld
    

    停止并禁用 firewalld

    $ sudo systemctl stop firewalld
    $ sudo systemctl disable firewalld
    

    检查 firewalld 状态

    $ sudo firewall-cmd --state
    

    更改规则时重新加载 firewalld 配置的命令

    $ sudo firewall-cmd --reload
    

    获取 firewalld 服务的状态

    $ sudo systemctl status firewalld
    

    了解运行时和永久性防火墙规则集

    运行时更改 firewalld 的配置是临时的。当您重新启动 CetnOS 8 服务器时,这些配置就消失了。例如,以下命令将临时为 Nginx/Apache Web 服务器打开 80/443(https)TCP 端口 :

    $ sudo firewall-cmd --zone=public --add-service=http
    $ sudo firewall-cmd --zone=public --add-service=https
    

    当您重新启动 Linux 机器或重新启动防火墙服务本身时,上述规则不会保留。

    如何将规则添加到永久的规则集中,并重新加载 firewalld

    让我们永久添加规则(HTTPS/443 和 HTTP/80)并重新加载 firewalld:

    $ sudo firewall-cmd --zone=public --add-service=http --permanent
    $ sudo firewall-cmd --zone=public --add-service=https --permanent
    $ sudo firewall-cmd --reload
    

    验证

    $ sudo firewall-cmd --list-services
    $ sudo firewall-cmd --list-services --permanent
    

    如何查找 firewalld 支持的服务列表

    在您的系统上,语法如下:

    $ sudo firewall-cmd --get-services
    $ sudo firewall-cmd --get-services | grep mysql
    $ ls -l /usr/lib/firewalld/services/
    $ cat /usr/lib/firewalld/services/ssh.xml
    

    Firewalld 规则集示例

    让我们看看默认区域的一些常见的 firewalld 示例。

    如何将服务添加到您的区域

    添加 dns 服务(TCP/UDP 53 端口):

    sudo firewall-cmd --zone=public --add-service=dns --permanent
    

    如何从您的区域中移除(删除)服务

    删除 vnc 服务器服务(TCP 端口范围 5900-5903):

    sudo firewall-cmd --zone=public --remove-service=vnc-server --permanent
    

    如何允许/打开 TCP/UDP 端口/协议

    打开 TCP 端口 9009 :

    sudo firewall-cmd --zone=public --add-port=9009/tcp --permanent
    

    要查看添加的端口,请运行:

    $ sudo firewall-cmd --zone=internal --list-ports
    

    如何拒绝/阻止 TCP/UDP 端口/协议

    打开 TCP 端口 23:

    sudo firewall-cmd --zone=public --remove-port=23/tcp --permanent
    

    如何编写端口转发 firewalld 规则

    在同一台服务器上将 443 TCP 端口转发到 8080:

    $ sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
    

    要删除上述的端口转发,请运行

    $ sudo firewall-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080
    

    如果您需要将流量(端口 443)转发到托管在 192.168.2.42 的 lxd 服务器/容器的 443 端口,请开启伪装:

    $ sudo firewall-cmd --zone=public --add-masquerade
    $ sudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.2.42 --permanent
    

    要删除上述伪装规则,请运行

    $ sudo firewall-cmd --zone=public --remove-masquerade
    $ firewall-cmd --zone=public --remove-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.2.42 --permanent
    

    像往常一样使用以下命令列出规则:

    $ firewall-cmd --zone=public --list-all --permanent
    

    Rich 规则示例

    假设您只想允许从 10.8.0.8 IP 地址访问 SSH 端口 22,请运行:

    sudo firewall-cmd --permanent --zone=public --add-rich-rule 'rule family="ipv4" source address="10.8.0.8" port port=22 protocol=tcp accept'
    

    要验证新规则,请运行:

    $ sudo firewall-cmd --list-rich-rules --permanent
    

    在以下示例中,允许 192.168.1.0/24 子网访问 tcp 端口 11211:

    sudo firewall-cmd --permanent --zone=public --add-rich-rule='
    rule family="ipv4"
    source address="192.168.1.0/24"
    port protocol="tcp" port="11211" accept'
    

    再次验证它:

    $ sudo firewall-cmd --list-rich-rules --permanent
    

    输出示例:

    rule family="ipv4" source address="10.8.0.8" port port="22" protocol="tcp" accept
    rule family="ipv4" source address="192.168.1.0/24" port port="11211" protocol="tcp" accept
    

    您可以按照如下所示删除 rich 规则:

    $ sudo firewall-cmd --remove-rich-rule 'rule family="ipv4" source address="10.8.0.8" port port=22 protocol=tcp accept' --permanent
    $ sudo firewall-cmd --remove-rich-rule 'rule family="ipv4" source address="192.168.1.0/24" port port="11211" protocol="tcp" accept' --permanent
    

    结论

    您已经了解了 firewalld 的基本概念和 CentOS 8 服务器的一些常见示例。有关更多信息,请参阅的官方(https://firewalld.org/documentation/)firewalld 文档。

    链接:https://www.cyberciti.biz/faq/how-to-set-up-a-firewall-using-firewalld-on-centos-8

  • 相关阅读:
    gcc相关
    test
    第二次课
    VS快捷键
    第7章 站在对象模型的尖端
    第6章 执行期语意学
    第5章 构造, 析构, 拷贝语意学
    第4章 Function语意学
    第一次课
    第3章 Data语意学
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/16201487.html
Copyright © 2020-2023  润新知