Comment configurer un serveur proxy d'authentification

8

Mon serveur proxy de travail nécessite une authentification avec les informations d'identification de l'utilisateur du domaine Microsoft AD. Tout le monde sait comment cela fonctionne: si vous vous connectez sur un poste de travail Windows, vos demandes d'accès à Internet basées sur un navigateur "Internet Explorer" sont automatiquement authentifiées (et identifiées) à l'aide de vos identifiants de connexion de domaine.

J'ai trouvé que Firefox peut également s'authentifier auprès de ces serveurs proxy et j'ai longtemps supposé qu'ils "faisaient quelque chose de spécial". Récemment, un collègue a installé Linux Mint dans une machine virtuelle et à ma grande surprise, il était occupé à obtenir des mises à jour sur Internet. Quand j'ai demandé comment il l'avait fait fonctionner, il a haussé les épaules et a dit "Ça a juste fonctionné"

Cela m'a incité à revoir les paramètres du proxy. Je lance Kubuntu (avec un mélange d'applications G * et K *, mais je n'utilise les applications GTK que lorsque je suis convaincu qu'elles sont bien meilleures que n'importe quoi K *)

J'ai toujours une copie de l'invité Windows en cours d'exécution dans une machine virtuelle VirtualBox, principalement pour l'impression et pour accéder aux sites Web internes / d'entreprise (ce qui nécessite à la fois une authentification et une identification via les informations d'identification de domaine MS) ainsi que pour changer mon mot de passe de domaine tous les jours .

Il serait donc très utile que je puisse faire fonctionner [certaines / la plupart / toutes] mes applications Linux via le serveur proxy. Mes besoins les plus urgents sont qu'Akregator et Muon puissent travailler. D'autres applications qui peuvent bénéficier sont certaines applications qui se mettent à jour automatiquement (par exemple, les extensions de boîte virtuelle) ou s'enroulent autour d'un navigateur (Get More Themes / Wall Papers / etc vient à l'esprit, et l'utilisation occasionnelle de wget)

Les clients SSH / SCP parviennent à fonctionner via le pare-feu sans authentification.

Quelle est la bonne façon (outil et / ou procédure) de configurer cela, idéalement dans un seul emplacement, car avoir à conserver mon mot de passe dans plusieurs emplacements est une recette pour se verrouiller sur mon compte: - /

Oh, et ce serait un rêve devenu réalité si je pouvais avoir l'équivalent de l'utilitaire de désactivation / activation du proxy "Quick Proxy" de Firefox, par exemple un clic pour activer ou désactiver l'utilisation du proxy, sans avoir besoin de se déconnecter et de se reconnecter, en fonction de quel réseau je suis. En y réfléchissant, un utilitaire devrait pouvoir être formé pour regarder votre adresse IP et savoir quand vous devez utiliser le proxy! Mais je m'égare.

J'imagine que l'exécution d'un serveur proxy local qui peut ajouter dynamiquement l'authentification et transmettre à un serveur proxy en amont en cas de besoin peut être la seule vraie solution.

Johan
la source
De quel type de proxy s'agit-il? Basé sur Linux ou basé sur Windows?
midnightsteel le
Le serveur proxy est basé sur Windows.
Johan
Il semble que le proxy soit dans une configuration de passage, et votre pare-feu autorise le trafic Web sortant de tous les hôtes. C'est ainsi que votre collègue a pu naviguer sans authentification. Le serveur proxy que vous utilisez ISA ou TMG?
midnightsteel
Le pare-feu ne permet pas de sortir de tous les hôtes, sinon je contournerais simplement le serveur proxy. Que signifie «passer par configuration»? Permettez-moi de clarifier: à partir de mon poste de travail Linux, la seule application qui peut accéder à Internet est a) Firefox (en utilisant sa propre configuration proxy et authentification stockée dans Firefox), ainsi que les applications s'exécutant dans une machine virtuelle Windows (Remarque - la machine virtuelle Windows est un membre du domaine et l'utilisateur s'authentifie sur le domaine lors de la connexion)
Johan
Je ne sais pas si c'est ISA ou TMG. Si la solution est différente en fonction de laquelle, je serais intéressé par les deux solutions.
Johan

Réponses:

2

