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
    • 最新
    • 标签
主页 / user-599939

metablaster's questions

Martin Hope
metablaster
Asked: 2025-04-04 18:30:40 +0800 CST

解释 date 命令的输出

  • 5

该命令将输出以下内容:
date --iso-8601=ns

2025-04-04T12:10:16,045431370+02:00

据man date记载ns如下:

-I[FMT], --iso-8601[=FMT]
output  date/time  in  ISO  8601  format.   FMT='date'  for  date  only  (the  default),  'hours',  'minutes',  'seconds',
or  'ns'  for  date and time to the indicated precision.

令人困惑的是'ns' for date and time to the indicated precision
“指示精度”到底是什么?是什么ns?

045431370我特别想知道输出中的数字的含义2025-04-04T12:10:16,045431370+02:00

如何解释045431370数字?什么是ns选项?

顺便说一句。我假设+02:00是指 UTC 偏移量?或者UTC +2?

command-line
  • 1 个回答
  • 18 Views
Martin Hope
metablaster
Asked: 2025-03-31 05:24:22 +0800 CST

哪些 bind9-dnsutils 工具已弃用或过时?

  • 5

以下是bind9-dnsutils工具:

delv
dig
dnstap-read
mdig
nslookup
nsupdate

列表取自:https://manpages.debian.org/bookworm/bind9-dnsutils/index.html

我知道nslookup它已被弃用但dig事实并非如此(dig 是替代品)。

但是其他 4 种工具呢?它们是被弃用、过时还是仍然有效?
如果是这样,有什么替代品吗?

debian
  • 1 个回答
  • 15 Views
Martin Hope
metablaster
Asked: 2025-03-16 05:58:55 +0800 CST

使用 sed 删除单词表中的空格和数字

  • 5

我有一个包含以下示例内容的文件:

  2 jordyt
  2 dawder
  2 LOL12345
  2 2251084185
  2 123456789
  1 canada
  1 buddy123
  1 bagdad
  1 baba01
  1 124050
  1 123windi
  1 123456789m
  1 123321

目的是删除开头的空格和数字,以便只留下密码,如下所示:

jordyt
dawder
LOL12345
2251084185
123456789
canada
buddy123
bagdad
baba01
124050
123windi
123456789m
123321

我已经使用过这个命令,但是它没有按照我想要的方式工作:

cat file.txt | sed 's/^\s+\d+\s+//g'

sed如果有更好的方法就不一定了,处理性能很重要,因为我有千兆字节的文件。

顺便问一下,为什么我的命令不起作用?

sed
  • 1 个回答
  • 43 Views
Martin Hope
metablaster
Asked: 2025-03-15 20:16:56 +0800 CST

清理(​​删除)对丢失的 systemd 单元的引用是否安全?

  • 5

列出缺失的服务

systemctl --state=not-found --all

输出:

      UNIT                           LOAD      ACTIVE   SUB  DESCRIPTION                   
● boot.automount                 not-found inactive dead boot.automount                
● home.mount                     not-found inactive dead home.mount
● tmp.mount                      not-found inactive dead tmp.mount                     
● connman.service                not-found inactive dead connman.service
● console-screen.service         not-found inactive dead console-screen.service
● dpdk.service                   not-found inactive dead dpdk.service
● fcoe.service                   not-found inactive dead fcoe.service
● firewalld.service              not-found inactive dead firewalld.service
● haveged.service                not-found inactive dead haveged.service
● ip6tables.service              not-found inactive dead ip6tables.service
● iptables.service               not-found inactive dead iptables.service
● iscsi-shutdown.service         not-found inactive dead iscsi-shutdown.service
● iscsi.service                  not-found inactive dead iscsi.service
● iscsid.service                 not-found inactive dead iscsid.service
● kbd.service                    not-found inactive dead kbd.service
● rbdmap.service                 not-found inactive dead rbdmap.service
● systemd-hwdb-update.service    not-found inactive dead systemd-hwdb-update.service
● systemd-oomd.service           not-found inactive dead systemd-oomd.service
● systemd-update-done.service    not-found inactive dead systemd-update-done.service
● systemd-vconsole-setup.service not-found inactive dead systemd-vconsole-setup.service
● xencommons.service             not-found inactive dead xencommons.service
● xendomains.service             not-found inactive dead xendomains.service            
● virtlxcd.socket                not-found inactive dead virtlxcd.socket
● virtqemud.socket               not-found inactive dead virtqemud.socket
● virtvboxd.socket               not-found inactive dead virtvboxd.socket
● virtvzd.socket                 not-found inactive dead virtvzd.socket
● virtxend.socket                not-found inactive dead virtxend.socket

