Si je change mon port SSH de 22 à 23453, je ne peux plus faire de ssh.
Plus en détail, j'utilise une instance Red Hat EC2 sur Amazon Web Services. Il s'agit du deuxième changement que j'ai effectué lors d'une nouvelle installation (le premier changement consistait à ajouter un utilisateur non root).
Je peux ssh in fine en utilisant Git Bash et un fichier local .ssh / config, je modifie la ligne dans / etc / ssh / sshd_config qui dit actuellement
#Port 23453
dire
Port 23453
puis redémarrez sshd avec
sudo service sshd restart
J'ajoute ensuite une ligne "Port 23453" mon fichier .ssh / config
Host foo
Hostname my-ec2-public-DNS
Port 23453
IdentityFile my ssl key
Si j'ouvre un autre shell Git Bash (sans fermer ma connexion existante) et tente de ssh dans mon instance (avec ssh foo), je vois l'erreur suivante:
ssh: connect to host my-ec2-public-DNS port 23453: Bad file number
Le groupe de sécurité attaché à cette instance a deux entrées, à la fois TCP
22 (SSH) 0.0.0.0/0
23453 0.0.0.0/0
Ma meilleure supposition est que le port est toujours bloqué par mon pare-feu.
La sortie de sudo iptables -L
est la suivante
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Ce qui me semble assez ouvert.
MISE À JOUR
Après avoir ajouté une règle iptables
iptables -A INPUT -p tcp --dport 23453 -j ACCEPT
et réessayer, toujours pas de chance.
Sortie de iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
ACCEPT tcp -- anywhere anywhere tcp dpt:23453
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Qui semble suffisamment ouvert. Je ne sais pas exactement comment rechercher les paquets qui entrent ou l'activité sur le port. Mais la sortie de netstat -ntlp
(en tant que root)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:56137 0.0.0.0:* LISTEN 948/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 930/rpcbind
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1012/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1224/master
tcp 0 0 0.0.0.0:23453 0.0.0.0:* LISTEN 32638/sshd
tcp 0 0 :::36139 :::* LISTEN 948/rpc.statd
tcp 0 0 :::111 :::* LISTEN 930/rpcbind
tcp 0 0 ::1:631 :::* LISTEN 1012/cupsd
tcp 0 0 :::23453 :::* LISTEN 32638/sshd
Ce qui me semble montrer sshd sur 23453.
J'ai vérifié à nouveau que l'instance a le port ouvert dans le groupe de sécurité (Port: 23453, Protocole: tcp, Source: 0.0.0.0/0)
Quoi d'autre peut provoquer l'échec de la connexion via SSH?
À votre santé
AUTOPSIE
Je peux maintenant me connecter. C'était une règle manquante dans iptables. La sortie de iptables -L
maintenant ressemble à ceci:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:23453 state NEW
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
iptables -L
(ssh fonctionne) et le secondiptables -L
(ssh est bloqué). Regardez l'ordre des règles dans la chaîne INPUT (les 6 lignes sous la première "cible"), elles sont lues de haut en bas, donc dans le deuxième ensemble de règles, "REJECT all" est frappé avant "ACCEPT tcp dpt: 23453 ". Le troisième ensemble de règles a l'entrée ACCEPT au-dessus, et donc avant, l'entrée REJECT.