포트 전달의 소스 및 대상 포트

포트 전달의 소스 및 대상 포트

방화벽 모듈을 구현 중이며 다음과 같은 시스템이 있습니다.

  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.

관련 정보