查找引用缺失服务的单元

grep -rR "<service_name>" /usr/lib/systemd
grep -rR "<service_name>" /etc/systemd

# See tables in man page for more directories to search with grep and to learn their purpose
man systemd.unit

样品tmp.mount

grep -rR "tmp.mount" /usr/lib/systemd
grep -rR "tmp.mount" /etc/systemd

输出:

/usr/lib/systemd/system/basic.target:After=sysinit.target sockets.target paths.target slices.target tmp.mount
/usr/lib/systemd/system/basic.target:Wants=tmp.mount

清理引用

sudo nano /usr/lib/systemd/system/basic.target

内容:

[Unit]
Description=Basic System
Documentation=man:systemd.special(7)
Requires=sysinit.target
Wants=sockets.target timers.target paths.target slices.target
After=sysinit.target sockets.target paths.target slices.target tmp.mount

RequiresMountsFor=/var /var/tmp
Wants=tmp.mount

在这里我们发现tmp.mount了After=Wants=

我想删除这些条目以便systemctl --state=not-found --all不再列出它,对于每个缺失的单元也是如此。

问题

删除系统上每个缺失单元的此类条目是否安全?

systemd
  • 1 个回答
  • 34 Views
Martin Hope
metablaster
Asked: 2024-11-05 03:38:06 +0800 CST

build-deps 包是否需要保持安装状态或者我们可以清除它们吗?

  • 5

我经常按照SimpleBackportCreation为稳定分支中不存在的各种软件包创建自定义反向移植。

其中一个步骤是build-deps使用sudo mk-build-deps --install --remove命令安装。

问题是,一旦安装了反向移植,我是否需要保留build-deps已安装的软件包,或者一旦安装了自定义反向移植,清除它们是否可以安全地进行?

我主要想节省一些空间,但次要原因是更新反向移植可能会卸载/升级以前build-deps的版本,但新的反向移植版本的构建可能会失败,所以我想知道在这种情况下,现在删除的build-deps软件包是否会影响最初制作并已安装的旧反向移植。


底线是,我可以清除吗*-build-deps?

debian
  • 1 个回答
  • 20 Views
Martin Hope
metablaster
Asked: 2024-10-01 17:06:44 +0800 CST

ethers、rarp、plipconfig 和 slattach 命令是否已弃用?它们的替代品是什么?

  • 8

Debian 的net-tools包中有 10 个网络工具(其他发行版也有,可能包的名称不同):

  • arp (ip n)
  • ifconfig(IP)
  • mmi 工具 (ethtool)
  • nameif(ip 链接)
  • netstat(ss)
  • 路由 (ip r)
  • 醚
  • 拉普
  • 插件配置
  • 斯拉塔赫

从上面的列表中,我可以肯定地知道其中前 6 个已被弃用,并且有已知的替代品,如括号中所示。

但其他 4 个则不清楚,它们是否也被弃用了,它们的替代品是什么?这些是:

  • 醚
  • 拉普
  • 插件配置
  • 斯拉塔赫
debian
  • 1 个回答
  • 153 Views
Martin Hope
metablaster
Asked: 2024-09-29 21:16:05 +0800 CST

nftables 在日志中报告的 MAC 地址长度并不总是由 12 个十六进制数字组成

  • 7

在监控防火墙日志时,我注意到日志MAC中报告的地址nftables与标准长度不匹配。

据我了解,MAC地址是 48 位,应该表示为 12 个十六进制数字,因为每个十六进制数字需要 4 位,因此 48/4 = 12 个十六进制数字(分为 6 组,每组 2 位数字)。

以上与维基百科的说法一致:

通常情况下,MAC 地址可以识别为六组两位十六进制数字,用连字符、冒号分隔,或者不使用分隔符。

根据维基百科,这种地址的一个例子是01:23:45:67:89:AB,这意味着有 12 个十六进制数字(6 组 x 每组 2 个 = 12),这就是我如何识别我的设备LAN以及如何进行流量过滤LAN。

防火墙日志(例如条目)中也可以看到这样的 6 组十六进制数字ARP,因为很明显,所以我就不发布它的示例了。

但是也有类似这样的日志:

