La virtualisation avec KVM, libvirt et virt-manager

La virtualisation avec KVM, libvirt et virt-manager

Nous allons voir dans ce tuto comment monter un serveur de virtualisation avec KVM, libvirt et virt-manager, comme vous le savez, ce blog est plus pour moi un aide mémoire, alors n’hésitez pas à corriger/compléter ce billet

Voici la configuration de mes machines “test”:

Machine client pour l’accès à distance:

IP: 192.168.0.1
OS : Ubuntu

Serveur, pour installer KVM:
IP: 192.168.0.2
RAM: 4Go
Processeur: Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz
Disque dur : 500Go
OS : Debian GNU/Linux 8.7 (jessie)
utilisateurs : Root, zenzla

Toutes les commandes suivante se font avec l’utilisateur root du système.

Installation sur serveur

Vous avez dans ce blog, un tutoriel dédié à l’installation d’une serveur de base avec Debian, il date un peu, mais les principes n’ont pas changé, le seul changement que vous devez apporter c’est de faire un partitionnement manuel et doter /var/ de beaucoup d’espace disque.

Installation de la virtualisation avec KVM

C’est bon, vous avez installé votre machine, mais avant de vous lancez dans l’aventure de la virtualisation avec KVM, il faut activer la virtualisation dans le bios de votre machine si ce n’est déjà le cas. Ensuite vérifiez si votre processeur supporte la technologie Intel VT ou AMD-V.
Si votre processeur est récent, il y a aucune raison qu’il ne soit pas compatible.

En tous cas pour s’assurer que le processeur est compatible :

1
egrep '^flags.*(vmx|svm)' /proc/cpuinfo

Si vous n’avez aucun retour, alors laissez tomber, votre processeur n’est pas compatible 🙁

Dans le cas contraire, félicitation, vous pouvez continuer \o/

Installez maintenant kvm qemu-kvm libvirt-bin virtinst

1
apt-get install kvm qemu-kvm libvirt-bin virtinst

Pour éviter de manipuler les VMs avec le compte “root”, et pour que vos utilisateurs puissent créer des machines virtuelles, ajoutez-les aux groupes libvirt et KVM :

1
2
usermod -a -G libvirtd zenzla
usermod -a -G kvm zenzla

Bien sur, changez “zenzla” par le nom d’utilisateur adéquat.

rebootez la machine

1
reboot

Lors du redémarrage de la machine, connectez vous avec l’utilisateur normal et non à “root”, pour moi c’est zenzla, puis avec la ligne de commande suivante, testez si l’installation à fonctionner.
Si en retour vous avez un tableau vide, sans erreur, c’est que c’est bon

1
virsh -c qemu:///system list
1
2
 Id    Name                           State
----------------------------------------------------

Youhhhhou le serveur est prêt :), rien de compliqué comme vous avez pu le voir.

Maintenant passons coté client

Installation sur le client

Maintenant que le serveur est installé, et que vous avez donné les droits de création de VMs à l’utilisateur, nous passons à la configuration de l’accès à distance.
Sur la machine cliente, qui porte l’IP 192.168.0.1 dans notre cas, il faut installer virt-manager, qui est un utilitaire graphique pour la gestion des machines virtuelles.
Cette étape n’est pas obligatoire, car nous allons voir plus loin que vous avez la possibilité de gérer les VM en ligne de commande, mais virt-manager facilite grandement les choses.

Pour installer virt-manager rien de plus simple.

1
sudo apt-get install virt-manager

Vous pouvez alors lancer virt-manager. Dans un premier temps il est vide

Gestionnaire de machine virtuelle
Gestionnaire de machine virtuelle

Pour ajouter une connexion vers le serveur, afin qu’il puisse gérer les VMs de ce dernier, il faut le paramétrer en allant sur Fichier > Ajouter une connexion
Ajouter les paramètres comme suite :

Hyperviseur : QEMU/KVM
cocher connexion à un hôte distant
Méthode : SSH
Nom d’utilisateur : ajouter le nom d’utilisateur qui a le droit de gérer la virtualisation avec KVM, dans notre cas c’est zenzla
Nom de l’hôte : adresse IP du serveur, dans notre cas 192.168.0.2.

paramètres de connexion
paramètres de connexion

Et hop, it’s all, vous avez maintenant la possibilité de gérer vos VMs à distance grâce à virt-manager
Il faut en amont se connecter en SSH sur le serveur pour que virt-manager se connecte.

Gérer la virtualisation avec KVM en ligne de commande

Comme dit précédemment, il est aussi possible de gérer les VMs via les lignes de commande, et cela via l’outil virsh qui est déjà présent sur votre serveur car il est dans la paquet libvirt-bin précédemment installé.

Dans ce chapitre je vous donne les commandes de base, à vous d’aller plus loin si vous le souhaitez.

Connectez vous à votre serveur en ssh (Je vous recommande, si vous ne l’avez pas fait, de passer à la connexion par échange de clé)

1
ssh zenzla@192.168.0.2

Ensuite connectez-vous à votre hyperviseur via la commande

1
2
3
4
5
~$ virsh -c qemu:///system
Welcome to virsh, the virtualization interactive terminal.

Type: 'help' for help with commands
'quit' to quit

vous entrez alors en mode interactif,  vous devez normalement avoir un prompt virsh #

1
virsh #

Pour voir la liste de toute vos machines actives (ne pas saisir le prompt virsh #)

1
virsh # list

Pour voir la liste de toute vos machines inactives

1
virsh # list --inactive

Pour voir la liste de toute les machines active ou non

1
virsh # list --all

pour démarrer la machine virtuelle VmDebian

1
virsh # start VmDebian

pour redémarrer la machine virtuelle VmDebian

1
virsh # reboot VmDebian

pour arrêter la machine virtuelle VmDebian

1
virsh # shutdown VmDebian

pour arrêter brutalement la machine virtuelle VmDebian

1
virsh # destroy VmDebian

pour afficher les informations d’une machine virtuelle

1
virsh # dominfo VmDebian

pour afficher les informations de la machine qui supporte la virtualisation, machine nœud

1
virsh # nodeinfo

pour sauvegarder la configuration de la machine virtuelle VmDebian, vous devez sortir du mode interactif avant de saisir

1
virsh -c qemu:///system dumpxml VmDebian > /tmp/VmDebian.xml

Vous pouvez ainsi facilenet modifier le fichier XML et créer une nouvelle machine à partir de ces modifications
Plus d’info sur le format XML sur http://libvirt.org/format.html

pour créer une machine virtuelle NewVmDebian à partir d’un fichier XML

1
virsh -c qemu:///system create /tmp/NewVmDebian.xml

Et voilà !! N’hésitez pas à partager ce billet !!!

Comment réinitialiser le RaspBerry Pi

Comment réinitialiser le RaspBerry Pi

réinitialiser le RaspBerry
réinitialiser le RaspBerry PI
Je viens de réinitialiser le RaspBerry Pi que j’ai depuis une petite année maintenant, et comme d’hab j’écris cet article pour avoir une trace de ce que j’ai fais.

Ok, Ok ce n’est pas très compliquer de réinitialiser le RaspBerry Pi, mais avoir un mémo quelque part me rassure et cela peu aider d’autre personne.

J’utilise ce merveilleux outil pour divers trucs, un serveur pour les divers formations que j’organise ; serveur Web, serveur SQL, serveur d’application Java, serveur de test etc.

Pourquoi réinitialiser le RaspBerry Pi

Bah, pour les mêmes raisons pour les quelles vous formateriez votre PC ou serveur, c’est à dire de repartir sur des bases seines sans rien sur le système.

Comme je suis exclusivement sous Gnu/Linux, ce mini tuto n’est pas adapté à Windows ou Mac.

Bon allons-y

1 – récupérer le dernière version de Raspbian

Rasbian est le système d’exploitation par défaut des RaspBerry.

Vous pouvez récupérer la dernière version sur le site officiel, et uniquement le site officiel raspberrypi.org
Nous le téléchargerons dans /tmp

1
2
3
cd /tmp

wget https://downloads.raspberrypi.org/raspbian_latest

Vous obtiendrez un fichier zip dont le nom comporte la date de la release de type DATE-raspbian-VERSION.zip

dézipez ce fichier avec unzip (remplacez DATE-raspbian-VERSION.zip par le nom exacte du ficher téléchargé)

1
unzip DATE-raspbian-VERSION.zip

Vous obtiendrez l’image de la Raspbian de type DATE-raspbian-VERSION.img

2- préparation de votre carte MicroSD

Insérez la carte MicroSD de votre RaspBerry dans le lecteur dédié de votre ordinateur, dans la majorité des cas il vous faudra un adaptateur, MicroSD → SD.

adaptateur microsd raspberry
adaptateur microsd raspberry

Détecter sur quel point elle a été montée, dans la majorité des cas c’est /dev/sd(quelques chose)
La commande « lsblk -p » peut vous aider si le périphérie est monté automatiquement lors de sont insertion

1
2
3
4
5
6
7
8
9
lsblk -p
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
/dev/sda      8:0    0 931,5G  0 disk
├─/dev/sda1   8:1    0   100M  0 part
└─/dev/sda2   8:7    0 219,6G  0 part /
/dev/sdb      8:16   1   7,4G  0 disk
├─/dev/sdb1   8:17   1    63M  0 part /media/zenzla/boot
└─/dev/sdb2   8:18   1   7,4G  0 part /media/zenzla/2f840c69-cecb-4b10-87e4-01b9d28c231c
/dev/sr0     11:0    1  1024M  0 rom

Sinon la carte n’est pas montée automatiquement, utilisez la commande ls -ltr /dev/sd* et identifiez la dernière ligne affichée
En effet cette commande nous liste les dernières modifications de /dev/sd

1
2
3
4
5
6
7
8
9
10
ls -ltr /dev/sd*
brw-rw---- 1 root disk 8,  0 juil.  5 10:04 /dev/sda
brw-rw---- 1 root disk 8,  6 juil.  5 10:04 /dev/sda6
brw-rw---- 1 root disk 8,  4 juil.  5 10:04 /dev/sda4
brw-rw---- 1 root disk 8,  7 juil.  5 10:04 /dev/sda7
brw-rw---- 1 root disk 8,  3 juil.  5 10:04 /dev/sda3
brw-rw---- 1 root disk 8,  2 juil.  5 10:04 /dev/sda2
brw-rw---- 1 root disk 8,  1 juil.  5 10:04 /dev/sda1
brw-rw---- 1 root disk 8,  5 juil.  5 12:48 /dev/sda5
brw-rw---- 1 root disk 8, 16 juil.  5 13:05 /dev/sdb

Dans notre cas le point de montage de la carte est /dev/sdb.

3 – copie de l’image système sur la carte.

Pour installer l’image de la Rasbian sur notre carte SD nous utilisons la commande « dd » comme suite :

1
dd bs=1M if=chemin_vers_le_img_de_raspbian of=/dev/votre_carte

Dans notre cas cela donne

1
dd bs=1M if=/tmp/DATE-raspbian-VERSION.img of=/dev/sdb

Important

il ne faut pas confondre /dev/sdb et /dev/sdb1
/dev/sdb c’est le nom du disque
/dev/sdb1 c’est la première partition de ce disque

Dans notre cas il faut bien mettre le disque c’est a dire « sdb »

4 – Fin de l’installation

Retirez à présent la carte MicroSD et remettez a sur votre framboise.

Voilà, vous venez de réinitialiser le RaspBerry à l’état d’usine 🙂

Solution firmware: failed to load brcm/bcm43xx-0.fw sur Debian 8

Solution firmware: failed to load brcm/bcm43xx-0.fw sur Debian 8

failed to load brcm/bcm43xx-0.fw

Lors d’une nouvelle installation de Debian 8 sur un pc portable, il m’était impossible de me connecter en Wifi, ce dernier ne trouvant aucun réseau actif.
En cherchant un peu dans les logs de démarrage avec “dmesg” j’ai trouvé que c’est le firmware de la carte wifi qui était absent.

1
failed to load brcm/bcm/bcm43xx-0.fw (-2)

Ce firmware n’étant pas libre, et donc non disponible dans les dépôts Debian par défaut lors d’une installation standard.

résoudre le problème failed to load brcm/bcm43xx-0.fw

Apparemment, en cherchant sur le net, je me suis rendu compte que je n’étais pas le seul à rencontrer ce bug, ce qui est rassurant en même temps :P. Mais la solution la plus claire que j’ai pu trouver est celle du Wiki de Debian

Et donc, pour résoudre ce problème “failed to load brcm/bcm43xx-0.fw” il nous faut ajouter le dépôt “nom-free” à la source liste de Debian, pour cela ouvrez le fichier /etc/apt/sources.list avec votre éditeur de texte préféré, pour moi c’est vi

1
vi /etc/apt/sources.list

puis ajouter la ligne suivant à la fin de ce fichier

1
deb http://http.debian.net/debian/ jessie main contrib non-free

faite une mise-à-jour de la liste des dépôts

1
apt-get update

Puis installez les paquets linux-headers appropriés et broadcom-sta-dkms, cela installera aussi le paquet recommandé wireless-tools.

1
apt-get install linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms

DKMS compilera le module wl adapté à votre système.

Maintenant pour éviter les conflits, il faut décharger les modules qui peuvent nous compliquer l’installation

1
modprobe -r b44 b43 b43legacy ssb brcmsmac

On charge le module wl

1
modprobe wl

Rebooter le système pour une prise en charge des modification apportée

1
reboot

Et le tour est joué :)!! Je capte à nouveau les réseaux wifis disponibles.

