Le but de cette procédure n'est pas seulement de rendre une machine opérationnelle aussi rapidement que possible en tant que nœud Tor, mais aussi de l'intégrer au mieux à l'infrastructure de Nos oignons, dans le même délai.

L'idée qui sous-tend ce document est de résumer les différentes étapes (les détails se trouvant ailleurs sur ce wiki), mais de les faire apparaître toutes. On ne trouvera donc ici aucune explication sur les raisons de telle ou telle configuration ; en revanche, des raccourcis méthodologiques sont suggérés, comme par exemple l'importation et la copie d'un fichier de configuration depuis un autre nœud Tor plutôt que son édition sur le système local.

NOTE : pour copier un fichier d'un nœud vers un autre à partir d'une machine tierce (celle sur laquelle on a sa clef privée), on peut utiliser scp. Cependant, la copie directe entre machines distantes n'est possible que par le transfert de l'agent ssh (ForwardAgent yes), mais ce n'est pas conseillé ; si l'agent n'est pas transféré, les données doivent transiter par le système local, en ajoutant l'option -3.

Installation du système

Mis à part le choix du système d'exploitation proprement dit (Debian), rien ne permet d'élaborer une procédure type d'installation de ce système, puisque la méthode d'installation dépend principalement de l'hébergeur. Actuellement, trois nœuds Tor ont été installés et configurés dans des conditions très différentes :

  • marcuse est une machine physique installée in situ en utilisant une image iso d'installation ; puis un changement de processeur et d'architecture, l'ajout conséquent de RAM et d'une seconde IP publique l'ont amenée à devenir marcuse1 et marcuse2, qui permettent de faire tourner deux instances de Tor (mêmes ports sur deux IP différentes).
  • ekumen est une machine virtuelle préinstallée dont les choix de base ont été faits via une interface web.
  • marylou est une machine physique installée in situ en utilisant une image iso d'installation ; puis elle est devenue marylou1 et marylou2, où deux instances de Tor tournent sur la même IP mais sur des ports différents.

Ces trois premières machines ont été installées sous Wheezy (Debian 7) en 2013/2014 et ont toutes été migrées sous Jessie (Debian 8) fin 2015, puis sous Stretch (Debian 9) en juin/juillet 2017.

  • AlGrothendieck est une machine physique installée à partir d'une image iso d'installation (méthode netboot) de Jessie, modifiée par quidame pour automatiser, pendant l'installation, la quasi-totalité de la procédure décrite ci-après.

Configuration du système

NOTE : L'ordre dans lequel sont décrites les étapes de ce chapitre est donné à titre indicatif.

Installation et configuration d'etckeeper

Cette étape est à effectuer aussi tôt que possible.
Pour résumer :

  • Installer le paquet :
    sudo apt-get --no-install-recommends install etckeeper
    sudo etckeeper commit "Post-installation d'etckeeper"
  • Dans /etc/etckeeper/etckeeper.conf :
    AVOID_DAILY_AUTOCOMMITS=1
    AVOID_COMMIT_BEFORE_INSTALL=1
  • Importer les fichiers suivants depuis une autre machine :
    /etc/etckeeper/init.d/30initial-package-list
    /etc/etckeeper/post-install.d/10refresh-package-list
    /etc/cron.hourly/etckeeper-warn-changes
  • Créer le répertoire /var/lib/etckeeper
  • Enregistrer les changements :
    sudo etckeeper commit "Configuration d'etckeeper"

Installation de paquets utiles

D'abord reconfigurer APT :

  • supprimer les dépôts contrib et non-free du fichier sources.list
  • créer le fichier /etc/apt/apt.conf.d/00InstallRecommends avec :
    APT::Install-Recommends "false";

