Не удалось установить соединение с помощью RST после изменения адреса назначения TCP-пакетов в перехватчиках Netfilter.Linux

Ответить
Anonymous
 Не удалось установить соединение с помощью RST после изменения адреса назначения TCP-пакетов в перехватчиках Netfilter.

Сообщение Anonymous »

Я реализую поведение, подобное NAT назначения, подключившись к NF_INET_PRE_ROUTING и NF_INET_LOCAL_OUT для изменения IP-адреса назначения и пересчета контрольных сумм.

Код: Выделить всё

nf_tracer_handler(void *priv, struct sk_buff *skb, const struct nf_hook_state *state)
{
if (!skb) return NF_ACCEPT;

struct iphdr *iph = ip_hdr(skb);
if (iph->daddr != LOCAL_HOST) {
iph->daddr = RELAY_HOST;
check_ipv4(skb);
return NF_ACCEPT;
}
// ...
}

Среда тестирования:
  • Хост 1 (10.10.10.5): Запуск TCP-сервера через nc -l -p 8080.
  • Хост 2 (10.10.10.10): Запуск модуля ядра и инициирование соединения через nc -t 10.10.10.6 8080.
Наблюдения:
  • Поток пакетов: Wireshark подтверждает, что адрес назначения правильно изменен на 10.10.10.5 и пакет доставлен в цель. Действительны контрольные суммы как IP, так и транспорта.
  • TCP Handshake: Хост 2 отправляет SYN, а Хост 1 отвечает SYN-ACK. Однако хост 2 немедленно разрывает соединение с помощью RST после получения SYN-ACK.
  • Состояние Conntrack: Я ожидал проблем с отслеживанием соединения, но conntrack -L показывает одну запись в состоянии CLOSE:

    Код: Выделить всё

    tcp 6 9 CLOSE src=10.10.10.10 dst=10.10.10.5 sport=37468 dport=8080 src=10.10.10.5 dst=10.10.10.10 ...
Если бы соединение не отслеживалось правильно, я бы ожидал увидеть дополнительную запись для 10.10.10.10, застрявшую в состоянии SYN_SENT.
Хост журнала Wireshark 10.10.10.10:

Код: Выделить всё

   1 0.000000000      0.0.0.0 → 255.255.255.255 DHCP 342 DHCP Discover - Transaction ID 0x6c442f0
2 26.367068797   10.10.10.1 → 10.10.10.255 UDP 571 58448 → 21027 Len=529
3 56.376734983   10.10.10.1 → 10.10.10.255 UDP 571 58448 → 21027 Len=529
4 60.941376698  10.10.10.10 → 10.10.10.5   TCP 82 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209803624 TSecr=0 WS=128
5 60.941613346   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392257184 TSecr=4209803624 WS=128
6 60.941680424  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
7 61.949928609  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209804633 TSecr=0 WS=128
8 61.950178934   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392258193 TSecr=4209804633 WS=128
9 61.950245741  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
10 62.973919724  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209805657 TSecr=0 WS=128
11 62.974132086   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392259217 TSecr=4209805657 WS=128
12 62.974201258  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
13 63.997919964  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209806681 TSecr=0 WS=128
14 63.998155591   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392260241 TSecr=4209806681 WS=128
15 63.998221636  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
16 64.264727672      0.0.0.0 → 255.255.255.255 DHCP 342 DHCP Discover - Transaction ID 0x6c442f0
17 65.021922528  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209807705 TSecr=0 WS=128
18 65.022250690   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392261265 TSecr=4209807705 WS=128
19 65.022320573  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
20 66.045929552  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209808729 TSecr=0 WS=128
21 66.046154349   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392262289 TSecr=4209808729 WS=128
22 66.046219432  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
23 66.063722230 Microsoft_01:2b:12 → Microsoft_01:2b:1b ARP 42 Who has 10.10.10.10? Tell 10.10.10.5
24 66.063735135 Microsoft_01:2b:1b → Microsoft_01:2b:12 ARP 42 10.10.10.10 is at 00:15:5d:01:2b:1b
25 66.173881749 Microsoft_01:2b:1b → Microsoft_01:2b:12 ARP 42 Who has 10.10.10.5? Tell 10.10.10.10
26 66.174172247 Microsoft_01:2b:12 → Microsoft_01:2b:1b ARP 42 10.10.10.5 is at 00:15:5d:01:2b:12
27 68.061926226  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209810745 TSecr=0 WS=128
28 68.062171270   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392264305 TSecr=4209810745 WS=128
29 68.062235732  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
30 72.317899140  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209815001 TSecr=0 WS=128
31 72.318118656   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN,  ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392268561 TSecr=4209815001 WS=128
32 72.318190462  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
Хост 10.10.10.5:

Код: Выделить всё

    1 0.000000000 Microsoft_01:2b:1b → Microsoft_01:2b:12 ARP 42 Who has 10.10.10.5? Tell 10.10.10.10
2 0.000014919 Microsoft_01:2b:12 → Microsoft_01:2b:1b ARP 42 10.10.10.5 is at 00:15:5d:01:2b:12
3 5.988567085   10.10.10.1 → 10.10.10.255 UDP 571 58448 → 21027 Len=529
4 9.598251551      0.0.0.0 → 255.255.255.255 DHCP 342 DHCP Discover - Transaction ID 0x6c442f0
5 35.965300200   10.10.10.1 → 10.10.10.255 UDP 571 58448 → 21027 Len=529
6 65.975071061   10.10.10.1 → 10.10.10.255 UDP 571 58448 → 21027 Len=529
7 70.539862907  10.10.10.10 → 10.10.10.5   TCP 82 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209803624 TSecr=0 WS=128
8 70.539892082   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392257184 TSecr=4209803624 WS=128
9 70.540101560  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
10 71.548430169  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209804633 TSecr=0 WS=128
11 71.548457170   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392258193 TSecr=4209804633 WS=128
12 71.548653143  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
13 72.572391291  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209805657 TSecr=0 WS=128
14 72.572418313   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392259217 TSecr=4209805657 WS=128
15 72.572622919  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
16 73.596385390  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209806681 TSecr=0 WS=128
17 73.596413684   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392260241 TSecr=4209806681 WS=128
18 73.596637237  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
19 73.863233515      0.0.0.0 → 255.255.255.255 DHCP 342 DHCP Discover - Transaction ID 0x6c442f0
20 74.620402452  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209807705 TSecr=0 WS=128
21 74.620430786   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392261265 TSecr=4209807705 WS=128
22 74.620758068  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
23 75.644405613  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209808729 TSecr=0 WS=128
24 75.644433025   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392262289 TSecr=4209808729 WS=128
25 75.644642912  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
26 75.661996779 Microsoft_01:2b:12 → Microsoft_01:2b:1b ARP 42 Who has 10.10.10.10? Tell 10.10.10.5
27 75.662208298 Microsoft_01:2b:1b → Microsoft_01:2b:12 ARP 42 10.10.10.10 is at 00:15:5d:01:2b:1b
28 75.772430745 Microsoft_01:2b:1b → Microsoft_01:2b:12 ARP 42 Who has 10.10.10.5? Tell 10.10.10.10
29 75.772446946 Microsoft_01:2b:12 → Microsoft_01:2b:1b ARP 42 10.10.10.5 is at 00:15:5d:01:2b:12
30 77.660423402  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209810745 TSecr=0 WS=128
31 77.660459380   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392264305 TSecr=4209810745 WS=128
32 77.660667227  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
33 81.916385722  10.10.10.10 → 10.10.10.5   TCP 82 [TCP Port numbers reused] 50492 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=4209815001 TSecr=0 WS=128
34 81.916413625   10.10.10.5 → 10.10.10.10  TCP 74 8080 → 50492 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=392268561 TSecr=4209815001 WS=128
35 81.916637949  10.10.10.10 → 10.10.10.5   TCP 62 50492 → 8080 [RST] Seq=1 Win=0 Len=0
Используется полный код: https://github.com/yan3ku/osprojekt/blo ... etfilter.c
создайте с помощью make, а затем insmod netfilter.ko
Что Мне не хватает возможности установить TCP-соединение?

Подробнее здесь: https://stackoverflow.com/questions/798 ... -packets-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»