1 votes

Restreindre le SSH sortant par utilisateur

J'ai un serveur que j'administre. Il a un accès par le port 22 à de nombreuses machines. Je veux l'utiliser comme hôte bastion pour certains utilisateurs. Le problème est que je veux que chaque utilisateur de mon serveur ait sa propre liste blanche d'IP/adresses auxquelles il peut accéder par SSH.

Par exemple, disons que ma machine M a accès aux serveurs S1, S2, S3,.... S8. J'ai 3 utilisateurs, A, B et C sur la machine M. Je veux que A puisse SSH uniquement sur S2, B puisse SSH uniquement sur S1, S5 et S6, et C puisse SSH sur S2, S3, S4, S5 et S8.

Comment y parvenir ?

6voto

St.W. Points 71

Sur le serveur de destination, vous pourriez restreindre l'accès SSH par nom d'utilisateur dans le fichier /etc/ssh/sshd_config, mais je ne pense pas que ce soit ce que vous recherchez ici.

Sur la machine source, vous pouvez essayer d'utiliser le module "owner" d'iptables. Cela peut nécessiter un peu de travail de maintenance, mais cela devrait faire l'affaire. Il vérifie l'UID de l'utilisateur et autorise (ou rejette) la connexion.

Supposons que les UID de vos utilisateurs soient 1, 2 et 3. L'utilisateur A est autorisé à accéder par SSH à 1.1.1.1, l'utilisateur B à 2.2.2.2 et l'utilisateur C à 3.3.3.3.

iptables -A OUTPUT -m owner --owner-uid 1 -d 1.1.1.1/32 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m owner --owner-uid 1 -p tcp --dport 22 -j DROP
iptables -A OUTPUT -m owner --owner-uid 2 -d 2.2.2.2/32 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m owner --owner-uid 2 -p tcp --dport 22 -j DROP
iptables -A OUTPUT -m owner --owner-uid 3 -d 3.3.3.3/32 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m owner --owner-uid 3 -p tcp --dport 22 -j DROP

pour que ce soit un peu plus "gérable", vous pourriez créer une "chaîne" par utilisateur et y définir tous les accès autorisés.

Créer les chaînes :

iptables -N USER1
iptables -N USER2
iptables -N USER2

Transférer le trafic sortant des utilisateurs vers la chaîne :

iptables -A output -m owner --owner-uid 1 -J USER1
iptables -A output -m owner --owner-uid 2 -J USER2
iptables -A output -m owner --owner-uid 3 -J USER3

Ajouter des règles à chaque utilisateur de sa chaîne :

iptables -A USER1 -d 1.1.1.1/32 -p tcp --dport 22 -m comment --comment "allow ssh to 1.1.1.1" -j ACCEPT
iptables -A USER1 -p tcp --dport 22 -j DROP
iptables -A USER1 -j ACCEPT
iptables -A USER2 -d 2.2.2.2/32 -p tcp --dport 22 -j ACCEPT
iptables -A USER2 -p tcp --dport 22 -j DROP
iptables -A USER3 -d 3.3.3.3/32 -p tcp --dport 22 -j ACCEPT
iptables -A USER3 -p tcp --dport 22 -j DROP

vérifier l'accès d'un utilisateur (chaîne d'affichage)

iptables -L USER1

Le module propriétaire fonctionne également avec les gid :

iptables -A USER3 -m owner --owner-gid 3 -p tcp --dport 22 -j DROP

0voto

Arul Selvan Points 1338

Vous devriez pouvoir le faire avec un filtre iptable (owner match) pour restreindre l'accès au réseau par utilisateur. Voir le "comment faire" ci-dessous.

http://linuxpoison.blogspot.com/2010/11/how-to-limit-network-access-by-user.html

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