À partir de mon poste de travail Linux, les seules applications qui peuvent accéder à Internet sont a) Firefox (en utilisant sa propre configuration proxy et authentification stockée dans Firefox), ainsi que les applications s'exécutant dans une machine virtuelle Windows (Remarque - la machine virtuelle Windows est membre du domaine et l'utilisateur s'authentifie auprès du domaine lors de la connexion)

Option de solution : exécutez un proxy Web sur votre machine virtuelle Windows. Configurez votre système pour utiliser cette instance comme proxy.

Étant donné que votre machine virtuelle Windows est déjà authentifiée et que le trafic y est autorisé, la configuration d'un proxy SOCKS sur cette instance de machine virtuelle centralisera vos besoins d'authentification. Si c'est juste pour vous et vos boîtes, cela devrait être bien et c'est probablement assez simple.

S'appuyer sur cette idée consiste à exécuter un démon SSHD sur la machine virtuelle Windows afin que vous puissiez faire des choses comme les tunnels SSH SOCKS à partir de vos autres boîtes via la machine virtuelle:

ssh -D 1080 windows-user@windows-vm

Pour les applications qui peuvent rencontrer des problèmes ou pour lesquelles vous ne souhaitez pas reconfigurer les applications, vous pouvez utiliser sshtunnel , qui configurera des règles iptables pour acheminer le trafic. Fonctionne pour les systèmes Linux et Mac.

Si vous devez éviter d'installer un proxy sur la machine virtuelle Windows elle-même, vous pouvez configurer une boîte proxy Squid configurée pour s'authentifier auprès de Windows AD. Un guide pour faire cela situé ici:

Option de solution : Squid Proxy authentifié via AD / NTLM

http://techmiso.com/1934/howto-install-squid-web-proxy-server-with-active-directory-authentication/( lien mort )

Une autre solution proxy NTLM, bien que je pense que celle-ci fonctionne réellement sur une machine Windows:

Option de solution : proxy NTLM http://cntlm.sourceforge.net/

Wing Tang Wong
la source
J'étudie déjà cntlm, il se trouve qu'il se trouve également dans les référentiels ubuntu standard.
Johan
1
La solution cntlm semble prometteuse. Jusqu'à présent, cela permet au wget et au chrome de fonctionner. Wget fonctionne en ayant l'adresse: port cntlm dans le fichier .wgetrc. Chrome fonctionne en cours de configuration pour utiliser ce qu'il appelle les «paramètres de proxy système de l'ordinateur», où j'ai configuré le proxy dans les paramètres système de KDE -> Proxy -> Configuration manuelle. Chromium l'utilise dynamiquement, c'est-à-dire que si je change le paramètre dans KDE, Chromium est affecté sans avoir à redémarrer le chrome. TBC
Johan
Jusqu'à présent, cela ne fonctionne toujours pas pour Konqueror, Muon ou Akregator, dont aucun n'expose directement les paramètres de proxy. Je crois que Muon utilise apt-get en arrière-plan, qui est configurable d'une manière similaire à wget. Je ne comprends pas la différence entre les options de configuration KDE "Proxy spécifié manuellement" et KDE "Proxy système", cela peut être la clé pour le faire fonctionner pour toutes les applications. Je remarque également que les paramètres de KDE ne sont pas remplis dans des scripts shell, même après déconnexion et reconnexion, ce qui est décevant.
Johan
La solution proxy-via-MS-Windows n'est pas acceptable pour moi. D'autres peuvent se sentir différents, mais exécuter une instance de système d'exploitation supplémentaire uniquement pour ajouter une authentification aux paquets réseau sortants est un peu trop de ressources et ne supprime pas ma dépendance à MS Windows.
Johan
1
J'ai résolu le problème en utilisant cntlm selon la suggestion ci-dessus, et je le recommande vivement. Le problème que j'ai rencontré avec la plupart des applications KDE n'utilisant pas le paramètre global KDE était dû à un format incorrect utilisé pour spécifier le serveur proxy dans les paramètres de proxy KDE. Soit dit en passant, Chromium ne semble pas être sensible à cela (j'ai laissé de côté http://lors de la configuration du proxy)
Johan
8

cntlm fournit une solution, ainsi qu'une certaine configuration.

