Catégories
Open-source Planet-libre Systeme

Encore un effort pour la libération du cahier Debian

Mise à jour du billet

La libération du livre est désormais acquise, merci à vous tous !

Il est cependant possible de continuer à y participer pour soutenir un peu plus le projet Debian.

===

Raphaël Hertzog s’est lancé dans un projet qui mérite un petit coup de pouce de la part de la communauté des logiciels libres: la libération du Cahier Debian, la référence littéraire pour les utilisateurs et administrateurs du système d’exploitation Debian (traduction et adaptation de la version originale en Anglais de « The Debian administrator’s Handbook »).

bandeau-toutes-couvertures

Trois objectifs sont en fait visés:

  • garantir la libération du livre
  • effectuer sa mise à jour pour Debian 7
  • mise en place d’une nouvelle édition en librairie

Pour cela Raphaël et Roland, après négociation préalable avec l’éditeur Eyrolles, sont passés par un système de financement de type « crowfunding ». Ainsi, à partir du site Ulule, il vous est possible de participer à cette aventure en finançant en amont ce beau projet. Pour cela, plusieurs offres sont possibles, de 5€ à 600€+ pour les plus riches :). Pour que celle-ci commence vraiment et que le projet soit réalisé, il faut un minimum de 15.000€.

A l’heure actuelle (2 juin à 18h), il reste encore 4.500€ à trouver.

Je compte sur vous pour donner quelques €€€€.

Cliquez ici pour participer au projet de libération du cahier Debian !

Bonne fin de week-end !

Note: personnellement, je trouve l’offre à 50€ la plus atractive car elle permet d’avoir le cahier au format papier (c’est mon coté old school qui parle).

Catégories
Open-source Planet-libre Systeme

De Squeeze à Wheezy…

Depuis aujourd’hui, Wheezy est officiellement devenue la septième version stable du système d’exploitation GNU/Linux Debian. Nous allons dans ce billet voir une migration simple d’un serveur Squeeze (Debian 6) vers cette nouvelle version de Debian. Cette migration est adapté uniquement aux serveurs avec une configuration standard. Pour des configurations exotiques, je vous conseille fortement de suivre la procédure officielle très bien détaillée sur le site de Debian.

Avant de commencer…

  • Effectuez la migration à un moment ou vous avez du temps et ou votre serveur n’est pas beaucoup sollicitée (par exemple un dimanche pour un serveur perso).
  • Sauvegarder vos données avant de commencer.
  • Préparez une procédure de ré-installation simple et rapide au cas ou quelque chose se passe mal.
  • Idéalement se faire la main sur un serveur non critique avant de passer aux serveurs critiques.
  • Pas de panique, ce n’est que de l’informatique.

Se loguer en root (ou avec un user ayant les droit root):

su - root

On commence par préparer le terrain

Avant de procéder à la migration vers Wheezy, il faut s’assurer que votre Squeeze et propre et à jour. Pour cela, on commence par mettre à jour les repos et les packages Squeeze:

$ apt-get update && apt-get upgrade

On doit ensuite et c’est une des étapes les plus lourdes, vérifier que l’ensemble des repos non standards sont disponibles pour Wheezy.

On commence par visualiser le fichier /etc/apt/sources.list:

deb http://debian.mirrors.ovh.net/debian/ squeeze main
deb-src http://debian.mirrors.ovh.net/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

## DotDeb Package
deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze all

On peut donc voir que j’utilise les miroirs officiels de Debian fournis par OVH (l’hébergeur de mon serveur de test) qui sont disponibles pour Wheezy ainsi que le repo DotDeb  également disponible pour Wheezy.

On poursuit avec les repos disponibles sous /etc/apt/sources.list.d/. Je n’ai personnellement qu’un seul repo qui est compatible avec Wheezy:

$ cat /etc/apt/sources.list.d/10gen.list

deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen

Pour les utilisateurs de sudo

Si vous utilisez sudo sur votre système, il faut effectuer les manipulations suivantes avant la mise à jour sous peine de se retrouver sans fichier de configuration valable.

cp /etc/sudoers /etc/sudoers.d/mysettings

On édite ensuite le fichier /etc/sudoers.d/mysettings pour lui enlever les lignes Defaults et #includedir. Lors de l’upgrade, le fichie /etc/sudoers doit être remplacé par le nouveau.

Pour les utilisateurs de php5-suhosin

Le paquet php5-suhosin n’existe plus dans cette nouvelle version de Debian. Il faut donc saisir la commande suivante pour supprimer la configuration correspondante /etc/php5/conf.d/suhosin.ini:

dpkg --purge php5-suhosin

Puis on migre vers Debian 7 (aka) Wheezy

Si tous les repos que vous utilisez sont compatibles, alors il suffit de saisir la commande suivante pour migrer les fichiers de configuration vers Wheezy:

sed -i 's/squeeze/wheezy/g' /etc/apt/sources.list
for i in `ls /etc/apt/sources.list.d/*.list`; do sed -i 's/squeeze/wheezy/g' $i; done

On va ensuite enchaîner la mise à jour proprement dite en faisant:

  • une mise à jour des sources (repos)
  • une première mise à jour minimale
  • une seconde mise à jour totale
apt-get update
apt-get upgrade
apt-get dist-upgrade

Il ne vous reste plus qu’à attendre et vérifier qu’il n’y a pas de problème lors des ces trois étapes. Si vous avez une erreur, attention de bien la résoudre (Google est ton ami) avant de passer à l’étape suivante. PAr exemple, il est possible que certains paquets n’arrive pas à se mettre à jour. Les deux ligne suivantes devraient corriger ce problème:

apt-get -f install
apt-get dist-upgrade

On finalise la configuration en vérifiant que le fichier

Sinon, il ne vous reste plus qu’à redémarrer votre serveur (cette dernière étape étant facultative).

Catégories
Open-source Planet-libre raspberry Systeme

Mes 5 premières minutes sur un serveur Debian

sam

Sur une idée originale pompée honteusement sur le blog de Bryan Kennedy.

La virtualisation ou la possibilité d’acheter des machines à bas prix comme le Raspberry implique le fait que l’installation de serveurs devient une tâche de plus en plus fréquente. Afin d’éviter les grossières erreurs qui peuvent rapidement devenir fatales si la machine est exposée au réseau Internet, voici les actions que j’effectue systématiquement sur mes systèmes d’exploitations Debian ou Ubuntu Server.

Si vous suivez ce blog, vous savez que je suis un gros fainéant pour ce genre de tâches récurrentes. J’ai donc écrit un ensemble de scripts permettant d’effectuer les actions de « post installation ». J’ai également commencé à regarder du coté des systèmes de gestion de configuration comme Puppet qui sont des solutions à utiliser en priorité si vous avez un parc informatique important.

L’objectif de ce billet est donc pédagogique pour partager avec vous les actions à effectuer et, je l’espère, en apprendre de nouvelles.

Assez de palabres, place au clavier…

1) S’occuper de ses comptes

Je parle bien évidemment ici des comptes utilisateurs qu’il va falloir sécuriser. On commence par le compte root qui ne sera PAS (jamais, c’est mal) utilisé directement pour vous connecter sur votre machine. Lors de l’installation du système, il faut saisir un mot de passe sécurisé, c’est à dire assez long avec un mélange de lettres, de chiffres et d’autres caractères mais sans utiliser des mots connus ou des suites de chiffres. Vous n’avez pas besoin de connaitre ce mot de passe par coeur mais il faudra le conserver bien au chaud.

Une fois logué sur la machine (on durant la phase d’installation du serveur), on commence par créer un utilisateur principal que l’on utilisera pour se connecter à la machine.

J’ai choisi morpheus pour illustrer mon billet.

useradd morpheus
mkdir /home/morpheus

La suite des opérations sera donc faite à partir de cet utilisateur.

2) S’occuper de ses portes d’entrées avec SSHd

SSH est devenu le mode d’accès le plus utilisé pour accéder aux serveurs GNU/Linux. Par défaut, il propose un contrôle d’accès par nom d’utilisateur et mot de passe. J’essaye au maximum d’éviter cette solution. J’utilise le système d’authentification par clé publique qui est un peu plus lourde à mettre en oeuvre et à administrer mais qui offre un niveau de sécurité plus important.

Pour ajouter la clé publique de mon PC avec lequel je vais me connecter au serveur, il suffit de lancer la commande suivante à partir de cette machine:

ssh-copy-id morpheus@monserveur

Puis on force l’utilisation de l’authentification par clé publique et on ferme ensuite cette porte à l’utilisateur root:

sudo vim /etc/ssh/sshd_config

PasswordAuthentication no
PermitRootLogin no

Attention: l’authentification par  nom d’utilisateur / mot de passe sera désactivée pour les accès SSH. 

On relance ensuite le daemon SSH:

sudo service  ssh restart

3) Contrôler les entrées avec Fail2ban

Une fois le daemon SSH sécurisé, il faut ensuite ajouter une couche permettant de contrôler plus finement les accès. J’utilise pour cela Fail2ban que j’ai abordé plus précisément dans un précédant billet. Dans notre sujet du jour, je vais configurer Fail2ban pour bloquer, pendant 5 minutes, l’accès à SSH à un utilisateur qui se trompe 3 fois de mot de passe.

On commence par installer fail2ban:

sudo apt-get-install fail2ban

On va ensuite éditer le fichier /etc/fail2ban/jail.conf pour le configurer comme l’on souhaite:

[ssh]
enabled = true
port = ssh
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/auth.log
maxretry = 3
bantime = 300

On relance ensuite le service pour prendre en compte la configuration:

sudo service fail2ban restart

4) Fermer les fenêtres (de votre Firewall)

Comme nous l’avons vu dans le point précédant, Fail2ban utilise le Firewall IPtable qui part défaut laisse passer l’ensemble des flux. J’applique systématiquement une configuration beoucoup plus restrictive qui autorise les flux SSH entrant (pour l’accès à distance) et HTTP/HTTPs/DNS sortant (pour la mise à jour de mon serveur).

J’utilise pour cela un script de démarrage maison:

sudo wget --no-check-certificate -O /etc/init.d/firewall.sh https://raw.github.com/nicolargo/debianpostinstall/master/firewall.sh
sudo chmod a+x /etc/init.d/firewall.sh

que je lance au démarrage de la machine (et aussi immédiatement):

sudo update-rc.d firewall.sh defaults 20
sudo service firewall start

Il est bien sûr possible d’adapter ce script à vos besoins de flux entrants et sortants en éditant les lignes suivantes:

# Services that the system will offer to the network
TCP_SERVICES="22" # SSH only
UDP_SERVICES=""
# Services the system will use from the network
REMOTE_TCP_SERVICES="80 443" # web browsing
REMOTE_UDP_SERVICES="53" # DNS

5) Prendre soin de ses fondations en tenant son système à jour

Maintenir à jour ses serveurs est une tâche à la fois indispensable et rébarbative. Il y a ici deux écoles possibles. La première est d’utiliser un logiciel comme unattended-upgrades qui va installer automatiquement pour vous les mises à jours de sécurités ou même l’ensemble de votre système. C’est une solution élégante mais qui n’est pas sans risque si un pépin arrive suite à une mise à jour alors que vous êtes loin de vous machines. J’opte donc pour la seconde solution, basée sur cron-apt, qui va me notifier par mail les mises à jours à effectuer sur mes machines.

On installe cron-apt avec la commande:

sudo apt-get install cron-apt

Puis on configure l’adresse mail de destination des messages de notifications dans le fichier /etc/cron-apt/config:

MAILTO="bibi+monserveur@gmail.com"

Note: comme vous pouvez le lire, j’utilise une adresse Gmail bibi@gmail.com pour la réception de mes notifications. J’y ajoute +monserveur (qui sera ignoré par Gmail) afin de pouvoir facilement les filtrer.

On relance le service pour prendre en compte la configuration:

sudo service cron-apt restart

Les notifications seront envoyés par défaut toutes les nuits à 4h du matin.

6) Surveiller le tout avec Logwatch

A ce stade vous avez un serveur disposant d’une sécurité de base qui va le protéger de la grande majorité des attaques que l’on peut trouver sur Internet. Il ne reste plus qu’à installer Logwatch, un outil permettant d’analyser les logs et ainsi de remonter par mail des rapports permettant d’analyser des tentatives d’intrusions éventuelles.

La mise en place est assez simple.

sudo apt-get install logwatch

Puis on configure l’adresse mail de destination des messages de notifications dans le fichier /etc/cron-apt/config:

#execute
/usr/sbin/logwatch --output mail --mailto bibi+monserveur@gmail.com --detail high

On relance le service pour prendre en compte la configuration:

sudo service cron-apt restart

Les notifications seront envoyés par défaut toutes les nuits.

7) Conclusion

Nous arrivons à la fin de ce billet avec une machine à l’épreuve d’une exposition à Internet sans risque de se faire hacker par le premier « script kiddie » venu.

A vous de nous faire partager vos techniques, méthodes que vous appliquez sur vos nouveaux serveurs !

Catégories
Open-source Planet-libre Web

Installer facilement NodeJS et NPM sur une Debian Stable

A l’heure actuelle, il n’existe pas de dépôt officiel pour installer NodeJS et NPM sur une distribution Debian Stable. Voici donc un nouveau script d’installation automatique qui va installer sur votre système Debian:

  • la dernière version de NodeJS (depuis le GitHub officiel)
  • la dernière version de NPM  (Node Package Manager)

Comme toujours, mon script est hébergé sur GitHub. C’est à partir de là que vous pouvez me remonter vos questions et remarques…

Procédure à suivre

Le plus simple est de saisir les commande suivantes dans un terminal:

cd /tmp
wget https://raw.github.com/nicolargo/nodeautoinstall/master/nodeautoinstall.py
sudo python ./nodeautoinstall.py -d

Le script va normalement se dérouler sans problème en installant le tout dans le répertoire /opt/node (qu’il est possible de modifier avec l’option -o du script).

L’option -d permet de générer un fichier de log de l’exécution du script (à consulter en cas de problème…) dans le fichier /tmp/nodeautoinstall.log.

Pour que votre/vos utilisateurs puisse utiliser node, il faut également qu’ils ajoutent les lignes suivantes au fichier .profile:

# --- NodeJS
export PATH=$PATH:/opt/node/bin
export NODE_PATH=/opt/node:/opt/node/lib/node_modules
# ---

Le résultat…

Vous devriez alors disposer des dernières versions des deux composants:

Il ne vous reste plus qu’à suivre mon billet d’introduction à NodeJS en passant le chapitre sur l’installation que vous venez de faire automatiquement dans ce billet:)

Catégories
Open-source Planet-libre Reseau

Simuler un réseau WAN entre deux réseaux LAN

A partir de sa version 2.6, le noyau Linux dispose d’une fonction permettant de simuler certaines caractéristiques comme un délais de transit, une perte de paquets ou même un débit maximal sur une simple interface réseau locale. J’avais déjà parlé de ce sujet il y a quelques temps pour simuler une liaison WAN entre une machine et son réseau. Suite à une question d’un lecteur, voici un billet dans lequel nous allons mettre en place un simulateur de liaison WAN entre deux réseaux LAN. Cette infrastructure pourra être utile à toutes personnes devant valider sur table une architecture inter-site.

De quoi avons nous besoin ?

Pour bâtir cette infrastructure, nous avons besoins de deux réseaux LAN (mais deux PC peuvent suffirent) et d’une machine GNU/Linux disposant de deux interfaces réseaux permettant de faire un pont entre ces deux LAN. Le choix d’une architecture en pont (bridgé) permet d’insérer facilement le simulateur dans une architecture réseau existante.

 

Configuration du bridge

Personnellement, j’ai utilisé une distribution GNU/Linux Debian Squeeze pour mettre en place le simulateur. Mais toutes les distributions GNU/Linux avec une version de Kernel >= 2.6 peuvent faire l’affaire.

Après une installation standard du système d’exploitation Debian, il faut ajouter le paquet bridge-utils pour permettre à ce dernier de créer le pont entre les deux interfaces réseaux:

sudo aptitude install bridge-utils

Il faut ensuite éditer le fichier de configuration /etc/network/interfaces de la manière suivante:

auto lo

iface lo inet loopback

iface eth0 inet manual

iface eth1 inet manual

auto br0

iface br0 inet dhcp

bridge_ports eth0 eth1

Puis on fait prendre en compte cette configuration par le système:

sudo /etc/init.d/networking restart

Note: il faut attendre une trentaine de seconde lors de l’initialisation.

On vient donc de créer une nouvelle interface virtuelle (br0) qui fait un pont entre les deux interfaces physiques (eth0 et eth1).

Si vous connectez en l’état le simulateur entre vos deux LAN, tout le trafic transitera de manière transparente à la vitesse maximale de vos interfaces eth0 et eth1.

Configuration du simulateur

On passe maintenant à la partie intéressante de ce billet: comment simuler un lien WAN à partir de notre simulateur.

Vous allez voir que c’est relativement simple. Nous allons utiliser un script de configuration automatique qui va activer / désactiver le simulateur à la demande. Les caractéristiques du WAN à simuler seront codées en dur dans la section configuration du script. A vous de l’adapter à vos besoins.

Voici le script en question (également disponible sur mon GitHub):

#!/bin/bash
#
# simulwan-bridge.sh
# Nicolargo - 2012
#

##############################################################################

# Nom des interfaces ou l'on doit faire les simulations
# eth0 cote LAN local 
# eth1 cote LAN distant
IF=eth1

# Liaison sortante (UPLOAD) a appliquer sur IF
# Debit sortant
BWU=8mbit
# Délai de transit sortant
DELAYU=15ms
# % de paquets perdus sortant
LOSSU=0.0001%

# Liaison entrante (DOWNLOAD) a appliquer sur IF
# Debit entrant
BWD=1mbit
# Délai de transit entrant
DELAYD=15ms
# % de paquets perdus entrant
LOSSD=0.00001%

##############################################################################

start() {
    modprobe ifb
    ip link set dev ifb0 up

    tc qdisc add dev $IF ingress

    tc filter add dev $IF parent ffff: \
    protocol ip u32 match u32 0 0 flowid 1:1 \
    action mirred egress redirect dev ifb0

    # Liaison entrante
    tc qdisc add dev ifb0 root handle 1:0 \
    netem delay $DELAYD 10ms distribution normal \
    loss $LOSSD 25%

    tc qdisc add dev ifb0 parent 1:1 handle 10: \
    tbf rate $BWD buffer 3200 limit 6000

    # Liaison sortante
    tc qdisc add dev $IF root handle 2:0 \
    netem delay $DELAYU 10ms distribution normal \
    loss $LOSSU 25%

    tc qdisc add dev $IF parent 2:1 handle 10: \
    tbf rate $BWU buffer 3200 limit 6000
}

stop() {
    tc qdisc del dev ifb0 root
    tc qdisc del dev $IF root
    # ip link set dev ifb0 down
}

restart() {
    stop
    sleep 1
    start
}

show() {
    echo "Liaison entrante"
    tc -s qdisc ls dev ifb0
    echo "Liaison sortante"
    tc -s qdisc ls dev $IF
}

case "$1" in
    start)
        echo -n "Starting WAN simul: "
        start
        echo "done"
        ;;
    stop)
        echo -n "Stopping WAN simul: "
        stop
        echo "done"
        ;;
    restart)
        echo -n "Restarting WAN simul: "
        restart
        echo "done"
        ;;
    show)
        echo "WAN simul status for $IF:"
        show
        echo ""
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|show}"
        ;;
esac

exit 0

Par défaut, le script simule une liaison WAN de type ADSL (8 Mbps en download et 1 Mbps en upload avec un délais de transit de 30ms en aller/retour et un taux de perte de 10^-4).

Pour l’installer, il suffit de saisir les commandes suivantes:

sudo wget -O /etc/init.d/simulwan.sh https://raw.github.com/nicolargo/simulwan/master/simulwan-bridge.sh
sudo chmod a+x /etc/init.d/simulwan.sh

Pour lancer le simulateur WAN:

sudo /etc/init.d/simulwan.sh start

Pour arrêter le simulateur WAN:

sudo /etc/init.d/simulwan.sh stop

Pour avoir un état des interfaces:

sudo /etc/init.d/simulwan.sh show

Conclusion

Vous venez donc à moindre coût de mettre en place une architecture permettant de simuler des liaisons WAN. Le PC sur lequel se base votre simulateur n’a pas besoin d’être une bête de course et vous pouvez donc facilement récupérer du vieux matériel pour mettre en place ce système.

 

 

 

Catégories
Image Open-source Planet-libre Web

Gérer vos photos avec OpenPhoto, un service auto-hébergé

C’est suite à un tweet sur l’abandon du développement de la version GNU/Linux de Picassa par les équipes de Google que j’ai entendu parler pour la première fois du projet OpenPhoto (bien que comme nous allons le voir les deux sujets ne soient pas liés).

OpePhoto propose d’héberger dans un « cloud » vos photos, permettant ainsi un accès dématérialisé (plus besoin d’apporter sa clé USB pour montrer les photos de vacances à ses parents/amis).

OpenPhoto propose pour cela deux solutions:

  • un service en ligne proposant de gérer vos photos (importation, catégories, tag, applications smartphones, API…) mais en les hébergeant dans votre « cloud » (Dropbox ou votre espace de stockage Amazon S3 et prochainement Google Drive).
  • une version communautaire et libre permettant d’auto-héberger son propre serveur. Cette version propose en plus un stockage local des photos (sans passer par Dropbox ou Amazon S3).

C’est sur cette deuxième configuration que nous allons nous pencher dans ce billet en proposant une procédure d’installation et de configuration de Open Photo sur une machine Debian Squeeze avec NGinx , PHP-FPM et MySQL (la procédure doit être la même sous Ubuntu, mais je n’ai pas vérifié).

Note: à l’heure de la rédaction de ce billet, il y a peu ou très peu de documentation sur le Web sur comment installer OpenPhoto sur un serveur Nginx (alors que l’on trouve un tas de procédure pour les autres serveurs Web du marché sur le GitHub officiel…). Si une âme généreuse veut proposer une adaptation de ce billet dans le même formalisme que l’installation sous Apache, je pense que le projet serait très reconnaissant… (je m’en suis chargé).

Préparation de l’installation

Je pars sur le principe ou vous avez une machine Debian sur laquelle Nginx et PHP-FPM sont déjà installé. Si ce n’est pas le cas, vous pouvez suivre ce billet.

En plus, il faudra installer les paquets suivants:

sudo apt-get install mysql-server git-core php5-dev php5-mysql php5-curl curl php5-gd php5-mcrypt php5-imagick php-pear exiftran

On configure PHP en éditant les variable suivantes dans le fichier /etc/php5/fpm/php.ini (à adapter à votre besoin, notamment si vous avez un appareil photo avec un capteur générant des images > 16 Mo):

file_uploads = On
upload_max_filesize = 16M
post_max_size = 16M

On active également l’oAuth (pour l’authentification des applications tierces comme par exemple les applis iPhone et Android):

sudo pecl install oauth
sudo sh -c "echo \"extension=oauth.so\" >> /etc/php5/conf.d/oauth.ini"

On redémarre PHP-FPM pour prendre en compte les modifications:

sudo service php-fpm restart

Installation de OpenPhoto

On créé ensuite un répertoire dans notre serveur Web (/var/www/openphoto) et on télécharge la dernière version de la version communautaire (libre) de OpenPhoto:

sudo mkdir /var/www/openphoto
sudo git clone git://github.com/photo/frontend.git /var/www/openphoto

Puis on prépare l’arborescence:

sudo mkdir /var/www/openphoto/src/userdata
sudo mkdir /var/www/openphoto/src/html/photos
sudo mkdir /var/www/openphoto/src/html/assets/cache
sudo chown -R www-data:www-data /var/www/openphoto

Enfin on génère le fichier de configuration Nginx /etc/nginx/sites-enabled/openphoto pour le site OpenPhoto (à adapter également à votre configuration, notamment au niveau du server_name):

server {
	listen 80;
	server_name openphoto.mondomaine.com;
	root /var/www/openphoto/src/html; 

	index  index.php;
	client_max_body_size 25M;
	default_type text/html;
	charset utf-8;

	if (!-e $request_filename) {
		rewrite ^/([^?]*)(\?+([^?]*))*$ /index.php?__route__=/$1&$3 last;
	} 

	# PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000
	# Check cache and use PHP as fallback.
	location ~* \.php$ {
                 try_files $uri =404;

                 fastcgi_pass 127.0.0.1:9000;
                 fastcgi_index index.php;
                 include fastcgi_params;
		 fastcgi_ignore_client_abort off;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
	}

	# Global restrictions configuration file.

	location = /favicon.ico {
		log_not_found off;
		access_log off;
	}

	location = /robots.txt {
		allow all;
		log_not_found off;
		access_log off;
	}

	location ~ /\. {
		deny all;
		access_log off;
		log_not_found off;
	}

	location ~ \.ini$ {
		deny all;
		access_log off;
		log_not_found off;
	}

	add_header Cache-Control "max-age=315360000";
	# Mise ne cache des ressources statiques
	location ~* ^.+\.(jpg|jpeg|gif|css|png|js|xml)$ {
		expires 30d;
		access_log off;
	}
}

On redémarre NGinx pour prendre en compte le site:

sudo service nginx restart

Puis on crée une nouvelle base de donnée MySql. Notez sur une feuille, le nom de la base (openphoto), le nom de l’utilisateur (openphoto) et le mot de passe associé (openphotomdp2012):

# mysql -u root -p
Enter password: 

mysql> create database openphoto;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON openphoto.* TO "openphoto"@"localhost" IDENTIFIED BY "openphotomdp2012";
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

Configuration initiale de OpenPhoto

La suite de la configuration se fera à partir d’un navigateur Web, plus besoin de la ligne de commande :).

On doit dans un premier temps créer un compte sur le site OpenPhoto (même si on utilise pas la version en ligne et seulement une version auto-hébergé). Une fois le mail de confirmation reçu et la confirmation effectué, vous pouvez poursuivre l’installation en vous rendant à l’URL: http://openphoto.mondomaine.com (remplacer mondomaine.com par votre domaine que vous avez configurez dans le fichier de configuration NGinx). Si vous n’avez pas de domaine, il est possible de passer directement par l’adresse IP de votre machine.

Vous devez arriver sur la page suivante:

On entre:

  1. l’adresse email associé à votre compte OpenPhoto
  2. on laisse le thème par défaut et on clique sur « Continue to step 2 »

On passe à la deuxième étape de l’installation:

On sélectionne:

  1. une base de donnée de type MySQL (que l’on a préalablement créer dans le chapitre précédant)
  2. un stockage local des photos (on peut noter qu’il est possible de mixer stockage local et Dropbox)
  3. on passe à la troisième et dernière étape

Elle permet de configurer notre base de donnée MySQL (reprendre votre petite feuille…):

A la fin de cette procédure, votre serveur OpenPhoto est prêt !

Prise en main et premières impressions

La première chose à faire est d’importer quelques photos. On peut utiliser la page Upload qui propose une importation par Drag & Drop (ou sélection plus classique dans le gestionnaire de fichiers) ou bien l’application dédiée de votre SmarthPhone (Android et iPhone). Les images sont téléchargés sur votre serveur avec une très élégante barre de progression. On note au passage qu’OpenPhoto utilise les dernières technologies HTML5.

On peut ensuite éditer les images en y ajoutant une description, des tags, des coordonnées GPS, des droits (public ou privé) et une licence. Ces informations sont bien sûr récupérées automatiquement si elles sont présentes dans les méta-données du fichier.

Elle est pas belle ma fille ? 🙂

OpenPhoto permet de créer des groupes d’utilisateurs ayant des droits sur certaines photos. Par exemple, si vous créez un groupe Famille, alors il sera possible de classer vos photos familiales dans ce groupe afin qu’elles ne soient visibles que par vos proches. Pour grouper vos photos dans des groupes, le plus simple est d’aller dans le menu Manage, de sélectionner les photos en question (par un simple clic sur le bouton pin) puis de cliquer sur le bouton « Batch edit » et enfin de séléctionner le groupe.

Mes premières impressions sont très bonnes. OpenPhoto est rapide, stable. Le seul problème que j’ai rencontré est au niveau de l’affichage de la Gallery ou les photos sont déformées. Je vais essayer de le pousser un peu en important un grand nombre d’images (je ferai une màj du billet).

On sent une grande marge de manoeuvre au niveau des fonctionnalités proposées. Il est d’ailleurs possible de voter avec la communauté pour influencer la roadmap du logiciel sur les futures fonctions. J’aime le fait qu’OpenPhoto se concentre uniquement sur la gestion des images, contrairement à OwnCloud dont j’avais parlé dans un précédent billet.

Que pensez-vous de ce genre de service ?

Êtes vous prêts à franchir le pas et d’auto-héberger vos photos sur une de vos machines ?

Catégories
Open-source Planet-libre Systeme

Créer un dépôt Debian local sans liaison Internet

Vous êtes sur un réseau sans accès Internet et vous devez installer et maintenir plusieurs machines Debian ?

Ce scénario s’étant présenté à moi, j’ai décidé d’installer sur ce réseau isolé  un dépôt Debian local que j’ai construit à partir des 8 DVD d’installation de la version 6.0.3 de Debian Squeeze.  Nous allons donc dans ce billet voir la marche à suivre, étape par étape.

Construction du dépôt local

Pour effectuer cette action, il faut:

  • les DVD d’installation de la Debian 6.0.x ou toutes les images ISO des DVD d’installation de Debian 6.0.x (à télécharger ici)
  • une machine sous Debian qui hébergera le dépôt local (donc avec un minimum de 50 Go de disque disponible)
  • du temps…

On commence par faire une installation standard de Debian 6.

On créé ensuite un répertoire qui contiendra le dépôt local (/data/debian dans mon exemple qui est en fait un point de montage sur un deuxième disque dur):

mkdir /data/debian

Si vous avez les DVD…

On copie les fichiers .deb des DVD dans ce répertoire en utilisant insérant le DVD dans le lecteur puis en saisissant la commande suivante (action à répéter pour les 8 DVD):

for f in $(find /media/cdrom/debian/pool/ -type f); do cp $f -t /data/debian; done

Si vous avez les images ISO…

Si comme moi vous avez copié les images ISO des DVD sur un NAS (monté dans le répertoire /mnt/nas/iso/debian) alors vous pouvez utiliser cette commande en lieu et place de la précédante:

mkdir -p /mnt/iso
for i in `ls /mnt/nas/iso/debian`
do
  mount -o loop /mnt/nas/iso/debian/$i /mnt/iso
  for f in $(find /mnt/iso/debian/pool -type f)
  do 
    echo $f
    cp $f -t /data/debian
  done
  umount /mnt/iso
done

A la fin de ces opérations, le répertoire /data/debian devrait contenir l’ensemble des paquets .deb constituant la distribution stable de Debian Squeeze (pour une taille d’environ 35 Go).

On passe ensuite à la création des deux fichiers qui vont permettre de transformer ce répertoire en un dépôt Debian: les fichiers Release et Packages.gz.

Le fichier Release

On commence par le fichier Release (à mettre dans le répertoire /data/debian) qui décrit le le dépôt. C’est un fichier texte à créer avec votre éditeur favori:

Archive: squeeze

Component: main

Origin: Nicolargo

Label: Le depot de Nicolargo

Architecture: amd64

Les lignes importantes sont:

Archive: squeeze > Ce dépôt sera utilisable par des machines sous Debian 6 (nom de code Squeeze)

Component: main > Ce dépôt contient les composant principaux de la distribution Debian 6

Architecture: amd64 > Ce dépôt sera utilisable par des machines 64 bits

Le fichier Packages.gz

On continu ensuite avec le fichier Packages (compressé avec Gzip) qui contiendra la description (nom, version , description, dépendances…) de tous les paquets .deb se trouvant dans le répertoire. Il est bien sur impossible de construire ce fichier à la mimine. Nous allons donc utiliser l’utilitaire dpkg-scanpackages.

cd /data/debian

dpkg-scanpackages ./ /dev/null | gzip -9c > Packages.gz

Cette opération va prendre un certain temps… Soyez patient…

Test local du dépôt

Avant d’utiliser ce dépôt sur d’autres machines, il faut dans un premier temps le tester sur notre machine hébergeant le dépôt. Pour cela il faut éditer le fichier /etc/apt/sources.list pour y laisser seulement la ligne suivante:

deb file:///data/debian ./

On met ensuite à jour la base APT de notre machine:

apt-get update

Installation du serveur Web pour proposer le dépôt à d’autres machines

Pour que votre dépôt soit visible depuis les autres machines de votre réseau, le plus simple est d’y installer un serveur Web qui va présenter le répertoire /data/debian en utilisant le protocole HTTP.

Personnellement, j’utilise le serveur Web NGinx:

apt-get install nginx

Puis en éditant le fichier /etc/nginx/sites-enabled/defaults:

server {

listen 80;

server_name localhost;

access_log logs/debianrepos.access.log main;

location /debian {

root /data;

autoindex on;

}

}

On relance NGinx pour prendre en compte la configuration:

/etc/init.d/nginx restart

Utilisation du dépôt local

Pour utiliser notre beau dépôt local sur une autre machine Debian Squeeze, il suffit d’éditer le fichier /etc/apt/sources.list pour y laisser seulement la ligne suivante:

deb http://192.168.1.100/debian ./

Ou 192.168.1.100 est à remplacer par l’adresse IP du serveur hébergeant votre dépôt.

On met ensuite à jour la base APT de notre machine:

apt-get update

Il ne reste plus qu’a installer vos logiciels en utilisant la commande apt-get install !

Sources pour la rédaction de ce billet:

Catégories
Open-source Planet-libre Systeme

Pense-bête: un deuxième disque dur pour votre GNU/Linux

Petit pense-bête à usage interne pour installer (= partitionner & formater) un deuxième disque dur au format ext4 sur une distribution GNU/Linux.

Notes: les commandes suivantes doivent être effectuées depuis un compte root.

Préparation

On commence par vérifier la liste des disques disponibles avec la commande:

[cc]
# fdisk -l
[/cc]

J’obtiens:

Disk /dev/sda: 17.2 GB, 17179869184 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0000f7a3

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1998    16043008   83  Linux
/dev/sda2            1998        2089      731137    5  Extended
/dev/sda5            1998        2089      731136   82  Linux swap / Solaris

Disk /dev/sdb: 34.4 GB, 34359738368 bytes
255 heads, 63 sectors/track, 4177 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table

J’ai donc deux disques disponibles (je suis sur une VM donc ne vous étonnez pas des tailles):

  • /dev/sda: d’une taille de 17.2 GB avec 3 partitions (sda1, sda2, sda5)
  • /dev/sdb: d’une taille de 34.4 GB sans partition

C’est ce deuxième disque (sdb) que l’on souhaite installer

Partitionnement

On commence donc par partitionner le disque en question:

[cc]
# fdisk /dev/sdb
[/cc]

Notes: Faites bien attention à lancer la commande fdisk sur le bon disque…

une seule grosse partition qui utilisera la totalité de l’espace disque:

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x852ed7ac.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-4177, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-4177, default 4177): 
Using default value 4177

Puis on demande à fdisk de lui affecter le type ‘Linux’

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83

Puis on valide:

Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

La partition que l’on vient de créer portera le nom sdb1.

Formatage en ext4

On utilise ensuite la commande mkfs.ext4 pour formater la partition au format EXT4

[cc]
# mkfs.ext4 -b 4096 /dev/sdb1
[/cc]

mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2097152 inodes, 8387930 blocks
419396 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
256 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Vérification

On vérifie que tout c’est bien passé:

[cc]
# fdisk -l
[/cc]

Disk /dev/sda: 17.2 GB, 17179869184 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0000f7a3

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1998    16043008   83  Linux
/dev/sda2            1998        2089      731137    5  Extended
/dev/sda5            1998        2089      731136   82  Linux swap / Solaris

Disk /dev/sdb: 34.4 GB, 34359738368 bytes
255 heads, 63 sectors/track, 4177 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x852ed7ac

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        4177    33551721   83  Linux

Nous disposons donc bien d’une disque (/dev/sdb1) de 34.4 GB

Utilisation de la nouvelle partition

Pour utiliser ce nouveau disque, il faut le monter (« mount »).

On commence donc par créer un répertoire (/mnt/data) dans lequel le contenu du disque sera visible:

[cc]
# mkdir /mnt/data
[/cc]

Puis on édite le fichier /etc/fstab pour lui ajouter la ligne suivante:

/dev/sdb1             /mnt/data    ext4  defaults   1 1

On monte le disque:

[cc]
# mount /mnt/data
[/cc]

et on vérifie que le système le détecte:

[cc]
# df -k
[/cc]

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15791024   2446256  12542620  17% /
tmpfs                   513604         0    513604   0% /lib/init/rw
udev                    508732       116    508616   1% /dev
tmpfs                   513604         0    513604   0% /dev/shm
/dev/sdb1             33025240    180152  31167504   1% /mnt/data

Bingo, il ne reste plus qu’à écrire/lire vos données dans le répertoire /mnt/data !

Catégories
Open-source Planet-libre Reseau Systeme

Debian et les mails depuis la ligne de commande

Suite à l’installation d’un serveur Kimsufi 16G sous Debian 6.0 puis configuré avec mon script de post installation spécial serveur, j’ai attendu en vain la réception des premiers apports de Fail2ban qui devaient être envoyés par mail.

Une petit visite des fichiers de logs me montre rapidement d’ou vient le problème:

… Can’t exec /usr/lib/sendmail: No such file or directory…

Par défaut, il n’y a donc pas de brique système permettant d’envoyer des mails.

Installation de Postfix

Pour résoudre cela, j’ai donc exécuté la commande suivante qui va installer le serveur de messagerie Postfix:

[cc lang= »bash »]

sudo apt-get install postfix

[/cc]

Puis configuré Postfix de la manière suivante:

Puis:

Configure le Firewall

Cette section est optionnelle et ne concerne que les serveurs qui embarque un Firewall système (Iptables).

Si vous avez un Firewall sur votre serveur (j’utilise ce script que je place dans /etc/init.d/), il faut autoriser les flux sortant sur le port SMTP (TCP/25) sous risque d’avoir le message suivant dans votre fichier syslog:

Dec 11 08:46:00 ks387949 kernel: IN= OUT=eth0 SRC=176.31.252.29 DST=217.70.184.162 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=30778 DF PROTO=TCP SPT=59718 DPT=25 WINDOW=14600 RES=0x00 SYN URGP=0

Pour cela, il faut éditer le script puis ajouter le port 25 dans la variable REMOTE_TCP_SERVICES:

REMOTE_TCP_SERVICES= »22 25 80 443″

Et enfin relancer le script:

[cc lang= »bash »]

sudo /etc/init.d/firewall.sh restart

[/cc]

On teste

Le plus simple est d’utiliser la ligne de commande et la commande mail:

[cc lang= »bash »]

$ mail contact@nicolargo.com

Subject: Test

Test de 09:27

.

[/cc]

Quelques secondes plus tard, vous devriez recevoir le mail:

A vous les rapports Fail2ban

Catégories
Open-source Planet-libre Reseau

Installation d’un serveur de temps sur votre réseau

Dans un système d’information moderne, la synchronisation des machines sur une horloge commune est un pré-requis pour de nombreuses actions comme l’analyse des logs ou la supervision système et réseau. Si vos machines sont directement connectés à Internet alors il n’y a pas de problème car les distributions GNU/Linux, Windows et Mac OS X embarquent des mécanisme pour se mettre automatiquement à l’heure en se synchronisant sur des serveurs publics (par exemple 0.debian.pool.ntp.org sur une Debian Squeeze). Si ce n’est pas le cas et que vos machines sont isolées et/ou bien filtrées lors de leurs accès à Internet, il peut être intéressant d’installer un serveur de temps local sur une de vos machine.

Nous allons donc dans ce billet installer un serveur de temps NTP sur une machine sous Debian 6 (Squeeze).

Le protocole NTP

J’invoque le bon génie Wikipédia: « Le Protocole d’Heure Réseau (Network Time Protocol ou NTP) est un protocole qui permet de synchroniser, via un réseau informatique, l’horloge locale d’ordinateurs sur une référence d’heure. »

La référence en question sera donc, dans notre cas, la machine ou nous allons installer puis configurer notre serveur NTP.

Le protocole NTP utilise le port UDP/123 pour effectuer les requêtes sur le réseau. Notre serveur sera donc en écoute sur le port UDP 123 (si vous avez un Firewall, il faudra bien entendu le configurer pour autoriser les requêtes sur ce port).

Installation du serveur NTP

On commence par installer les paquets nécessaires dans une console root:

[cc lang= »bash »]

apt-get install ntp ntpdate

[/cc]

La première chose à faire est de mettre le serveur à la bonne heure (quitte à avoir une référence, autant qu’elle soit juste…).

Pour cela deux solutions:

  • si votre machine à accès à Internet, utiliser la commande « ntpdate-debian » qui va synchroniser votre machine sur les serveur NTP Debian.
  • si votre machine n’a pas accès à Internet, alors téléphoner à l’horloge parlante (numéro payant: 3699) puis configurer l’heure système avec la commande « date ». Par exemple « date -s 16:56:23 ».

On édite ensuite le fichier /etc/ntp.conf:

[cc lang= »bash »]

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift

# Enable this if you want statistics to be logged.

#statsdir /var/log/ntpstats/

statistics loopstats peerstats clockstats

filegen loopstats file loopstats type day enable

filegen peerstats file peerstats type day enable

filegen clockstats file clockstats type day enable

# You do need to talk to an NTP server or two (or three).

#server ntp.your-provider.example

# http://www.pool.ntp.org/zone/fr

server 0.fr.pool.ntp.org

server 1.fr.pool.ntp.org

server 2.fr.pool.ntp.org

server 3.fr.pool.ntp.org

# pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will

# pick a different set every time it starts up. Please consider joining the

# pool: <http://www.pool.ntp.org/join.html>

# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for

# details. The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions>

# might also be helpful.

#

# Note that « restrict » applies to both servers and clients, so a configuration

# that might be intended to block requests from certain clients could also end

# up blocking replies from your own upstream servers.

# By default, exchange time with everybody, but don’t allow configuration.

restrict -4 default kod notrap nomodify nopeer noquery

restrict -6 default kod notrap nomodify nopeer noquery

# Local users may interrogate the ntp server more closely.

restrict 127.0.0.1

restrict ::1

# Clients from this (example!) subnet have unlimited access, but only if

# cryptographically authenticated.

#restrict 192.168.123.0 mask 255.255.255.0 notrust

# My server is a public server

restrict 0.0.0.0 mask 0.0.0.0

# If you want to provide time to your local subnet, change the next line.

# (Again, the address is an example only.)

broadcast 192.168.123.255

# If you want to listen to time broadcasts on your local subnet, de-comment the

# next lines. Please do this only if you trust everybody on the network!

#disable auth

#broadcastclient

[/cc]

Les informations intéressantes sont les suivantes:

server 0.fr.pool.ntp.org

server 1.fr.pool.ntp.org

server 2.fr.pool.ntp.org

server 3.fr.pool.ntp.org

Permet de configurer les serveurs maîtres sur lesquels votre machine va essayer de se synchroniser pour rester à l’heure. Il faut bien sûr que votre machine est accès à Internet sur le port UDP/123.

restrict 0.0.0.0 mask 0.0.0.0

On rends notre serveur public, toutes les machines ayant un accès réseau (encore une fois sur le port UDP/123) pourront se synchroniser à partir de votre serveur. Il est bien sûr possible de limiter ce droit aux seules machines de vos réseaux.

broadcast 192.168.0.255

(optionnel) Diffuse le temps sur l’adresse de broadcast de votre réseau (par exemple 192.168.0.0/24).

On relance ensuite le serveur pour que la configuration soit prise en compte:

[cc lang= »bash »]

# /etc/init.d/ntp restart

Stopping NTP server: ntpd.

Starting NTP server: ntpd.

[/cc]

Synchroniser vos machines avec votre serveur NTP

La configuration des clients est relativement simple car souvent inclus dans les « wizards » d’installations. Il suffit de préciser l’adresse IP ou le nom de votre machine hébergeant le serveur NTP comme serveur de temps.

Sur un client Debian 6 existant, il faut installer le package suivant (en root):

[cc lang= »bash »]

apt-get install ntpdate

[/cc]

Puis lancer la commande suivante (si votre serveur de temps est hébergé sur la machine 192.168.0.100):

[cc lang= »bash »]

ntpdate -dv 192.168.0.100

[/cc]

Conclusion

Le protocole NTP étant normalisé, il est bien sur possible de synchroniser toutes vos machines (Linux, BSD, Windows, OS X…) sur votre nouveau serveur de temps.