标签: nftables

docker 的 nftables 规则

系统:RHEL 8.4 Docker 版本:20.10

RHEL 8 已从 iptables 迁移到 nftables,并且 Docker inbuild 使用 iptables 在计算机上设置防火墙规则。

它似乎破坏了从 docker 容器到主机服务以及到同一网络上其他托管 docker 容器的通信。

我必须与端口 5000 上的容器中托管的注册表进行通信。

我还在容器中托管 impala 服务,并打开了以下暴露的端口

21000

21050

25000

25010

25020

此外,当我登录容器时,它无法连接到互联网。

有谁知道可以设置哪些规则来与 docker 进行正确的通信。此外,容器中托管的服务必须能够联系所有相关的主机服务。

到目前为止尝试过的事情:

在 /etc/docker/daemon.json 中进行了更改

{
"iptables" : false
}
Run Code Online (Sandbox Code Playgroud)

并根据此链接尝试设置规则,但没有运气

仅供参考:我不知道如何在 Linux 防火墙中设置任何类型的规则(不使用 iptables 或 nftables)

iptables docker firewalld nftables

5
推荐指数
1
解决办法
6419
查看次数

update-alternatives:错误:arptables 的替代 /usr/sbin/arptables-legacy 未注册;不设置

我在 Buster 主机上有 Debian 10 (Buster) KVM 来宾计算机。iptables尝试按照Debian wiki在虚拟机上切换到旧版

update-alternatives --set iptables /usr/sbin/iptables-nft
update-alternatives --set ip6tables /usr/sbin/ip6tables-nft
update-alternatives --set arptables /usr/sbin/arptables-nft
update-alternatives --set ebtables /usr/sbin/ebtables-nft
Run Code Online (Sandbox Code Playgroud)

虽然其他三个成功,但arptables更新失败并显示消息

update-alternatives: error: alternative /usr/sbin/arptables-legacy for arptables not registered; not setting
Run Code Online (Sandbox Code Playgroud)

有解决方法吗?

如果您好奇,来宾计算机是使用 kubeadm 启动的 Kubernetes (v1.18) 集群的节点。网络插件是Caliconftables除了MetalLB控制器错误之外,一切都可以使用默认设置

 1 reflector.go:125] pkg/mod/k8s.io/client-go@v0.0.0-20190620085101-78d2af792bab/tools/cache/reflector.go:98: Failed to list *v1.ConfigMap: Get https://10.96.0.1:443/api/v1/namespaces/metallb-system/configmaps?fieldSelector=metadata.name%3Dconfig&limit=500&resourceVersion=0: dial tcp 10.96.0.1:443: i/o timeout
Run Code Online (Sandbox Code Playgroud)

当我ping 10.96.0.1从来宾虚拟机时,我得到

PING 10.96.0.1 (10.96.0.1) 56(84) bytes of data. …
Run Code Online (Sandbox Code Playgroud)

debian kvm iptables debian-buster nftables

4
推荐指数
1
解决办法
9268
查看次数

如何:Podman rootless 将容器端口暴露给外部并查看真实的客户端 IP

这是我第一次在 stackoverflow 上问问题。我已经潜伏多年,但现在我终于决定自己注册。因此,如果我的问题/信息格式不正确,我深表歉意。

现在的情况:

我慢慢地越来越熟悉 Podman,并且正在将一些容器从 docker(有根)转移到 podman(无根)。我在Debian 11上使用Podman 4.3.1。我已经设法让一些容器正常工作并且能够从外部连接到它们。但是,容器显示客户端/源 IP“127.0.0.1”,而不是我真实客户端的 IPv4。我想知道下面这样的事情是否可能?

理想情况:

为容器分配特定的 IPv4(无根)。使用 nftables/iptables 将数据包从主机网络转发到容器 ipv4(例如 192.168.1.12)。能够在容器中看到真实客户端的 IPv4,仍然能够使用fail2ban 等。

正如您可能注意到的,我仍然处于学习容器化如何工作的过程中,特别是对于网络而言。出于安全原因,我不想将主机网络用于我的容器。如果有不清楚的地方请告诉我,我会尽力更好地解释自己。

感谢您花时间阅读本文:)

networking debian nftables podman rootless

4
推荐指数
1
解决办法
6527
查看次数

无法刷新 nftable 元素的集合

我实际上正在学习在测试环境中使用 nftables,并且实际上正在使用 nftables 集。我使用的是 0.7 版本,由于我的测试不起作用,我更新到 0.9.4 版本,但我的问题仍然相同。

我可以毫无问题地在我的桌子上创建我的集合。我的集合元素必须包含 ipv4 地址。我使用 nftables 表、链和集合没有任何问题,我的规则有效等等......

所以我想要做但找不到如何做到这一点就是删除我的所有集合元素,而不需要一一精确地指定 ipv4 地址。

假设我的表的名称是test,我的集名称是tmp,类型为 ipv4_addr,我的配置将如下所示:

table ip test {
        set tmp {
                type ipv4_addr
        }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令成功地将元素添加到该集合中:

nft add element ip test tmp { 10.10.10.10 }
Run Code Online (Sandbox Code Playgroud)

现在我想做的是删除我的集合中的所有元素,我查看了 nft 的手册页,它说我可以使用flush命令刷新集合中的所有元素:

SETS
[...]
flush    Remove all elements from the specified set.
Run Code Online (Sandbox Code Playgroud)

所以我尝试使用此命令从集合中删除所有元素:

nft flush set test tmp
Run Code Online (Sandbox Code Playgroud)

但它返回给我这个错误:

Error: Could not process rule: Invalid argument
flush set test tmp
^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

我以相同的方式尝试了很多命令(在设置之前添加表格,而不是精确表格),它总是返回一个错误,但并非每次都相同。

我想我一定做错了什么,但我不知道是什么。如果你有什么想法吗?我将非常感激!

也许是我整体配置不好,不能这么想套装吧?

如果无法刷新集合中的元素,是否有办法删除集合中的所有元素(除了定义标志超时之外)?

抱歉,如果我的信息不清楚,我是法国人,用其他语言来描述问题有点困难...... …

set nftables

3
推荐指数
1
解决办法
2782
查看次数

nftables 设置:无法在命令行上添加带有标志间隔的设置

正如所说,这个命令失败了:

nft 'add set netdev blacklist blocklist_v4 {type ipv4_addr; flags interval;}'
Run Code Online (Sandbox Code Playgroud)

但这成功了:

nft 'add set netdev blacklist blocklist_v4 {type ipv4_addr;}'
Run Code Online (Sandbox Code Playgroud)

我尝试使用常量标志,并且它有效。所以看来“间隔”不受支持,或者我错过了什么?

我正在努力实现这样的目标

nftables

2
推荐指数
1
解决办法
1038
查看次数