AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 497697
Accepted
sourcejedi
sourcejedi
Asked: 2019-01-31 05:15:07 +0800 CST2019-01-31 05:15:07 +0800 CST 2019-01-31 05:15:07 +0800 CST

firewall-cmd 表示没有防火墙区域处于活动状态。为什么?

  • 772

在 Debian 9 上,我安装了firewalld(版本0.4.4.2-1)。

sudo firewall-cmd --get-active-zones显示没有输出。并echo $?显示退出状态为 0 ( EXIT_SUCCESS)。为什么?

我有一个 network interface eth0,由ip link(以及 loopback interface lo)显示。


我应该说我的防火墙配置似乎大部分都在工作。FWIW,我已将默认区域从 更改public为MyZone,定义如下:

$ sudo cat /etc/firewalld/zones/MyZone.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>My Zone</short>
  <service name="ssh"/>
  <service name="https"/>
  <!-- ... --> 
</zone>

如果我尝试使用另一台计算机连接,我可以访问 SSH 和 HTTPS 服务。如果我ncat -l -p 8000在服务器上运行,并尝试连接ncat my-server 8000,则连接被正确阻止。(Ncat: No route to host. 并tcpdump显示生成了一个 ICMP 无法访问的回复,输入“管理员禁止”)。

为什么firewall-cmd --get-active-zones没有将 MyZone 显示为活动状态?

$ sudo firewall-cmd --state                                                                                                         
running
$ sudo firewall-cmd --get-active-zones
$ echo $?
0
$ sudo firewall-cmd --get-default-zone
MyZone
$ ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:43:01:c0:ab brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.8/24 brd 172.16.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fd5e:fcf3:b885:0:250:43ff:fe01:c0ab/64 scope global mngtmpaddr dynamic
       valid_lft forever preferred_lft forever
    inet6 fe80::250:43ff:fe01:c0ab/64 scope link
       valid_lft forever preferred_lft forever

firewalld.service不记录任何警告。

$ sudo systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-01-30 13:17:31 GMT; 56min ago
     Docs: man:firewalld(1)
 Main PID: 509 (firewalld)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/firewalld.service
           └─509 /usr/bin/python3 -Es /usr/sbin/firewalld --nofork --nopid

Jan 30 13:17:21 brick systemd[1]: Starting firewalld - dynamic firewall daemon...
Jan 30 13:17:31 brick systemd[1]: Started firewalld - dynamic firewall daemon.

我看到它firewalld更喜欢与 NetworkManager 一起使用。我目前没有运行 NetworkManager,听起来这有点脆弱。

https://firewalld.org/documentation/concepts.html

如果不使用 NetworkManager,则有一些限制... 如果 firewalld 在网络已经启动后启动,则连接和手动创建的接口不会绑定到区域。

但是,自从安装firewalld. 我检查了systemd服务。 firewalld.service开始了Before=network-pre.target。 networking.service开始了After=network-pre.target。我已经确认firewalld是在之前开始的networking.service:

$ sudo journalctl -b -u networking -u firewalld
-- Logs begin at Sat 2019-01-26 04:15:01 GMT, end at Wed 2019-01-30 14:15:33 GMT. --
Jan 30 13:17:21 brick systemd[1]: Starting firewalld - dynamic firewall daemon...
Jan 30 13:17:31 brick systemd[1]: Started firewalld - dynamic firewall daemon.
Jan 30 13:17:31 brick systemd[1]: Starting Raise network interfaces...
Jan 30 13:17:37 brick systemd[1]: Started Raise network interfaces.

我没有手动重新启动网络或运行ifdown/ ifup,我没有运行ifplugd。内核日志(如下)表明以太网链路已经启动,并且 IPv6 一直在运行,自启动以来一直在运行。

$ sudo dmesg|grep eth0
[    4.082350] mv643xx_eth_port mv643xx_eth_port.0 eth0: port 0 with MAC address 00:50:43:01:c0:ab
[   47.577570] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   49.981569] mv643xx_eth_port mv643xx_eth_port.0 eth0: link up, 1000 Mb/s, full duplex, flow control disabled
[   49.991543] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

我什至没有使用 DHCP。eth0in的配置/etc/network/interfaces是

auto eth0
iface eth0 inet static
    address 172.16.1.8
    netmask 255.255.255.0
    gateway 172.16.1.1
    dns-nameservers 172.16.1.1
debian firewalld
  • 2 2 个回答
  • 7428 Views

