10 votes

Sur AWS, dois-je ouvrir des ports dans le pare-feu d'une instance EC2 ainsi que dans le groupe de sécurité?

Si je change mon port SSH de 22 à 23453, je ne peux plus me connecter en SSH.

Plus en détail, j'utilise une instance Red Hat EC2 sur Amazon Web Services. C'est le deuxième changement que j'apporte à une nouvelle installation (le premier changement était d'ajouter un utilisateur non-root).

Je peux me connecter en SSH en utilisant Git Bash et un fichier .ssh/config local. Je modifie la ligne dans /etc/ssh/sshd_config qui dit actuellement

#Port 23453

pour dire

Port 23453

puis redémarrer sshd avec

sudo service sshd restart

J'ajoute ensuite une ligne "Port 23453" dans mon fichier .ssh/config

Hôte foo
Nom d'hôte DNS public de mon EC2
Port 23453
Fichier d'identité ma clé ssl

Si j'ouvre un autre shell Git Bash (sans fermer ma connexion existante) et j'essaie de me connecter en SSH sur mon instance (avec ssh foo), je vois l'erreur suivante:

ssh: connect to host mon-DNS-public-EC2 port 23453: Mauvais numéro de fichier

Le groupe de sécurité attaché à cette instance comporte deux entrées, toutes deux en TCP

22 (SSH) 0.0.0.0/0

23453 0.0.0.0/0

Je pense que le port est toujours bloqué par mon pare-feu.

La sortie de sudo iptables -L est la suivante

Chaîne INPUT (politique ACCEPTER)
cible     prot opt source               destination
ACCEPTER   all  --  anywhere             anywhere            state RELIÉ,ÉTABLI
ACCEPTER   icmp --  anywhere             anywhere
ACCEPTER   all  --  anywhere             anywhere
ACCEPTER   tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJETER   all  --  anywhere             anywhere            rejeter-avec interdiction d'hôte icmp

Chaîne FORWARD (politique ACCEPTER)
cible     prot opt source               destination
REJETER   all  --  anywhere             anywhere            rejeter-avec interdiction d'hôte icmp

Chaîne OUTPUT (politique ACCEPTER)
cible     prot opt source               destination

Cela me semble assez ouvert.

MISE À JOUR

Après avoir ajouté une règle iptables

iptables -A INPUT -p tcp --dport 23453 -j ACCEPT

et en essayant à nouveau, toujours aucun succès.

Sortie de iptables -L

Chaîne INPUT (politique ACCEPTER)
cible     prot opt source               destination
ACCEPTER   all  --  anywhere             anywhere            state RELIÉ,ÉTABLI
ACCEPTER   icmp --  anywhere             anywhere
ACCEPTER   all  --  anywhere             anywhere
ACCEPTER   tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJETER   all  --  anywhere             anywhere            rejeter-avec interdiction d'hôte icmp
ACCEPTER   tcp  --  anywhere             anywhere            tcp dpt:23453

Chaîne FORWARD (politique ACCEPTER)
cible     prot opt source               destination
REJETER   all  --  anywhere             anywhere            rejeter-avec interdiction d'hôte icmp

Chaîne OUTPUT (politique ACCEPTER)
cible     prot opt source               destination

Cela semble suffisamment ouvert. Je ne suis pas tout à fait sûr de comment rechercher les paquets entrants ou l'activité sur le port. Mais la sortie de netstat -ntlp (en tant que root)

Connexions Internet actives (serveurs uniquement)
Proto Recv-Q Send-Q Adresse locale              Adresse distante            État PID/nom du programme
tcp        0      0 0.0.0.0:56137               0.0.0.0:*                   ÉCOUTE      948/rpc.statd
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   ÉCOUTE      930/rpcbind
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   ÉCOUTE      1012/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   ÉCOUTE      1224/master
tcp        0      0 0.0.0.0:23453               0.0.0.0:*                   ÉCOUTE      32638/sshd
tcp        0      0 :::36139                    :::*                        ÉCOUTE      948/rpc.statd
tcp        0      0 :::111                      :::*                        ÉCOUTE      930/rpcbind
tcp        0      0 ::1:631                     :::*                        ÉCOUTE      1012/cupsd
tcp        0      0 :::23453                    :::*                        ÉCOUTE      32638/sshd