Les étapes de base à suivre sont les suivantes:

  1. Installez cntlm.
  2. Modifiez son fichier de configuration dans /etc/cntlm.conf, les commentaires inclus le rendent assez facile.
  3. Ajoutez un serveur proxy (ou deux).
  4. Spécifiez votre nom d'utilisateur et votre nom de domaine NT aux endroits appropriés et supprimez l'entrée de mot de passe.
  5. Démarrez le service cntlm, par exemple via

    $ sudo /etc/init.d/cntlm start
    
  6. cntlm fournit un moyen de tester le proxy et de générer un hachage à partir de votre mot de passe - par exemple par la commande (en tant que root)

    $ cntlm -I -M http://www.test.com
    
  7. cntlm vous demandera votre mot de passe de domaine. Il testera ensuite différents mécanismes d'authentification par rapport au serveur proxy configuré. Lorsqu'une méthode de travail est trouvée, elle imprime deux lignes qui doivent aller dans son fichier de configuration.

  8. Arrêtez le serveur cntlm et ajoutez les lignes obtenues à l'étape 6 ci-dessus à /etc/cntlm.conf.
  9. Redémarrez cntlm

Maintenant cntlmest en cours d'exécution et prêt à être utilisé. Un certain nombre d'emplacements peuvent être utilisés pour configurer divers programmes pour l'utiliser. cntlmajoutera ensuite de manière transparente les jetons d'authentification de domaine NT aux paquets sortants et les transmettra au serveur proxy configuré.

Utiliser Qt / KDE

Pour les applications natives Qt / KDE, spécifiez "Utiliser un serveur proxy configuré manuellement" dans Paramètres système KDE -> Paramètres réseau -> Paramètres proxy . Le proxy est spécifié comme http://localhostavec le port 3128 (par défaut cntlmsauf si vous l'avez modifié). Ces applications sont mises à jour dynamiquement avec de nouveaux paramètres et aucun redémarrage ou déconnexion / connexion n'est requis pour mettre à jour les paramètres.

Clients Dropbox et Google

De nombreuses applications peuvent utiliser des variables d'environnement shell. Il convient de noter ici les clients Dropbox et Google Earth. Pour ces applications, utilisez des variables d'environnement shell comme celles-ci:

no_proxy=localhost,127.0.0.0/8,*.local
NO_PROXY=localhost,127.0.0.0/8,*.local
all_proxy=socks://localhost:3128/
ALL_PROXY=socks://localhost:3128
http_proxy=http://localhost:3128
HTTP_PROXY=http://localhost:3128
ftp_proxy=http://localhost:3128
FTP_PROXY=http://localhost:3128
https_proxy=http://localhost:3128
HTTPS_PROXY=http://localhost:3128

s3cmd, curl et wget

Remarque: Certaines applications n'utiliseront que les noms en minuscules, d'autres uniquement les noms en majuscules, certaines essaieront d'abord l'un, puis l'autre.

s3cmd(Le client Amazon S3), curlet wgetpeut en outre être configuré via leurs propres fichiers de configuration si vous le souhaitez. C'est pratique car ils lisent leurs propres fichiers de configuration à chaque appel. Étant donné que ces programmes sont généralement de courte durée (une seule invocation existe après avoir terminé un téléchargement), cela est très utile.

Le format de s3cmdin ~/.s3cfgest:

proxy_host = localhost
proxy_port = 3128

Le format de wget in ~/.wgetrcest:

https_proxy = http://localhost:3128
http_proxy = http://localhost:3128
ftp_proxy = http://localhost:3128

Le format de curlin ~/.curlrcest:

proxy = localhost:3128

D'un autre côté, la modification du profil du shell ou d'autres fichiers de configuration d'environnement nécessite généralement un redémarrage, une déconnexion et une reconnexion, ou similaire. Il mérite d' être étudié /etc/environment, ~/.pam_environment, ~/.kde/env/proxy.shetc que ce sont des endroits standard pour définir les paramètres proxy configurés via les variables d'environnement shell, en particulier pour affecter tous les utilisateurs et services sur le système.

Je comprends également qu'il est possible de modifier les paramètres d'environnement par application en utilisant leurs .desktopfichiers respectifs , mais je ne l'ai pas encore essayé (avec succès).

