ポート転送の送信元および宛先ポート

ポート転送の送信元および宛先ポート

ファイアウォールモジュールを実装しており、次のシステムがあります。

  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)を見たいです。

ありがとう

編集:ログに表示されているポートがログにも表示されるため、解析の問題ではないことを明確にしたかったのprintkですdmesg

関連情報