端口转发上的源端口和目标端口

端口转发上的源端口和目标端口

我正在实现一个防火墙模块,并且我有以下系统:

  1. ip 10.1.1.1 的“客户端”
  2. 防火墙
  3. ip 为 10.1.2.2 的“服务器

该系统中的网络是通过防火墙实现客户端和服务器之间的连接的。要允许此操作,请在防火墙上启用 IP 转发 ( sysctl -w net.ipv4.ip_forward=1)

我的数据包捕获和过滤逻辑总结在 netfilter 前向钩子中。我们只考虑以下部分:

unsigned int forward_hook_fn (void *priv,
                            struct sk_buff *skb,
                            const struct nf_hook_state *state)
{
/* some variable declarations */
    ip = (struct iphdr*)skb_network_header(skb);
    dip = ntohl(ip->daddr);
    sip = ntohl(ip->saddr);
    protocol = ip->protocol;

    if (protocol == PROT_TCP){
    tcp = (struct tcphdr*)skb_network_header(skb);
    printk("src:%hu dst:%hu, seq:%u\n",ntohs(tcp->source),ntohs(tcp->dest),ntohs(tcp->seq));
}
...
/* irrelevant logic */
...
}

我的问题:看起来我没有获得数据包的正确源端口和目标端口。

说明: 对于这样的命令:

ssh -p 555 10.1.1.1 
curl 10.1.1.1
ssh -p 4784 10.1.1
nc 10.1.2.2 1234
.... #and so on.. it doesn't matter what are the specific numbers of course

我得到以下日志:

timestamp         src_ip   dst_ip   src_port dst_port protocol action reason count
26/10/22 05:27:52 10.1.2.2 10.1.1.1 37296    582      TCP      drop   254    1
26/10/22 05:30:10 10.1.2.2 10.1.1.1 69       15360    TCP      drop   254    8
26/10/22 05:30:26 10.1.1.1 10.1.2.2 37296    582      TCP      drop   254    1
26/10/22 05:30:43 10.1.1.1 10.1.2.2 69       15360    TCP      drop   254    4

这很奇怪,因为我没有看到我在命令中使用的端口+没有足够类型的端口,这让我认为我的端口转发的某些内容没有按照我期望的方式运行(如果我的解释不好) :我希望在日志中看到端口 555,80(curl?),4784,1234)

谢谢

编辑:我想澄清一下,我在日志中看到的端口也在 in 中看到printkdmesg所以这不是解析问题

相关内容