Vous pouvez trouver la liste des périphériques pris en charge par le module wl dans le lien du wiki de Debian donné plus haut.

BIND DNS : query (cache) ‘*/IN’ denied

BIND DNS : query (cache) ‘*/IN’ denied

Ce matin en regardant les logs de mon serveur nouvellement réinstallé, je vois des milliers de lignes liées à BIND DNS :

1
2
3
4
5
...
09-Oct-2015 22:23:29.076 client 74.125.181.49#32935: query (cache) 'www.site.fr/A/IN' denied
09-Oct-2015 22:23:29.086 client 74.125.181.54#38723: query (cache) 'www.site.fr/A/IN' denied
09-Oct-2015 22:23:39.833 client 62.34.202.138#51968: query (cache) 'www.site.fr/A/IN' denied
...

Dans un premier temps, je pensais à une attaque du mon serveur, mais en cherchant bien sur le net, je n’étais pas le seul a être touché par ce problème lié à BIND9 les fameux “Faille DOS DNS”.
Et c’est bien ce que m’a confirmé l’outil dnstop, outil de monitoring de requêtes DNS, avec la commande

1
dnstop eth0

Dans mon cas, le serveur BIND DNS refuse bien les requêtes, d’où la mention “denied”, donc même si cela engendrait des kilomètres de ligne dans les fichiers logs, le serveur n’en souffre pas.

Oui mais comment faire pour bloquer tous ce raffut bind dns ?

J’ai pensé alors à fail2ban qui est un formidable outil pour bannir les IP trop encombrantes.
Mais cela s’avère une très mauvaise solution, car en général dans ce type d’attaques, les IP sont celles des victimes voir même de moteurs de recherche, et non celles des assaillants.
Bannir l’IP d’un moteur de recherche, ce n’est jamais bon.

Sécuriser sont serveur BIND DNS

Ce qu’il faut vérifier dans un premier temps, c’est si le serveur BIND DNS n’est pas récursif.

Avec la commande suivante

1
dig @IP_DU_SERVEUR SOA fr.

Si vous voyez dans les flags la mention “ra”, c’est que le serveur est récursif. (ra = recursion available)
Attention, vous devez faire ce test depuis l’extérieur de votre réseau local.

1
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

Pour corriger cela il faut ajouter à la fin du fichier de configuration de BIND les lignes suivantes

1
vi /etc/bind/named.conf.options

ajoutez

1
allow-recursion { 127.0.0.1; IP_DU_SERVEUR;};

Ce qui limite l’utilisation de BIND DNS au serveur lui même.

Ensuite ajoutez la ligne

1
allow-query-cache { 127.0.0.1; IP_DU_SERVEUR;};

Et cela pour interdire l’utilisation du cache de notre serveur
Ajoutez enfin

1
2
additional-from-cache no;
recursion no;

redémarrer bind pour la prise en compte des modifications

1
/etc/init.d/bind9 restart

Ref. Blog de bortzmeyer, Système Linux

DNS mail de GANDI, les configurations dans ISPConfig

DNS mail de GANDI, les configurations dans ISPConfig

Hello,

Généralement quand j’écris un article c’est justement pour y revenir après et ne pas oublier ce que j’ai fait pour le truc que j’ai bidouillé fonctionne. Et c’est le cas pour celui-ci.
En résumé, j’ai un domaine, dont le site est hébergé par mon serveur dédié, mais je veux que la gestion des e-mails reste chez Gandi, pour des raisons pratiques.
J’avais fait l’erreur il y a quelques mois, ou j’ai changé les DNS d’un site pour pointer sur mon serveur, mais de ce fait les mails Gandi ne fonctionnaient plus, car dans les DNS il faut configurer les DNS mail de GANDI

DNS mail de GANDI dans ISPConfig

Il va de soi que nous parton du fait que le site est maintenant hébergé chez vous avec la bonne config DNS.

Pour garder la gestion des DNS mails chez Gandi, vous devez modifier les paramètres DNS du votre site que je nommerais pour l’exemple “domain.tld”
Pour modifier les DNS aller sur l’onglet DNS -> DNS Zones puis cliquez sur le domaine domain.tld. Vous allez tomber sur la config DNS du site, cliquez ensuite sur “Enregistrement”

DNS mail de Gandi
DNS mail de Gandi

Ici il nous faudra ajouter quatre enregistrements CNAME et deux MX nécessaires aux DNS mail de GANDI

Ajoutons les quatre enregistrements CNAME

Cliquez sur CNAME, et ajouter les infos suivantes

1er enregistrement CNAME pour le POP
Nom d’hôte : pop
Nom d’hôte cible : access.mail.gandi.net. (Le point final est important)
TTL : 10800

Puis valider

Deuxième enregistrement CNAME pour le Webmail.
Nom d’hôte : webmail
Nom d’hôte cible : agent.mail.gandi.net.
TTL : 10800

Troisième enregistrement CNAME pour le SMTP
Nom d’hôte : smtp
Nom d’hôte cible : relay.mail.gandi.net.
TTL : 10800

Le dernier enregistrement pour le imap
Nom d’hôte : imap
Nom d’hôte cible : access.mail.gandi.net.
TTL : 10800

Maintenant les enregistrements MX, et pour que cela fonctionne il faut que ses enregistrements pointent sur GANDI
Il faut donc modifier celui qui est déjà enregistré en cliquant dessus et modifier comme suite:

Nom d’hôte : domain.tld. (votre domaine sans oublier le “.”)
Nom d’hôte du serveur mail : spool.mail.gandi.net.
Priorité : 10
TTL : 10800

Nous y ajoutons un enregistrement MX en cliquant sur +MX avec comme paramètres

Nom d’hôte : domain.tld. (votre domaine sans oublier le “.”)
Nom d’hôte du serveur mail : sfb.mail.gandi.net.
Priorité : 50
TTL : 10800

Et voilà, en ajoutant les DNS mail de GANDI, c’est maintenant ce dernier qui gère vos mails, et non plus votre serveur dédié.

Système de base d’un serveur sous Debian Wheezy (Debian 7)

Système de base d’un serveur sous Debian Wheezy (Debian 7)

Nous allons voir dans ce tuto l’installation d’un système de base pour un serveur avec Debian Wheezy. Il montre une installation simple qui nous servira de dénominateur commun à d’autre tuto.

Remarques :

Pour le bon déroulement du tuto, je prends la liberté de prendre la configuration fictive suivante :

Nom du serveur : monserveur.example.com
Adresse :  IP 192.168.0.100

Aller hop !! Au boulot.

Etape N°1 : installation du système de base.

Téléchargez l’image la bonne version de Debian Wheezy selon votre architecture, 32 ou 64 bit directement sur le site debian.org. Puis graver l’image *.iso sur un CD.

Bootez votre machine sur le CD d’installation fraichement gravé, puis choisissez « install »

Accueil installation debian
Accueil installation debian

Choisissez votre langue, ici « Français »

Choisir le pays "France"
Choisir le pays “France”

Choisissez le pays, ici « France »

Choisir la langue française
Choisir la langue française

Maintenant vous devez choisir la configuration du clavier

Configuration du clavier
Configuration du clavier

Dans cette étape, le système vérifie l’intégrité du CD que vous venez de graver, il vérifie aussi le matériel, les paramètres réseaux, et l’existence d’un serveur DHCP pour la configuration du réseau.

Configuration DHCP
Configuration DHCP

Maintenant entrez le nom du serveur. Comme indiqué plus haut, j’ai pris monserveur.example.com, et de ce fait je saisie “monserveur”

Nom du serveur
Nom du serveur

Saisissez maintenant le nom du domaine, dans notre cas « example.com »

Nom du domaine
Nom du domaine

Choisissiez un bon mot de passe pour l’utilisateur « root »

Mot de passe pour root
Mot de passe pour root

Confirmez le mot de passe pour vérifier si tous est Ok.

Confirmation du mot de passe
Confirmation du mot de passe

Maintenant créez un utilisateur « normal », c’est-à-dire sans pouvoir. Comme je suis modeste, j’ai choisie comme nom de compte « Zenzla ».
Attention, vous pouvez choisir ce que vous voulez, sauf « admin », car c’est un nom réservé par le système.