2024-09-29T14:44:21.000498+02:00 debian kernel: [ 2520.417160] DROP default new_in_4: IN=wlan0 OUT= MAC=00:c0:ca:52:bf:8e:10:a3:b8:f5:f7:28:08:00 SRC=157.48.189.170 DST=192.168.1.34 LEN=132 TOS=0x08 PREC=0x20 TTL=43 ID=0 PROTO=UDP SPT=35165 DPT=3451 LEN=112

这个列出了 14 组十六进制数字MAC地址,总共 28 个十六进制数字。
所有此类地址都以 开头00:和结尾,:00作为第一组数字和最后一组数字。

MAC因此,日志中可以看到这个地址nftables比实际大小高出一倍多(计算前缀组和后缀组00)。

问题1是,这个14组28位地址是什么,它在日志MAC中是什么意思?nftables

问题 2 可能更有趣,如何才能获取MAC互联网上某个对等点的地址?我猜这个MAC地址来自NAT防火墙之外,因为我无法识别它。

我该如何过滤这些奇怪的MAC地址?我应该这样做吗?

由于我已关闭客户端,此示例日志条目丢弃了由 bittorrent peer 生成的入站 UDP 流量。

编辑:

ip link show wlan0

3: wlan0 <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DORMANT group default qlen 1000
    link/ether 00:c0:ca:52:bf:8e brd ff:ff:ff:ff:ff:ff
ethernet
  • 1 个回答
  • 78 Views
Martin Hope
metablaster
Asked: 2024-09-28 14:13:52 +0800 CST

如何使 qdisc 永久生效?(以持久重启)

  • 5

相关问题在这里,但答案不是很直观,肯定有更标准的方法来配置NIC:
如何将 tc qdisc 命令与特定接口永久关联?

另一个相关问题是:
TC 规则在重启后还能继续存在吗?在哪里?

但是,我并没有使用networking服务来编辑,/etc/network/interfaces正如后面所详述的那样。


目前,我的 wifi NIC 配置为使用noqueue排队规则,我想将其更改为fq_codel,但是,以便它在重启后仍然存在:

ip link show dev wlan0
    
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff

为了改变qdisc我的做法:

sudo tc qdisc add dev wlan0 root fq_codel
ip link show dev wlan0

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DORMANT group default qlen 1000
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff

这有效,qdisc已按所见进行了更改,但仅限于重新启动为止。

我还检查了qdisc系统中设置的默认值,该值已设置为fq_codel:

sudo sysctl net.core.default_qdisc

net.core.default_qdisc = fq_codel

网络由 控制systemd-networkd,networking服务已禁用。NIC
由 管理,NetworkManager无需任何 systemd 配置。

networking
  • 1 个回答
  • 29 Views
Martin Hope
metablaster
Asked: 2024-09-19 02:39:42 +0800 CST

如何在自定义反向移植创建期间识别和卸载作为依赖项安装的软件包?

  • 7

我正在使用下面链接中的方法来创建自定义的 Debian 反向移植,例如,对于尚未反向移植但存在于测试分支中的软件包:

https://wiki.debian.org/SimpleBackportCreation

现在我想撤消已安装的反向移植包,但仅仅运行sudo apt purge <package_name>是不够的,因为我看到一些已安装的包在清除后仍然存在。(我在应用程序菜单中看到它们并可以运行它们)

问题是如何识别所有已安装的额外软件包并能够清除它们?

我仍然有用于构建反向移植的构建目录。

如果我运行sudo less /var/log/apt/history.log日志,将仅显示反向移植,但不会显示已安装的那些额外包。

我当前想要清除的特定包以及依赖项是crow-translate: https ://packages.debian.org/trixie/crow-translate

在这种特定情况下,我在应用程序菜单中看到的额外包是:

  • QT 5 助手
  • QT 5 设计器
  • QT 5 语言学家

但我相信还有更多在应用程序菜单中不可见的。

debian
  • 1 个回答
  • 67 Views
Martin Hope
metablaster
Asked: 2024-09-18 05:33:27 +0800 CST

为什么 ARP 中使用 00:00:00:00:00:00 地址而不是广播地址 ff:ff:ff:ff:ff:ff?

  • 5

以下是我精简的ARP规则集,仅显示广播规则,其他规则(此处未显示)不相关。

请参阅有问题的代码注释(?)

#!/usr/sbin/nft -f

