Comment restreindre l'accès à Internet pour un utilisateur particulier sur le LAN à l'aide d'iptables sous Linux

11

Disons qu'il y a deux utilisateurs sur le LAN, A et B. Comment puis-je restreindre l'accès à Internet à l'utilisateur A en utilisant les règles iptables et en enregistrant les règles pour qu'après le redémarrage, elles soient toujours efficaces. Supposons également que je veuille accorder à cet utilisateur l'accès à un moment donné; comment puis-je le réactiver? J'utilise Ubuntu Linux 10.04. Ce serait bien si quelqu'un me montrait comment le faire à partir de la ligne de commande, car je me connecte souvent à la machine en utilisant une connexion ssh locale.

Marwan Tanager
la source

Réponses:

17

Je suppose que les utilisateurs A et B utilisent les mêmes machines Linux que celles dont vous êtes l'administrateur. (Ce n'est pas tout à fait clair d'après votre question. Si A et B ont leurs propres ordinateurs sur lesquels ils sont administrateurs, c'est un problème complètement différent.)

La commande suivante empêchera l'utilisateur avec l'ID 1234 d'envoyer des paquets sur l'interface eth0:

iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP

Je recommande de lire le guide Ubuntu iptables pour vous familiariser avec l'outil (et reportez-vous à la page de manuel pour des informations avancées comme le tableau mangle).

L'utilisateur pourra toujours exécuter la commande ping (car c'est la racine setuid), mais pas autre chose. L'utilisateur pourra toujours se connecter à un proxy local si ce proxy a été démarré par un autre utilisateur.

Pour supprimer cette règle, ajoutez -Dà la commande ci-dessus.

Pour rendre la règle permanente, ajoutez-la à /etc/network/if-up.d/my-user-restrictions(créez-en un script exécutable commençant par #!/bin/sh). Ou utilisez iptables-save(voir le guide iptables Ubuntu pour plus d'informations).

Gilles 'SO- arrête d'être méchant'
la source
Merci beaucoup. Et oui, vos hypothèses sont vraies. Sur la base de votre réponse et du guide ubuntu mentionné, est-ce la bonne façon de faire les choses si je voulais également accorder à l'utilisateur restreint l'accès ssh (parfois je veux me connecter en utilisant son compte via ssh): iptables -t mangle -A OUTPUT - o eth0 -m owner --uid-owner 1234 -p tcp --dport ssh -j ACCEPT iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP Je mets ces règles telles quelles dans le fichier mentionné et les choses semblent bien fonctionner.
Marwan Tanager
@Marwan Je pense que c'est vrai. Notez que si vous autorisez l'accès à ssh, vous autorisez à peu près n'importe quoi puisque ssh peut tunneliser trivialement d'autres protocoles.
Gilles 'SO- arrête d'être méchant'
0

Je n'utiliserais pas iptables pour cela.

Je suppose que A et B sont associés aux IP fixes ClientA et ClientB. Je suppose que votre proxy Internet est ServerI (votre serveur Ubuntu?).

J'ajouterais donc une entrée de routage de refus / suppression de ClientA à ServerI.

Je n'utilise pas Ubuntu - je ne peux donc pas vous dire quel fichier de configuration utiliser pour rendre ce paramètre permanent (survivre à un redémarrage).

Peut-être que quelqu'un peut ajouter ce détail?

Nils
la source