Création d'un nouvel utilisateur
Création d’un nouvel utilisateur

Je donne un login « zenzla » à cet utilisateur.

Login du compte
Login du compte

Choisir un mot de passe pour cet utilisateur, qui doit être différent de celui que vous avez choisi pour « root »

Mot de passe pour l'utilisateur
Mot de passe pour l’utilisateur

Confirmez le mot de passe

Confirmation du mot de passe
Confirmation du mot de passe

Arrive l’étape de partitionnement du disque dur de votre serveur. Vous avez deux solutions :

1) Soit vous prenez la solution la plus simple « Assisté – utiliser tout un disque avec LVM » que je recommande vivement pour les débutants.

2) Si vous avez un peu plus de bouteille, faite le en manuel.

Dans ce tuto, je vais choisir la première solution, car plus simple et sur tout moins longue (oui je suis un gros feignant). Ce choix va créer deux volumes logiques, la racine du système « / » et le « swap »

Choisissez « Assisté – utiliser tout un disque avec LVM »

Assisté – utiliser tout un disque avec LVM
Assisté – utiliser tout un disque avec LVM

Sélectionnez le disque à partitionner, dans mon cas j’en il y en a un seul.

Choix du disque à partitionner
Choix du disque à partitionner

Comme mentionné précédemment, nous allons installer tout dans la même partition pour des raisons de facilité.

Choisissez « Tout dans une seule partition (recommandé pour les débutants) »

Tout dans une seule partition
Tout dans une seule partition

Pour confirmer notre choix de configuration, choisissez « oui »

Confirmation du choix de configuration
Confirmation du choix de configuration

Sélectionnez « Terminer le partitionnement et appliquer les changements » pour terminer

Terminer le partitionnement
Terminer le partitionnement

Et enfin sélectionnez « Oui » pour l’application définitive des changements sur les disques. Après cette étape, vous n’aurez plus la possibilité de revenir en arrière, car les novelles partition seront créées

Ecriture définitive
Ecriture définitive

Le système de base s’installe alors

Installation du système de base
Installation du système de base

Pour l’installation et la gestion des paquets il vous faut choisir un miroir du pays ou se trouve notre serveur, dans notre cas c’est en « France »

Choix du miroir
Choix du miroir

Maintenant, il faut choisir le miroir, je choisie celui donné par défaut ftp.fr.debian.org

Miroir ftp.fr.debian.org
Miroir ftp.fr.debian.org

Si vous utilisez un proxy http saisissez les paramètres, sinon laissez vide et continuer

Configuration du proxy
Configuration du proxy

Une mise-à-jour des paquets s’effectue, elle est plus ou moins longue selon votre connexion internet et la version de Debian.

mise-à-jour des paquets
mise-à-jour des paquets

Ensuite, il est demandé si vous voulez participer aux statistiques sur les paquets, c’est à vous de choisir. Dans ce tuto je mets « non ».

statistiques Debian
statistiques Debian

Lors de cette étape, même si nous allons mettre en place un serveur Web, je recommande de faire l’installation des différents paquets manuellement. Je sélectionne uniquement, « serveur SSH » et « Utilitaires usuels du système » pour pouvoir me connecter au système directement après l’installation.

Pour rappel : pour sélectionner/désélectionner vous devez utiliser la barre « espace » de votre clavier

Choix des logiciels
Choix des logiciels

Les paquets sélectionnés sont téléchargés puis installés

Installation des paquets
Installation des paquets

Maintenant nous devons installer le programme de démarrage ; le GRUB. Choisissez « Oui »

Installation du GRUB
Installation du GRUB

C’est fini !! ouffff  (Enfin la 1ère étape ^^), il vous suffit de retirer le CD d’installation de Debian Wheezy et de sélectionner « Continuer » pour redémarrer votre serveur.

redémarrer votre serveur
redémarrer votre serveur

Voilà, nous avons notre système de base installé, vous pouvez vous y connecter en ssh

Si vous n’aviez pas installé le serveur OpenSSH lors de l’installation basique, vous pouvez toujours le faire maintenant :

1
aptitude install ssh openssh-server

Désormais, vous pouvez utiliser un client SSH tel que PuTTY et vous connecter depuis votre poste de travail vers votre serveur.

1
ssh root@192.168.0.100 -p 22

Il n’est pas obligatoire de préciser le port (-p), mais comme nous allons changer le port par défaut par mesure de sécurité, il vaut mieux prendre l’habitude de le mettre.

Lors de votre première connexion, il faut accepter la clé d’authentification du serveur distant : yes

1
2
3
4
5
ssh root@192.168.0.100 -p 22
The authenticity of host '[root@192.168.0.100]:22 ([192.168.0.100]:22)' can't be established.
RSA key fingerprint is ad:39:10:ee:a7:7g:56:10:sb:4c:65:ad:22:89:44:aa.
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.0.100'
s password:

La première chose à faire est d’installer vim-nox, car vi à quelque fois des comportement bizarre sous Debian et Ubuntu

1
apt-get install vim-nox

Pour plus de convivialité, il est intéressant de mettre vim en couleur, pour cela je vous recommande mon super tuto ^^ vi : Coloration syntaxique.

Mettez à jour votre serveur

1
2
apt-get update
apt-get upgrade

Le port par défaut de SSH est le 22, donc il est vivement recommander de le modifier par mesure de sécurité pour éviter les attaques par brute force.
Le nouveau port doit être supérieur à 1024 et inférieur à 65535. Dans notre cas nous choisissons le port 7070.

Ouvrez le fichier /etc/ssh/sshd_config avec vi

1
vi /etc/ssh/sshd_config

Changer le port par défaut 22, par le nouveau 7070, et vérifié que vous êtes bien en protocole ssh 2

1
2
3
4
5
6
7
8
...
# What ports, IPs and protocols we listen for
Port 7070
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
...

Profitons-en, pour modifier d’autres paramètres de sécurité, nous allons interdire la connexion ssh à root, et l’autorisé uniquement à l’utilisateur zenzla que nous avons crée plus haut.

Mettez PermitRootLogin à “no” et ajouter la ligne AllowUsers zenzla, comme ci-dessous

1
2
3
4
5
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers zenzla

redémarrez ssh pour la prise en compte des modifications

1
/etc/init.d/ssh restart

Avant de rebooter le système, nous allons corriger l’affichage des caractères accentués une fois pour toute.

Ouvrez le fichier /etc/default/locale

1
vi /etc/default/locale

modifiez la ligne LANG en y ajoutant UTF-8

1
LANG=fr_FR.UTF-8

Ensuite pour avoir une coloration du contenu (commande ls par exemple), modifiez le fichier /root/.bashrc

1
vi /root/.bashrc

Et décommentez les ligne suivant

[…]
# You may uncomment the following lines if you want `ls’ to be colorized:
export LS_OPTIONS=’–color=auto’
eval “`dircolors`”
alias ls=’ls $LS_OPTIONS’
alias ll=’ls $LS_OPTIONS -l’
alias l=’ls $LS_OPTIONS -lA’
[…]

Par mesure de sécurité (Oui encore une foie), nous allons envoyer une alerte par mail à l’administrateur à chaque connexion de root en ssh, cela et d’autant plus intéressant aujourd’hui avec la multiplication des smartphones, et donc la possibilité de lire les mails partout ou nous nous trouvons.

dans le même fichier /root/.bashrc ajouter les lignes suivantes, en changeant l’email par le votre.

1
echo 'Accès Shell Root le ' `date` `who` | mail -s `hostname` Shell Root de `who | cut -d"(" -f2 | cut -d")" -f1` votre@mail.tld

sauvegarder puis redémarrer votre serveur

1
reboot

Et voilà, vous avez à présent un serveur de base optimisé.

Vous pouvez poursuive en installant un serveur avec Nginx et ISPConfig 3

La série “un serveur parfait” et fortement inspiré, voir copier coller et traduit  de l’excellent Howtoforge

Protection serveur debian sous ISPConfig3

Protection serveur debian sous ISPConfig3

Hello tous le monde!!

Vous l’avez certainement remarqué, cela fait un bout de temps que je n’ai pas mis d’article sur le site, manque de temps oblige.

Aujourd’hui je vais enfin tenir une promesse qui date de presque un an et qui fait suite à au tutoriel d’un serveur Web complet sous ISPConfig3 et notamment des astuces pour sécuriser votre serveur.

Nous allons voir aujourd’hui comment sécuriser l’accès à phpmyadmin de notre serveur Debian sous ISPConfig3.
Bien sûr, je fais suite à ce tutoriel expliquant l’installation d’un serveur web parfait avec ISPConfig3 sous Debian Squeeze (Debian 6.0), et de ce fait le répertoire de phpmyadmin se trouve dans /usr/share/phpmyadmin. Et dont l’accès fait via www.nimportequelsitedevotreserveur.tld/phpmyadmin ou http://ipdevotreserveur/phpmyadmin

Dans un premier temps nous allons protéger l’accès à phpmyadmin à l’aide des fichiers Htpasswd et un alias de phpmyadmin, puis en modifiant le login de l’administrateur par défaut de ISPConfig

Here we go !!

Connectez-vous à votre serveur ISPConfig3 en tant que root et accéder au répertoire /usr/share/phpmyadmin à l’aide de la commande

1
cd /usr/share/phpmyadmin

Puis entrer la commande (remplacer votreLogin par un vrais login)

1
htpasswd -c .htpasswd votreLogin

Un mot de passe vous sera demandé
Cette commande ajoute un fichier /usr/share/phpmyadmin/.htpasswd, dont vous pouvez voir le contenu avec la commande

1
cat /usr/share/phpmyadmin/.htpasswd

Maintenant, il vous faut modifier le fichier /etc/apache2/conf.d/phpmyadmin.conf :

Mais, avant tous, prenez la bonne habitude de toujours sauvegarder vos fichiers config avant toutes modifications

1
cp /etc/apache2/conf.d/phpmyadmin.conf /home/TOTO/phpmyadmin.conf.old

Avec votre éditeur de texte favori (Vi, je suppose ^^) ouvrez le fichier /etc/apache2/conf.d/phpmyadmin.conf

1
vi /etc/apache2/conf.d/phpmyadmin.conf

Trouver le code suivant

1
2
3
4
5
6
7
8
# phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
        Options FollowSymLinks
        DirectoryIndex index.php
# Authorize for setup

remplacez le par celui-ci ( Attention, remplacer monalias par l’alias que vous voulez donner à phpmyadmin)

1
2
3
4
5
6
7
8
9
10
11
12
13
# phpMyAdmin default Apache configuration

Alias /monalias /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
        Options FollowSymLinks
        DirectoryIndex index.php
        #Make use of .htpasswd
        AuthType Basic
        AuthName "Enter account information"
        AuthUserFile /usr/share/phpmyadmin/.htpasswd
        Require valid-user
# Authorize for setup

Pour que les modifications soient prises en compte il faut relancer apache comme suite

