web-dev-qa-db-fra.com

Comment empêcher un utilisateur SSH spécifié de se connecter uniquement à partir d'une adresse IP ou d'un nom d'hôte?

J'ai un serveur de surveillance qui requiert les détails de connexion SSH d'un compte d'utilisateur non-Sudo de chaque boîte qu'il surveille. Est-il possible de configurer un compte utilisateur spécifique tel qu'il ne puisse être connecté qu'à partir d'une adresse IP spécifique (ou mieux encore du nom d'hôte)? Je ne veux pas limiter la capacité des autres utilisateurs du serveur à pouvoir se connecter à partir d'autres adresses (sinon, je n'utiliserais qu'un pare-feu), ou tilisez l'authentification par mot de passe pour le service de surveillance uniquement .

6
Programster

Voir man sshd_config. Il est possible d'ajouter un bloc AllowUsers où vous pouvez spécifier à la fois l'utilisateur et l'hôte de la manière suivante:

AllowUsers user@Host # or IP

Bien sûr, vous devez également spécifier les autres utilisateurs auxquels vous souhaitez autoriser la connexion, si vous en avez.

Une autre solution (dépend des corrections de bugs!)

En y repensant, il est possible de modifier votre sshd_config comme ceci:

Match Host !hostname
    DenyUsers user
Match Host hostname
    AllowUsers user

Cela bloquerait facilement tous les utilisateurs à l'exception de user de hostname et de partout ailleurs il bloquerait user.

MAIS ça ne marche pas, à cause de quelques bugs rapportés en amont [1] [2]. Mais nous l’avons promis que cela sera corrigé dans la prochaine version.

6
Jakuje

Vous pouvez utiliser des caractères génériques pour la ligne AllowUsers dans le fichier /etc/ssh/sshd_config. Donc, il serait possible d'ajouter la ligne:

AllowUsers *@192.168.1.100

Ou:

AllowUsers *@hostname

Autoriser tout le monde à partir de cette adresse IP ou de cet accès.

Se souvenir de:

service ssh restart

Une fois que vous avez apporté les modifications, tant que vous utilisez une version antérieure à 15.04. 15.04 utilise maintenant systemd, il existe donc un mécanisme différent pour contrôler les services.

5
Arronical

Selon pages de manuel , cela devrait fonctionner:

DenyUsers user@"!Host,*"

J'ai testé cela sur Debian et cela semblait fonctionner correctement.

3
Roman Hocke

Comme il s’agit du premier résultat de recherche dans Google, je pense que les gens devraient également savoir comment définir des autorisations dans le fichier /etc/hosts.allow (avec la permission de Cameron Oltmann's article de blog à ce sujet):

Pour limiter l'accès ssh à une boîte Linux en fonction de l'adresse IP d'origine, modifiez /etc/hosts.allow:

sshd : localhost : allow
sshd : 192.168.0. : allow
sshd : 99.151.250.7 : allow
sshd : mydomain.net : allow
sshd : ALL : deny

L'entrée ci-dessus permettra l'accès ssh à partir de localhost, du sous-réseau 192.168.0.x, de l'adresse IP unique 99.151.250.7 et de mydomain.net (en supposant que mydomain.net dispose d'un enregistrement ptr pour faciliter la recherche inversée). L'accès à sshd sera refusé à toutes les autres adresses IP.

Remarques: Vous pouvez autoriser ou refuser en fonction de l'adresse IP, du sous-réseau ou du nom d'hôte. Énumérer les règles dans l'ordre du plus au moins spécifique. Le fichier n'est lu que jusqu'à ce qu'une ligne correspondante soit trouvée. Par conséquent, si vous commencez par ssdh: ALL: deny, aucune connexion SSH ne sera autorisée.

Et vous devriez pouvoir utiliser user@address dans ce fichier, comme ceci lien lifewire.com :

Les démons de formulaires plus complexes @ Host et user @ Host sont expliqués dans les sections sur les modèles de noeud final de serveur et sur les recherches de nom d'utilisateur du client, respectivement.

2
Gregory Martin