Ne pas oublier d'enregistrer les changements de configuration au coup par coup, ou par ensembles cohérents. Cette liste ne se veut pas exhaustive (la liste des paquets /etc/.package-list sur marylou peut servir de référence) :

  • aptitude
  • bash-completion
  • bind9-host
  • emacs-nox
  • haveged
  • htop
  • iftop
  • linux-tools
  • locales-all
  • molly-guard
    Dans /etc/molly-guard/rc : ALWAYS_QUERY_HOSTNAME=true
  • ntp
  • powertop
  • s-nail
    L'installer comme alternative à mailx/mail/Mail :
    sudo update-alternatives --install /usr/bin/mailx mailx /usr/bin/s-nail 100 […]
    (la commande complète se trouve ici)
  • safe-rm
  • scamper
  • screen (détails)
    sudo dpkg-statoverride --update --add root utmp 4775 /usr/bin/screen
    Importer /etc/tmpfiles.d/screen-cleanup.conf depuis un autre nœud Tor.
  • strace
  • unattended-upgrades (détails)
    sudo dpkg-reconfigure unattended-upgrades
    Importer /etc/apt/apt.conf.d/50unattended-upgrades depuis un autre nœud Tor.
  • vim
    sudo update-alternatives --set editor /usr/bin/vim.basic
  • wget
  • zsh

Suppression de paquets inutiles

Là non plus, cette liste n'est pas exhaustive :

  • apt-xapian-index
  • bsd-mailx
  • exim4
    NOTE : c'est plus facile de vraiment supprimer ce paquet via l'interface utilisateur d'aptitude plutôt qu'avec apt-get.
  • ftp
  • popularity-contest
  • telnet
  • les paquets relatifs au serveur X

Configuration de ssh

Attention à ne pas s'interdire l'accès à la machine par une mauvaise manipulation

  • Importer et copier le fichier /etc/ssh/sshd_config depuis n'importe quel autre nœud Tor.
  • Supprimer la clef DSA (fichiers /etc/ssh/ssh_host_dsa_key{,.pub})
  • Relancer le service (cela ne coupe pas les connexions en cours) et enregistrer les changements :
    sudo service ssh restart
    sudo etckeeper commit "Configuration du serveur SSH"

Configuration de sudo

Attention à ne pas s'interdire l'accès root à la machine par une mauvaise manipulation

Configuration du pare-feu

Attention à ne pas s'interdire l'accès à la machine par une mauvaise manipulation

  • Installer ferm :
    sudo apt-get install ferm
  • Importer et copier le fichier /etc/ferm/ferm.conf depuis n'importe quel autre nœud Tor.
  • Relancer le service et enregistrer les changements :
    sudo service ferm restart
    sudo etckeeper commit "Configuration du pare-feu"

Installation de AppArmor

  • Installer les paquets apparmor, apparmor-utils et apparmor-profiles
  • Dans /etc/default/grub, ajouter apparmor=1 security=apparmor à GRUB_CMDLINE_LINUX, puis lancer :
    sudo update-grub
  • Enregistrer les changements et redémarrer la machine :
    sudo etckeeper commit "Activation de AppArmor"
    sudo reboot

Installation et configuration de Postfix

L'installation de Postfix nécessite la désinstallation d'Exim4.

  • Lors de l'installation, opter pour le mode smarthost.
  • Importer et copier le fichier /etc/postfix/main.cf depuis n'importe quel autre nœud Tor.
  • L'éditer pour actualiser myhostname.
  • Dans /etc/aliases, spécifier root: machines@nos-oignons.net, puis lancer :
    sudo postalias /etc/aliases
  • Redémarrer le service et enregistrer les changements :
    sudo service postfix restart
    sudo etckeeper commit "Configuration de Postfix"

Installation et configuration du Resolver

  • Installer le paquet unbound
  • Dans /etc/resolv.conf :
    search nos-oignons.net
    nameserver 127.0.0.1
    Ajouter une deuxième directive nameserver en fallback, avec le DNS de l'hébergeur de la machine.
  • Importer /etc/unbound/unbound.conf d'un autre nœud Tor
  • Relancer le service et enregistrer les changements :
    sudo service unbound restart
    sudo etckeeper commit "Configuration du résolveur de noms (unbound)"
  • Actualiser /etc/knot/db.nos-oignons.net sur bulbe : ajouter les enregistrements A et éventuellement AAAA pour la nouvelle machine, relancer knot et enregistrer les changements.