add chain arp arp_table input {
    # filter = 0
    # Packets delivered to the local system
    type filter hook input priority filter; policy drop;
}

add chain arp arp_table output {
    # filter = 0
    # Packets send by the local system
    type filter hook output priority filter; policy drop;
}

# ARP Broadcast address
define broadcast_ether = { ff:ff:ff:ff:ff:ff }

# IPv4 network address
define network_addr_4 = { 192.168.1.0/24 }

# NIC ether address
define physical_ether = { bb:c9:51:d4:4a:b6 }

# Why input to broadcast address never hits?
# This rule should handle broadcast input
add rule arp arp_table input arp daddr ether $broadcast_ether log prefix "ACCEPT input broadcast: " accept

# Why input to 00:00:00:00:00:00 hits instead?
# This rule handles input toward 00:00:00:00:00:00 from LAN
add rule arp arp_table input arp saddr ip $network_addr_4 arp daddr ether 00:00:00:00:00:00 accept

# Why output to broadcast never hits?
# This rule should handle output toward ff:ff:ff:ff:ff:ff to LAN
add rule arp arp_table output arp daddr ether $broadcast_ether log prefix "ACCEPT output broadcast: " accept

# Why output to 00:00:00:00:00:00 hits instead?
# This rule handles output toward 00:00:00:00:00:00 to LAN
add rule arp arp_table output arp saddr ether $physical_ether arp daddr ether 00:00:00:00:00:00 accept

这里有几个问题,主要问题是ARP广播流量ff:ff:ff:ff:ff:ff不存在,这就是为什么我添加了日志语句以希望捕获这种流量,但它从未出现,对于input和output流量都如此。

相反,我看到很多针对00:00:00:00:00:00地址的输入/输出,这表明该00:00:00:00:00:00地址某种程度上是广播地址。

所以主要的问题是为什么我看不到ARP指向广播地址的流量以及为什么00:00:00:00:00:00使用地址来代替?

第二个问题是,什么是00:00:00:00:00:00地址?为什么需要它以及它意味着什么?

如果我阻止来往的流量00:00:00:00:00:00(例如,通过删除这些规则),那么网络将由于此类ARP数据包被丢弃而停止运行。

nftables
  • 1 个回答
  • 49 Views
Martin Hope
metablaster
Asked: 2024-08-14 15:07:55 +0800 CST

按位构造以匹配 nftables 中的 TCP 标志

  • 5

我找不到任何可以解释以下示例构造的语法和评估的文档:

add rule filter output tcp flags & (syn | ack) == syn | ack
add rule filter output tcp flags & (fin | syn) != 0

我确实在这里阅读了@AB 的回答:记录 TCP 标志。

这只解释了这些构造(匹配标志)的目的TCP,但我想知道语法以及表达式和运算符的评估如何工作。

特别是“按位”运算符的含义以及它们在flags整个表达式中的评估方式。

我还不清楚operator upfront!= 0的作用是什么,特别是它的用途。&

我知道它们是 OR、AND 等等,但不明白这在nftables规则中如何应用。

一些更复杂的例子也可能有帮助。

tcp
  • 1 个回答
  • 20 Views
Martin Hope
metablaster
Asked: 2024-08-08 16:34:51 +0800 CST

pkexec 与 runuser

  • 3

pkexecDebian不同于runuser其他,它默认并未安装。

到目前为止我一直在使用,pkexec但发现还有runuser,并且 sincerunuser似乎更高级(查看man条目中的选项,我不完全理解并且还没有使用该命令)所以这让我思考安装pkexecsince是否runuser已经存在有什么好处。

runuser和相比 有哪些优缺点pkexec?

debian
  • 1 个回答
  • 31 Views
Martin Hope
metablaster
Asked: 2024-08-03 01:40:29 +0800 CST

以标准用户身份运行同步命令

  • 5

网上有几个博客说,如果sync运行sudo这个,它将同步所有文件系统,但如果正常运行(没有 sudo),那么它将同步“当前”文件系统。

但不清楚“当前”的含义,哪个文件系统是当前的?

如果我有 3 个磁盘,每个磁盘有 2 个 ext4 分区,总共 6 个文件系统,那么哪一个是“当前的”,sync如果不运行,哪一个会起作用sudo?

编辑:

声明这一点的博客:

https://www.baeldung.com/linux/sync-command

https://phoenixnap.com/kb/linux-sync

引号:

通常,为了同步当前文件系统,我们运行不带任何选项的 sync 命令:

$同步

使用不带参数的 sync 会同步当前文件系统,而使用 sudo 执行该命令会同步所有已挂载的文件系统。

command
  • 1 个回答
  • 25 Views
Martin Hope
metablaster
Asked: 2024-04-28 22:15:54 +0800 CST

使用 ip 命令列出 openvswitch 虚拟交换机

  • 6

我已经配置了openvswitchip虚拟交换机,并且可以使用以下命令列出它:

# Show all interfaces
ip link

输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

<snip>

5: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 8a:94:11:48:01:db brd ff:ff:ff:ff:ff:ff
6: ovsbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether e6:db:3f:88:4b:48 brd ff:ff:ff:ff:ff:ff

此输出中的 openvswitch 被命名为ovsbr0

现在我想使用ip命令只列出这个虚拟交换机并排除其他接口,例如:

# List only bridges
ip link show type bridge

预期输出:

6: ovsbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether e6:db:3f:88:4b:48 brd ff:ff:ff:ff:ff:ff

实际输出:

<no output>


为什么我期望这个命令输出ovsbr0?

这个问题是特定的,openvswitch因为如果我使用相同的命令列出不是的网桥,openvswitch那么它可以正常工作。

使用命令创建的桥的示例ip:

# Create bridge named "br0"
sudo ip link add br0 type bridge

# Show the newly created bridge called "br0"
ip link show type bridge

提供预期输出:

7: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 6a:76:6f:50:da:35 brd ff:ff:ff:ff:ff:ff

如您所见,如果使用命令创建网桥,则该命令有效ip。
但这不起作用openvswitch

问题:

  1. 如何使用该ip命令仅列出openvswitch接口(虚拟交换机)?
  2. 为什么该ip命令无法列出openvswitch接口(虚拟交换机)?

附加背景:

不是openvswitch使用命令创建的,而是使用包中的ovs-vsctlip命令创建的:openvswitch

sudo ovs-vsctl add-br ovsbr0

然而,即使该桥不是使用命令创建的,也可以使用命令删除openvswitch它:ipip

# Delete it with ip command
sudo ip link delete ovsbr0

# Alternative and conventional method
sudo ovs-vsctl del-br ovsbr0

我尝试过什么:

# List openvswitch only but specifying type other than TYPE bridge
ip link show type TYPE

还有哪些其他接口类型可以测试列表?

# See TYPE := section from this output for types other than "bridge"
ip link show help
networking
  • 1 个回答
  • 15 Views
Martin Hope
metablaster
Asked: 2024-04-19 05:32:09 +0800 CST

/var/log/user.log 文件的范围是什么?

  • 4

/var/log/user.log

该日志文件的范围是什么?它仅与当前登录的用户相关还是与多个用户以及哪些用户相关?

该日志文件的内容是什么?我应该何时查看它?

logs
  • 1 个回答
  • 33 Views
Martin Hope
metablaster
Asked: 2024-04-11 02:50:14 +0800 CST

natables 路由决策步骤

  • 5

下面的链接是解释跨链数据包流的图像nftables

网络过滤器挂钩

我了解一切,除了一件事,该图像没有说明在哪个阶段完成routing decision?

根据图像,应该在两个地方完成:

  1. 在prerouting钩子之后但在input引擎盖forward之前
  2. output当数据包离开本地主机进程时挂钩之前

上面的第一点是有道理的,因为后面有 2 个可能的钩子prerouting,但是对于第 2 点,不清楚要执行什么路由决策,因为来自本地进程的唯一流选项是钩子,output因此不应该有任何路由决策,而是图片说有一个。

这让我相信只有一个路由决策,即上面的第 1 点。
为什么图像指定和hookrouting decision之间的节点?local processoutput

SNAT是在钩子中完成的postrouting,根据文档“在路由之后,就在它们离开本地系统之前查看所有数据包”,
但问题是哪个路由?因为根据图像有 2 个路由决策。

顺便说一句。什么是“路由决策”(图像中的节点)我不认为那是NAT因为NAT是在prerouting和postrouting挂钩中完成的。

nftables
  • 1 个回答
  • 12 Views
Martin Hope
metablaster
Asked: 2024-04-10 03:03:26 +0800 CST

masquerade 的用法和含义 [to :PORT_SPEC]

  • 5

以下是相关示例规则集,其中包含 2 个示例nftablesNAT 规则,这些规则将 IP 从虚拟机伪装到 LAN:

