El extraño caso del puerto pasivo (ftp)

Probando un servidor pure-ftp me ha ocurrido algo que creo realmente extraño.
Servidor ftp: debian lenny con un pure-ftp instalado. No hay iptables ni dada raro. router Adsl
Cliente : comando de linea ftp que viene en el Ubuntu (de serie). No hay iptables ni nada raro. router Adsl

Conecta, todo bien.... y pongo el comando pasv...... y hago un ls.....se queda encanado y corto con ^C
(las ip's las he modificado por seguridad)
ftp> ls
227 Entering Passive Mode (99,230,88,38,215,1)
^C
receive aborted
waiting for remote to finish abort
ftp> quit

Para quien no sepa,los numerajos del Passive mode significan: ip: 99.230.88.38 puerto:256*215+1 = 55041.
Observo que la ip es correcta, pero el puerto no está dentro de los parámetros que le he dicho al pure-ftp
Veamos las trazas de tcpdump

-El cliente (ubuntu) envia el comando PASV

18:08:36.549142 IP (tos 0x10, ttl 64, id 27430, offset 0, flags [DF], proto TCP (6), length 58) cliente.60597 > 99.230.88.38.ftp: P, cksum 0x7ea5 (incorrect (-> 0xa5b8), 32:38(6) ack 572 win 125 <nop,nop,timestamp 1098820245 87384669>
        0x0000:  4510 003a 6b26 4000 4006 510f c0a8 0232  E..:k&@.@.Q....2
        0x0010:  5982 621c ecb5 0015 8d68 fb97 ea83 ed69  Y.b......h.....i
        0x0020:  8018 007d 7ea5 0000 0101 080a 417e aa95  ...}~.......A~..
        0x0030:  0535 625d 5041 5356 0d0a                 .5b]PASV..


-El server (debian) pure-ftp recive el comando
18:08:47.496718 IP (tos 0x0, ttl 54, id 27430, offset 0, flags [DF], proto TCP (6), length 58)
    cliente.63955 > servidor.local.ftp: Flags [P.], cksum 0x1d40 (correct), seq 32:38, ack 572, win 125, options [nop,nop,TS val 1098820245 ecr 87384669], length 6
        0x0000:  4500 003a 6b26 4000 3606 dfc4 5025 e63d  E..:k&@.6...P%.=
        0x0010:  c0a8 02c8 f9d3 0015 8d68 fb97 ea83 ed69  .........h.....i
        0x0020:  8018 007d 1d40 0000 0101 080a 417e aa95  ...}.@......A~..
        0x0030:  0535 625d 5041 5356 0d0a                 .5b]PASV..


-El sever (debian) pure-ftp envia la respuesta
18:08:47.497047 IP (tos 0x10, ttl 64, id 45772, offset 0, flags [DF], proto TCP (6), length 102)
    server.local.ftp > cliente.63955: Flags [P.], cksum 0x18b2 (correct), seq 572:622, ack 38, win 91, options [nop,nop,TS val 87389177 ecr 1098820245], length 50
        0x0000:  4510 0066 b2cc 4000 4006 8de2 c0a8 02c8  E..f..@.@.......
        0x0010:  5025 e63d 0015 f9d3 ea83 ed69 8d68 fb9d  P%.=.......i.h..
        0x0020:  8018 005b 18b2 0000 0101 080a 0535 73f9  ...[.........5s.
        0x0030:  417e aa95 3232 3720 456e 7465 7269 6e67  A~..227.Entering
        0x0040:  2050 6173 7369 7665 204d 6f64 6520 2838  .Passive.Mode.(9
        0x0050:  392c 3133 302c 3x3x 2c3x 3x2c 3135 362c  9,230,88,38,156,
        0x0060:  3139 3929 0d0a                           199)..

Aquí el puerto es correcto puerto: 156*256+199=40135

- Esto es lo que recibe el cliente

18:08:36.669548 IP (tos 0x0, ttl 51, id 45772, offset 0, flags [DF], proto TCP (6), length 100) 99.230.88.38.ftp > cliente.local.60597: P 572:620(48) ack 38 win 91 <nop,nop,timestamp 87389177 1098820245>
        0x0000:  4500 0064 b2cc 4000 3306 164f 5982 621c  E..d..@.3..OY.b.
        0x0010:  c0a8 0232 0015 ecb5 ea83 ed69 8d68 fb9d  ...2.......i.h..
        0x0020:  8018 005b da69 0000 0101 080a 0535 73f9  ...[.i.......5s.
        0x0030:  417e aa95 3232 3720 456e 7465 7269 6e67  A~..227.Entering
        0x0040:  2050 6173 7369 7665 204d 6f64            .Passive.Mod


¿Donde está el resto del paquete?. ¿?¿?¿?¿?¿?¿?¿?¿?
¿De donde se ha inventado el cliente el puerto 55041 al que luego intenta conectarse sin éxito.?

El servidor se queda callado y el cliente envía un paquete para mi extraño y luego los intentos de conexión al puerto 55041.

-cliente paquete extraño despues de recibir el paquete cortado.

18:08:36.669559 IP (tos 0x10, ttl 64, id 27431, offset 0, flags [DF], proto TCP (6), length 52) cliente.local.60597 > 99.230.88.38.ftp: ., cksum 0x4478 (correct), ack 620 win 125 <nop,nop,timestamp 1098820275 87389177>
        0x0000:  4510 0034 6b27 4000 4006 5114 c0a8 0232  E..4k'@.@.Q....2
        0x0010:  5982 621c ecb5 0015 8d68 fb9d ea83 ed99  Y.b......h......
        0x0020:  8010 007d 4478 0000 0101 080a 417e aab3  ...}Dx......A~..
        0x0030:  0535 73f9                                .5s.

- cliente y el intento de conexion. De estos hay varios seguidos.
18:08:36.669620 IP (tos 0x0, ttl 64, id 25537, offset 0, flags [DF], proto TCP (6), length 60) cliente.local.56492 > 99.230.88.38.55041: S, cksum 0xa203 (correct), 2808203634:2808203634(0) win 5840 <mss 1460,sackOK,timestamp 1098820275 0,nop,wscale 6>
        0x0000:  4500 003c 63c1 4000 4006 5882 c0a8 0232  E..<c.@.@.X....2
        0x0010:  5982 621c dcac d701 a761 c972 0000 0000  Y.b......a.r....
        0x0020:  a002 16d0 a203 0000 0204 05b4 0402 080a  ................
        0x0030:  417e aab3 0000 0000 0103 0306            A~..........



He probado desde otras máquinas clientes y en todas pasa lo mismo, salvo en la red local.

¿Alguna opinión?

Gracias y un saludo


P.D. Fe de erratas.
Mis disculpas.
Por un desconocimiento del tcpdump no 'pintaba' la traza completa (tcpdump -s 0)

Ahora la traza es:

Cliente ---> peticion PASSIVE
00:48:19.655674 IP (tos 0x10, ttl 64, id 2950, offset 0, flags [DF], proto TCP (6), length 58) cliente.local.51616 > servidor.ftp: P, cksum 0x7ea5 (incorrect (-> 0x4b39), 32:38(6) ack 572 win 125 <nop,nop,timestamp 1104816022 93381698>
        0x0000:  4510 003a 0b86 4000 4006 b0af c0a8 0232  E..:..@.@......2
        0x0010:  5982 621c c9a0 0015 2585 1eb6 8467 1643  Y.b.....%....g.C
        0x0020:  8018 007d 7ea5 0000 0101 080a 41da 2796  ...}~.......A.'.
        0x0030:  0590 e442 5041 5356 0d0a                 ...BPASV..


Servidor -----> llega peticion PASSIVE

00:48:31.641600 IP (tos 0x0, ttl 54, id 2950, offset 0, flags [DF], proto TCP (6), length 58)
    cliente.64115 > servidor.local.ftp: Flags [P.], cksum 0x9f0b (correct), seq 32:38, ack 572, win 125, options [nop,nop,TS val 1104816022 ecr 93381698], length 6
        0x0000:  4500 003a 0b86 4000 3606 3f65 5025 e63d  E..:..@.6.?eP%.=
        0x0010:  c0a8 02c8 fa73 0015 2585 1eb6 8467 1643  .....s..%....g.C
        0x0020:  8018 007d 9f0b 0000 0101 080a 41da 2796  ...}........A.'.
        0x0030:  0590 e442 5041 5356 0d0a                 ...BPASV..