1
/etc/init.d/apache2 reload

Maintenant, connectez-vous à ISPConfig3, et cliquez sur “Système” > “Configuration d’interface”.
Dans le champ URL de PHPMyAdmin, remplacer /phpmyadmin par /monalias

Cliquez sur “Enregistrer” pour terminer

Vous pouvez vérifier ce que nous avons fait, en allant sur la nouvelle URL de votre phpmyadmin www.nimportequelsitedevotreserveur.tld/monalias ou http://ipdevotreserveur/monalias ou dans ISPConfig3 lui-même, il suffit de cliquer sur l’icône phpmyadmin après le nom de la base de données.

Maintenant modifions l’admin par defaut d’ISPConfig.
Pour cela nous allons modifier la table “sys_user” de la base de données “dbispconfig” avec la requête SQL ci-dessous
(N’oubliez pas de changer NouveauLogin par votre login)

1
UPDATE  `dbispconfig`.`sys_user` SET `username`='NouveauLogin' WHERE  `sys_user`.`userid` =1;

Pour ceux qui ne connaissent pas SQL, cette requête modifie l”administrateur par defaut qui est “admin” pas votre NouveauLogin.
Je tiens quand même à faire la précision que la modification de l’admin par défaut n’est pas recommander par la communauté d’ISPConfig, mais personnellement je n’ai jamais eux de problème.

Vous avez aimé cet article ? Alors partagez-le ^^

Serveur Dédié : un serveur parfait avec Debian Squeeze (Debian 6.0)

Serveur Dédié : un serveur parfait avec Debian Squeeze (Debian 6.0)

Le but de ce tuto est que vous ayez un serveur dédié web complet avec ISPConfig 3 sous Debian Squeeze (Debian 6), BIND (DNS) et courier (serveur Mail).

Nous avons déjà vu dans un article précédant l’installation d’un serveur sous Ubuntu server, mais cette fois prendrons comme exemple un serveur dédié kimsufi d’OVH, car c’est ce que j’utilise actuellement. Bien sur vous pouvez prendre un serveur dédié chez Online (Ex DedieBox), ou autre prestataires

Ce tuto sera construit de sort que même un débutant en administration système est la possibilité d’avoir un serveur Web professionnel.

Je rappel que nous utiliserons toujours les privilège root

let’s go….

Etape N°1 : Choix du serveur Dédié

Choisir le serveur kimsufi qui vous convient, et selon vos moyen financier mais aussi votre utilisation.

Il vas de soi qu’il faut choisir une Debian 6 comme distribution, même si ce tuto peut être porté sur un Ubuntu server.

Il est aussi possible de porter ce tuto sur un serveur nu, dont vous installeriez vous même la distribution Debian.

Après paiement, vous recevrez (quelques heures de patience) un mail confirmant la mise en fonction de votre serveur, avec les identifiants SSH.

pour le bon déroulement de ce tuto, nous prenons le liberté de prendre les identifiants fictifs suivants :

Nom du serveur : ks123456.kimsufi.com
Adresse IP : 198.168.102.74

Étape N°2 : Configuration de quelques paramètres du serveur

1 – 1ere Connexion au serveur

Pour pouvoir administre votre serveur à distance, si vous êtes sur une distribution Linux, le terminal par défaut fera l’affaire, si vous êtes sous Windows, il vous faut utiliser un utilitaire dont le plus célèbre est putty

Connectez-vous à votre serveur avec les identifiants reçus par mail

1
ssh root@ks123456.kimsufi.com -p 22

Il n’est pas obligatoire de préciser le port (-p), mais comme nous allons changer le port par défaut par mesure de sécurité, il vaut mieux prendre l’habitude de le mettre.

Lors de votre première connexion, il faut accepter la clé d’authentification du serveur distant : yes

1
2
3
4
5
ssh root@ks123456.kimsufi.com -p 22
The authenticity of host '[root@ks123456.kimsufi.com]:22 ([198.168.102.74]:22)' can't be established.
RSA key fingerprint is ad:39:10:ee:a7:7g:56:10:sb:4c:65:ad:22:89:44:aa.
Are you sure you want to continue connecting (yes/no)? yes
root@ks123456.kimsufi.com'
s password:

La première chose à faire est d’installer vim-nox, car vi à quelque fois des comportement bizarre sous Debian et Ubuntu

1
apt-get install vim-nox

Pour plus de convivialité, il est intéressant de mettre vim en couleur, pour cela je vous recommande mon super tuto ^^ vi : Coloration syntaxique.

Mettez à jour votre serveur

1
2
apt-get update
apt-get upgrade

Nous allons ajouter un utilisateur toto, c’est aussi par mesure de sécurité

1
adduser toto

adduser toto
Ajout de l’utilisateur «  toto » …
Ajout du nouveau groupe «  toto » (1000) …
Ajout du nouvel utilisateur «  toto » (1000) avec le groupe «  toto » …
Création du répertoire personnel « /home/ toto »…
Copie des fichiers depuis « /etc/skel »…
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès
Modification des informations relatives à l’utilisateur toto
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
Nom complet [ ]: <-entrez
N° de bureau [ ]: <-entrez
Téléphone professionnel [ ]: <-entrez
Téléphone personnel [ ]: <-entrez
Autre [ ]: <-entrez
Cette information est-elle correcte ? [O/n] <-entrez

Donnez lui un mot de passe robuste : minimum 8 caractères contenant au minimum une majuscule, un chiffre et un caractère spécial.

Changez le mot de passe de root que vous avez reçus, de la même manière que précédemment, il faut qu’il soit robuste et différent de celui de toto

1
passwd root

2 – changement du noyau (kernel)

Cette étape n’est pas obligatoire, mais recommandée, car OVH à tendance a installé ces propres noyaux modifiés, et cela peu dans certain cas, causer quelques soucies.
Toucher aux fichiers de configuration du serveur est une chose délicate, si vous pensez ne pas être capable de la faire, passez cette étape.

Pour voir les noyaux disponibles tapez la commande

1
apt-cache search linux-image

dont voici la résultat au jour de la rédaction de cet article

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
linux-headers-2.6.32-5-amd64 - Header files for Linux 2.6.32-5-amd64
linux-headers-2.6.32-5-openvz-amd64 - Header files for Linux 2.6.32-5-openvz-amd64
linux-headers-2.6.32-5-vserver-amd64 - Header files for Linux 2.6.32-5-vserver-amd64
linux-headers-2.6.32-5-xen-amd64 - Header files for Linux 2.6.32-5-xen-amd64
linux-image-2.6.32-5-amd64-dbg - Debugging infos for Linux 2.6.32-5-amd64
linux-image-2.6.32-5-amd64 - Linux 2.6.32 for 64-bit PCs
linux-image-2.6.32-5-openvz-amd64-dbg - Debugging infos for Linux 2.6.32-5-openvz-amd64
linux-image-2.6.32-5-openvz-amd64 - Linux 2.6.32 for 64-bit PCs, OpenVZ support
linux-image-2.6.32-5-vserver-amd64-dbg - Debugging infos for Linux 2.6.32-5-vserver-amd64
linux-image-2.6.32-5-vserver-amd64 - Linux 2.6.32 for 64-bit PCs, Linux-VServer support
linux-image-2.6.32-5-xen-amd64-dbg - Debugging infos for Linux 2.6.32-5-xen-amd64
linux-image-2.6.32-5-xen-amd64 - Linux 2.6.32 for 64-bit PCs, Xen dom0 support
linux-image-2.6-amd64 - Linux 2.6 for 64-bit PCs (meta-package)
linux-image-2.6-openvz-amd64 - Linux 2.6 for 64-bit PCs (meta-package), OpenVZ support
linux-image-2.6-vserver-amd64 - Linux 2.6 for 64-bit PCs (meta-package), Linux-VServer support
linux-image-2.6-xen-amd64 - Linux 2.6 for 64-bit PCs (meta-package), Xen dom0 support
linux-image-amd64 - Linux for 64-bit PCs (meta-package)
linux-image-openvz-amd64 - Linux for 64-bit PCs (meta-package), OpenVZ support
linux-image-vserver-amd64 - Linux for 64-bit PCs (meta-package), Linux-VServer support
linux-image-xen-amd64 - Linux for 64-bit PCs (meta-package), Xen dom0 support

Nous choisissons l’image de la ligne 6 “linux-image-2.6.32-5-amd64”, c’est a dire le Debian de base, vous pouvez choisir une autre image, par exemple si vous allez utiliser l’option de serveur virtuel (openvz ou xen) de ISPConfig

1
apt-get install linux-image-2.6.32-5-amd64

Pour que le changement du kernel soit pris en compte, nous devons modifier le fichier grub de notre distribution (Pour avoir plus d’infos sur le grub)

Sauvegardez le fichier grub actuel dans le répertoire de l’utilisateur toto (Prenez toujours l’habitude de sauvegarder un fichier avant de le modifier)

1
cp /boot/grub/grub.cfg /home/toto/grub.cfg.old

Recréez un nouveau grub à l’aide de la commande

1
grub-mkconfig > /boot/grub/grub.cfg

En vérifiant le fichier /boot/grub/grub.cfg, nous pouvons constater que notre nouveau noyau vient après le noyaux d’OVH. Donc le noyau OVH a la position 0, et notre noyau Debian en position 1.

Modifiez le fichier /etc/default/grub pour changer le noyau d’amorçage, au lieu de GRUB_DEFAULT=0, mettez GRUB_DEFAULT=1.

1
vi /etc/default/grub

[…]
GRUB_DEFAULT=1
[…]

Pour que les modifications soient prises en compte, mettez à jour le grup avec la commande suivant

1
update-grub

Redémarrez votre serveur, (vous devez attendre quelques instant avant de pouvoir reprendre la main)

1
reboot

3 – Sécuriser les accès SSH

Le port par défaut de SSH est le 22, donc il est vivement recommander de le modifier par mesure de sécurité pour éviter les attaques par brute force.
Le nouveau port doit être supérieur à 1024 et inférieur à 65535. Dans notre cas nous choisissons le port 7070.

Ouvrez le fichier /etc/ssh/sshd_config avec vi

1
vi /etc/ssh/sshd_config

Changer le port par défaut 22, par le nouveau 7070, et vérifié que vous êtes bien en protocole ssh 2

1
2
3
4
5
6
7
8
...
# What ports, IPs and protocols we listen for
Port 7070
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
...

Profitons-en, pour modifier d’autres paramètres de sécurité, nous allons interdire la connexion ssh à root, et l’autorisé uniquement à l’utilisateur toto que nous avons crée plus haut.

Mettez PermitRootLogin à “no” et ajouter la ligne AllowUsers toto, comme ci-dessous

1
2
3
4
5
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers toto

redémarrez ssh pour la prise en compte des modifications

1
/etc/init.d/ssh restart

Avant de rebooter le système, nous allons corriger l’affichage des caractères accentués une fois pour toute.

