[Linux] [MASQUERADING] Les ports, c'est quoi ?

Daniel Huhardeaux daniel.huhardeaux@::1
Mer 18 Aou 17:39:49 CEST 2021


Le 18/08/2021 à 14:55, Antoine Delaporte a écrit :

> [...]
>> . si je prends un poste IP SNOM il sort systematiquement avec le port 
>> 2048 comme port source de l'IP publique.
>
> Bon, ca c'est plus sérieux, on tape dans mon acculturation : Selon une 
> légende que j'ai entendu (ie, jamais pris le temps de regarder, ni 
> comprendre comment ça marche) mais il existerais un mécanisme qui 
> permettrais a un équipement Internet de se faire natter a l’extérieur 
> sur un port particulier. Cela me dérange bcp intellectuellement (coté 
> sécu c'est pas GG, c'est plutôt LéGé, pour LaGaffe Gaston)
>
> Donc si quelqu'un un jour s'ennuie, je ne suis pas contre un bon 
> pointeur.

Si déjà je m'ennuie, que ce soit pour la bonne cause :D

dh@::1:~$ sudo cat /proc/sys/net/ipv4/ip_local_port_range
32768   60999

J'ai réalisé le test sur Debian 10, Ubuntu 20 et RHEL8, même valeurs. 
Info donnée par la liste NetFilter.

En fait il semble que ce soit la source et non le NAT qui décide du port 
source externe. qui sera rectifié par le FW si pas libre.

Extraits:
1) Are you talking about SNAT/MASQUERADE?

It will try to use whatever port is used.  If the source address
replacement results in a collision, it tries to pick a different source
port between 1024 and 65535. The initiator is free to pick whatever 
source port they like

2) the port number for outgoing NATted connections is chosen from the 
emphemeral port number range, which can be read and configured via the 
/proc/sys/net/ipv4/ip_local_port_range file.

While one probably could use NAT rules to force an outgoing connection 
to use a particular source port, it would not make sense to do so 
because that would lead to problems when two hosts on the internal 
network would try to connect to the same outside service, since the port 
tuple for both connections would be identical, which means that they 
would be mapped to the same connection.

I'm guessing that on the system that establishes an outgoing connection, 
i.e. a SNOM phone, one can chose to use a fixed source port 
programmatically by setting a port number in the sockaddr_in structure 
that's passed to the connect() syscall. I'm presuming you'd get a 
EADDRNOTAVAIL error when that port is already in use. You can probably 
look this up in Stevens' TCP/IP Illustrated.

3) a tuple is "src-ip:src-port dst-ip:dst-port" and as long there is no 
collision it's 1:1, if there is a collison a random port is used - 
that's what conntrack is for

Ca te va ;) ?

-- 
Daniel


Plus d'informations sur la liste de diffusion linux