index

RSS

kabs.homeunix.org

Berkeley is famous for LSD and BSD Unix. I don't think that it is a coincidence.

J'utilise relayd(8) pour présenter des services HTTP, HTTPS et SSH, services fournis par des machines internes. La passerelle publique (OpenBSD) se charge donc de relayer tel protocole, telle URL, tel trafic vers la ou les machines ad hoc. Sur cette passerelle, la configuration pour envoyer le trafic SSH vers la bonne machine (ici ad.dr.es.s1, sinon ad.dr.es.s2) se présente comme suit :

  • dans /etc/relayd.conf :
    ext_addr="ext.ip.ad.dr"
    
    table ssh1 { ad.dr.es.s1 }
    table ssh2 { ad.dr.es.s2 }
    ...
    include "/etc/relayd.d/ssh.conf"
  • dans /etc/relay.d/ssh.conf :
    protocol "sshtcp" {
            tcp { nodelay, socket buffer 65536, no splice }
    }
    relay "sshproxy" {
            listen on $ext_addr port 22
            protocol "sshtcp"
            forward to <ssh1> port 22 check icmp
            forward to <ssh2> port 22
    }

La bascule se fait au bout de timeout (configurable dans /etc/relayd.conf, par défaut 200ms) si <ssh1> ne répond plus aux requêtes ICMP echo_request. Plutôt qu'ICMP, on peut aussi utiliser TCP avec une syntaxe comme … check tcp pour vérifier que le port est bien ouvert.

Comme relayd(8) utilise une ancre pour passer les règles à pf(4), ne pas oublier d'ajouter dans /etc/pf.conf la ligne :

anchor "relayd/*"

Ne pas manquer de lire le manuel de relayd.conf(5) qui est très détaillé.

Pour finir sur SSH, pour éviter un très vilain message de mise en garde d'une attaque man in the middle, ne pas oublier d'installer les mêmes clefs d'hôte sur les deux serveurs SSH. Une manière bien plus élégante et efficace est de mettre en place une autorité de certification OpenSSH, comme très fortement conseillé — à juste titre ! — par l'ANSSI (cf. Usage sécurisé d’(Open)SSH).

2025/05/25 09:01 · pc

Il est désormais courant de recevoir des documents marqués par TLP ou PAP.

Comme j'édite mes documents « propres » en LaTeX, plutôt que d'utiliser des images, j'inclus le fichier trivial :

\usepackage{xcolor}
\definecolor{amber}{RGB}{250, 190, 60}                                                            
\newcommand{\papclear}{\colorbox{black}{\color{white}{\textbf{\textsf{PAP:CLEAR}}}}}
\newcommand{\papgreen}{\colorbox{black}{\color{green}{\textbf{\textsf{PAP:GREEN}}}}}
\newcommand{\papamber}{\colorbox{black}{\color{Dandelion}{\textbf{\textsf{PAP:AMBER}}}}}
\newcommand{\papred}{\colorbox{black}{\color{red}{\textbf{\textsf{PAP:RED}}}}}
\newcommand{\tlpclear}{\colorbox{black}{\color{white}{\textbf{\textsf{TLP:CLEAR}}}}}
\newcommand{\tlpgreen}{\colorbox{black}{\color{green}{\textbf{\textsf{TLP:GREEN}}}}}
\newcommand{\tlpamber}{\colorbox{black}{\color{Dandelion}{\textbf{\textsf{TLP:AMBER}}}}}
\newcommand{\tlpamberstrict}{\colorbox{black}{\color{Dandelion}{\textbf{\textsf{TLP:AMBER+STRICT}}}}}
\newcommand{\tlpred}{\colorbox{black}{\color{red}{\textbf{\textsf{TLP:RED}}}}}

Il suffit alors d'appeler la macro appropriée. Ça fonctionne au petit poil avec Beamer.

NB : la fonte (sans sérif) n'est pas définie, elle peut être choisie par ailleurs.

2024/05/25 20:32 · pc

Après Adieu GnuPG ! chiffrer des secrets sans GnuPG, suite de cette série de posts sur l'authentification forte : il s'agit maintenant de protéger mes clefs SSH pour m'authentifier et ce, avec des YubiKeys ne supportant pas GnuPG (tout jeton FIDO devrait convenir).

Depuis OpenSSH 8.2 (améliorations dans 8.3), les clefs SSH peuvent être protégées par FIDO U2F (et stockées sur le jeton). La spécification est dans le dépôt.

Avant de commencer, installer YubiKey manager pour changer le PIN de l'applet FIDO (différent de PIV, pas de PUK pour FIDO).

Générons une telle clef :