Ouvrez le fichier /etc/default/locale

1
vi /etc/default/locale

modifiez la ligne LANG en y ajoutant UTF-8

1
LANG=fr_FR.UTF-8

Ensuite pour avoir une coloration du contenu (commande ls par exemple), modifiez le fichier /root/.bashrc

1
vi /root/.bashrc

Et décommentez les ligne suivant

[…]
# You may uncomment the following lines if you want `ls’ to be colorized:
export LS_OPTIONS=’–color=auto’
eval “`dircolors`”
alias ls=’ls $LS_OPTIONS’
alias ll=’ls $LS_OPTIONS -l’
alias l=’ls $LS_OPTIONS -lA’
[…]

Par mesure de sécurité (Oui encore une foie), nous allons envoyer une alerte par mail à l’administrateur à chaque connexion de root en ssh, cela et d’autant plus intéressant aujourd’hui avec la multiplication des smartphones, et donc la possibilité de lire les mails partout ou nous nous trouvons.

dans le même fichier /root/.bashrc ajouter les lignes suivantes, en changeant l’email par le votre.

1
echo 'Accès Shell Root le ' `date` `who` | mail -s `hostname` Shell Root de `who | cut -d"(" -f2 | cut -d")" -f1` monitoring@test.com

sauvegarder puis redémarrer votre serveur

1
reboot

Étape N°3 : Installation des différents paquets du serveur dont BIND, Courier, ISPConfig etc..

connectez-vous à votre serveur, n’oubliez pas que vous avez changer le port par défaut, et que vous avez autorisé la connexion SSH uniquement à toto

1
ssh toto@ks123456.kimsufi.com -p 7070

Prenez les privilège root

1
su -

vérifiez que les commandes “hostname” et “hostname – f” retournent le même résultat, c’est a dire ks123456.kimsufi.com

1
2
3
4
hostname
ks123456.kimsufi.com
hostname -f
ks123456.kimsufi.com

Ok, pour être certain d’avoir toujours la dernière version et les mise à jour de l’antivirus ClamAV, ajoutez à “/etc/apt/sources.list” la ligne ci-dessous

1
vi /etc/apt/sources.list
1
2
3
[...]
deb http://ftp.de.debian.org/debian/ squeeze-updates main
[...]

Mettez à jour les paquets

1
apt-get update && apt-get upgrade

Il faut aussi changer le Shell par défaut, car ISPConfig rencontre quelques problème avec celui-ci

1
dpkg-reconfigure dash

Répondez “non” à la question suivante

Utiliser Dash comme interpréteur de ligne de commande par défaut (/bin/sh)? <-non

Pour que le serveur soit toujours à l’heure installez Network Time Protocol (NTP)

1
apt-get install ntp ntpdate

Nous pouvons installer maintenant Postfix, Courier, Saslauthd, MySQL, phpMyAdmin, rkhunter, et binutils avec la commande suivante

1
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl courier-maildrop getmail4 rkhunter binutils sudo gamin

mot de passe mysql —-> mot de passe administrateur root
faut-il créé un répertoire d’administration de bas –> no
configuration type du serveur de messagerie –> site internet
nom de courrier : ks123456.kimsufi.com
certificat SSL requis –> OK

MySQL doit obligatoirement être à l’écoute de toutes les interfaces, et non seulement à localhost, pour cela il faut éditer le fichier “/etc/mysql/my.cnf” et commenté la ligne bind-address= 127.0.0.1

1
vi /etc/mysql/my.cnf

[…]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
[…]

Redémarrez MySQL

1
/etc/init.d/mysql restart

Maintenant testons si cela fonctionne

1
2
netstat -tap | grep mysql
tcp        0      0 *:mysql                 *:*                     LISTEN      15487/mysqld

Ok.
Lors de l’installation, les certificats SSL de IMAP-SS et de POP3-SSL ont été crées avec comme nom d’hôte “localhost” au lieu du nom de notre serveur “ks123456.kimsufi.com”
Pour cela, il nous faut supprimer ces certificats et en créer d’autres avec les bons paramètres

1
2
3
cd /etc/courier
rm -f /etc/courier/imapd.pem
rm -f /etc/courier/pop3d.pem

Modifiez les deux fichiers suivants, et remplacez CN=localhost par CN=ks123456.kimsufi.com

1
vi /etc/courier/imapd.cnf

[…]
CN=ks123456.kimsufi.com
[…]

1
vi /etc/courier/pop3d.cnf

[…]
CN=ks123456.kimsufi.com
[…]

Créez maintenant les nouveaux certificats

1
2
mkimapdcert
mkpop3dcert

Et redémarrer Courier-IMAP-SSL et Courier-POP3-SSL:

1
2
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop-ssl restart

Installez maintenant Amavisd-new, SpamAssassin, et Clamav avec la commande suivante

1
apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl

La configuration de ISPConfig 3 utilise “amavisd” qui charge la bibliothèque des filtres internes de SpamAssassin, afin que nous puissions libérer de la RAM, nous pouvons arrêter SpamAssassin

1
2
/etc/init.d/spamassassin stop
update-rc.d -f spamassassin remove

Installez maintenant Apache2, PHP5, phpMyAdmin, FCGI, suExec, Pear, et mcrypt avec la commande suivante

1
apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp libruby libapache2-mod-ruby

Serveur web à reconfigurer automatiquement –> apache (sélectionnez avec la “barre espace”, il faut qu’une étoile apparait devant)
Faut-il configurer la base de données de phpmyadmin avec dbconfig-common ? –> non

Pour activer les modules d’Apache suexec, rewrite, ssl, actions, et include (plus dav, dav_fs et auth_digest si vous souhaitez utiliser WebDAV):

1
2
a2enmod suexec rewrite ssl actions include
a2enmod dav_fs dav auth_digest

redémarrez Apache

1
/etc/init.d/apache2 restart

Installez maintenant le serveur FTP PureFTPd ainsi que Quota pour pouvoir définir des cotas.

1
apt-get install pure-ftpd-common pure-ftpd-mysql quota quotatool

Éditez le fichier /etc/default/pure-ftpd-common …

1
vi /etc/default/pure-ftpd-common

… et assurez vous que le mode de démarrage est bien sur standalone et que VIRTUALCHROOT=true

[…]
STANDALONE_OR_INETD=standalone
[…]
VIRTUALCHROOT=true
[…]

Éditez le fichier /etc/inetd.conf pour éviter inetd d’essayer de démarrer le ftp:

1
vi /etc/inetd.conf

Si dans ce fichier se trouve une ligne débutant pas “ftp stream tcp”, commentez-là, si ce n’est pas le cas, alors vous n’avez rien à faire.

[…]
#:STANDARD: These are standard services.
#ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper
[…]

si vous avez modifier le fichier /etc/inetd.conf alors redémarrez inetd

1
/etc/init.d/openbsd-inetd restart

Maintenant nous allons configurer PureFTPd pour autoriser les Sessions FTP et TLS.
Le FTP est un protocole peu sécurisé, car les mots de passe ainsi que toutes les données sont transférées en clair, pour y remédier nous le couplerons au TLS pour crypter toutes les communications, rendant ainsi FTP beaucoup plus sûr.

1
echo 1 > /etc/pure-ftpd/conf/TLS

Pour utiliser TLS, nous devons créer un certificat SSL.
Créez le répertoire /etc/ssl/private/

1
mkdir -p /etc/ssl/private/

Nous pouvons maintenant générer le nouveau certificat TLS

1
openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Country Name (2 letter code) [AU]: <- Le pays en deux lette ex : FR
State or Province Name (full name) [Some-State]: <-Entrez le nom de votre État ou province.
Locality Name (eg, city) [ ]:<- Nom de votre ville : ex Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:<- Entrez votre Nom de votre organisme (par exemple, le nom de votre entreprise).
Organizational Unit Name (eg, section) [ ]:<-Saisissez le nom de votre service (par exemple, «Service Informatique”).
Common Name (eg, YOUR name) [ ]:<- Saisissez le nom de domaine complet du système (par exemple, «ks123456.kimsufi.com”).
Email Address [ ]:<-Saisissez votre adresse mail

Changez les permissions du certificat SSL

1
chmod 600 /etc/ssl/private/pure-ftpd.pem

Redémarrez PureFTPd

1
/etc/init.d/pure-ftpd-mysql restart

Editez le fichier /etc/fstab et ajouter “,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0” à la partition avec le point de montage “/” comme il est démontré ci-dessous.

1
2
3
4
5
6
7
8
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/sda1       /       ext4    errors=remount-ro,relatime,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0     0       1
/dev/sda2       swap    swap    defaults        0       0
/dev/sda3       /home   ext4    defaults,relatime       1       2
proc            /proc   proc    defaults                0       0
sysfs           /sys    sysfs   defaults                0       0
tmpfs           /dev/shm        tmpfs   defaults        0       0
devpts          /dev/pts        devpts  defaults        0       0

Activez les quotas avec les lignes de commandes suivantes

1
mount -o remount /
1
quotacheck -avugm

voici le résultat de cette commande

1
2
3
4
5
6
7
8
quotacheck: Parcours de /dev/sda1 [/] terminé
quotacheck: Cannot stat old user quota file: Aucun fichier ou dossier de ce type
quotacheck: Cannot stat old group quota file: Aucun fichier ou dossier de ce type
quotacheck: Cannot stat old user quota file: Aucun fichier ou dossier de ce type
quotacheck: Cannot stat old group quota file: Aucun fichier ou dossier de ce type
quotacheck: Vérifié 3941 répertoires et 43392 fichiers
quotacheck: Ancien fichier non trouvé.
quotacheck: Ancien fichier non trouvé.
1
quotaon -avug
1
2
/dev/sda1 [/] : quotas group activés
/dev/sda1 [/] : quotas user activés

A cette étape, il m’arrive d’avoir alléatoirement des erreurs que je n’est pu résoudre, si vous avez pas besoin de quotas, ce n’est pas très grave, mais si vous voulez absolument utiliser les quotas, alors il vous faut refaire l’installation de quota.

Installez maintenant BIND DNS Server

1
apt-get install bind9 dnsutils

Installez Vlogger, Webalizer, et AWstats

1
apt-get install vlogger webalizer awstats geoip-database

Ouvrez le fichier /etc/cron.d/awstats

1
vi /etc/cron.d/awstats

Et commentez les deux tâches cron de ce fichier

1
2
3
#*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh
# Generate static reports:
#10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] && /usr/share/awstats/tools/buildstatic.sh

Installation de Jailkit

Jailkit n’est nécessaire uniquement si vous souhaitez comme unique utilisateurs SSH chroot. (important: Jailkit doit être installé avant ISPConfig – il ne peut pas être installé par la suite!):
L’instalation ce fait comme suite.

1
apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper

Au moment de la rédaction de cet article, la dernière version de Jailkit est la 2.15