VirtualBox

VirtualBox peut être configuré pour utiliser un proxy (par exemple pour rechercher et télécharger des mises à jour logicielles) en utilisant son interface graphique ou en utilisant la commande:

$ VBoxManage setextradata global GUI/ProxySettings \
    "proxyEnabled,localhost,3128,authDisabled,,"

Par souci d'exhaustivité, pour le désactiver, utilisez:

$ VBoxManage setextradata global GUI/ProxySettings \    
    "proxyDisabled,,,authDisabled,,"

Firefox

Pour Firefox, j'utilise l'addon QuickProxy. Firefox lui-même s'il est configuré manuellement pour utiliser le serveur proxy sur la machine locale, donc QuickProxy active / désactive simplement le paramètre.

APTE

APT (utilisé en arrière-plan par synaptique, muon et amis) utilise un fichier de configuration dans /etc/apt/apt.conf.d/, par exemple l' 00proxy activation du proxy pour APT se fait en utilisant des lignes comme:

Acquire::http::Proxy "http://localhost:3128";
#Acquire::ftp::proxy "ftp://localhost:3128/";
#Acquire::https::proxy "https://localhost:3128/";

Remarque: add-apt-repository utilise le profil racine, ou vous pouvez configurer sudo pour autoriser tous les paramètres http * _proxy.

Un script pour les gouverner tous

FWIW Je suis en train d'écrire un script modulaire pour activer / désactiver le proxy pour de nombreux programmes. J'ai jusqu'à présent écrit les modules suivants:

$ ls -lF proxymanager/modules/
total 60
-rwxr-xr-x 1 root root  919 Oct  8 17:27 apt*
-rwxr-xr-x 1 root root 1037 Oct  8 13:10 bashrc*
-rwxr-xr-x 1 root root  391 Oct  8 12:18 cntlm*
-rwxr-xr-x 1 root root  684 Oct  8 12:58 curl*
-rwxr-xr-x 1 root root  609 Oct  8 13:02 dropbox*
-rwxr-xr-x 1 root root  672 Oct  8 12:18 gnome*
-rwxr-xr-x 1 root root  691 Oct  8 12:18 kde*
-rwxr-xr-x 1 root root  689 Oct  8 13:03 root_bashrc*
-rwxr-xr-x 1 root root  691 Oct  8 13:03 root_curl*
-rwxr-xr-x 1 root root  827 Oct  8 13:03 s3cmd*
-rwxr-xr-x 1 root root  454 Oct  8 13:03 survive_reboot*
-rwxr-xr-x 1 root root  860 Oct  8 13:06 suse-sysproxy*
-rwxr-xr-x 1 root root  653 Oct  8 12:46 sysenvironment*
-rwxr-xr-x 1 root root  465 Oct  8 13:04 virtualbox*
-rwxr-xr-x 1 root root  573 Oct  8 13:04 wgetrc*

Ainsi qu'une application de contrôle. Nous espérons que ceux-ci seront bientôt déplacés dans un github ou une autre maison en ligne.

Johan
la source
Cela a depuis migré vers GitHub, gagné plus de modules et s'approche lentement mais sûrement de la forme utilisable. Les types audacieux et aventureux peuvent trouver cela utile: github.com/Tahaan/proxymanager
Johan
Nouvelle chose à apprendre.Merci.Comment puis-je transmettre le mot de passe à cntlm en ligne de commande ... Je ne veux pas d'invite demandant de saisir le mot de passe?
Thushi
0

L'authentification proxy avec ntlm est bien expliquée dans les liens ci-dessous.

Mais le problème avec ntlm est que vous devez mettre à jour le cntlmfichier de configuration plusieurs fois par jour. Considérez une situation où différents utilisateurs partagent une machine commune et doivent mettre à jour leur mot de passe AD dans le cntlmfichier de configuration chaque fois qu'ils se connectent au système. Il existe peut-être une méthode pour mettre à jour automatiquement le cntlmfichier de configuration chaque fois qu'un utilisateur est connecté.

user173141
la source
Je ne mets à jour mon fichier de configuration cntlm que lorsque mon mot de passe proxy NTLM (le mot de passe de domaine) change.
Johan