Nous avons le serveur bastion B. Nous devons SSH de A à B à C, en utilisant une clé privée.
Quelle est la meilleure option:
Mettez la clé SSH privée sur le serveur B. Nous lisons que c'est une mauvaise idée de le faire dans un environnement de production.
D' ici :
Ne placez jamais vos clés privées SSH sur l'instance de bastion. Utilisez plutôt le transfert d'agent SSH pour vous connecter d'abord au bastion, puis à d'autres instances dans des sous-réseaux privés. Cela vous permet de conserver votre clé privée SSH uniquement sur votre ordinateur.
Utilisez le transfert d'agent SSH . Pour configurer le transfert d'agent, je dois autoriser le transfert TCP. Lors de la configuration du transfert d'agent, un fichier socket est créé sur l'hôte de transfert, qui est le mécanisme par lequel la clé peut être transférée vers la destination. Dans les paramètres du Bastion sur AWS:
TCP forward: Si vous définissez cette valeur sur true, le transfert TCP (tunnel SSH) sera activé. Cela peut être très utile, mais c'est également un risque pour la sécurité, nous vous recommandons donc de conserver le paramètre par défaut (désactivé) sauf si requis.
Aussi d' ici :
Le transfert d'agent SSH est considéré comme dangereux
Qu'est-ce qui est mieux? Qu'en est-il de l'alternative du deuxième lien: ProxyCommand , je comprends que cela aide avec le problème du fichier de socket, mais je pense toujours que je dois activer le transfert TCP, est-il donc suffisamment sécurisé?
ssh hostb
entrerez la commande, afin qu'il puisse rechercher hostb dans la configuration locale et savoir qu'il doit se connecter via hosta. Ça ne pourrait pas faire ça si vous mettez la config sur hosta ...Réponses:
Utilisez ProxyCommand ou ProxyJump
Je recommanderais d'utiliser
ProxyCommand
(ou mieux encoreProxyJump
car la syntaxe est plus facile mais nécessite openssh 7.3+ je pense du côté client), et vous n'avez pas besoin de déployer de clé privée sur le Bastion, tout reste local.Exemple avec ProxyJump
Sur votre ordinateur client, vous écrivez un fichier
~/.ssh/config
avec un contenu similaire à ci-dessous:Ensuite
ssh srvC
, vous serez connecté à C via B (bastion) sans transfert d'agent ni déploiement de la clé privée sur le bastion.Dans l'exemple ci-dessus, "bastion" est un alias pour votre hôte Bastion et srvC est un alias pour votre serveur C. Dans le,
HostName
vous devez mettre soit des adresses IP, soit un vrai nom de domaine complet pour vos hôtes. Pour les utilisateurs, vous devez mettre à jour leUser
pour le nom de connexion correct sur le Bastion et le serveur C. Enfin,IdentityFile
c'est facultatif si vous utilisez un agent local (par exemple KeeAgent ou ssh-agent), mais s'il n'est pas en cours d'exécution, il le sera également travailler et vous demander pour chaque mot de passe clé.Déployer les clés publiques
Bien sûr, vous devez déployer les clés publiques sur bastion et srvC. Vous pouvez utiliser (le signe $ est juste pour illustrer l'invite, ne le tapez pas):
Remarque: ce qui précède ne fonctionnera que si l'authentification par mot de passe est toujours autorisée. Après le déploiement ci-dessus et en vérifiant que tout fonctionne comme prévu, vous devez interdire l'authentification par mot de passe sur les 2 serveurs.
Exemple avec ProxyCommand au lieu de ProxyJump
Si vous disposez d'une ancienne version d'OpenSSH qui ne prend pas en charge
ProxyJump
(côté client), remplacez:par
Pour autant que je sache, c'est similaire.
la source
J'ai vu la réponse à propos de ProxyJump. Parlons de ProxyCommand .
Mais attendez, attendez! Je peux vous écrire comment pirater le serveur qui utilise le transfert d'agent, ce serait beaucoup plus facile de comprendre la différence!
Hackons!
Pour les étapes de base: vous pouvez lire mon article ici
Les étapes de base sont les suivantes:
Comment utiliser AgentForwarding
-Créer la configuration dans ~ / .ssh / config
-Ajoutez votre clé d'authentification à ssh-agent
-Connectez-vous au bastion hos
-Connectez le serveur d'applications du bastion
Le piratage!
Vous pouvez, bien, me poser la question:
Mon serveur est-il sécurisé? Et la réponse est assez simple:
Pourquoi?
Et où est le problème?
Pourquoi?
Comment pirater les serveurs si vous avez compromis l'hôte bastion?
Suivre la cible
Dans le répertoire / tmp, vous pouvez voir quelque chose comme ça:
Ouvrons le fichier temporaire
Voyons les connexions à cet identifiant de processus.
résultat:
et qui est connecté?
résultat:
Nous pouvons également voir les fichiers socket:
résultat:
Et que se passe-t-il lorsque le client sera connecté au serveur distant? Voyons voir:
Nous pouvons même voir si le fichier socket est utilisé en utilisant netstat:
Voler les informations de socket et l'adresse IP
Maintenant, nous devons voler les informations de socket pendant que la session de l'hôte bastion est ouverte . Oh, nous avons également besoin de l' IP du serveur de destination , alors utilisez simplement netstat:
La dernière étape pour utiliser le fichier de socket transféré
Vérifiez si la clé est chargée .
le résultat devrait être quelque chose comme ça :
Le serveur est piraté, comment résoudre le problème de sécurité?
Commande proxy
Pour les opérations de base: comment transférer des fichiers via les serveurs (de client à serveur, de serveur à client), vous pouvez lire sur mon post ici
Conclusion
Plus d'informations, voir mon blog . De plus, j'ai quelques captures d'écran, donc cela peut vous être utile.
la source
channel 0: open failed: administratively prohibited: open failed. stdio forwarding failed.
. Avez-vous une idée pourquoi?. Au journal sécurisé, je vois:refused local port forward: originator 127.0.0.1 port 65535, target *app-ip* port 22
Utilisez simplement le transfert d'agent SSH comme la plupart des autres.
Avantage: aucune clé stockée sur le bastion ne peut être mal utilisée.
J'espère que ça t'as aidé :)
la source