Blog geekesque... ou presque

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 4 janvier 2017

Bloquer des pays sur Nginx

Depuis un certains temps, mes différents sites se font spammer par des robots provenant en particulier de 3 pays, à savoir la Chine, l’Afghanistan et l'Iran.

Utilisant un compte Cloudflare gratuit, je n'ai pas la possibilité de les bloquer via l'interface, je suis donc obligé de faire cela via la configuration de nginx. J'en ai donc profité pour faire un petit script qui automatise la liste des IP à bannir pour gérer ça d'une manière plus simple.

Lire la suite...

vendredi 28 octobre 2016

MyBB 1.8 - Plugin GeSHi (Generic Syntax Highlight)

J'avais développé il y a fort longtemps un plugin pour intégrer GeSHi dans MyBB 1.6.

MyBB a changé de version, le plugin n'est plus compatible et souffrait de quelques bugs. Aujourd'hui, voici la nouvelle version fonctionnelle.

Lire la suite...

lundi 10 octobre 2016

Décrypteur de log rsync

Comme beaucoup de monde, j'utilise rsync de manière automatisée pour effectuer mes sauvegardes mais les logs sont difficilement interprétables d'un simple regard. J'ai donc décidé de me faire un petit analyseur qui me permettra d'avoir un rendu bien plus lisible. Et en couleur pour que ce soit encore plus visuel.

Le rendu sera, pour chaque ligne de log rsync:

  • l'action effectuée (upload, download, suppression, modification ou ignore)
  • le type de contenu (fichier, répertoire, lien symbolique)
  • le nom du contenu traité
  • les raisons de la modification

A la fin de l'analyse, un comptage des différentes actions sera affiché.

Lire la suite...

dimanche 9 octobre 2016

Log coloré en TCL

Pour faire suite au billet Log coloré en PHP, voici la version utilisable en TCL.

Je me suis appuyé sur une astuce donnéesur wiki.tcl.tk et tout particulièrement sur la proposition d'Andy Goth.

Code

