2 votes

différence entre la plage de ports locaux et le port d'envoi UDP en utilisant dig sur le résolveur de serveur de noms Debian

Lorsque j'accède à ma plage de ports locaux sur Debian 7, je peux voir que ma plage de ports éphémères est la suivante :

cat /proc/sys/net/ipv4/ip_local_port_range
32768   61000

Mon /etc/sysctl.conf est vide.

Normalement, cela signifie que toutes les demandes provenant de ce résolveur de serveur de noms doivent utiliser les ports de cette plage. Cependant, l'utilisation de tcpdump Quand je regarde une demande et une réponse DNS créées avec dig Je peux voir que la demande peut utiliser un port d'envoi aussi bas que 1500.

Par exemple, dans l'exemple suivant tcpdump exemple ( tcpdump udp and port 53 and host server.domain ), la requête provenait du port 15591. Ce port est bien inférieur à la limite inférieure du serveur pour les ports éphémères que nous avons vue précédemment : 32768. En d'autres termes, en utilisant dig les requêtes DNS sont hors de la plage de ports locaux.

11:57:33.704090 IP baremetal.15591 > M.ROOT-SERVERS.NET.domain: 41939% [1au] A? r.arin.net. (39)
11:57:33.704400 IP baremetal.41573 > M.ROOT-SERVERS.NET.domain: 40945% [1au] A? t.arin.net. (39)
11:57:33.704541 IP baremetal.22658 > M.ROOT-SERVERS.NET.domain: 44090% [1au] AAAA? t.arin.net. (39)
11:57:33.705295 IP baremetal.13277 > M.ROOT-SERVERS.NET.domain: 42356% [1au] A? v.arin.net. (39)
11:57:33.705499 IP baremetal.48755 > M.ROOT-SERVERS.NET.domain: 32253% [1au] A? w.arin.net. (39)
11:57:33.705639 IP baremetal.55309 > M.ROOT-SERVERS.NET.domain: 64660% [1au] AAAA? w.arin.net. (39)
11:57:33.705812 IP baremetal.56652 > M.ROOT-SERVERS.NET.domain: 43023% [1au] A? y.arin.net. (39)
11:57:33.706012 IP baremetal.26383 > M.ROOT-SERVERS.NET.domain: 42377% [1au] AAAA? y.arin.net. (39)
11:57:33.706172 IP baremetal.12895 > M.ROOT-SERVERS.NET.domain: 13206% [1au] AAAA? z.arin.net. (39)

Je me demande ce qui a pu changer la plage de ports des ports éphémères sur mes Debian 7 & 8. La seule chose qui vaut peut-être la peine d'être mentionnée. J'ai utilisé sur l'un d'entre eux ifenslave & on utilise ifenslave pour relier deux ports ethernet.

Le résolveur est le serveur lui-même et

#cat /etc/resolv.conf
nameserver ::1

mais il fait exactement la même chose avec nameserver 127.0.0.1 parce que les partages ipv4 & ipv6 /proc/sys/net/ipv4/ip_local_port_range ( référence ) & je l'ai également essayé.

Pour éviter toute confusion avec IPv6, j'ai décidé d'utiliser uniquement Ipv4. J'ai seulement ajouté nameserver 127.0.0.1 a /etc/resolv.conf .

Les résultats ci-dessous sont avec nameserver 127.0.0.1 en /etc/resolv.conf seulement.

Ensuite, j'ai émis rndc flush pour vider le cache DNS du résolveur et dig google.com

J'ai ouvert une deuxième fenêtre de terminal et j'ai tapé tcpdump udp and port 53 :

Beaucoup d'enregistrements mais j'ai remarqué que, quelle que soit la requête (A, PTR...) et l'hôte récepteur, les requêtes DNS PEUVENT être émises depuis un port inférieur à 32768.

>strace -f dig www.google.com 2>&1 | egrep 'sendmsg|recvmsg|connect|bind'
open("/usr/lib/libbind9.so.80", O_RDONLY) = 3
[pid 10651] bind(20, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[pid 10651] recvmsg(20, 0x7f5dd95cab60, 0) = -1 EAGAIN (Resource temporarily unavailable)
[pid 10651] sendmsg(20, {msg_name(16)={sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"\251\261\1\0\0\1\0\0\0\0\0\0\3www\6google\3com\0\0\1\0\1", 32}], msg_controllen=0, msg_flags=0}, 0 <unfinished ...>
[pid 10651] <... sendmsg resumed> )     = 32
[pid 10651] recvmsg(20, {msg_name(16)={sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"\251\261\201\200\0\1\0\1\0\4\0\4\3www\6google\3com\0\0\1\0\1"..., 65535}], msg_controllen=32, {cmsg_len=32, cmsg_level=SOL_SOCKET, cmsg_type=0x1d /* SCM_??? */, ...}, msg_flags=0}, 0) = 184

Ce problème est lié à mon pare-feu. Étant donné que les ports éphémères peuvent être émis de (à mon avis) 1024 à 65000, cela signifie que je ne peux pas bloquer le trafic d'entrée provenant de ports supérieurs à 1024, comme dans le passé. Si je fais cela, je ralentirai ou bloquerai la résolution DNS.

MISE À JOUR : merci, je comprends que si je veux utiliser un serveur comme résolveur DNS, cela signifie que je dois considérer que la plage de ports UDP 1024:65535 est la plage de ports éphémères.

3voto

Jacob Points 1861

Je ne pense pas qu'il y ait un problème avec votre ip_local_port_range Je pense plutôt qu'il s'agit de rendre plus difficile l'usurpation des réponses DNS.

Nous voyons dans votre strace sortie que vous avez dig envoyer un datagramme à 127.0.0.1 (un serveur de résolution fonctionnant à cet endroit) mais la tcpdump semble se rapporter au trafic de ce serveur de résolution, et non à celui de l'entreprise. dig lui-même.

Le DNS classique (sans DNSSEC) se base uniquement sur l'[id de transaction (16 bits)] (https://www.rfc-editor.org/rfc/rfc1035#section-4.1.1) et les données de la section *question* pour faire correspondre la réponse reçue par UDP avec la requête envoyée précédemment.

Les datagrammes UDP étant faciles à usurper et seuls 16 bits d'aléa devant être devinés si la cible est un nom spécifique, il est tout à fait possible de deviner le bon identifiant de transaction (32 000 suppositions en moyenne) avant que la vraie réponse n'arrive.

Par conséquent, tous les serveurs de résolution modernes vont faire tout leur possible pour rendre aléatoire un port source. pour augmenter le nombre de bits aléatoires qui doivent être devinés.

Vous voulez vraiment un éventail de ports aussi large que possible. Il est donc probable que la randomisation s'appliquera à toute la gamme de ports >1024, ce qui ajoutera un nombre significatif de bits d'aléatoire par rapport à ce que la gestion par défaut de votre système d'exploitation vous donnerait.

En d'autres termes, je pense qu'il est simplement considéré comme une "meilleure pratique" d'ignorer la gestion normale des ports locaux par le système d'exploitation pour les sockets.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X