AWS: Erreur d'access à Internet avec une ACL réseau personnalisée

J'ai été coincé en regardant mon écran pendant environ 2 heures en essayant de comprendre pourquoi cela ne fonctionne pas. Je construis le VPC typique avec un sous-réseau privé et public et je tente de le verrouiller autant que possible. J'ai quelques groupes de security, mais je sais que le problème est dans la NACL, comme si je relâchais les règles, tout fonctionne.

Mon NACL entrant est ACL entrante

et la sortie est entrez la description de l'image ici

Le problème que j'ai est que je ne peux pas accéder à Internet (port 80 et 443) à partir de l'une des instances EC2 dans les sous-réseaux publics ou privés. Je sais que la "règle du problème" est entrante n ° 1000, ce qui permet à tous les ports éphémères de 10.0.0.0/16 . Si je modifie cette règle pour s'appliquer à toutes les sources ( 0.0.0.0/0 ), je peux accéder à Internet à partir de toutes les instances ec2 dans les deux sous-réseaux (je teste cela en exécutant différentes applications: curl and yum principalement.

Je suis juste en difficulté pour comprendre ce comportement, car la règle entrante devrait permettre à toute instance ec2 d'ouvrir un port éphémère et de parler au routeur, puis le routeur peut parler au port 80 et 443 de n'importe quel hôte. J'ai le sentiment que je manque simplement, mais un point crucial ici :).

modifier

Dans l'art ascii, voici ma compréhension des règles

 EC2 instance does a curl on www.google.com (port 80) SYN Packet out to stablish the connection (ephemeral port on VM to port 80) EC2 vm (somewhere in 10.0.0.0/16:ephemeral) -> SG -> NACL in (in rule 1000 - ALLOW source 10.0.0.0/16 on ports 1024-65535) -> NACL out (out rule 200 - ALLOW destination 0.0.0.0/0 on port 80) -> IGW -> Google (172.217.23.14:80) SYN + ACK Packet in to continue the connection handshake Google (172.217.23.14:80) -> IGW -> NACL in (in rule 100 - ALLOW source 0.0.0.0/0 on port 80) -> NACL out (out rule 100 - ALLOW destination 0.0.0.0/0 on port 1024-65535) -> SG -> EC2 vm (somewhere in 10.0.0.0/16:ephemeral) 

Modifier 2

Exécuter tcpdump ( sudo tcpdump -i eth0 -s 1500 port not 22 ) pour s'assurer que google ne renvoie pas datatables d'un port éphémère. J'ai supprimé datatables supplémentaires avec les drapeaux de packages, et vous pouvez append -X aux indicateurs pour voir datatables réelles dans chaque package.

 18:28:56.919335 IP ip-10-112-7-114.eu-west-1.compute.internal.40174 > prg03s06-in-f4.1e100.net.http: 18:28:56.949105 IP prg03s06-in-f4.1e100.net.http > ip-10-112-7-114.eu-west-1.compute.internal.40174: 18:28:56.949119 IP ip-10-112-7-114.eu-west-1.compute.internal.40174 > prg03s06-in-f4.1e100.net.http: 18:28:56.949219 IP ip-10-112-7-114.eu-west-1.compute.internal.40174 > prg03s06-in-f4.1e100.net.http: 18:28:56.979089 IP prg03s06-in-f4.1e100.net.http > ip-10-112-7-114.eu-west-1.compute.internal.40174: 18:28:57.010155 IP prg03s06-in-f4.1e100.net.http > ip-10-112-7-114.eu-west-1.compute.internal.40174: 18:28:57.010178 IP ip-10-112-7-114.eu-west-1.compute.internal.40174 > prg03s06-in-f4.1e100.net.http: 18:28:57.010308 IP ip-10-112-7-114.eu-west-1.compute.internal.40174 > prg03s06-in-f4.1e100.net.http: 18:28:57.041100 IP prg03s06-in-f4.1e100.net.http > ip-10-112-7-114.eu-west-1.compute.internal.40174: 18:28:57.041110 IP ip-10-112-7-114.eu-west-1.compute.internal.40174 > prg03s06-in-f4.1e100.net.http: 

