lundi 14 novembre 2016

Ajouter un bandeau permanent sous IIS 7

Pour identifier un serveur de test qui se comporte à l'identique d'un serveur de production, j'ai souhaité faire apparaître un bandeau permanent à l'affichage.



Sous IIS 7 je n'ai pas trouvé de fonctionnalité native qui permettant d'obtenir ce résultat, mais un moyen détourné le permet.


Dans le gestionnaire des services Internet (IIS), à la page d'accueil de la racine du serveur, dans le groupe IIS, si vous n'avez pas le module URL Rewrite (cf capture suivante), rendez vous sur le site IIS pour l'installer :  https://www.iis.net/downloads/microsoft/url-rewrite


Sa fonction première est de créer des règles agissant sur les URL demandées (url courtes, amélioration référencement, etc...) mais pas seulement ! Il permet également de définir des règles en sorties sur les headers ou le contenu de la réponse, et ce que nous allons utiliser.

(je vais me contenter d'une traduction de l'article d'origine qui est très bien fait)


Dans le panneau d'action sur le côté droit, cliquer sur "Add Rules..." et sélectionner "Blank rule" dans la catégorie "Outbound rules" puis "Ok".












Il faut donc définir cette nouvelle règle en sortie. Dans l'URL Rewrite Module 2.0, elle se définit par plusieurs critères :
  • Le nom de la règle
    Ce nom est un identifiant unique libre pour la règle, par exemple : "Ajout bandeau permanent".
  • Une précondition optionnelle qui défini quand la règle doit s'appliquer à la réponse.
    Dans notre cas, on veut modifier le rendu HTML des demandes faites au serveur (et non les images, pdf, etc...) donc on peut se limiter à toutes les réponses HTTP avec un content-type du header vaut "text/html". Ces règles en sorties sont très gourmandes en CPU et peuvent potentiellement nuire aux performances du serveur, il faut donc cibler au plus précis où agir grâce à ces préconditions.

    Pour la créer, sélectionner dans la liste déroulante
     Precondition, l'élément "<Create New Pre-condition...>". Cela ouvre l'éditeur de pré-conditions où on peut définir les infos suivantes : 
    • Name: "IsHTML"
    • Using: "Regular Expressions"
    • Faire "Add" pour ouvrir la fenêtre "Add condition" et définir les infos suivantes :
      • Condition input: "{RESPONSE_CONTENT_TYPE}"
      • Check if input string: "Matches the pattern"
      • Pattern: "^text/html"
    On obtient donc l'écran suivant, à valider en faisant OK.
  • Définir la zone de recherche et le pattern à utiliser pour rechercher le texte
    Les règles de rewrite en sortie peuvent agir sur le contenu du header HTTP ou celui du corps de la réponse. Dans notre cas, on agit sur le contenu du corps, il faut donc définir le "Matching Scope" sur "Response".

    Notre astuce consiste à ajouter du contenu HTML à la réponse, pour cela nous allons donc remplacer la balise de fin par notre contenu à insérer suivi de la balise de fin.

    Dans la liste déroulante "Content", on va préciser "Matches the Pattern", et dans "Using:", on sélectionne "Exact match" pour notre code HTML précis.

    On saisit dans “Pattern” le texte de la balise recherchée : </body>
  • Un ensemble de conditions optionnelles
    Aucune dans notre cas, on souhaite que cela s'applique tout le temps.
  • L'action à réaliser si le pattern est trouvé et toutes les conditions sont satisfaites
    Choisir “Rewrite” dans la liste "Action type".
    Et saisir dans "Value", la valeur de remplassement souhaitée.

    Pour mon exemple, j'ai créé une box que je positionne en haut à gauche de la fenêtre, en statique, avec un fond rouge, en travers et avec le texte Serveur de test !! . Ce qui donne le code suivant :

    <div style="position: absolute; top: 45px; left: -70px; width: 250px; margin: 0px; padding: 6px; background-color: darkorange; border: 5px solid red; color: #f0f0f0; font: 18px Arial; transform:rotate(-45deg); -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); -ms-transform:rotate(-45deg); -o-transform:rotate(-45deg); text-align: center;"><span style="margin: auto; padding-left: 20px; background: url(/ffv/images/famfamfam/icons/error.png) no-repeat center left">Serveur de test !!</span></div></body>


Sources : 
Ce tip m'est venu en faisant un parallèle entre cette insertion de bandeau et ce qui doit être fait avec les ajouts de code de tracking pour analytics, Voilà donc l'article d'origine (très bien fait, en anglais) avec l'astuce pour cette insertion de code sur tout un site :  https://www.iis.net/learn/extensions/url-rewrite-module/using-outbound-rules-to-add-web-analytics-tracking-code

mardi 6 septembre 2016

Déporter les logs du PFSense sur un NAS Synology


Le firewall open source PFSense peut être hébergé sur des appliances light, comme les excellents Alix d'OSNet qui permettent de déployer des solutions super légères et riches en fonctionnalités (VPN, portail captif, proxy, logs, ...) ou celles de la boutique PFSsense.

Pour logger les informations, accès, etc... la capacité de stockage de ces appliances peut être insuffisante, c'est pour quoi il peut être intéressant de ne stocker que peu d'infos sur le firewall et déporter les logs sur un NAS Synology.



Pour cela il faut installer depuis le Centre de paquets de Synology l'application Centre des journaux.



Dans l'application  Centre des journaux dans l'onglet Réception des journaux il faut autoriser la réception au format BSD





Dans l'interface du PFSense, dans la page Status > System Logs > Settings section Remote Logging Options, il faut activer Enable Remote Logging et définir la destination avec l'ip du Synology (dans Remote log servers).


Il est possible de définir les éléments de logs transmis par les checkbox de Remote Syslog Contents, ici l'ensemble sera transmis.
Les logs arriveront dès validation dans le Centre de Journaux du Synology, Un filtre en haut de liste permettra de distinguer les logs internes au Synology (Local) et ceux reçus de l'extérieurs (Des autres serveurs)






Attention, si vous souhaitez récupérer les logs du Squid Proxy Server, ils ne seront pas transmis automatiquement par cette manip car ils ne sont pas prévus dans les services listés sur l'interface.

Il faudra pour ça se rendre dans les paramètre du proxy : Services > Squid Proxy Server et accéder aux options avancées 



et saisir dans 
Custom ACLS (Before Auth) :
access_log syslog:local:8
Cela générera automatique dans le fichier de conf du proxy /usr/local/etc/squid/squid.conf la ligne suivante
# Custom options before auth
access_log syslog:local8.info squid
(si vous faites cette modif en SSH dans le fichier de conf, celui ci sera écrasé à la prochaine modif / reboot / ...)

Et il faut redémarrer le service, avec le reload en haut de page

Le service local8 n'étant pas listé dans les options du Remote Syslog Contents, il faudra cocher l'option Everything pour ces logs soient transmis au serveur distant.
Cela générera automatique en fin de fichier de conf du syslog /etc/syslog.conf la ligne suivante
*.* @192.168.18.2
(Idem, ne faites pas la modif directement dans le fichier sous peine d'écraser cette modif par la suite)

Vous obtiendrez les logs dans le Synology sous le nom de programme (squid-1) dans mon exemple.

dimanche 4 septembre 2016

Contrôler l'indexation multimedia du synology

Après une migration de données, ou des copies en masse de fichiers, il se peut que votre Synology passe des jours / semaines / ... à réanalyser vos données (photo / music / vidéo). On ne sait pas trop ce qu'il fait, la barre de progression semble scotchée, on ne sait pas ce qu'il se passe...

Voilà quelques tips pour savoir où on en est ...
(nécessite un accès SSH sur le Synology)

  • Les fichiers d'instruction de l'indexation et de génération des miniatures
Le répertoire /var/spool contient l'état de l'indexation, les listes des actions à réaliser et les répertoires à traiter.

conv_progress_photo & conv_progress_video
informe sur l'état d'avancement des conversions sans donner de détail :
total=3621
total_thumb=14484
completed=3616
completed_thumb=14464
Ça correspond à ce qui est affiché dans le DSM, en haut à droite, derrière l'icone de progression.
On constate ici que pour chaque image, 4 miniatures (thumbs) sont crées, par exemple pour la photo DSC01340.JPG, le répertoire  @eaDir/DSC01340.JPG contient :
SYNOPHOTO_THUMB_B.jpg
SYNOPHOTO_THUMB_M.jpg
SYNOPHOTO_THUMB_S.jpg
SYNOPHOTO_THUMB_XL.jpg

syno_indexing_queue & syno_indexing_queue.tmp
Liste les instructions d'indexation dans la pile des actions à venir (R : reindex, A : add, D ; delete, ...), rempli automatiquement lors d'actions sur les fichiers ou via la commande synoindex (cf point associé).

thumb_create.queue & 
thumb_create.queue.tmp
Liste les dossiers à parcourir pour générer les vignettes.

Si le process d'indexation vous semble vraiment scotché, que le fichier syno_indexing_queue contient beaucoup de lignes et que malgré les reboots ça n'avance pas, il est possible de réinitialiser le tout en supprimant les fichiers syno_indexing_queue* et en relançant le service d'indexation ou en rebootant le NAS (cf synoservice pt suiv).
Au redémarrage, l'icone de progression a du disparètre et il est désormais possible de relancer un scan via le DSM : Panneau de configuration > Services d'indexation > Ré-indexation.
Un fichier syno_indexing_queue.tmp sera à nouveau créé contenant l'unique instruction ReIndex All : 
#offset:128;
R:all
 

  • Tracker et contrôler le process de génération des miniatures
Pour suivre l'activité du process de génération de miniature, il est possible de voir ce qu'il est en train de traiter. Pour cela il faut récupérer son pid et lister le contenu de /proc/[pid]/fd/
This is a subdirectory containing one entry for each file which the process has open, named by its file descriptor, and which is a symbolic link to the actual file. Thus, 0 is standard input, 1 standard output, 2 standard error, and so on.
Pour récupérer le pid du process de génération des miniatures :
# pidof synomkthumbd
10536
Par exemple, un ls -l /proc/10536/fd  donnera le répertoire actuellement en cours de traitement par le générateur de miniature.

Pour liste et manipuler les services Synology (relancer, stopper, etc...), il faut utiliser la commande synoservice :
synoservice --list : liste les services disponibles
synoservice --restart synomkthumbd : relance le service de génération des miniatures.

  • Lister les répertoires de photos indexées en base de données

Pour valider les dossiers déjà indexés, il est possible de requêter sur la base de donnée mediaserver du Synology comme expliqué ci dessous.

Accéder à la base de données Postgres du Syno
psql mediaserver postgres
Exécuter une requête sur la table photo.
Ici les répertoires traités par l'indexation, avec un tips de récupération du path sans le filename en postgres (vu qu'il n'existe pas de last_indexof)
select distinct left(path, length(path) - length(regexp_replace(path, E'.*/',''))) from photo;

  • La commande synoindex
Le process d'indexation suit les instructions présentes dans le fichier syno_indexing_queue qui est complété automatiquement lors d'actions sur le système de fichier (ajout de fichier, suppression, déplacement, etc...).
Il est possible cependant que cela ne soit pas le cas automatiquement via le shell par exemple. Dans ce cas, il est possible de ne pas tout ré-indexer mais de seulement indiquer à l'indexeur que tel fichier/répertoire a été renommé ou a été supprimé, etc...
synoindex
Usage:
synoindex [OPTIONS]
Index Options:
    -h, --help
        this help text
    -A dirpath
        add a dir
    -a filepath
        add a file
    -D dirpath
        delete a dir
    -d filepath
        delete a file
    -N new_dirpath old_dirpath
        rename a dir
    -n new_filepath old_filepath
        rename a file
    -R [all|media|photo|music|video|thumb|dirpath]
        all:     reindex all dirpath that registered in each package
        media:   reindex dirpath that registered in MediaIndex package
        photo:   reindex photo dirpath
        music:   reindex music dirpath
        video:   reindex video dirpath
        thumb:   check converted video of each video file
        dirpath: reindex this specific dirpath
    -R user:{user_name}
        reindex personal photo dirpath
    -R share:{share_name}
        reindex share dirpath
    -R [type_music|type_video|type_photo]
        reindex dirpath that registered with specific type in MediaIndex
Package Index Options:
    -P [MediaIndex|{package_name}] {index_option}
        index operation only apply on this package
    -p [MediaIndex|{package_name}] {index_option}
        index operation apply all packages except for this package
File Index Options:
    -f {index_option}
        index operation apply on file index
    -U photo
        update photo images
Cela permet également de comprendre le contenu des fichiers syno_indexing_queue* car le préfixe des lignes correspond aux options de cette commande.
Exemple de commandes générées suite à l'upload automatique de DS photo (prefixe "a" pour ajout de fichier à la mediatheque) :


# cat /var/spool/syno_indexing_queue
a:/volume1/photo/Mobile/iPhone SE/IMG_0160.JPG
a:/volume1/photo/Mobile/iPhone SE/IMG_0161.JPG
a:/volume1/photo/Mobile/iPhone SE/IMG_0162.JPG
a:/volume1/photo/Mobile/iPhone SE/IMG_0163.PNG
a:/volume1/photo/Mobile/iPhone SE/IMG_0164.JPG
a:/volume1/photo/Mobile/iPhone SE/IMG_0164.MOV
a:/volume1/photo/Mobile/iPhone SE/IMG_0165.JPG
a:/volume1/photo/Mobile/iPhone SE/IMG_0165.MOV
a:/volume1/photo/Mobile/iPhone SE/IMG_0166.JPG
  • L'indexation dans PhotoStation
Photostation dispose d'une indexation distinct de l'indexation générale du DSM, elle est stockée dans une autre base de données : photo.

NB : Pour lister toutes les bases de données disponibles, une fois connecté à psql, il faut utiliser la commande \l, \c pour changer de base de données et \dt pour lister les tables d'une DB.
mediaserver=# \c photo
You are now connected to database "photo" as user "postgres".
La table qui stocke les photos se nomme photo_image.

Une réindexation dans PhotoStation se traduit dans le fichier syno_indexing_queue par la commande suivante :

# cat /var/spool/syno_indexing_queue.tmp
#offset:128;
PhotoStation:1:R:photo


  • Migration des vignettes de PhotoStation v5 à v6
Le nom des vignettes à changer entre PhotoStation 5 et 6, pour passer de SYNOPHOTO:THUMB* à SYNOPHOTO_THUMB* source ). La commande suivante permet de faire un renommage massif des fichiers :

find ./ -type f -name SYNOPHOTO:THUMB*.jpg -exec bash -c 'mv --verbose "$0" "${0/:/_}"' {} \;