Servidor ------> envia respuesta passive Passive.Mode.(9,10,9,2,156,253) puerto 156*256+253

00:48:31.641952 IP (tos 0x10, ttl 64, id 62570, offset 0, flags [DF], proto TCP (6), length 102)
    servidor.local.ftp > cliente.64115: Flags [P.], cksum 0xa362 (correct), seq 572:622, ack 38, win 91, options [nop,nop,TS val 93385213 ecr 1104816022], length 50
        0x0000:  4510 0066 f46a 4000 4006 4c44 c0a8 02c8  E..f.j@.@.LD....
        0x0010:  5025 e63d 0015 fa73 8467 1643 2585 1ebc  P%.=...s.g.C%...
        0x0020:  8018 005b a362 0000 0101 080a 0590 f1fd  ...[.b..........
        0x0030:  41da 2796 3232 3720 456e 7465 7269 6e67  A.'.227.Entering
        0x0040:  2050 6173 7369 7665 204d 6f64 6520 2838  .Passive.Mode.(8
        0x0050:  392c 3133 302c 3x3x 2x32 3x2c 3x3x 362c  9,10,9,2,156,
        0x0060:  3235 3329 0d0a                           253)..


Pero lo que el cliente recibe es...... Passive.Mode.(9 ,10 ,9 , 2,215,9) puerto=215*256+9

00:48:19.775934 IP (tos 0x0, ttl 51, id 62570, offset 0, flags [DF], proto TCP (6), length 100) servidor.ftp > cliente.local.51616: P, cksum 0x7bcb (correct), 572:620(48) ack 38 win 91 <nop,nop,timestamp 93385213 1104816022>
        0x0000:  4500 0064 f46a 4000 3306 d4b0 5982 621c  E..d.j@.3...Y.b.
        0x0010:  c0a8 0232 0015 c9a0 8467 1643 2585 1ebc  ...2.....g.C%...
        0x0020:  8018 005b 7bcb 0000 0101 080a 0590 f1fd  ...[{...........
        0x0030:  41da 2796 3232 3720 456e 7465 7269 6e67  A.'.227.Entering
        0x0040:  2050 6173 7369 7665 204d 6f64 6520 2838  .Passive.Mode.(
        0x0050:  392c 3133 302c 3x38 2c3x 3x2c 323x 3x2c  9 ,10 ,9 , 2,215,
        0x0060:  3929 0d0a                                9)..



¿Quien cambia el puerto?


Disculpar las molestias.

Saludos J.M.Parra
Buenas,

lo primero pedirte perdón porque no me he leido el post entero x'D pero el ftp pasivo me dió mucha guerra hasta que encontré "ip_conntrack_ftp"

Un saludo!
1 respuesta