1
2
3
4
5
6
7
8
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.15.tar.gz
tar xvfz jailkit-2.15.tar.gz
cd jailkit-2.15
./debian/rules binary
cd ..
dpkg -i jailkit_2.15-1_*.deb
rm -rf jailkit-2.15*

Installez maintenant fail2ban

1
apt-get install fail2ban

Il faut créez les services à monitorer de PureFTPd, SASL, et Courier,
Dans un premier temps créez le fichier /etc/fail2ban/jail.local:

1
vi /etc/fail2ban/jail.local

copiez-y le contenu suivant

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
[pureftpd]

enabled  = true
port     = ftp
filter   = pureftpd
logpath  = /var/log/syslog
maxretry = 3


[sasl]

enabled  = true
port     = smtp
filter   = sasl
logpath  = /var/log/mail.log
maxretry = 5


[courierpop3]

enabled  = true
port     = pop3
filter   = courierpop3
logpath  = /var/log/mail.log
maxretry = 5


[courierpop3s]

enabled  = true
port     = pop3s
filter   = courierpop3s
logpath  = /var/log/mail.log
maxretry = 5


[courierimap]

enabled  = true
port     = imap2
filter   = courierimap
logpath  = /var/log/mail.log
maxretry = 5


[courierimaps]

enabled  = true
port     = imaps
filter   = courierimaps
logpath  = /var/log/mail.log
maxretry = 5

Maintenant, il faut créer les 5 filtres suivants

Le Filtre PureFTPd

1
vi /etc/fail2ban/filter.d/pureftpd.conf

[Definition]
failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.*
ignoreregex =

Le Filtre Mail pop3

1
vi /etc/fail2ban/filter.d/courierpop3.conf

# Fail2Ban configuration file
#
# $Revision: 100 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named “host”. The tag “” can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#
failregex = pop3d: LOGIN FAILED.*ip=\[.*:\]

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex=

Le Filtre mail pop3 Sécurisé

1
vi /etc/fail2ban/filter.d/courierpop3s.conf

# Fail2Ban configuration file
#
# $Revision: 100 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named “host”. The tag “” can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#
failregex = pop3d-ssl: LOGIN FAILED.*ip=\[.*:\]

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Le Filtre mail Imap

1
vi /etc/fail2ban/filter.d/courierimap.conf

# Fail2Ban configuration file
#
# $Revision: 100 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named “host”. The tag “” can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#
failregex = imapd: LOGIN FAILED.*ip=\[.*:\]

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Le Filtre mail Imap Sécurisé

1
vi /etc/fail2ban/filter.d/courierimaps.conf

# Fail2Ban configuration file
#
# $Revision: 100 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named “host”. The tag “” can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#
failregex = imapd-ssl: LOGIN FAILED.*ip=\[.*:\]

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Redémarrez le fail2ban

1
/etc/init.d/fail2ban restart

Installation le Web Mail client SquirrelMail

1
apt-get install squirrelmail

Ensuite, créez le lien symbolique suivant …

1
ln -s /usr/share/squirrelmail/ /var/www/webmail

… et lancez la configuration de SquirrelMail:

1
squirrelmail-configure

Nous devons configurer SquirrelMail de sort qu’il utilise Courier-IMAP/-POP3:
Les réponses que vous devez fournir sont :
Question 1 : D
Question 2 : courier
Question 3 : Appuyez sur n’importe quelle touche
Question 4 : S
Question 5 : Q

Comme vous pouvez le voir ci-dessous.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Main Menu --
1.  Organization Preferences
2.  Server Settings
3.  Folder Defaults
4.  General Options
5.  Themes
6.  Address Books
7.  Message of the Day (MOTD)
8.  Plugins
9.  Database
10. Languages

D.  Set pre-defined settings for specific IMAP servers

C   Turn color on
S   Save data
Q   Quit

Command >> <-- D


SquirrelMail Configuration : Read: config.php
---------------------------------------------------------
While we have been building SquirrelMail, we have discovered some
preferences that work better with some servers that don't work so
well with others.  If you select your IMAP server, this option will
set some pre-defined settings for that server.

Please note that you will still need to go through and make sure
everything is correct.  This does not change everything.  There are
only a few settings that this will change.

Please select your IMAP server:
    bincimap    = Binc IMAP server
    courier     = Courier IMAP server
    cyrus       = Cyrus IMAP server
    dovecot     = Dovecot Secure IMAP server
    exchange    = Microsoft Exchange IMAP server
    hmailserver = hMailServer
    macosx      = Mac OS X Mailserver
    mercury32   = Mercury/32
    uw          = University of Washington's IMAP server
    gmail       = IMAP access to Google mail (Gmail) accounts

    quit        = Do not change anything
Command >> <-- courier


SquirrelMail Configuration : Read: config.php
---------------------------------------------------------
While we have been building SquirrelMail, we have discovered some
preferences that work better with some servers that don't work so
well with others.  If you select your IMAP server, this option will
set some pre-defined settings for that server.

Please note that you will still need to go through and make sure
everything is correct.  This does not change everything.  There are
only a few settings that this will change.

Please select your IMAP server:
    bincimap    = Binc IMAP server
    courier     = Courier IMAP server
    cyrus       = Cyrus IMAP server
    dovecot     = Dovecot Secure IMAP server
    exchange    = Microsoft Exchange IMAP server
    hmailserver = hMailServer
    macosx      = Mac OS X Mailserver
    mercury32   = Mercury/32
    uw          = University of Washington's IMAP server
    gmail       = IMAP access to Google mail (Gmail) accounts

    quit        = Do not change anything
Command >> courier

              imap_server_type = courier
         default_folder_prefix = INBOX.
                  trash_folder = Trash
                   sent_folder = Sent
                  draft_folder = Drafts
            show_prefix_option = false
          default_sub_of_inbox = false
show_contain_subfolders_option = false
            optional_delimiter = .
                 delete_folder = true

Press any key to continue... <-- Appuyez sur n'importe quelle touche


SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Main Menu --
1.  Organization Preferences
2.  Server Settings
3.  Folder Defaults
4.  General Options
5.  Themes
6.  Address Books
7.  Message of the Day (MOTD)
8.  Plugins
9.  Database
10. Languages

D.  Set pre-defined settings for specific IMAP servers

C   Turn color on
S   Save data
Q   Quit

Command >> <-- S


SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Main Menu --
1.  Organization Preferences
2.  Server Settings
3.  Folder Defaults
4.  General Options
5.  Themes
6.  Address Books
7.  Message of the Day (MOTD)
8.  Plugins
9.  Database
10. Languages

D.  Set pre-defined settings for specific IMAP servers

C   Turn color on
S   Save data
Q   Quit

Command >> <-- Q

Vous pouvez maintenant accéder à SquirrelMail via l’URL : http://ks123456.kimsufi.com/webmail ou http://198.168.102.74/webmail

Nous arrivons à la dernière étape de l’installation, il nous reste à installer ISPConfig 3
Pour installer la dernière version de ISPConfig 3 faites comme ceci :

Téléchargez et décompressez la dernière version de ISPConfig 3

1
2
3
4
cd /tmp
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xfz ISPConfig-3-stable.tar.gz
cd ispconfig3_install/install/

Maintenant lancez l’installation proprement dit

1
php -q install.php

cela, vas configurer les services comme Postfix, Dovecot, etc…

Normalement il vous suffit de faire ENTER sans rien saisir.

Important : la questions sur l’utilisation de certificat SSL vous sera posée, la réponse par défaut est “yes” si vous faites “ENTER”.
Dans ce cas, lors du lancement de IPSConfig 3, les navigateurs vont vous avertir que votre certificat n’est pas authentifié.
Pour éviter ces avertissement, soit vous répondez “NO”, soit vous installer un certificat SSL gratuit Class1 (Un tutoriel est en préparartion)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
--------------------------------------------------------------------------------
 _____ ___________   _____              __ _         ____