$ ssh-keygen -t ecdsa-sk -O resident -O verify-required -O application=ssh:perso
Generating public/private ecdsa-sk key pair.
You may need to touch your authenticator to authorize key generation.
Enter PIN for authenticator:
You may need to touch your authenticator (again) to authorize key generation.
Enter file in which to save the key (/home/nomp/.ssh/id_ecdsa_sk):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/nomp/.ssh/id_ecdsa_sk
Your public key has been saved in /home/nomp/.ssh/id_ecdsa_sk.pub
The key fingerprint is:
SHA256:0uHAzPX9VEMlWe+fXVtwt/RCwGJTyO9+A2TcS43tO8g pc@plop
The key's randomart image is:
+-[ECDSA-SK 256]--+
|        .. +o o==|
|     + . .*....oo|
|      = ...=..+=+|
|       + .  =+=+*|
|      . S  + .o+=|
|       .    o ..O|
|           ....o+|
|            .Eoo |
|             . ..|
+----[SHA256]-----+

Pour les jetons FIDO (et pas FIDO2), seules les clefs P-256 sont possibles.

Ici, on stocke la clef SSH sur le jeton FIDO (-O resident) avec l'« application » ssh:perso (pour différencier les clefs si on doit en avoir plusieurs) ; par défaut, la chaîne ssh: est utilisée. Enfin, on impose la vérification du PIN de l'usager à chaque signature avec -O verify-required.

Déplaçons les fichiers /home/nomp/.ssh/id_ecdsa_sk et /home/nomp/.ssh/id_ecdsa_sk.pub. Avec :

$ ssh-keygen -K

on vérifie que la clef est extractible et donc correctement stockée sur le jeton (cette commande extrait la clef (privée) pour l'enregistrer sur le disque) ; évidemment, le PIN FIDO est demandé. On peut alors supprimer les fichiers /home/nomp/.ssh/id_ecdsa_sk*. On charge maintenant la clef avec la commande :

$ ssh-add -K

Le PIN FIDO est demandé. La commande :

$ ssh-add -L
sk-ecdsa-sha2-nistp256@openssh.com AAA...NoOg==

affiche la clef publique ; on note que son type est préfixé par sk- (pour security key).

NB : comme le jeton Yubico se bloque après trois tentatives erronées, un PIN de six caractères protège correctement la clef SSH.

Lors de chaque accès SSH, la YubiKey clignote et il faut appuyer sur le jeton pour que l'authentification se fasse si on n'a pas ajouté -O verify-required lors de l'étape de création. Sinon, le PIN est demandé.

Du point de vue de l'administrateur, il est possible d'appliquer des politiques d'authentification différentes selon qu'on s'authentifie avec une clef protégée par FIDO ou non. Le serveur peut requérir une preuve de présence (toucher la clef) lors de chaque authentification. Enfin, ces clefs peuvent être intégrées à une autorité de certification, comme les clefs SSH traditionnelles.

Imaginons deux groupes d'utilisateurs Unix. Un groupe, sksshusers dispose de clefs SSH protégées par FIDO, stockées dans des jetons comme les YubiKeys. Un autre groupe, ici sshusers, n'en dispose pas. Dans la configuration du daemon sshd(8) l'administrateur peut imposer des contraintes d'authentification différentes :

Match Group sksshusers,!sshusers Address *
    AuthenticationMethods publickey
    # generated by:
    # $ ssh -Q PubkeyAcceptedKeyTypes | grep sk- | tr '\n' ',' | sed -e 's/,$/\n/'
    PubkeyAcceptedKeyTypes sk-ssh-ed25519@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,webauthn-sk-ecdsa-sha2-nistp256@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com
    Match all

Match Group sshusers,!sshskusers Address *
    AuthenticationMethods publickey,password
    Match all

On peut ajouter une politique PubkeyAuthOptions, par exemple pour imposer la saisie du PIN (verify-required), que la clef ait été créée avec cette option ou pas.

Cette configuration offre une authentification renforcée : le groupe sshusers s'authentifie par clef SSH et mot de passe, le groupe sshusers s'authentifie par clef SSH et jeton FIDO. On peut ajouter une politique PubkeyAuthOptions, par exemple pour imposer la saisie du PIN (verify-required) du jeton FIDO, que la clef SSH ait été créée avec cette option ou pas.

NB : couplé à authpf(8) sous OpenBSD ou à un filtrage du propriétaire des sockets avec skuid dans nftables(8) sous Linux, on peut, sur une passerelle SSH, avoir des ACL par utilisateur… mais c'est une autre histoire.

2023/04/02 23:06 · pc
Ce site web utilise des cookies. En utilisant le site Web, vous acceptez le stockage de cookies sur votre ordinateur. Vous reconnaissez également que vous avez lu et compris notre politique de confidentialité. Si vous n'êtes pas d'accord, quittez le site.En savoir plus
  • index.txt
  • Dernière modification : 2022/05/20 17:23
  • de pc