
Quelques astuces diverses, huitième

Contrairement à ce que beaucoup de monde a pu constater, il n’a pas été question de ralentir au niveau du boulot. J’ai donc de nouveau un petit batch de bricoles à garder dans un coin si besoin 🙂
Bloquer ICMP timestamp
Lors d’un rapport Qualys VM, j’ai découvert qu’il y avait un aspect d’ICMP qu’il était préférable de bloquer, car devenu inutile : l’ICMP timestamp. Sous Linux, avec iptables on a la possibilité de le faire :
1 2 |
iptables -A input -p icmp --icmp-type timestamp-request -j DROP iptables -A output -p icmp --icmp-type timestamp-reply -j DROP |
J’ai moyennement compris les implications (potentiellement sur de la crypto, mais c’est un peu ancien), je vous laisse chercher.
Erreur au redémarrage de MySQL après une modification de innodb_log_file_size
Si vous faites une telle modification et que ça vous pète à la gueule :
1 2 3 4 5 6 |
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes InnoDB: than specified in the .cnf file 0 268435456 bytes! 100118 20:52:52 [ERROR] Plugin 'InnoDB' init function returned error. 100118 20:52:52 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 100118 20:52:52 [ERROR] Unknown/unsupported table type: InnoDB 100118 20:52:52 [ERROR] Aborting |
Il faut supprimer les fichiers ib_logfile0 et ib_logfile1 qui se trouvent par défaut dans /var/lib/mysql. Ça ira beaucoup mieux, et il recréera automatiquement les fichiers à la nouvelle taille.
Un assistant pour les feignants qui ne font pas leur règle DMARC à la main
Comme moi quoi, voilà si vous avez besoin de mettre en place une telle règle et que votre client ne sait pas comment faire (et vous pas trop), je suis tombé sur ce petit assistant en ligne, qui vous permettra de faire ça simplement.
Calculatrice en ligne de commande
Besoin de faire un calcul rapide, genre un pourcentage, et pas d’interface graphique ni de smartphone sous la main ? Pas grave, tout est prévu sur nos bons vieux OS :
1 2 |
server1:~$ echo 'scale=2;425/500' |bc .85 |
Pour avoir un aperçu des possibilités de bc, c’est par là (en anglais).
Variable d’environnement sous Nginx
Avec Apache via mod_env, SetEnv
permet de définir une variable (souvent utilisé avec certains frameworks comme symfony). Sous Nginx, pour PHP ça se fait via une directive fastcgi_param
:
1 |
fastcgi_param APP_ENV preprod; |
On a ensuite accès à cette variable via la variable $_SERVER['APP_ENV']
.
Importer un dump mysql avec clés étrangères (cas d’un prestashop)
Je ne débattrai pas aujourd’hui de la saleté que représente Prestashop, mais c’est lui qui m’a amené à m’approcher des clés étrangères dans MySQL (je connaissais le terme, moins leur usage). Si jamais vous faites un dump qui contient des directives drop table if exists
, ça gueulera à l’import. La solution, désactiver temporairement la vérification des clés étrangères :
1 2 3 |
SET FOREIGN_KEY_CHECKS=0; SOURCE /pathToFile/backup.sql; SET FOREIGN_KEY_CHECKS=1; |
Rediriger un domaine spécifique vers HTTPS sur haproxy
Haproxy est particulièrement souple à l’usage, j’ai occasionnellement l’opportunité de m’en rendre compte. Dernièrement, sur une IP qui doit porter plusieurs sites, je devais effectuer une redirection HTTPS uniquement pour un domaine en particulier. Voici la configuration et les directives que j’ai utilisé :
1 2 3 4 5 6 7 |
frontend VIP-CLIENT-1 bind 1.2.3.4:80 bind 1.2.3.4:443 ssl crt /etc/haproxy/ssl/bundle-client.pem mode http http-request add-header X-Forwarded-Proto https if { ssl_fc } redirect scheme https code 301 if { hdr(Host) -i domain.tld } !{ ssl_fc } default_backend BACKEND-CLIENT-1 |
Pourquoi le faire au niveau d’Haproxy ? Toujours gérer ce genre de redirection au plus haut de la chaîne de connexion.
Extraire le log git pour un dossier particulier
Un client qui gérait tous ses sites au sein d’un même dépôt git (c’est très con, on est d’accord), cherche malgré tout à conserver un historique des modifications effectuées à une arborescence précise. S’il est impossible de réimporter tout l’historique (ou alors j’ai pas encore trouvé), en manipulant les options de git log
on peut arriver à peu près à un gros journal :
1 |
server1:/home/www/site1$ git log --oneline --decorate --full-diff --full-history --no-abbrev-commit -p ./ > /home/git_log_site1.log |
Dans mon cas, ça a donné un gros bousin de 500M.
Vérifier la propagation DNS à travers le monde
Sans prendre en considération les problèmes divers de cache qui se posent régulièrement, il est tout de même possible de vérifier si une modification de zone a bien été prise en compte pour une grande partie du monde, grâce à ce service bien pratique.
Récupérer les infos techniques d’une IP au format JSON
Encore un autre service en ligne bien pratique, gratuit dans une certaine mesure (le service n’est pas libre), permet d’identifier rapidement via curl l’origine d’une IP trouvée dans des logs web par exemple :
1 2 3 4 5 6 7 8 9 10 |
root@vox:~# curl ipinfo.io/91.121.61.180 { "ip": "91.121.61.180", "hostname": "vox.clantoc.org", "city": "", "region": "", "country": "FR", "loc": "48.8582,2.3387", "org": "AS16276 OVH SAS" } |
Vous découvrirez des choses étonnantes parfois (serveurs compromis, clients infectés, robots d’indexation étranges…).
Pas complètement con d’avoir tous ses sites dans un même dépôt Git; on nomme ça le mono-repository et ça a le vent en poupe en ce moment. Quelques gros acteurs du web travaillent maintenant ainsi 🙂
Oui mais c’est parce que ces gros acteurs conservent les développements en interne, dans le cas présent le dossier contient plusieurs projets, sauf que les nouveaux intervenants ne doivent en théorie accéder qu’au code d’un seul des projets de cet unique dépôt, ce qui n’est pas possible, sans même parler de la gestion de l’historique qui m’intéressait ici.
Merci pour ce billet. Pour l’histoire des clés étrangères ce sont des contraintes d’intégrités, autrement dit il y a un ordre pour la suppression des tables. En général je supprime la base de données (surtout en env de test),mais ta méthode marche aussi 🙂