Cela semble me montrer sshd sur 23453.

J'ai vérifié de nouveau que l'instance a le port ouvert dans le groupe de sécurité (Port : 23453, Protocole : tcp, Source : 0.0.0.0/0)

Qu'est-ce qui peut causer l'échec de la connexion via SSH ?

Santé

POSTMORTEM

Je peux maintenant me connecter. Il manquait une règle dans iptables. La sortie de iptables -L ressemble maintenant à ceci:

Chaîne INPUT (politique ACCEPTER)
cible     prot opt source               destination
ACCEPTER   all  --  anywhere             anywhere            state RELIÉ,ÉTABLI
ACCEPTER   icmp --  anywhere             anywhere
ACCEPTER   tcp  --  anywhere             anywhere            tcp dpt:23453 state NEW
ACCEPTER   all  --  anywhere             anywhere
ACCEPTER   tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJETER   all  --  anywhere             anywhere            rejeter-avec interdiction d'hôte icmp

Chaîne FORWARD (politique ACCEPTER)
cible     prot opt source               destination
REJETER   all  --  anywhere             anywhere            rejeter-avec interdiction d'hôte icmp

Chaîne OUTPUT (politique ACCEPTER)
cible     prot opt source               destination

13voto

tpaul Points 133

Votre pare-feu d'instance n'a pas ce port ouvert. Essayez la commande suivante :

iptables -I INPUT 3 -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 23453 -m state --state New -j ACCEPT

Notez que les règles iptables doivent être sauvegardées pour persister après un redémarrage. Sur RHEL, c'est :

/sbin/service iptables save

2voto

Farhan Points 4170

Ajoutez une règle iptables

iptables -I INPUT 1 -p tcp --dport 23435 -j ACCEPT

qui accepte le trafic de n'importe quel hôte, sur le port 23435, et essayez de vous connecter en ssh, si vous voyez des paquets ou de l'activité, cela signifie que les paquets atteignent votre serveur.

Si vous ne voyez aucun paquet, cela signifie que le groupe de sécurité AWS n'a pas de règle pour autoriser votre port.

mais si vous voyez du trafic sur cette règle (avec iptables -nvL), alors vous devez exécuter "netstat -ntlp" et vérifier si le démon SSH fonctionne sur le port 2435 et sur 0.0.0.0/0.

avec un peu de chance, ces étapes devraient résoudre le problème. Si ce n'est pas le cas, veuillez me le dire.

1voto

CDR Points 159

Êtes-vous sûr que le groupe de sécurité est correctement configuré? Avez-vous cliqué sur "Appliquer les changements"? Beaucoup de personnes oublient d'appliquer réellement leurs modifications :)

"Mauvais numéro de fichier" signifie généralement des délais d'attente de connexion, et votre configuration iptables semble correcte.

-1voto

Homezar Points 99

Si jamais quelqu'un tombe sur ce sujet parce qu'il a changé le port par défaut de ssh, voici une solution qui a fonctionné pour moi :

  1. Pour contourner un pare-feu d'entreprise, j'ai changé le port en 80 sur /etc/ssh/sshd_conf.
  2. Malheureusement, Apache était déjà installé sur cette instance donc je ne pouvais plus me connecter en ssh.
  3. J'ai détaché le volume de l'instance.
  4. je l'ai attaché à une autre instance
  5. je l'ai monté, changé le port dans le fichier de configuration
  6. je l'ai détaché, réattacher à l'ancienne instance
  7. redémarré : tout fonctionne bien :D

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