#!/usr/sbin/nft -f

add table nat_4

# Sees all packets after routing, just before they leave the local system
add chain nat_4 postrouting_nat_4 {
    type nat hook postrouting priority srcnat; policy accept;
    comment "Postrouting SNAT IPv4 traffic"
}

# Masquerade all packets going from VMs to the LAN/Internet
add rule nat_4 postrouting_nat_4 meta l4proto tcp ip saddr 192.168.122.0/24 ip daddr != 192.168.122.0/24 counter masquerade to :1024-65535

# Same rule as above but without [to :PORT_SPEC]
add rule nat_4 postrouting_nat_4 meta l4proto tcp ip saddr 192.168.122.0/24 ip daddr != 192.168.122.0/24 counter masquerade

示例 IP 地址192.168.122.0/24是虚拟机运行的网络地址。

我明白了什么masquerade,它SNAT通过将源IP更改为出站接口IP来执行。
从这个意义上说,我理解上面示例中的第二条规则的作用。

我不明白的是 [to :PORT_SPEC] 声明(文档链接),在示例中(第一条规则):masquerade to :1024-65535

具体是masquerade to :1024-65535做什么的,有必要具体说明吗?
这两条规则基本上相同还是有什么不同?
哪一个更适合通过本地主机上的虚拟交换机从虚拟机到互联网进行 NAT?

nftables
  • 1 个回答
  • 12 Views
Martin Hope
metablaster
Asked: 2024-04-10 02:16:05 +0800 CST

在 nftables 中声明并使用一组命名的 ICMP 类型

  • 6

unamed set以下是我当前如何使用包含 ICMP 类型的工作示例:

#!/usr/sbin/nft -f

add table filter_4

add chain filter_4 icmp_out_4 {
    comment "Output ICMPv4 traffic"
}

define response_icmp_4 = {
    0, # Echo Reply
    3, # Destination Unreachable
    10, # Router Solicitation
    11, # Time Exceeded
    12, # Parameter Problem
    14 # Timestamp Reply
}

# Block ICMP response from localhost
add rule filter_4 icmp_out_4 icmp type $response_icmp_4 drop

我想要做的是将其转换unamed set为response_icmp_4命名集。
这是我不成功的尝试:

# Declare named set
add set filter_4 response_icmp_4 { type inet_service }

# Add ICMP type elements
add element filter_4 response_icmp_4 {
    0, # Echo Reply
    3, # Destination Unreachable
    10, # Router Solicitation
    11, # Time Exceeded
    12, # Parameter Problem
    14 # Timestamp Reply
}

创建集合可以工作,但在规则处理过程中被拒绝:

# Block ICMP response from localhost
add rule filter_4 icmp_out_4 icmp type @response_icmp_4 drop

具有以下错误输出:

错误:数据类型不匹配,预期的 ICMP 类型,表达式的类型为 Internet 网络服务

该错误是不言自明的,但问题是type我应该指定什么?因为type inet_service不起作用。

根据文档,有效的type表达式是ipv4_addr, ipv6_addr, ether_addr, inet_proto, inet_service, mark

也可以指定typeof自动派生数据类型,但这效果不佳,例如:

add set filter_4 response_icmp_4 { typeof vlan id }

哪些错误与类似错误:

错误:数据类型不匹配,预期的 ICMP 类型,表达式的类型为整数

这是一个奇怪的错误,因为ICMP type它是一个整数。

如果您还可以链接到解释这一点的文档,那将会很有帮助,因为我找不到它。

nftables
  • 1 个回答
  • 7 Views
Martin Hope
metablaster
Asked: 2024-04-08 18:29:30 +0800 CST

在 nftables 中的表声明范围之外声明 ct 辅助对象

  • 6

ct helper这是当前如何根据nftables 文档声明对象的工作示例

#!/usr/sbin/nft -f

add table filter_4 {
    # TODO: Can helper object be declared outside the scope of table declaration scope?
    # ct helper stateful object
    # "ftp-standard" is the name of this ct helper stateful object
    # "ftp" is the in-kernel name of the ct helper for ftp
    ct helper ftp-standard {
        type "ftp" protocol tcp;
    }
}

然后该ct helper对象用于 ex。如下:

add chain filter_4 new_out_4 {
    comment "New output IPv4 traffic"
}