Installation et configuration de Tor

  • Modifier /etc/apt/sources.list
    Retirer les archives contrib et non-free, et ajouter les dépôts Tor (ou importer le fichier d'un autre nœud Tor) :
    deb http://deb.torproject.org/torproject.org/ stretch main
  • Importer la clef signant les dépôts de torproject :
    sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-key EE8CBC9E886DDD89
  • Enregistrer les changements (sinon on peut pas aller plus loin) : sudo etckeeper commit "Ajout de deb.torproject.org dans les dépôts d'APT"
  • Puis
    sudo apt-get update
    sudo apt-get install tor tor-arm deb.torproject.org-keyring
  • Importer les fichiers suivants d'un autre nœud Tor :
    /etc/tor/tor-exit-notice.html
    /etc/tor/torrc
  • Dans torrc, mettre à jour les directives suivantes :
    ORPort
    Address
    Nickname
    DirPort
    RelayBandwidthRate
    RelayBandwidthBurst
    MyFamily
    ExitPolicy
  • Relancer Tor et enregistrer les changements :
    sudo service tor restart
    sudo etckeeper commit "Configuration de Tor"
  • Actualiser la valeur de MyFamily sur tous les autres nœuds Tor et enregistrer les changements.

Création des comptes admin. sys.

Pour se simplifier la tâche dans la création et configuration des comptes admin. sys. on peut utiliser… ce wiki : il contient un script et les clefs ssh publiques de chaque membre, ce qui permet de faire, depuis le nouveau système :

todo Recommender une copie SCP plutôt qu'un wget

alias wget="wget --user=${USER} --ask-password"
WIKI_ADMIN="https://nos-oignons.net/wiki-admin"
wget ${WIKI_ADMIN}/Procédures/Créer_un_compte_user/add_user
wget -r -np -nH --cut-dirs=2 -R html ${WIKI_ADMIN}/Privé/Membres/
for x in $(ls Membres); do
    sudo ./add_user -l $x -k Membres/$x/clef_ssh.pub -G sudo,adm,staff,debian-tor
done

Si cette étape est réalisée avant l'installation de Tor, penser ensuite à ajouter les membres de l'équipe au groupe debian-tor.

Si Postfix est déjà configuré, on peut envoyer les infos concernant la machine à tous les membres de l'équipe :

cat <<EOF | mailx -s "$(hostname -f) is born" adminsys@nos-oignons.net
> Chers admin. sys, la nouvelle machine est prête:
>
> $(./add_user -I)
>
> Vous recevrez bientôt chacun un mail individuel avec le mot de passe
> de votre nouveau compte.
>
> --
> ${USER}
> EOF

Autres configurations

En vrac :

  • Réglages du noyau

    • Dans /etc/sysctl.d/local.conf, ajouter :
      • kernel.perf_event_paranoid=2
      • net.core.default_qdisc=fq_codel
    • Éxécuter sysctl -p pour une prise en compte immédiate.
  • Dans /etc/hosts :
    S'assurer qu'on a bien une entrée comportant l'IP publique, le fqdn et le petit nom de la machine (dans cet ordre).

  • Dans /etc/default/locale :
    LANG="en_US.UTF-8"
    LANGUAGE="en_US:en"

  • Messages automatiques
    Dans /etc/crontab, ajouter MAILTO=root.

  • Messages automatiques
    Si les premiers messages d'etckeeper en provenance de la nouvelle machine posent problème (bounce), importer le script /usr/local/bin/wheezy-post-receive-email depuis une autre machine, et remplacer le lien symbolique /var/backups/etc.git/hooks/post-receive :
    sudo ln -sf /usr/local/bin/wheezy-post-receive-email /var/backups/etc.git/hooks/post-receive

Documentation

Ajouter au moins deux pages au wiki-admin :

  • la première pour décrire le système (voir les autres machines).
  • la seconde pour relater son installation

Mettre à jour les documents suivants :

  • Déployer un nœud Tor
  • Tor