无法收到精心设计的 icmp 回复或 tcp rst-syn

问题描述 投票:0回答:1

我尝试制作由 VM-A (ubuntu22.04, ip=192.168.22.241) 发送的 icmp echo 回复 (type=0) 或 tcp rst-syn (flags="RA"),但 VM-A 无法接收B(ubuntu22.04,ip=192.168.22.241)。

icmp echo 回复是由 scapy 制作的,如下所示。

from scapy.all import *
ip = IP(src="10.45.0.2", dst="192.168.22.242")
icmp = ICMP(id=0x1234, seq=1, type=0)
data = b"Hello World"
packet = ip / icmp / data
send(packet)

tcp rst-syn 是由 scapy 制作的,就像后续版本一样。

from scapy.all import *
ip = IP(dst="192.168.22.242", src="10.45.0.2")
tcp = TCP(dport=80, flags="RA")
packet = ip / tcp
send(packet)

我不知道是否应该归咎于连接跟踪机制,因此当数据包从用户空间传送到内核空间时,数据包被 VM-A 或 VM-B 的内核网络堆栈丢弃。 我检查了 ICMP 源代码,但没有发现什么特别的。

我尝试使用 PF_RING,据说它与 kernel.network 堆栈分开运行并在其自己的循环上运行。 我使用 pfcount 和 pfsend 等内联工具在两个虚拟机上发送和接收数据包。

在VM-A上,我使用以下命令发送数据包。

pfsend -i enp6s18 -f test.pcap
test.pcap 只是一个仅包含 icmp echo 回复的 pcap。 测试.pcap 在VM-B上,我使用以下命令来接收数据包。
pfcount -i eth0 -f "ip src host 10.45.0.2"
但什么也没得到。

你们对我上述的操作有什么想法吗? 任何人都可以告诉我为什么未经请求的数据包,即独立的 icmp echo 回复或 tcp rst-syn 会被内核拦截和过滤?连接跟踪出现故障? 任何人都可以告诉我内核评估数据包是否有效并接收它的整个过程? 任何人都可以告诉我 PF_RING 标准模式是否真的直接从网络接口发送和接收数据包? 任何人都可以告诉我是否有任何方法可以真正直接从网络接口发送和接收数据包? PF_RING 零复制模式? 预先感谢您。

=== 解决方案的华丽分隔符 ===

20240919补充:

最后发现内核网络堆栈并没有所谓的连接跟踪。 问题背后的根本原因是 Proxmox 防火墙。 这两个虚拟机驻留在 Proxmox 虚拟机平台上。 这些虚拟机没有设置任何防火墙。 但我忘记关闭服务器级别和数据中心级别的防火墙。 当我关闭这些防火墙设置时,对等主机可以成功接收有问题的数据包。 我使用了ethtool,它可以直接与网络接口及其驱动程序通信,通过观察rx和tx(即接收包数和发送包数)等统计信息来进行调试。

linux security network-programming kernel icmp
1个回答
-2
投票

很抱歉在这里强加这一点。但我认为这对社区非常有帮助。 与 Baxter Clewis Ltd. 首席执行官 Boyd Clewis 和其他网络安全专家一起参加有关网络安全和 Endpoint Central 合规性的虚拟活动

在这次活动中,您将了解:

  1. 最新的网络安全威胁和漏洞

  2. 如何保护您的组织免受网络攻击

  3. 如何遵守行业法规

  4. Endpoint Central 如何帮助您实现网络安全目标

这是一个从行业领导者那里获得宝贵见解并了解如何改善组织网络安全状况的绝佳机会。

不要错过!今天就报名参加活动吧。

立即免费注册

© www.soinside.com 2019 - 2024. All rights reserved.