Blog geekesque... ou presque

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

Mot-clé - serveur

Fil des billets - Fil des commentaires

lundi 23 octobre 2017

Nginx: répertoire par sous-domaine

Cette petite astuce permet de simplifier la gestion des sous-domaines sur nginx, et surtout ne pas avoir à modifier sa configuration à chaque fois que l'on crée ou supprime un sous-domaine.

Elle exploite la possibilité de nginx d'utiliser des expressions rationnelles dans le nom du serveur.

Configuration

[nginx]
server {
        listen 80;
        server_name ~^(?<subdomain>([^\.]+))\.domaine\.com$;
        if (!-d /home/domain/public_html/$subdomain) {
                rewrite . http://domain.com redirect;
        }
        root /home/domain/public_html/$subdomain;
        index index.php index.html;
        location / {
                try_files $uri $uri/ /index.php?$args;
        }
        access_log /var/log/nginx/domain.dynam.access.log;
        error_log /var/log/nginx/domain.dynam.error.log;
        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_index index.php;
                include fastcgi.conf;
        }
        location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|txt|xml)$ {
                access_log off;
                expires 30d;
        }
}

Explications

URL appelée

[nginx]
server_name ~^(?<subdomain>([^\.]+))\.domaine\.com$;

Cette directive permet de capturer dans la variable $subdomain tout ce qui précède .domaine.com dans l'url appelée. Notez qu'elle ne prend pas en compte l'appel http://domaine.com qui sera notre adresse par défaut et doit donc être traitée par un autre bloc de configuration.

Redirection par défaut

[nginx]
if (!-d /home/domain/public_html/$subdomain) {
   rewrite . http://domain.com redirect;
}

Cette directive est connue des habitués des scripts shell: s'il n'existe pas de sous-répertoire correspondant au sous-domaine, on redirige (de manière visible) l'utilisateur sur l'url par défaut.

Définition du répertoire source

[nginx]
root /home/domain/public_html/$subdomain;

On définit de manière dynamique le répertoire source, toutes les directives suivantes l'utiliseront.

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:

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

Je l'ai remplacée par:

[bash]
`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:

[conf]
LC_ALL=C
LANG=C

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...

dimanche 17 mars 2013

Apache et nginx - Transmettre l'IP du visiteur

Jai omis hier dans mon billet Soulager Apache avec nginx un point essentiel. Lorsque nginx appelle un contenu dynamique, Apache voit que le demandeur est nginx et non pas le visiteur du site, donc toutes les requêtes viennent de 127.0.0.1. Heureusement, il est possible de forwarder les entêtes HTTP adaptés.

Lire la suite...

Soulager apache avec nginx

Le problème avec Apache, c'est que lorsqu'on appelle une page web, il crée un processus par élément appelé par la page (image, feuille de style, ...), ce qui peut rapidement saturer la mémoire du serveur si trop de visites simultannées sont faites sur un site. Heureusement, on peut utiliser un proxy comme nginx pour économiser des ressources.

Lire la suite...

dimanche 9 décembre 2012

Access denied for user ‘debian-sys-maint’@'localhost’ (using password: YES)

Sur Debian, il arrive parfois que cette erreur apparaisse lors d'une tentative de mise à jour de MySQL, ou même lorsque l'on désire arrêter le serveur.

En fait, l'utilisateur debian-sys-maint n'est pas toujours créé, ou bien il est créé sans les bons privilèges, ce qui est génant.

Correction

Le mot de passe de cet utilisateur se trouve dans le fichier /etc/mysql/debian.cnf. Une fois que vous l'avez copié, connectez-vous en tant que root sur la base mysql du serveur:

mysql -u root -p mysql

Et là, donnez les bons droits à l'utilisateur debian-sys-maint (en remplaçant PASSWORD par le mot de passe précédent):

GRANT ALL privileges ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Redémarrez MySQL, tout doit être bon.

lundi 6 août 2012

Bind9 sur Debian

Récemment, j'ai eu un petit souci avec Bind9. Proprement configuré suite à une installation sous Debian, impossible que mes domaines soient bien pris en compte par les différents serveurs DNS.

Je laisse passer 48h pour la propagation, et toujours rien.

Coup de génie: je teste depuis la machine que bind fonctionne bien en faisant telnet 127.0.0.1 53 et ça fonctionne, bind est bien lancé (ce que j'avais vérifié avec un netstat -anp | grep 53).

Je tente d'une autre machine, et là rien...

En fait, il semblerait que les dernières versions de bind9 sur Debian remplissent ainsi le fichier /etc/bind/named.conf.options :

options {
       directory "/var/cache/bind";
       auth-nxdomain no;    # conform to RFC1035
       listen-on-v6 { any; };
       listen-on { 127.0.0.1; };
       allow-recursion { 127.0.0.1; };
};

Il suffit donc de remplacer listen-on { 127.0.0.1; }; par listen-on { any; }; (ou avec l'IP publique de votre serveur) et tout rentre dans l'ordre.

samedi 9 juin 2012

m_restrictcolors : Restriction de couleur sur UnrealIrcd

On m'a demandé s'il était possible sur UnrealIrcd de limiter l'usage de la couleur aux opérateurs d'un canal. C'est maintenant possible avec ce module que je viens de développer.

Lire la suite...

lundi 10 octobre 2011

Créer un patch et l'utiliser

Lorsqu'on développe une (ou des) application(s), il y a fréquemment des mises à jour à faire.

Très souvent, et moi le premier, la méthode la plus simple consiste à purement et simplement écraser ce que l'on a mis en place par les nouveaux fichiers, ce qui peut parfois être lourd (en quantité transférée) alors que les modifications sont mineures, et comporte des risques dûs au transfert FTP.

Heureusement, si votre application est gérée par SVN (je le conseille fortement) et si vous avez accès à l'hébergement de votre application par SSH (ce qui est malheureusement rarement le cas dans le cadre des applications web), diff et patch vont vous simplifier grandement le travail.

Lire la suite...

lundi 18 avril 2011

Réveiller un NAS

Si vous êtes l'heureux possesseur d'un NAS, vous appréciez très certainement son économie d'énergie et le fait qu'il se mette "à l'arrêt" lorsqu'il n'est pas sollicité depuis un certain temps.

Enfin, ceci est de la théorie parce qu'en pratique, si vous êtes plutôt Linux que MacOS ou Windows, il va falloir chercher un peu. J'ai moi-même cherché et j'ai trouvé sur un forum une contribution de themadmax.

Je me permet donc de traduire (et expliquer) la contribution.

Lire la suite...

dimanche 21 mars 2010

Script de sauvegarde automatique

Ce petit script permet de générer des archives horodatées de répertoires sur une machine unix. Il suffit que tar et gunzip soient installés et de configurer les 4 variables, puis d'ajouter une entrée pour ce script dans crontab.

Dans cet exemple, le but est de sauvegarder le répertoire /home/g33kzone/public_html/ (le site) et /var/lib/mysql/g33kzone/ (la base MySQL du site) dans le répertoire /home/backups/. Les fichiers de sauvegarde seront nommés archive_YYYYMMDD.tgz, c'est à dire archive_20100321.tgz pour l'archive du 21 mars 2010.

L'option "VERBOSE" permet d'avoir un affichage des fichiers archivés, elle est à utiliser pour le debug ou si vous voulez enregistrer l'activité d'archivage dans un fichier de log.

#!/bin/bash
 
###############################################
#  Configuration
###############################################
# Destination
BACKUP_DIR="/home/backups/"
# Directories to save
FILESYSTEMS="/home/g33kzone/public_html /var/lib/mysql/g33kzone/"
 
# basename of the archive file
BASE_NAME="archive_"
 
# Would you like to get detailed information from tar and gzip? 0=false,
# 1=true
VERBOSE=0
 
# DO NOT EDIT BELOW THIS LINE
#--------------------------------------------------------
###############################################
#     Application Variables - DO NOT EDIT #
###############################################
# Day of the week;
NOW=`date +"%Y%m%d"`
# Script name
SCRIPTNAME="Backup Script"
# Version
VERSION=0.01
######## Do some error checking #########
# Does backup dir exist?
if [ ! -d $BACKUP_DIR ]
  then
    echo "The specified backup directory $BACKUP_DIR does not exist. Operation canceled."
    exit 1
fi
######## Run Backup #########
LEVEL=0
if [ $VERBOSE -eq 1 ]
  then
    tar cvfz $BACKUP_DIR/$BASE_NAME.$NOW."tgz" $FILESYSTEMS
  else
    tar cfz $BACKUP_DIR/$BASE_NAME.$NOW."tgz" $FILESYSTEMS
fi
 
exit 0

mardi 1 décembre 2009

Comment changer un mot de passe Mysql oublié

Copie du billet Comment changer un mot de passe Mysql oublié de Johann Denoyer

Ca peut arriver d'oublier le mot de passe root de mysql, ou reprendre en main un serveur d'un ancien administrateur ayant quitté l'entreprise un peut rapidement. Donc je vous présente ici comment changer le mot de passe root d'un serveur mysql.

Lire la suite...

vendredi 26 juin 2009

Limitation de l'accès SSH

Parfois, lors d'une mise à jours d'un serveur par exemple, il peut être intéressans de limiter l'accès SSH au seul utilisateur root. Pour faire cela, c'est très simple: il suffit de mettre la raison dans un fichier /etc/nologin et les autres utilisateurs se verront refuser l'accès, avec comme raison le contenu du fichier.

Pour ré-autoriser l'accès, supprimez le fichier.

Bloquer les attaques "brute force" avec iptables

Iptables est l'interface en ligne de commande permettant de configurer Netfilter, qui est un module du noyau Linux qui offre la possibilité de contrôler, modifier et filtrer les paquets IP, et de suivre les connexions. Il fournit ainsi les fonctions de pare-feu, de partage de connexions internet et d'autorisation du trafic réseau.

Il est possible de configurer iptables pour automatiquement bloquer les adresses IP qui feraient trop de tentatives d'accès à votre serveur, un peu à la manière de fail2ban mais sans installer de module complémentaire.

Lire la suite...

mercredi 15 avril 2009

Bug avec xml_parse_into_struct()

J'ai eu la surprise de constater qu'un système qui utilisait xml_parse_into_struct() et fonctionnait très bien sur la plupart des serveurs me faisait perdre l'entité &amp; sur un autre serveur.

Après de longues recherches, il s'avère que c'est un bug qui existait dans libxlm en 2004 et qui a décidé de revenir dans la version 2.6.32. La solution est donc de prendre une autre version de libxml, soit inférieure (toute version 2.6 hormis la 2.6.32) ou bien de passer en 2.7.3 ou supérieure.

Les serveurs sous debian ne sont pas impactés, un correctif faisant parti des mises à jour.

jeudi 12 mars 2009

Apache avec de multiples utilisateurs

Lorsqu'on installe apache sur un serveur, celui-ci fonctionne sous l'utilisateur www-data ou apache. Cela permet de limiter ses droits d'accès, ce qui est une sécurité pour le serveur, mais cela pose un problème pour les fichiers créés par le site ou envoyés par formulaire, car ils n'appartiennent pas au propriétaire du site.

Ceci fait que si l'on ne modifie pas les droits d'accès de l'utilisateur (par exemple en le mettant dans le même groupe qu'apache) ou les permissions par défaut des fichiers, le webmaster ne pourra pas détruire un fichier de son site si ce n'est pas lui qui l'a mis en ligne.

Heureusement, une solution existe, c'est de faire fonctionner chaque sous-processus d'apache en tant que propriétaire du site.

Pour ce faire, il suffit de déclarer dans les définitions des sites sous quel propriétaire et sous quel groupe le site doit s'éxecuter:

<VirtualHost *>
   ServerName server1
   AssignUserID user1 group1
</VirtualHost>
 
<VirtualHost *>
   ServerName server2
   AssignUserID user2 groips
</VirtualHost>