Puis-je désactiver l'accès au shell interactif lors de la tunnelisation du trafic Web via SSH?

12

Je cherche à implémenter le tunneling SSH comme une solution VPN bon marché pour que les utilisateurs externes accèdent aux applications Web orientées intranet uniquement.

J'utilise actuellement Ubuntu Server 10.04.1 64 bits avec OpenSSH installé.

J'utilise Putty sous Windows pour créer un tunnel sur un port local vers mon serveur ssh.

start putty -D 9999 mysshserver.com -N

J'utilise ensuite Tell Firefox pour utiliser un proxy SOCKS sur localhost: 9999.

L'indicateur -N désactivera le shell interactif du côté client. Existe-t-il un moyen de le faire côté serveur?

Outre la désactivation de l'accès root, l'utilisation de l'authentification par clé rsa et la modification du port par défaut; Existe-t-il d'autres pratiques de sécurité évidentes à suivre à cet effet? Mon objectif est de pouvoir simplement tunneliser le trafic Web.

CT.
la source

Réponses:

15

Après quatre ans, cette réponse méritait une mise à jour. Alors qu'à l'origine je authorized_keysme suis utilisé et que je l'utiliserais probablement encore dans certains cas, vous pouvez également utiliser le sshd_configfichier de configuration du serveur central .

sshd_config

Vous pouvez désigner (pour votre cas d'utilisation particulier) un groupe, tel que proxy-onlyou Matchdes utilisateurs individuels. Dans sshd_config. Cela se fait après les paramètres globaux et révoque, répète ou affine certains des paramètres donnés dans les paramètres globaux.

Remarque: certaines des syntaxes / directives utilisées dans sshd_config(5)sont documentées dans la manpage pour ssh_config(5). Assurez-vous en particulier de lire la section PATTERNS de ssh_config(5).

Pour un groupe, cela signifie que votre Matchbloc commencerait comme suit:

Match group proxy-only

Vous pouvez Matchles critères suivants: User, Group, Host, LocalAddress, LocalPortet Address. Pour faire correspondre plusieurs critères, séparez simplement par virgule les paires critères-modèle ( group proxy-onlyci-dessus).

À l'intérieur d'un tel bloc, qui est traditionnellement en retrait pour des raisons de brièveté (mais pas nécessairement), vous pouvez ensuite déclarer les paramètres que vous souhaitez appliquer pour le groupe d'utilisateurs sans avoir à modifier chaque authorized_keysfichier pour les membres de ce groupe.

Le no-ptyparamètre de authorized_keysserait reflété par un PermitTTY noparamètre et command="/sbin/nologin"deviendrait ForceCommand /sbin/nologin.

De plus, vous pouvez également définir plus de paramètres pour satisfaire la paranoïa d'un administrateur, comme chroot-mettre l'utilisateur dans son dossier d'accueil et vous retrouver avec quelque chose comme ceci:

Match group proxy-only
    PermitTTY no
    ForceCommand /sbin/nologin
    ChrootDirectory %h
    # Optionally enable these by un-commenting the needed line
    # AllowTcpForwarding no
    # GatewayPorts yes
    # KbdInteractiveAuthentication no
    # PasswordAuthentication no
    # PubkeyAuthentication yes
    # PermitRootLogin no

(vérifiez vous-même si vous avez besoin ou si vous voulez les lignes commentées et commentez si nécessaire)

Le %hest un jeton qui est substitué par le répertoire personnel de l'utilisateur ( %udonnerait le nom d'utilisateur et %%un signe de pourcentage). J'ai trouvé ChrootDirectoryparticulièrement utile de confiner mes sftp-onlyutilisateurs:

Match group sftp-only
    X11Forwarding no
    AllowTcpForwarding no
    ChrootDirectory %h
    ForceCommand internal-sftp
    PasswordAuthentication no

Veuillez noter que seules certaines directives peuvent être utilisées dans un Matchbloc. Consultez la manpage sshd_config(5)pour plus de détails (recherchez Match).

touches_autorisées

NB: la partie en dessous de cette remarque était ma réponse originale. En attendant - mais cela dépend aussi des caractéristiques de votre sshdversion exacte - je choisirais la méthode décrite ci-dessus dans la plupart des cas.

Oui, vous pouvez le faire aussi finement que vous pouvez attribuer des clés publiques. En plus de nologin tel que recommandé par ajdecon, je suggère de définir ce qui suit devant l'entrée clé dans authorized_keys:

no-pty ssh-rsa ...

Le no pty indique au serveur qu'aucun pseudo-terminal ne doit être alloué pour cette clé.

Vous pouvez également forcer l'exécution de quelque chose comme nologin pour une clé particulière en ajoutant ceci:

command="/sbin/nologin",no-pty ssh-rsa ...
0xC0000022L
la source
Veuillez noter que no-ptyseul n'empêchera pas l'utilisateur de la clé d'exécuter des commandes. Voir superuser.com/q/1230979/195460 .
Tad Lispy
3

Pour tout utilisateur de tunneling uniquement, remplacez son shell de connexion par / sbin / nologin. De cette façon, votre utilisateur ne pourra pas accéder à un shell sur le serveur, mais pourra toujours exécuter des tunnels ssh configurés à partir de son client.

ajdecon
la source
0

Je sais que ce n'est peut-être pas la réponse que vous cherchez, mais avez-vous envisagé d'utiliser OpenVPN comme alternative?

Matt Beckman
la source
0

Si vous êtes prêt à abandonner l'authentification utilisateur / passe et à utiliser des clés pour vous connecter, vous pouvez spécifier des paramètres pour chaque clé publique.

Les paramètres notables sont:

command = "commande"

Spécifie que la commande est exécutée chaque fois que cette clé est utilisée pour l'authentification. La commande fournie par l'utilisateur (le cas échéant) est ignorée.

et

restreindre

Activez toutes les restrictions, c'est-à-dire désactivez le port, l'agent et la redirection X11, ainsi que la désactivation de l'allocation PTY et de l'exécution de ~ / .ssh / rc.

et enfin

redirection de port Activez la redirection de port précédemment désactivée par l'option restrict.

Avec ceux-ci, vous pouvez à peu près restreindre l'utilisateur de cette paire de clés particulière à ce qu'il peut faire avec la session SSH.

Cela ressemblerait à ceci:

restrict,port-forwarding,command="/sbin/nologin" ssh-rsa <base64-encoded key>
asdmin
la source
Je vois que ma réponse est quelque peu redondante pour serverfault.com/a/242411/13364 , mais je l'ai laissée en raison des paramètres 'restrict' et 'port-forwarding', qui à mon avis sont meilleurs que 'no-pty'.
asdmin
-1

Je recommande d'essayer Tunnelier . C'est beaucoup plus facile à configurer / à gérer.

Bael
la source