|_   _/  ___| ___ \ /  __ \            / _(_)       /__  \
  | | \ `--.| |_/ / | /  \/ ___  _ __ | |_ _  __ _    _/ /
  | |  `--. \  __/  | |    / _ \| '_ \|  _| |/ _` |  |_ |
 _| |_/\__/ / |     | \__/\ (_) | | | | | | | (_| | ___\ \
 \___/\____/\_|      \____/\___/|_| |_|_| |_|\__, | \____/
                                              __/ |
                                             |___/
--------------------------------------------------------------------------------


>> Initial configuration

Operating System: Debian 6.0 (Squeeze/Sid) or compatible

    Following will be a few questions for primary configuration so be careful.
    Default values are in [brackets] and can be accepted with <ENTER>.
    Tap in "quit" (without the quotes) to stop the installer.


Select language (en,de) [en]: <-- ENTER

Installation mode (standard,expert) [standard]: <-- ENTER

Full qualified hostname (FQDN) of the server, eg server1.domain.tld  [server1.example.com]: <-- ENTER

MySQL server hostname [localhost]: <-- ENTER

MySQL root username [root]: <-- ENTER

MySQL root password []: <-- yourrootsqlpassword

MySQL database to create [dbispconfig]: <-- ENTER

MySQL charset [utf8]: <-- ENTER

Generating a 2048 bit RSA private key
.......+++
...........................................................................................................+++
writing new private key to '
smtpd.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '
.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: <-- ENTER
State or Province Name (full name) [Some-State]: <-- ENTER
Locality Name (eg, city) []: <-- ENTER
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- ENTER
Organizational Unit Name (eg, section) []: <-- ENTER
Common Name (eg, YOUR name) []: <-- ENTER
Email Address []: <-- ENTER
Configuring Jailkit
Configuring SASL
Configuring PAM
Configuring Courier
Configuring Spamassassin
Configuring Amavisd
Configuring Getmail
Configuring Pureftpd
Configuring BIND
Configuring Apache
Configuring Vlogger
Configuring Apps vhost
Configuring Firewall
Installing ISPConfig
ISPConfig Port [8080]: <-- ENTER

Configuring DBServer
Installing ISPConfig crontab
no crontab for root
no crontab for getmail
Restarting services ...
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.
Stopping SASL Authentication Daemon: saslauthd.
Starting SASL Authentication Daemon: saslauthd.
Stopping amavisd: amavisd-new.
Starting amavisd: amavisd-new.
Stopping ClamAV daemon: clamd.
Starting ClamAV daemon: clamd .
Stopping Courier authentication services: authdaemond.
Starting Courier authentication services: authdaemond.
Stopping Courier IMAP server: imapd.
Starting Courier IMAP server: imapd.
Stopping Courier IMAP-SSL server: imapd-ssl.
Starting Courier IMAP-SSL server: imapd-ssl.
Stopping Courier POP3 server: pop3d.
Starting Courier POP3 server: pop3d.
Stopping Courier POP3-SSL server: pop3d-ssl.
Starting Courier POP3-SSL server: pop3d-ssl.
Restarting web server: apache2 ... waiting ..
Restarting ftp server: Running: /usr/sbin/pure-ftpd-mysql-virtualchroot -l mysql:/etc/pure-ftpd/db/mysql.conf -l pam -H -b -A -O clf:/var/log/pure-ftpd/transfer.log -8 UTF-8 -Y 1 -D -u 1000 -E -B
Stopping domain name service...: bind9 waiting for pid 22267 to die.
Starting domain name service...: bind9.
Installation completed.

Le programme d’installation configure automatiquement tous les services sous-jacents, aucune configuration manuelle est nécessaire.

Ensuite, vous pouvez accéder à ISPConfig 3 via l’url dans http://ks123456.kimsufi.:8080/ ou http://198.168.102.74:8080/. Connectez-vous avec le nom d’utilisateur admin et le mot de passe admin
Attention : vous devriez changer le mot de passe par défaut après votre première connexion, vous pouvez aussi changer la langue.

Serveur Dédié : un serveur parfait avec Debian Squeeze (Debian 6.0)
Accueil ISPConfig 3

Nous allons voir dans un prochain article comment protéger PHPmyAdmin, ISPconfig.

( Mise-à-jour le 23/11/2013 : Protection PHPmyadmin et ISPConfig 3 )

J’en profite pour proposer aux débutants une formation d’initiation en administration système que je conduit pour 2IC-Formation

N’hésitez à m’apporter vos remarques et commentaire.

La réalisation de tel tuto prends du temps, n’hésitez pas à la partagé, cela serait le meilleur des remerciement.

vi : Coloration syntaxique

vi : Coloration syntaxique

Hello,

Chose indispensable pour administrer un serveur à distance ; l’éditeur de texte vi, mais voilà, il faut se rendre à l’évidence qu’éditer un texte monochrome ce n’est pas très ergonomique.

vi Pas de coloration syntaxique
Vi sans coloration syntaxique

Donc pour mettre un peu de couleur il faut activer la coloration syntaxique de Vi comme suite:

il faut en premier installer le package vim si cela n’a pas été fait précédemment

Sous Debian ou basée sur Debian (Ubuntu, Mint …)

1
apt-get install vim

Sous Red-Hat ou basée sur Red-Hat (Fedora, CentOS …)

1
rpm -i vim*.rpm

Pour mettre en place la coloration syntaxique de vim il faut crée le fichier .vimrc à la racine du home de l’utilisateur (~/).
Dans notre cas, c’est à l’utilisateur root que nous ajoutons la coloration, car nous l’utilisons pour administrer le serveur à distance.

1
root@linux:~# cd ~
1
root@linux:~# vi .vimrc

Le contenu de ce fichier diffère selon la couleur de fond de votre terminal

Si le fond est sombre

1
2
set background=dark
:syntax on

si il est clair

1
:syntax on

Voilà, maintenant vous avez de belle couleur en utilisant votre éditeur de texte favori ^^

Vim coloration syntaxique
Vim coloration syntaxique
Linux : Gestion des utilisateurs, processus et audit réseau avec Zenity

Linux : Gestion des utilisateurs, processus et audit réseau avec Zenity

Administration des utilisateurs avec Zenity
Administration des utilisateurs avec Zenity
Hello All,

Voici un petit bout de code en Bash pour la gestion des utilisateurs sous Linux entièrement fait avec Zenity, je l’avais développé il y à un moment déjà, mais il est toujours d’actualité.
Ce script a été fait sous Fedora, mais normalement il est compatible pour les distributions déviantes de Debian.

Pour rappel, Zenity est un outil qui permet d’afficher des boîtes de dialogue GTK+ depuis la ligne de commande ou au travers de scripts shell. (Page officielle de zenity)

Ce script permet de :

  • Créer et supprimer un utilisateur (Avec mot de passe crypté en 74 caractères, comme ceux de linux)
  • Gérer les groupes
  • Gérer les processus (trouver et arrêter un processus)
  • Audit réseau : Identifier les ordinateurs faisant partie du même réseau

Vous pouvez le modifier, le copier, l’améliorer, pensez quand même à mettre la source c’est a dire l’URL du site svp.

Pour le bon fonctionnement de ce script, il faut obligatoirement installer zenity, mkpasswd

Pour Debian et déviantes (Ubuntu, Mint …)

1
apt-get install zenity mkpasswd

Pour Red-Hat et déviantes (Fédora, CentOS …)

1
yum install zenity mkpasswd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
#!/bin/bash

# les outils nécéssaire, zenity, mkpasswd, show

#***********************************************************************
#***********************************************************************
#********************** Fonction gestion des utilisateur ***************
#***********************************************************************
#***********************************************************************
#  
#  Nom: menu_gestion_utilisateur
#  Description : cette partie gère tous ce qui est gestion de l'utilisateur,
#   l'ajout comme la suppression des utilisateur et la gestion de groupe
#  
#  
##################################################
# Fonction menu pour la gestion des utilisateurs #
#################################################
menu_gestion_utilisateur(){
CHOIX=`zenity --list --title "Menu utilisateur" --text "Que voulez-vous faire ?" --height "300" --width "300" --column="Gestion des options" --print-column="1" --hide-header --separator "-" "1 - Créer un utilisateur" "2 - Supprimer un utilisateur" "3 - Gestion des groups" "4 - Retour Menu principale"` || exit 0


#Sinon récupération des choix

case $CHOIX in
  1*)add_user;;
  2*)del_user;;
  3*)gestion_grp;;
   *)menu_principale;; 
esac
}

##################################################
# Fonction ajouter un utilisateur               #
#################################################

add_user(){
    # demande si l'utilisateur sera dans une group existant
    goupExiste=`zenity --question --title "Groupe de l'utilisateur" --text "L'utilisateur sera-t-il dans un groupe existant ?" --height "150" --width "300"`
    if [ "$?" -eq 0 ]; then                                                
        # si Ok demande quel group
        groupe_utilisateur=`zenity --entry --title "Groupe de l'utilisateur" --text "Quel est ce groupe" --height "300" --width "300" --entry-text "Nom du groupe"`
                                                                           
        if [ ! -z $groupe_utilisateur ]; then                              
        # si le champs pas vide recherche /etc/group si existe, la sortie  et erreuyr ecran vas à la poubelle
            cat /etc/group | grep -w $groupe_utilisateur > /dev/null 2>&1  
            # si il existe grp pend la valeur de 1
            if [ "$?" -eq 0 ]; then
                grp=1                                                  
            else # si il existe pas, demande si vuet voir l'ensemble des groupe existant
                Voirgoup=`zenity --question --title "Gestion utilisateur" --text "<span color='#FF0000'>ATTENTION</span> le groupe $groupe_utilisateur n'existe pas!!! Souhaitez vous voir l'ensemble des groupe existants?" --height "150" --width "300"`
                if [ "$?" -eq 0 ]; then        
                    #si la réponse est oui, alors ouverture du fichier /etc/gro
                    cat /etc/group 2>/dev/null && menu_gestion_utilisateur
                   
                else
                    grp=0                                                     #sinon grp prend 0
                fi
                   
            fi
        else                                                            # si ple champs vide
            zenity --error --title "Erreur" --text "Le champ est vide" --height "200" --width "300" --ok-label "Quitter"
            grp=0
        fi
    else                                                                  # sinon demande si création de group
        goupQuestion=`zenity --question --title "Création de groupe" --text "Souhaitez-vous créér un group pour cet utilisateur" --height "150" --width "300"`
        if [ "$?" -eq 0 ]; then                                          # si Ok redurection menu gestion des groupe
            gestion_gr
            grp=0
        else
            grp=0                                                     #sinon grp prend 0
        fi
    fi
   
    # formulaire demandant le login et mot de passe
    loginMdp=`zenity --forms  --title="Nouvel utilisateur"  --text="Login et mot de passe"     --add-entry="Nom de l'utilisateur"     --add-password="Mot de passe"  --add-password="Confirmer le mot de passe"     --separator="|"` ||menu_gestion_utilisateur # si annulation revois vers le menu gestion des utilisateurs
   
    #On récupérer les valeurs des différents champs :
    nom_utilisateur=$(echo $loginMdp | cut -d "|" -f1)      #Nom de l'utilisateur
    mdp=$(echo $loginMdp | cut -d "|" -f2)                  #mot de passe
    mdp_confirm=$(echo $loginMdp | cut -d "|" -f3)          #confirmation du mot de passe
   
    if [ ! $mdp = $mdp_confirm ]; then                      # si les deux mot de passe sont différents, alors message d'erreur
        zenity --error --title "Erreur" --text "Mot de passe incorrecte" --height "200" --width "300" --ok-label "Ok" || menu_gestion_utilisateur # fenète erreur
    else
   
    #
    # On crypte le mot de passe récupéré
    #
        M="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" #chaine de caractère pour la création du SALT
        while [ "${n:=1}" -le "8" ]                                        #Boucle pour la création du Salt
        do  pass="$pass${M:$(($RANDOM%${#M})):1}"                          #concaténation d'un caractère dans pass pioché aléatoirement dans la chaine M
        let n+=1                                                            #incrémentation de 1
        done                                                           
        mdpOK=$(mkpasswd $mdp -S $pass -m SHA-512) #cryptage du mot depasse avec la commande mkpasswd avec le Salt crée (-S) et la méthode SHA-512 86 bit
   
   
   
   
    if [ $grp -eq 1 ]; then                             # si grp = 1, c'est a dire qu'il a une groupe, donc création d'un utilisateur avec un groupe principal
       
        useradd -p $mdpOK -g $groupe_utilisateur -s /bin/bash -k rep-skel -m $nom_utilisateur 2>/dev/null  
    else                                                                    # sinon création d'un utilisateur sans groupe
       
        useradd -p $mdpOK -s /bin/bash -k rep-skel -m $nom_utilisateur 2>/dev/null #redirection de l'affichage des erreur vers la pubelle
    fi
   
        if [ $? -eq 0 ]; then # si ajout utilisateur  Ok message qui confirme l'ajout
            zenity --info --title "Message" --text "Le nouvel utilisateur $nom_utilisateur à bien été créé" --height "150" --width "300"
            menu_gestion_utilisateur
               
        else    # si non, message d'erreur
            zenity --error --title "Erreur" --text "Impossible de créér l'untilisateur $nom_utilisateur " --height "150" --width "300" --ok-label "Quitter"
            menu_gestion_utilisateur
        fi
   
fi
}
##################################################
# Fonction suprimmer un utilisateur             #
#################################################
del_user(){
   
    retour=0
    while [ $retour -eq 0 ]; do # tant que retour = 0 la boucle tourne
   
    # demande le login du l'utilisateur a sup.
    nom_utilisateurDel=`zenity --entry --title "Supprimer un utilisateur" --text "Nom de l'utilisateur" --height "300" --width "300" --entry-text "login"` || menu_gestion_utilisateur
    if [ $? -eq 0 ]; then
        cat /etc/passwd | grep -w $nom_utilisateurDel > /dev/null 2>&1  # Recherche dans etc/passwd si l'utilisateur existe
            if [ ! $? -eq 0 ]; then                                     # si il existe pas un message d'erreur s'affiche
                zenity --error --title "Erreur" --text "L'utilisateur $nom_utilisateurDel n'existe pas vérifier l'orthographe  " --height "150" --width "300" --ok-label "OK"
            else                                                        # si il existe, demande la confirmation de la suppression
                confirmerDel=`zenity --question --title "supprimer un utilisateur" --text "Confirmer la suppression de l'utilisateur $nom_utilisateurDel" --height "150" --width "300"`
                    if [ $? -eq 0 ]; then                               # si confirmation, suppression de l'utilisateur
                        userdel -r $nom_utilisateurDel 2>/dev/null      # sorie des erreur stdin, stout danslapoubelle
                            if [ $? -eq 0 ]; then                       # si suppression réussie, confirme la suppression
                                zenity --info --title "Message" --text "L'utilisateur $nom_utilisateurDel à bien été supprimé" --height "150" --width "300"
                                retour=1                                # retour prent ma valeur 1 pour sortir dela boucle
                            fi
                    else                                                # si supression impossible affiche une erreur
                        zenity --error --title "Erreur" --text "Impossible de supprimer l'utilisateur $nom_utilisateurDel " --height "150" --width "300"
                    fi
                       
            fi
    fi
   
    done
    menu_gestion_utilisateur
}