2 个回答

  • Voted
  1. Best Answer
    sourcejedi
    2019-02-01T09:51:02+08:002019-02-01T09:51:02+08:00

    firewalld 不依赖 NetworkManager,但推荐使用。

    他们不是在开玩笑。

    在没有 NetworkManager 的情况下,网页文档继续说您需要在两个不同的地方复制/保持配置之间的一致性。

    另外,这两个地方中的第一个是ifcfg网络配置系统,在 Debian 上是不存在的。暗示,在 Debian上需要 NetworkManager :-)。

    (综合各种信息,很明显,只有在您在网络接口启动后/etc/firewalld/手动启动时才需要重复配置。这包括如果您重新启动,尽管您通常不希望重新启动。)firewalldfirewalldfirewalld

    一方面,期望在问题中观察到的特定“主要工作”行为可能是公平的。根据其他文档和进一步的观察,您可以合理地期望将默认区域应用于您的界面。

    在没有 NetworkManager 的 Debian 上,将接口分配给不同的区域可能会在正在运行的系统上工作,但在重新启动时无法工作。

    您可能希望对防火墙有更多的“合理期望”。如果您可以使用“推荐”配置,则更令人放心,该配置在firewalld更改时可能会得到更好的测试,而不必依赖这种令人困惑的行为。

    我仍然对此的影响感到困惑,包括对红帽系统的影响。当它未能正确保存区域配置时,firewall-cmd --permanent --add-interface=...可以从字面上显示结果“ ”是非常令人困惑的!success


    这是相关的报价man firewalld:

    如果 NetworkManager 未使用,并且在网络已启动后启动 firewalld,则连接和手动创建的接口不会绑定到 ifcfg 文件中指定的区域。接口将由默认区域自动处理。firewalld 也不会收到有关网络设备重命名的通知。如果设置了,所有这些也适用于不受 NetworkManager 控制的接口 NM_CONTROLLED=no。

    您可以将这些接口添加到区域

    firewall-cmd [--permanent] --zone=zone --add-interface=interface

    如果有 /etc/sysconfig/network-scripts/ifcfg-interface文件,firewalld 会尝试更改ZONE=zone该文件中的设置。

    如果 firewalld 重新加载,它将恢复重新加载之前的接口绑定,以在 NetworkManager 不受控制的接口的情况下保持接口绑定稳定。在 firewalld 服务重启的情况下,这种机制是不可能的。

    在 NetworkManager 不受控制的接口的情况下,必须保持ZONE=ifcfg 文件中的设置与 firewalld 中的绑定一致。

    作为实验,我尝试了提到的命令:

    $ sudo firewall-cmd --zone=MyZone --add-interface=eth0
    $ sudo firewall-cmd --get-active-zones
    MyZone:
      interfaces: eth0
    

    如果我的网络接口在firewalld. 但是我的网络接口在firewalld.

    该man页面听起来像是firewalld依赖于从ifcfg启动网络接口时获取回调。但是ifcfgRed Hat 的网络系统;它没有安装在我的 Debian 系统上。似乎 Debianfirewalld软件包没有提供任何等价物。所以我们降级为“接口将由默认区域自动处理”。

    我跑去sudo iptables-save查看由firewalld. 如果我没有手动运行firewall-cmd --add-interface...,那么就没有提及eth0。但如果我没看错的话,这些规则会使用默认区域的规则来处理此类数据包,作为后备。

    • 2
  2. Michael Prokopec
    2019-01-31T05:26:33+08:002019-01-31T05:26:33+08:00

    如果您没有在其中放置任何配置文件,/usr/lib/firewalld/zones或者/etc/firewalld/zones您没有任何配置的区域。您所拥有的只是一个通用防火墙。根据您拥有的规则仍然有效,只是无法从公共切换到私有或您可能配置的任何其他区域并自动更改规则。

    此外,如果您使用 GUI 配置防火墙,只需检查这些目录以确保您实际设置的设置已到位。

    如果您手动将配置文件放在那里,或者 GUI 设置管理器成功地将您配置的区域的文件放置到位,那么我不知道。

    firewalld 是 Linux 操作系统的防火墙管理工具。它通过 iptables 命令充当 Linux 内核的 netfilter 框架的前端,从而提供防火墙功能,充当 iptables 服务的替代品

    检查:iptables -S,有什么?如果列出了规则,则它是通用防火墙!您不需要firewalld来拥有防火墙,您可以手动编辑iptables。

    然后安装iptables-persistent,然后在每次编辑后保存您的规则netfilter-persistent save

    大多数系统上的默认策略是 (PUBLIC):

    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT
    

    然后您可以以链的形式详细说明规则。

    • 句法:

      iptables -A INPUT/FORWARD/OUTPUT <interface> <port type> <state> <port> <what to do if match>
      

    示例:(允许默认端口上的所有传入 SSH 不是安全的良好做法)

    iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    
    • 0

相关问题

  • GRUB 配置以识别同一 Linux 发行版的不同桌面环境(安装)

  • astyle 不会更改源文件格式

  • 接收有关全新 Debian 的电子邮件

  • Debian Stretch:libgs_plugin_systemd-updates.so 中的 gnome-software 段错误

  • 如何在拼音输入法中输入ü?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve