Mon pense-bête à moi...

Ci-dessous vont s'accumuler d'innombrables trucs, astuces et autres manipulations techniques que j'ai su faire à un moment ou un autre…

Lorsque Spamassassin conclut qu'un message est un spam, outre les marqueurs dans l'entête du message, il insère dans le message lui-même un rapport détaillant le score obtenu par ce message aux différents tests. Lorsque le message est effectivement un spam, cela ne me dérange pas puisque je supprime le spam dans la foulée. Mais lorsque le diagnostic de Spamassassin s'avère erroné, laisser ce rapport est gênant. Il convient donc de le supprimer. Pour ce faire, une fois la boîte aux lettres dédiée au spams (ici ~/mail/spam) nettoyée de tous les vrais spams (i.e., une fois qu'il ne reste que des faux positifs), il faut exécuter dans une console la commande :

user@host:~$ spamassassin --mbox --remove-markup ~/mail/spam > ~/mail/ham

Ce faisant, les messages purgés des rapports seront recopiés dans la boîte aux lettres ~/mail/ham.

Cette méthode est extraite de la page CD and DVD Writing from the Linux Command Line du site d'Andrew Strong.

Extraire le contenu du DVD dans le répertoire courant :

user@host:~$ vobcopy -m

Se placer dans le sous-répertoire créé par vobcopy (qui se nomme ici dvdname) et générer une image ISO de son contenu :

user@host:~$ cd dvdname
user@host:~$ genisoimage -v -dvd-video -o ../image.iso .

Graver l'image ISO sur le DVD vierge (ici, périphérique /dev/dvdrw1) :

user@host:~$ growisofs -dvd-compat -Z /dev/dvdrw1=../image.iso

On trouve sur plusieurs sites, notamment Open Font Library et Google Web Fonts, des collections de plusieurs centaines de polices de caractères alléchantes, diffusées sous licence libre Sil Open Font License (OFL) ou versées dans le domaine public.

Pour en disposer sur notre système GNU/Linux préféré, il faut sous l'identité root :

  1. Créer un répertoire dédié dans le répertoire /usr/share/fonts/truetype/.
  2. Copier dans ce répertoire les fichiers de polices (*.ttf) sélectionnés sur les sites ci-dessus.
  3. Régénérer le cache avec la commande fc-cache :
user@host:~$ fc-cache -f -v

Certains logiciels encodent en base 64 les informations sensibles qu'ils stockent dans leur fichier de configuration. Si cette stratégie ne constitue en rien une protection contre le vol d'identifiants par une personne ou un logiciel ayant accès au fichier, elle évite que ces identifiants ne soient éventés au détour d'un affichage à l'écran.

À l'instar de TinyProxy, certains logiciels négligent de fournir une interface d'encodage et de décodage de ces informations. Il appartient alors à l'utilisateur de se débrouiller. Heureusement pour nous, un utilitaire ad hoc, nommé base64, est fourni par les GNU Core Utilities :

Encodage de la chaîne « gargamel:1dE3sssZAG » :

user@host:~$ echo -n "gargamel:1dE3sssZAG" | base64
Z2FyZ2FtZWw6MWRFM3Nzc1pBRw==

Décodage de la chaîne « Z2FyZ2FtZWw6MWRFM3Nzc1pBRw== » :

user@host:~$ echo -n "Z2FyZ2FtZWw6MWRFM3Nzc1pBRw==" | base64 -d ; echo
gargamel:1dE3sssZAG

Génération d'une paire de clés cryptographiques et d'une CSR (Certificate Signing Request) à destination de l'autorité de certification devant générer le certificat (par exemple, StartSSL).

user@host:~$ openssl req -nodes -newkey rsa:4096 -sha256 -keyout blog.dinot.net.key -out blog.dinot.net.csr
Generating a 4096 bit RSA private key
.......................................................++
......................................................++
writing new private key to 'blog.dinot.net.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Midi-Pyrenees
Locality Name (eg, city) []:Toulouse
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Sebastien Dinot
Organizational Unit Name (eg, section) []:Home
Common Name (e.g. server FQDN or YOUR name) []:blog.dinot.net
Email Address []:webmaster@dinot.net
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Dans la commande précédente, l'option « -sha256 » indique que l'on souhaite la signature du certificat via l'algorithme SHA2. Si celui-ci n'est pas supporté, on peut se replier sur l'algorithme SHA1 en utilisant l'option « -sha1 » en lieu et place de « -sha256 ».

Depuis un système Debian / Ubuntu :

user@host:~$ openssl s_client -CApath /etc/ssl/certs -servername forge.dinot.net -connect forge.dinot.net:443

Depuis un système Red Hat / CentOS :

user@host:~$ openssl s_client -CAfile /etc/pki/tls/certs/ca-bundle.crt -servername forge.dinot.net -connect forge.dinot.net:443

Ces commandes renvoient la chaîne de certification, les informations sur le certificat du serveur et, in fine, un code de retour indiquant si le certificat a pu être authentifié :

Verify return code: 0 (ok)

Certains outils exigent une copie locale du certificat SSL d'un serveur pour pouvoir vérifier l'authenticité dudit serveur lorsqu'ils s'y connectent. Cette copie peut être obtenue par la commande :

user@host:~$ openssl s_client -servername www.example.com -connect www.example.com:443 < /dev/null | \
              sed -ne '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > www.example.com.crt

S'il est nécessaire de fournir la chaîne de certificats jusqu'à l'autorité racine, il faut ajouter à la commande précédente l'option « -showcerts » :

user@host:~$ openssl s_client -servername www.example.com -connect www.example.com:443 -showcerts < /dev/null | \
              sed -ne '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > www.example.com.crt

L'option « -servername » dans les commandes ci-dessus n'a rien de redondant avec l'option « -connect ». Elle permet d'annoncer le nom DNS du serveur cible lors de la négociation SSL/TLS, c'est à dire de gérer le Server Name Indication (SNI).

On peut consulter le détail des attribut d'un certificat SSL (version, émetteur, sujet, fenêtre temporelle de validité, etc.) via la commande :

user@host:~$ openssl x509 -noout -in www.example.com.crt -inform PEM -text

On peut obtenir l'empreinte du certificat SSL via la commande :

user@host:~$ openssl x509 -noout -in www.example.com.crt -fingerprint
SHA1 Fingerprint=A5:0C:EF:6B:32:7A:F5:FA:1D:93:AE:FD:22:53:A4:FC:AA:80:B8:86

Les deux commandes précédentes peuvent être combinées en une seule :

user@host:~$ openssl x509 -noout -in www.example.com.crt -inform PEM -text -fingerprint

Pour une raison que je n'ai pas encore eu le temps de creuser, il m'est arrivé à plusieurs reprises ces dernières années de me retrouver sans son sur mon PC. Tout semble pourtant fonctionner, aucune erreur n'apparaît dans les logs, les logiciels ne braillent pas mais rien ne sort des haut-parleurs. La dernière fois, j'ai même booté sur un live CD pour m'assurer que le problème venait bien de mon système et pas de mon matériel. Et à chaque fois, je cherche des heures sur le net avant de trouver la commande magique qui me sort de l'embarras :

user@host:~$ alsactl init

Il suffit de valider pour que les haut-parleurs prennent vie !

Conversion d'une date calendaire en date EPOCH (i.e. nombre de secondes écoulées depuis le 01/01/1970 à 0h GMT) :

user@host:~$ date -d '2014-01-01 12:34:56' '+%s'
1388576096

Conversion d'une date EPOCH en data calendaire :

user@host:~$ date -d @1388576096
mercredi 1 janvier 2014, 12:34:56 (UTC+0100)

Lorsque le bannissement prononcé par Fail2Ban est le fait d'une erreur commise par un utilisateur légitime et non d'une attaque, on peut vouloir mettre fin prématurément à ce bannissement afin de rétablir sans délai l'accès au service.

Pour ce faire, connaissant l'adresse IP de l'utilisateur, on doit d'abord identifier la règle Fail2Ban (jail) qui a déclenché le bannissement. La liste des règles actives est obtenue par la commande :

root@host:~# fail2ban-client status
Status
|- Number of jail: 10
`- Jail list:      pam-generic, ssh, ssh-ddos, apache, [...] postfix, sasl, dovecot, recidive

Cette liste étant connue, peut lister, règle par règle, les adresses IP bannies :

root@host:~# fail2ban-client status ssh
Status for the jail: ssh
|- filter
|  |- File list:	/var/log/auth.log 
|  |- Currently failed:	2
|  `- Total failed:	51
`- action
   |- Currently banned:	5
   |  `- IP list:	194.63.142.101 193.213.35.41 68.14.217.229 89.156.44.210 93.17.235.4
   `- Total banned:	5

Une fois la règle responsable identifiée, on suspend le bannissement via la commande :

fail2ban-client set <RÈGLE> unbanip <IP>

Par exemple :

root@host:~# fail2ban-client set ssh unbanip 93.17.235.4