##################################################
# Fonction gestion des groupe                   #
#################################################

gestion_grp(){
   
    local back=0
    while [ $back -eq 0 ]; do # tant que retour = 0 la boucle tourne
   
        createOrDeleteGroup=`zenity --list --title "Gestion des groupes" --text "Que voulez-vous faire ?" --height "300" --width "300" --column="Gestion des options" --print-column="1" --hide-header --separator "-" "1 - Créer un groupe" "2 - Supprimer un groupe" "3 - Gestion des utilisateur" "4 - Menu principal"`
   
       
        case $createOrDeleteGroup in
              1*)  
                    nom_grp=`zenity --entry --title "Ajouter un groupe" --text "Nom du group" --height "300" --width "300" --entry-text "Nom du groupe"` || menu_gestion_utilisateur
                    if [ $? -eq 0 ]; then
                        groupadd $nom_grp 2>/dev/null
                         if [ $? -eq 0 ]; then
                         zenity --info --title "Message" --text "Le groupe $nom_grp a été créé" --height "150" --width "300"
                         back=1
                         elif [ $? -eq 9 ];then # le groupe existe déja
                         zenity --error --title "Erreur" --text "le groupe « $nom_grp » existe déjà" --height "150" --width "300"
                         back=0
                         else
                         zenity --error --title "Erreur" --text "Impossible d'ajouter le groupe" --height "150" --width "300"
                         back=0
                         fi
                    fi ;;
            2*)
                nom_grpDl=`zenity --entry --title "Supprimer un groupe" --text "Nom du group" --height "300" --width "300" --entry-text "Nom du groupe"` || menu_gestion_utilisateur
            if [ "$?" -eq 0 ]; then
                cat /etc/group | grep -w $nom_grpDl > /dev/null 2>&1 # recherche /etc/group si existe, la sortie  et erreuyr ecran vas à la poubelle
                    if [ "$?" -eq 0 ]; then
                        groupdel $nom_grpDl                                         # si trouve le groupe on le supprime
                            if [ "$?" -eq 0 ]; then
                                zenity --info --title "Message" --text "Le groupe $nom_grpDl a bien été supprimer" --height "150" --width "300"
                                back=1
                            elif [ "$?" -eq 6 ]; then
                                zenity --error --title "Erreur" --text "le groupe « $nom_grp » n'existe pas" --height "150" --width "300"
                                back=0
                            else
                                zenity --error --title "Erreur" --text "Impossible de supprimer le groupe" --height "150" --width "300"
                                back=0
                            fi
                    else
                        zenity --error --title "Erreur" --text "Le groupe $nom_grpDl n'existe pas" --height "200" --width "300" --ok-label "Quitter" # fenète erreur
                        back=0
                       
                    fi
            fi;;
            3*) menu_gestion_utilisateur;;
             *) menu_principale;;
                   
               

                           
        esac
   
     done

    gestion_grp
   
   
   
}




#***********************************************************************
#***********************************************************************
#****************** Fonction gestion des processus *********************
#***********************************************************************
#***********************************************************************
#  
#   Nom: gestion_proc
#   Description : cette partie gère tous ce qui concernes la gestion des  
#   processus
#  
#  
##################################################
# Menu pour la gestion des process              #
#################################################
gestion_proc(){
    processAction=`zenity --list --title "Gestion de process" --text "Que voulez-vous faire ?" --height "300" --width "300" --column="Gestion des options" --print-column="1" --hide-header --separator "-" "1 - arrêter un processus" "2 - Récupérer une liste des processus" "3 - Retour Menu principale"` || menu_principale
   
    case $processAction in
        1*) kill_process;;
        2*) list_process;;
         *) menu_principale;;
         
     esac  
}
##################################################
# Fonction pour arrété les process                #
#################################################
kill_process(){
    processToKill=`zenity --question --title "arrêter un processus" --text "connaissez vous le nom du programme que vous voulez stoper " --height "150" --width "300"`
        if [ $? -eq 0 ]; then
            namePgKill=`zenity --entry --title "arrêter un processus" --text "Nom du programme" --height "300" --width "300" --entry-text "Nom du programme"` || gestion_proc
            if [ ! -z $namePgKill ]; then
                confirmerDel=`zenity --question --title "Arrêter le processus" --text "Confirmer l'arrêt du processus du programme $namePgKill" --height "150" --width "300"`
                    if [ $? -eq 0 ]; then
                        pidPg=$(pgrep $namePgKill) # enregistrement du/des PID() dans la variable
                        if [ $? -eq 0 ]; then
                            echo $pidPg | tr " " "\n" > /tmp/pid.txt # supprimer les espaces par des saut de ligne
                            nbl=$(wc -l /tmp/pid.txt | cut -d " " -f1) # compte le nombre de ligne, nous gadons uniquement le premier caractère qui est le numéro
                       
                            n=0
                            while [ $n -le $nbl ]; do # tant que n est infèrieur ou égale au nombre de ligne
                                processPID=$(awk -v ligne=$n ' NR == ligne { print $0}' /tmp/pid.txt) # on récupère chaque numéro de process pour l'arrêter.
                                kill -9 $processPID 2>/dev/null #  arret du processus
                                let $[ n+=1 ]
                            done
                            zenity --info --title "Message" --text "Le(s) processus du programme $namePgKill est/sont arrêté(s)" --height "150" --width "300"
                            gestion_proc
                        else
                            zenity --error --title "Erreur" --text "Pas de processus pour ce programme" --height "200" --width "300" --ok-label "Quitter"
                            gestion_proc
                        fi
                       
                       
                    fi
               
            else  
                zenity --error --title "Erreur" --text "Vous n'avez renseigné aucun programme" --height "200" --width "300" --ok-label "Quitter"
                gestion_proc
            fi
        else
             #question si veux voir l'ensemble des processus
            zenity --info --title "Gestions des processus" --text "Une fenêtre comportant l'ensemble des processus apparaîtra, notez le PID du processus que vous voulez arrêter."
             --height "150" --width "300" --ok-label "Ok"
            ps aux > /tmp/allpid.txt
            zenity --text-info --title "Liste des processus" --filename "/tmp/allpid.txt" --font "Sans 10" --height "500" --width "900"
            pidProcessus=`zenity --entry --title "arrêter un processus" --text "PID du processus que vous voulez arrêter" --height "300" --width "300" --entry-text "PID du processus"` || gestion_proc
                if [ ! -z $pidProcessus ]; then
                 confirmerDel=`zenity --question --title "Arrêter le processus" --text "Confirmer l'arrêt du processus du programme $pidProcessus" --height "150" --width "300"` || gestion_proc
                        if [ $? -eq 0 ]; then
                            kill -9 $pidProcessus 2>/dev/null #  arret du processus
                                if [ $? -eq 0 ]; then
                                    zenity --info --title "Message" --text "Le processus $pidProcessus est arrêté" --height "150" --width "300"
                                    gestion_proc
                                else
                                    zenity --error --title "Erreur" --text "Aucun processus de ce type" --height "200" --width "300" --ok-label "Quitter"
                                    gestion_proc
                                fi
                                   
                        fi
                else
                    zenity --error --title "Erreur" --text "Vous n'avez renseigné pid" --height "200" --width "300" --ok-label "Quitter"
                   
                fi
                       
           
        fi
       
}
#***********************************************************************
#***********************************************************************
#****************** Fonction pour auditer le reseau ********************
#***********************************************************************
#***********************************************************************
#  
#   Nom: menu_principale
#   Description : Le menu principal nous propose les différents choix a
#   faire

audit_reseau(){
   
    goupExiste=`zenity --question --title "Audit du reseau" --text "Le reseau vas être audité, cette opération peut prendre quelques minutes" --height "150" --width "300"`

    nb=1
    pr=0
    sl=1
    for ip in $(seq 1 254); do
   
        ping -c 1 138.102.74.$ip >/dev/null;
        if [ $ip == $nb ];then
                  echo "#$pr" ; sleep $sl
               
           
                $nb=$(echo "$nb+24" |bc )
                let "pr=$pr + 10"
                let "sl=$sl + 1"
             fi
        if [ $? -eq 0 ]; then
       
            echo "192.168.5.$ip"
           
               
        fi
    done | zenity --progress --percentage "0"
   

}
#***********************************************************************
#***********************************************************************
#****************** Menu princupal de l'application ********************
#***********************************************************************
#***********************************************************************
#  
#   Nom: menu_principale
#   Description : Le menu principal nous propose les différents choix a
#   faire

menu_principale(){

CHOIX=`zenity --list --title "Menu principal" --text "Que voulez-vous faire ?" --height "300" --width "300" --column="Gestion des utilisateurs" --print-column="1" --hide-header --separator "-" "1 - Gestion des utilisateurs" "2 - Gestions des processus" "3 - Audit du réseau"`

quitter # appel la fonction quitter

#Sinon récupération des choix

case $CHOIX in
  1*)menu_gestion_utilisateur;;
  2*)gestion_proc;;
  3*)audit_reseau;;
   *)menu_principale;; 
esac
}





if [ ! `id -u` = 0 ];                                              # Nous vérifions l'utilisateur est roo             
then
    zenity --error --title "Erreur" --text "Vous devez être ROOT pour exécuter ce Sript" --height "200" --width "300" --ok-label "Quitter"   
   
else
 menu_principale
fi

Télécharger le fichier [wpdm_file id=2]

Vous avez aimé cet article ? Alors partagez-le ^^