namespace eval d {
   variable levels {"error" "warning" "notice" "debug" "info" "success"}
   foreach {name value} {r 1 g 2 b 4 c 6 m 5 y 3} {
      proc $name {} "return \033\\\[01\\;3${value}m"
      proc [string toupper $name] {} "return \033\\\[01\\;4${value}m"
   }
   proc n {} {return \033\[\;0m}
   proc puts {text {level ""}} {
      switch -nocase $level {
         "error" { ::puts "[r]$text[n]" }
         "warning" { ::puts "[y]$text[n]" }
         "notice" { ::puts "[c]$text[n]" }
         "debug" { ::puts "[m]$text[n]" }
         "info" { ::puts "[b]$text[n]" }
         "success" { ::puts "[g]$text[n]" }
         default { ::puts "$text" }
      }
   }
}

Utilisation

Voici un petit script de test:

#/usr/bin/tclsh
source debugger.tcl
foreach level $::d::levels {
   ::d::puts "Level is set to $level" $level
}

Le rendu sera:

Level is set to error
Level is set to warning
Level is set to notice
Level is set to debug
Level is set to info
Level is set to success

lundi 8 août 2016

[MàJ] Adapter la présentation de Weechat

Si vous utilisez weechat comme client IRC, peut-être n'appréciez-vous pas que la fenêtre de tchat soit alignée sur le pseudonyme le plus long et préférez une présentation sans alignement.

Cela peut se faire en trois réglages:

/set weechat.look.prefix_align none
/set irc.look.nick_prefix <
/set irc.look.nick_suffix >

Si vous voulez revenir à la présentation d'origine, il vous suffit de faire:

/set weechat.look.prefix_align right
/set irc.look.nick_prefix ""
/set irc.look.nick_suffix ""

Bien entendu, pensez à sauvegarder après avoir fait les changements.

Mise à jour

Depuis quelques versions de weechat, look.nick_prefix et look.nick_suffix dépendent de weechat et non pas du module irc. Il faut donc adapter le code ci-dessus en:

/set weechat.look.prefix_align none
/set weechat.look.nick_prefix <
/set weechat.look.nick_suffix >

jeudi 4 août 2016

Comparaisons des Raspberry Pi

J'ai trouvé sur Wikipédia un tableau comparatif des Raspberry Pi, et je me suis dit que ce serait intéressant de l'avoir à portée de main.

Lire la suite...

jeudi 28 juillet 2016

Log coloré avec PHP en console (PHP-CLI)

Il arrive que l'on fasse des scripts PHP qui doivent fonctionner en console, mais l'affichage est terne (blanc sur fond noir) et ne permet pas de mettre en valeur les messages importants.

J'ai donc créé une fonction log qui permet de coloriser le texte affiché sur une console linux. Elle fonctionne aussi avec MobaXterm, je ne l'ai pas testée avec cygwin.

La fonction

/*
 * Display a colored message, based on level
 * @var string $message The message to display
 * @var string $level The level (none, success, info, warning, error)
 * @var array $disp An array of informations to display
 * @void
 */
function log($message, $level='', $disp=array('class'=>true, 'function'=>true, 'file'=>true, 'line'=>true)) {
    $c = array(
        'r' => "\033[31m",
        'g' => "\033[32m",
        'b' => "\033[34m",
        'y' => "\033[33m",
        'n' => "\033[0m"
    );
    $bt = debug_backtrace();
    $caller = array_shift($bt);
    $precaller = array();
    if (count($bt)>0) {
        $precaller = array_shift($bt);
    }
    $prefixes = array();
    if ($disp['class'] === true && array_key_exists('class', $precaller)) { $prefixes[] = $precaller['class']; }
    if ($disp['function'] === true && array_key_exists('function', $precaller)) { $prefixes[] = $precaller['function']; }
    if ($disp['file'] === true && array_key_exists('file', $precaller)) {
        $prefixes[] = $precaller['file'];
    } elseif ($disp['file'] === true) {
        $prefixes[] = $caller['file'];
    }
    if ($disp['line'] === true) { $prefixes[] = $caller['line']; }
    $prefix = implode('::', $prefixes).'::';
    switch($level) {
        case 'success': echo $c['g'], $prefix, ' ', $message, $c['n'], PHP_EOL; break;
        case 'info': echo $c['b'], $prefix, ' ', $message, $c['n'], PHP_EOL; break;
        case 'warning': echo $c['y'], $prefix, ' ', $message, $c['n'], PHP_EOL; break;
        case 'error': echo $c['r'], $prefix, ' ', $message, $c['n'], PHP_EOL; break;
        default: echo $prefix, ' ', $message, PHP_EOL; break;
    }
}

Explications

Les couleurs

On crée un tableau contenant les différents codes couleurs ANSI a appliquer. Je ferai bientôt une petite explication sur ces codes. Notez bien que les codes doivent être entre guillemets et pas entre apostrophes, sans quoi ils ne seront pas interprétés.

La couleur n (normal) est en fait le retour à la normale, une suppression du code précédemment appliqué.

backtrace

La fonction PHP debug_backtrace permet d'obtenir dans un tableau toute la chaîne ayant permis d'arriver à l'exécution de la ligne courante, dans l'ordre anté-chronologique.

La première entrée du tableau contient une information très importante pour nous: le numéro de la ligne ayant appelé la fonction courante. La deuxième entrée du tableau, si elle existe, contient les informations sur le fichier, la classe et la fonction ayant appelés la fonction courante. S'il n'y a qu'une entrée dans le tableau, cela signifie que l'appel a été fait hors de toute fonction.

lundi 27 juin 2016

[MAJ] Fail2ban ne donne pas les lignes correspondantes à une détection

Après avoir appliqué ce que j'ai expliqué dans ce billet, j'ai reçu des mails signalant le bannissement de certaines IP suite à la détection de tentatives d'injection SQL.

Problème : juste en dessous de Lines containing IP: <le méchant> in /var/log/nginx/*.access.log, il n'y avait rien.

Je suis allé voir le fichier /etc/fail2ban/action.d/sendmail-whois-lines.conf et l'expression régulière présente ne fonctionne pas avec mes logs.

Version initiale:

`grep '[^0-9]<ip>[^0-9]' <logpath>`

Je l'ai remplacée par:

`egrep '[^0-9]?<ip>([^0-9]|$)' <logpath>`

Maintenant, ça fonctionne. Ceci est dû aux types de fichiers logs que j'utilise pour nginx et dont le premier élément de la ligne est l'adresse IP.

MAJ : Problème de dates

Il arrive parfois que fail2ban envoie des mails à une date erronée (comme 01/01/1970). Pour corriger ça, il faut éditer le fichier /etc/default/fail2ban et ajouter les lignes suivantes:

LC_ALL=C
LANG=C

samedi 25 juin 2016

fail2ban pour lutter contre les injections SQL

Si vous ne connaissez pas fail2ban, c'est un excellent utilitaire pour protéger vos serveurs des différentes attaques.

Il fonctionne à partir de filtres (des expressions régulières) qui sont appliqués aux fichiers logs et appliquer des sanctions aux petits malins qui tenteraient d'exploiter des failles.

Il existe beaucoup de filtres officiels contre les attaques les plus courantes, mais pas contre les tentatives d'injections SQL. Heureusement, TrogloGeek a créé un filtre, que j'ai un peu modifié pour le rendre plus fonctionnel et utilisable avec Apache et Nginx

# Fail2Ban configuration file
#
# Author: TrogloGeek (Damien VERON)
#
# $Revision: 1 $
#
 
[Definition]
sqlfragments_generic = select.*from|delete.*from|update.*set|insert.*into|replace.*(value|set)
sqlfragments_havij = and(\+|%%20)ascii%%28substring|and(\+|%%20)Length|union(\+|%%20)all(\+|%%20)select|and(\+|%%20)1%%3C1|and(\+|%%20)1%%3D1|and(\+|%%20)1%%3E1|and(\+|%%20)%%27.%%27%%3D%%27|%%2F\*%%21[0-9]+((\+|%%20)[0-9]*)?\*%%2F
 
# Option:  failregex
# Notes.:  Regex to try to detect SQL injection trials
# Values:  TEXT
#
failregex = (?i)<HOST> -.*"(GET|POST).*(?:%(sqlfragments_generic)s|%(sqlfragments_havij)s)[^"]*HTTP[^"]*".*
 
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

Dans la partie Definition, vous trouvez les bouts de SQL les plus communs utilisés pour une tentative d'injection, séparés en deux parties: les génériques (requêtes de bases) et ceux qui sont clairement des signatures de tentatives de hack.

L'expression régulière est plus ou moins celle de base pour les logs apache et nginx, notez tout de même la présence de (?i) au début qui la rend insensible à la casse.

mercredi 11 mai 2016

Configurer le Raspberry Pi en point d'accès Wifi

Transformer son Raspberry Pi en point d'accès wifi est quelque chose de très simple à faire.

Si vous avez un Pi3, vous n'aurez aucun investissement particulier à faire. Si vous avez une version précédente, il faudra investir dans un dongle wifi qui le permette. Pour ma part, j'utilise le dongle officiel, mais la plupart le permettent.

Attention: vous devez soit être connecté en ethernet, soit être directement sur votre machine (clavier + écran) pour procéder à la suite des opérations, car vous allez modifier la configuration wifi. Elle ne sera donc plus fonctionnelle pendant un certain temps.

Lire la suite...

mardi 26 avril 2016

Démarrer son Raspberry Pi sur un disque dur

Par défaut, le Raspberry Pi fonctionne avec une carte SD, or ces cartes ont une durée de vie limitée en nombre de cycles d'écriture. Par contre, on peut les lire à l'infini sans souci.

Ayant fait l'acquisition d'un PiDrive, j'ai tenté de déporter tout le système sur le disque. Non seulement ça marche, mais c'est très simple à faire.

Sachez tout de même que vous ne pourrez pas éliminer complètement la carte SD. En effet, le RPi est ainsi fait qu'il va chercher le bootloader sur la carte SD, c'est inscrit de manière quasi-matérielle dans son système. Mais fort heureusement, il ne fait que le lire, donc aucune incidence sur la durée de vie de la-dite carte.

Lire la suite...

samedi 5 mars 2016

Caméra de surveillance avec Raspberry Pi

Suite à l'excellent billet de François Mocq "Une caméra de surveillance vidéo avec le Raspberry Pi", j'ai essayé de me faire mon propre système.

Ca marche, et c'est fort simple.

Lire la suite...

Contrôler les leds du Raspberry Pi2B

Le Raspberry Pi 2 modèle B comporte 2 leds en face avant, une verte et une rouge. Par défaut, la verte (led0) signale l'utilisation de la carte SD et la rouge (led1) signale que le RPi est alimenté, mais pas forcément en marche.

Il est tout à fait possible de modifier le fonctionnement de ces leds, et très simplement.

Edit 07/03/2016

Claudius m'a signalé une chose importante, que je viens de vérifier: le changement en ligne de commande doit se faire en tant que root, pas avec la commande sudo.

Lire la suite...

lundi 22 février 2016

Internet des objets facile avec Cayenne ?

On m'a fait découvrir Cayenne, qui permet de simplifier l'IoT ou, en français, l'Internet des Objets avec un Raspberry Pi.

J'ai testé, et pour l'instant je ne suis pas convaincu.

Lire la suite...

jeudi 11 février 2016

Raspberry Pi : Changer de carte SD sans perte

Ce tutoriel concerne les Raspberry Pi mais est facilement transposable à tout système utilisant des cartes SD.

Si comme moi vous avez acheté une SD NOOBS, vous n'avez que 8Go sur la carte, avec au mieux 5 Go d'utilisables. Et surtout, comme vous avez déjà configuré votre système, installé ou développé des applications, vous ne voulez pas tout perdre. Mais vous manquez de place, cruellement. Heureusement, il est possible de cloner sa carte sur une plus grande.

Je donne les explications pour procéder sous Windows et sous linux, car les logiciels employés ne sont pas les mêmes. Tous les logiciels utilisés sont gratuits.

Lire la suite...

mardi 5 janvier 2016

Danger avec Tapatalk : perdez votre anonymat

Vous ne connaissez peut-être pas l'application Tapatalk, elle permet d'accèder à des forums et des blogs sur mobiles (et tablettes) si les webmasters ont installé le bon plugin. Elle a l'énorme avantage d'utiliser sa propre interface, donc indépendante du style du site et par conséquent de sa compatibilité avec votre écran.

Jusqu'ici, tout va bien... Sauf qu'il y a eu une mise à jour...

Lire la suite...

vendredi 11 septembre 2015

Installer une extension sur Yii2 sans composer

Lorsque Yii2 est sorti, une grande avancée a été faite dans son système d'installation, ainsi que dans celui des extensions: l'utilisation de composer. Composer est un outil de gestion des dépendances en PHP qui est fort utile et pratique, un peu comme les gestionnaires de package sous linux (apt, yum, ...). Mais parfois, on ne peut pas l'utiliser, et c'est plutôt bloquant.

Je vais donc vous décrire, si possible simplement, comment ajouter une extension à Yii2 à la main.

Lire la suite...

vendredi 19 juin 2015

Apple : plusieurs failles dans le trousseau de mots de passe iOS et OSX

Pour faire suite à ce précédent billet, voici ce que j'apprends aujourd'hui:

Des chercheurs en sécurité informatique ont réussi à exploiter une faille dans le gestionnaire de mots de passe d’Apple grâce à une application contenant un code malveillant, et validée par l’App Store. Cette faille permet de récupérer notamment les mots de passe.

Lire la suite...

mercredi 10 juin 2015

Une faille dans Apple Mail permet de voler des identifiants iCloud

Le client de messagerie sur iOS permet de recevoir des emails dont le contenu se modifie après chargement. Un chercheur en sécurité s’est appuyé sur ce bug pour imaginer une attaque de phishing sur iCloud. (via 01net.)

Lire la suite...

mercredi 18 mars 2015

Packs de smileys

Il y a énormément de bibliothèques de smileys, mais certaines ne sont exploitables que dans des logiciels propriétaires, à savoir les clients de messageries instantanées.

Je me suis permis de les extraire et d'en faire des packages, c'est à dire des archives utilisables par tout un chacun. Ils sont en téléchargement sur le site de MyBB car c'est avant tout pour les forums que c'est très pratique, mais vous pouvez utiliser les smileys contenus avec tout forum ou toute application acceptant l'ajout d'images.

Skype 5.8 smilies

Pack de 102 smileys issus de Skype, y compris les smileys cachés skype.png

Téléchargement

Skype animated smilies

Pack de 84 smileys animés issus de Skype skype_anim.png

Téléchargement

Live Messenger smilies

Pack de 82 smileys issus de Live Messenger live_messenger.png

Téléchargement

ICQ animated smilies

Pack de 27 smileys animés issus de ICQ icq.png

Téléchargement

- page 1 de 6