# FTP (active and passive)
# Rule for initial ftp connection (control channel), setting ct helper stateful object to use
# "ftp-standard" is the name of the ct helper stateful object
add rule filter_4 new_out_4 tcp sport >1023 tcp dport 21 ct helper set "ftp-standard" accept

我想要实现的是了解ct helper在表外声明对象的语法,其方式与声明集合的方式类似。

有关如何在表声明范围之外声明集合的示例

add set filter_4 multicast_proto { type inet_proto; comment "IPv4 multicast protocols"; }
add element ip filter_4 multicast_proto { udp, igmp }

以类似的方式,我想声明ct helper对象,例如:

# Table declaration
add table filter_4

# Declare ct helper separately
add ct helper ftp-standard {
    type "ftp" protocol tcp;
}

这当然不行,ct helper像这样添加\声明的语法是什么?

似乎ct helper必须绑定到一个表(这是真的吗?),因此也许应该在上面的示例中指定表名称。

nftables
  • 1 个回答
  • 8 Views
Martin Hope
metablaster
Asked: 2024-03-08 18:35:39 +0800 CST

nftables - 多播数据包不匹配

  • 6

我设置了一条匹配多播数据包的规则,如下所示:

add rule filter_4 new_out_4 meta pkttype multicast goto multicast_out_4

filter_4是 IPv4 表,new_out4是输出链,multicast_out_4是处理纯组播流量的链。

以下是排除不相关部分的 IPv4 表的更完整图片:

#!/usr/sbin/nft -f

add table filter_4

add chain filter_4 output {
    # filter = 0
    type filter hook output priority filter; policy drop;
}

add chain filter_4 multicast_out_4 {
    comment "Output multicast IPV4 traffic"
}

add chain filter_4 new_out_4 {
    comment "New output IPv4 traffic"
}

#
# Stateful filtering
#

# Established IPv4 traffic
add rule filter_4 input ct state established goto established_in_4
add rule filter_4 output ct state established goto established_out_4

# Related IPv4 traffic
add rule filter_4 input ct state related goto related_in_4
add rule filter_4 output ct state related goto related_out_4

# New IPv4 traffic ( PACKET IS MATCHED HERE )
add rule filter_4 input ct state new goto new_in_4
add rule filter_4 output ct state new goto new_out_4

# Invalid IPv4 traffic
add rule filter_4 input ct state invalid log prefix "drop invalid_filter_in_4: " counter name invalid_filter_count_4 drop
add rule filter_4 output ct state invalid log prefix "drop invalid_filter_out_4: " counter name invalid_filter_count_4 drop

# Untracked IPv4 traffic
add rule filter_4 input ct state untracked log prefix "drop untracked_filter_in_4: " counter name untracked_filter_count_4 drop
add rule filter_4 output ct state untracked log prefix "drop untracked_filter_out_4: " counter name untracked_filter_count_4 drop

在上面的设置中,包括多播在内的新输出流量通过规则进行匹配add rule filter_4 output ct state new goto new_out_4

这是new_out_4仅包含不起作用的相关(非工作)多播规则的链:

# Multicast IPv4 traffic ( THIS RULE DOES NOT WORK, SEE LOG OUTPUT BELOW)
add rule filter_4 new_out_4 meta pkttype multicast goto multicast_out_4

#
# Default chain action ( MULTICAST PACKET IS DROPPED HERE )
#
add rule filter_4 new_out_4 log prefix "drop new_out_4: " counter name new_out_filter_count_4 drop

以下是日志中有关丢弃的多播数据包的内容:

删除new_out_4:IN = OUT = eth0 SRC = 192.168.1.100 DST = 224.0.0.251 LEN = 163 TOS = 0x00 PREC = 0x00 TTL = 255 ID = 27018 DF PROTO = UDP SPT = 5353 DPT = 5353 LEN = 143

被丢弃的数据包被发送到目标地址224.0.0.251,这是多播地址,它应该与new_out_4链中的多播规则匹配,并且应该由multicast_out_4链处理,但没有。

相反,数据包不匹配,并被上面链中的默认丢弃规则丢弃new_out_4,请参阅注释(默认链操作)。

显然这意味着组播规则不起作用。

为什么组播规则不起作用?

预期的:

meta pkttype multicast匹配目标地址224.0.0.251

编辑:

系统信息:
内核:6.5.0-0.deb12.4-amd64
与早期内核 6.1 存在相同的问题

nftables:v1.0.6(莱斯特·古奇#5)

firewall
  • 1 个回答
  • 28 Views

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