De là, vous pouvez voir que curl a ouvert le port 40174 et google (prg03s06-in-f4.1e100.net) a répondu du port 80 (http dans le journal).

Répondre

Merci à Tim et Michael-sqlbot. La réponse est un peu enterrée dans les commentaires. Mais le problème était une mauvaise compréhension de la façon dont les règles entrantes fonctionnent. La scope des ports sur les règles entrantes fait reference au port de destination , et non au port source. De l'AWS docs

Voici les éléments d'une règle ACL du réseau:

  • Numéro de règle. Les règles sont évaluées à partir de la règle numérotée la plus basse. Dès qu'une règle correspond au trafic, elle est appliquée quelle que soit la règle de numéro plus élevé qui peut la contredire.
  • Protocole. Vous pouvez spécifier tout protocole ayant un numéro de protocole standard. Pour plus d'informations, voir Protocole Noms. Si vous spécifiez ICMP comme protocole, vous pouvez spécifier l'un ou l'set des types et codes ICMP.
  • [Règles entrantes seulement] La source du trafic (gamme CIDR) et le port de destination (écoute) ou la plage de port .
  • [Règles sortantes uniquement] La destination du trafic (plage CIDR) et le port de destination ou la scope des ports.
  • Choix d'ALLOW ou DENY pour le trafic spécifié.

2 Solutions collect form web for “AWS: Erreur d'access à Internet avec une ACL réseau personnalisée”

Lorsque vous effectuez une connection au port 80 (ou à tout démon sur n'importe quel port), la connection est transmise au port de grande scope pour garder le port 80 libre d'accepter de nouvelles connections. Ceux-ci s'appellent des ports éphémères .

Vous devez autoriser le trafic entrant vers ces ports de grande scope, qui, selon Wikipedia, sont de 32768 à 61000. Si vous fournissez un server Web, vous devrez probablement les autoriser aussi bien – ce que vous avez en tant que règle 100.

Les NACL mises à jour / étendues sont apasortingdes, ce qui signifie que vous devez autoriser les ports dans chaque direction, datatables doivent circuler. Lorsque vous vous connectez à un server Web sur le port 80, leur server Web indique "la connection acceptée, continuez cet échange sur le port (disons) 50000". C'est pourquoi vous devez autoriser les ports à haut débit entrant à autoriser le trafic sortant.

Il y a une autre explication ici .

si j'ai bien lu correctement la question, lorsque vous modifiez la règle de réception 1000 à 0.0.0.0/0 au lieu de 10.0.0.0/16, puis les connections de vos instances EC2 au travail sur Internet. Je pense que cela me paraît un peu logique.

lorsque le trafic est entré et est transmis par le NACL (associé au sous-réseau, vos instances sont activées), la source n'est pas le sous-réseau 10.0.0.0/16, mais c'est l'adresse IP du service Web auquel vous vous êtes connecté. C'est pourquoi 0.0.0.0/0 fonctionne et 10.0.0.0/16 ne fonctionne pas

  • ESXi Simple Network
  • Puis-je créer un conflit de réseau avec mon routeur?
  • DEFROUTE vs GATEWAY dans RHEL7
  • Est-il possible de définir / 32 masque de réseau sur IP secondaire sur Windows?
  • faire du kernel sélectionner une adresse IP différente comme source
  • L'instance d'Openstack ne peut pas atteindre la langue
  • Clear OS Community et le time de packages dans les machines clientes uniquement
  • server ubuntu refusant les connections via le transfert de port
  • Linux GRE rest en vie
  • Des vlans multiples sont-ils routés sur un seul? Trunk? Général? ou access?
  • Comment puis-je connecter mon switch à ma connection de fibre?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.