Hop juste un petit post pour indiquer l’existence d’un dokuwiki: wiki.gardouille.fr
J’essaye d’y mettre principalement mes notes/tutos. Et dès que possible je le synchronise avec le wiki de Debian (wiki.debian.org) pour créer les éventuelles pages qui n’existeraient pas encore.

Bon c’est un peu chiant de basculer de l’un à l’autre, sachant que le wiki de Debian est en Moinmoin. La syntaxe de Moinmoin est assez sympa, mais c’est surtout sa mise en place qui est un peu repousante :D

,
  • Situation actuelle: Machine virtuelle openvz hébergé par Proxmox. Serveur proftpd mis en place et je voulais « surveiller » les identifications & co avec Fail2ban. Aucun problème pour la surveillance des logs de ssh ou d’Apache. Toutes fois, littéralement impossible de surveiller les logs de proftpd.
  • J’ai trouvé un message d’erreur dans la liste des règles iptables:
    iptables -L...
    fail2ban-proftpd tcp -- anywhere anywhere FATAL: Could not load /lib/modules/2.6.32-4-pve/modules.dep: No such file or directory
    ...

    Bizarre. Liste des modules:
    ls /lib/modules... nada

    Okkk :D Aucun module.
  • Après une rapide recherche, pour la surveillance des logs de proftpd, les modules suivants sont nécessaires:
    iptable_filter
    ipt_length
    ipt_limit
    iptable_mangle
    ipt_REJECT
  • Et pour charger ces modules, bas au final c’est pas bien compliqué, il suffit de le faire à partir de l’hôte:
    vzctl stop ID_VM (arrêt de la machine virtuelle)
    vzctl set ID_VM --iptables iptable_filter --iptables ipt_length --iptables ipt_limit --iptables iptable_mangle --iptables ipt_REJECT --save
    vzctl start ID_VM

=)

Sources:

OpenVZ-Users-Guide.pdf (page 70)

, , ,

L’import d’une map créée en solo est possible, toute fois je n’ai pas réussi à importer l’inventaire du joueur. Pour résoudre le problème, il suffit de placer tout son inventaire dans un coffre et quitter/sauvegarder la map.

  • L’emplacement de la map en solo :
    (linux) ~/.minecraft/saves/NOM_MAP
    (windows 7/vista) C:/Users/NOM_UTILISATEUR/AppData/Roaming/.minecraft/
    (windows xp) C:/Documents and Settings/NOM_UTILISATEUR/Application Data/.minecraft
  • L’emplacement de la map sur le serveur :
    $MINE_PATH/NOM_MAP$MINE_PATH est l’emplacement de minecraft serveur, je l’ai placé dans ~/minecraft_serveur pour l’instant moi =)
  • Du coup, un petit :
    scp -r ~/.minecraft/NOM_MAP user@ADRESSE_SERVEUR:/$MINE_PATH/Windowsien je vous laisse vous amuser avec filezilla et le sftp/ftp.

Le nom de la map doit également correspondre au nom indiqué dans le fichier de propriété du serveur :
cat $MINE_PATH/server.properties
#Minecraft server properties
#Tue Sep 20 22:37:14 CEST 2011
level-name=NOM_MAP

Puis on relance le serveur comme d’habitude.
PS : le nouveau joueur risque de ne pas spawn prêt des constructions du joueur solo. Pensez à bien repérer la zone et l’éclairer. Pour ma part, j’ai eu de la chance, spawn à côté d’une grotte proche des constructions :D
PS² : Sauvegarder la map en début de journée, ça permet de ne pas se faire baiser quand on respawn avec le nouveau joueur à partir du serveur et qu’on est super loin des constructions :D (encore une fois, j’ai eu de la chance d’être prêt :þ

I] Proxmox VE 1.9

Ça y est, dernière maj se basant sur Lenny pour Proxmox VE: la 1.9.
Pour new iso et update: wiki proxmox
Cette update supporte OpenVZ et KVM =).

II] Xorg pour une VM KVM

Les machines virtuelles KVM dispose d’une carte vidéo qui par défaut est normalement une Cirrus Logic GD5446:
$ lspci |grep VGA
00:02.0 VGA compatible controller: Cirrus Logic GD 5446

Après avoir installé xorg en bonne et du forme, voici un exemple de xorg.conf qui fonctionne plus que convenablement avec cette carte:
cat /etc/X11/xorg.confSection "InputDevice"
    Identifier "Generic Keyboard"
    Driver "kbd"
    Option "XkbRules" "xorg"
    Option "XkbModel" "pc105"
    Option "XkbLayout" "fr"
    Option "XkbVariant" "latin9"
    Option "XkbOptions" "lv3:ralt_switch"
EndSection

Section "InputDevice"
    Identifier "Configured Mouse"
    Driver "mouse"
EndSection

Section "Device"
    Identifier "Configured Video Device"
EndSection

Section "Monitor"
    Identifier "Configured Monitor"
    HorizSync 30 - 90
    VertRefresh 50 - 160
EndSection

Section "Screen"
    Identifier "Default Screen"
    Monitor "Configured Monitor"
    DefaultDepth 24
    Subsection "Display"
    Depth 24
    Modes "1024x768" "800x600"
    EndSubSection
EndSection

Bon c’est pas ce que je trouve le plus utile pour une vm distante, mais ça peut toujours dépanner =)

Sources:

L’excellente doc sur la virtualisation de inetdoc.net

Unstable semble être à la mode (un peu plus d’article par ci par là), donc je vous fais part de la « méthode » que j’utilise pour mon installation, à savoir une image iso business modifiée pour s’installer en semi-automatique directement avec Unstable.
La méthode est relativement simple.

  • 1 image iso (i386 ou amd64)
  • 1 fichier isolinux.cfg un peu modifié pour pouvoir lancer l’installation automatiquement
  • 1 fichier preseed avec les valeurs qui vont bien pour une installation semi-auto
  • 1 script qui récupère le contenu de l’image iso, le modifie et recréée une image iso

1] Image iso:

J’utilise l’image iso 386, donc la suite de l’article sera à modifier en conséquence pour les utilisateurs amd64.
Il faut commencer par récupérer l’image iso ici
On peut monter l’iso pour voir son arborescence, récupérer/visualiser les fichiers, …
mkdir -p /tmp/debian/mnt
mount -o loop debian-testing-i386-businesscard.iso /tmp/debian/mnt

Note: L’image iso businesscard est la seule (de ce que j’ai pu tester) qui permet de choisir sa version de Debian (stable, testing, unstable).

2] Fichier isolinux.cfg

Fichier généré en parti à partir des fichiers isolinux/isolinux.cfg et isolinux/txt.cfg qui se trouvent à la racine de l’image iso.
default vesamenu.c32
#prompt 1
timeout 2
default install
label install
menu label ^Install
menu default
kernel /install.386/vmlinuz
append preseed/file=/cdrom/preseed.cfg lang=fr locale=fr_FR console-keymaps-at/keymap=fr-latin9 vga=normal initrd=/install.386/initrd.gz -- quiet

Le « principal » ajout est preseed/file=/cdrom/preseed.cfg, qui indique de prendre le fichier preseed à la racine du cdrom (là où on le placera dans la suite).

3] Fichier preseed.cfg

Bon alors là, partie un peu plus « velue » pour les néophytes.
Ce fichier dépend évidemment de la manière dont on veut que l’installer se comporte. Pour ma part, tout est en automatique sauf le mot de passe de root et le partitionnement. Voila ce que ça donne:
##### Langues #####
# Préconfigurer la locale seule définit la langue, le pays et la locale.
d-i debian-installer/locale select fr_FR.UTF-8

# Choix du clavier :
d-i console-keymaps-at/keymap select fr-latin9
#d-i keyboard-configuration/xkb-keymap select fr(latin9)
# Choix d'une architecture différente :
#d-i console-keymaps-usb/keymap select mac-usb-us

##### Réseau #####
# Interdire toute configuration réseau. C'est utile pour des installations
# à  partir de cédérom sur des machines sans réseau. Les questions et les avertissements
# à  propos du réseau ainsi que les temps d'attente sont fastidieux.
#d-i netcfg/enable boolean false

# Netcfg choisira une interface connectée si possible. Cela empêchera d'afficher
# une liste s'il y a plusieurs interfaces.
#d-i netcfg/choose_interface select auto

# Pour utiliser une interface particulière :
d-i netcfg/choose_interface select eth0

# Quand le serveur dhcp est lent et que l'installateur s'arrête pour l'attendre,
# ceci peut être utile :
#d-i netcfg/dhcp_timeout string 60

# Si vous préférez configurer vous-même le réseau, décommentez cette ligne et
# les lignes suivantes sur la configuration du réseau.
#d-i netcfg/disable_dhcp boolean true

# Si vous voulez que le fichier de préconfiguration fonctionne aussi bien
# avec que sans serveur dhcp, décommentez ces lignes et les lignes sur la
# configuration du réseau.
#d-i netcfg/dhcp_failed note
#d-i netcfg/dhcp_options select Configure network manually

# Configuration du réseau.
#d-i netcfg/get_nameservers string 192.168.1.1
#d-i netcfg/get_ipaddress string 192.168.1.42
#d-i netcfg/get_netmask string 255.255.255.0
#d-i netcfg/get_gateway string 192.168.1.1
#d-i netcfg/confirm_static boolean true

# Remarquez que les valeurs données par DHCP, nom de domaine ou nom de
# machine, prennent le pas sur les valeurs déclarées ici. Cependant,
# cette déclaration empêche que les questions ne soient posées même si les
# valeurs viennent de dhcp.
d-i netcfg/get_hostname string @@HOSTNAME@@
d-i netcfg/get_domain string @@DOMAINNAME@@

# Supprimer le dialogue irritant sur la clé WEP.
#d-i netcfg/wireless_wep string
# Et l'étonnant nom de machine DHCP que certains FAI utilisent comme mot de
# passe.
#d-i netcfg/dhcp_hostname string radish

# Si pour le réseau ou pour un autre matériel vous avez besoin d'un microprogramme
# (« firmware ») non libre, vous pouvez forcer l'installateur à  le télécharger,
# en évitant la demande de confirmation.
# Vous pouvez aussi désactiver la question en mettant ce paramètre   « false ».
#d-i hw-detect/load_firmware boolean true

##### Comptes #####
# Autoriser les connexions du superutilisateur
d-i passwd/root-login boolean true
# On peut aussi ne pas créer de compte d'utilisateur.
d-i passwd/make-user boolean true

#Le mot de passe de root en clair...
#d-i passwd/root-password password r00tme
#d-i passwd/root-password-again password r00tme
# ... ou chiffré avec un hachage MD5
#d-i passwd/root-password-crypted password $1$098f6bcd4621d373cade4e832627b4f6

# Vous pouvez aussi présélectionner le nom de l'utilisateur et son identifiant
# de connexion
d-i passwd/user-fullname string
d-i passwd/username string test
# Mot de passe de l'utilisateur en clair...
#d-i passwd/user-password password insecure
#d-i passwd/user-password-again password insecure
# ... ou chiffré avec un hachage MD5
d-i passwd/user-password-crypted password $1$098f6bcd4621d373cade4e832627b4f6
# Préciser l'UID du premier utilisateur.
#d-i passwd/user-uid string 1010

##### Miroirs #####
# Si vous utilisez ftp, il n'est pas nécessaire d'indiquer la chaîne mirror/country.
#d-i mirror/protocol string ftp
d-i mirror/country string FR
d-i mirror/http/hostname string ftp.fr.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string

# Distribution à  installer.
d-i mirror/suite string unstable
# Distribution à  utiliser pour charger les composants de l'installateur (facultatif).
#d-i mirror/udeb/suite string unstable
## Pour pouvoir utiliser ces paramètres de debian-installer, il faut utiliser l'image iso "businesscard" qui est la seule image à  proposer le choix de la version de Debian à  installer (Stable, Testing ou Unstable).
##Ça ne fonctionnera donc pas avec l'image netinst

##### Fuseau horaire #####
# Cette commande permet de régler l'horloge matérielle sur UTC :
d-i clock-setup/utc boolean true

# Vous pouvez mettre toute valeur acceptée pour $TZ.
# Voyez ce que contient /usr/share/zoneinfo/ pour les valeurs possibles.
d-i time/zone string Europe/Paris

# La ligne suivante autorise l'utilisation de NTP pour régler l'horloge pendant l'installation :
d-i clock-setup/ntp boolean true
# Le serveur NTP à  utiliser. Le serveur par défaut est presque toujours correct.
#d-i clock-setup/ntp-server string 0.debian.pool.ntp.org
# Merci à SYRTE (http://http://www.syrte.obspm.fr/) pour leur serveur ntp.
d-i clock-setup/ntp-server string ntp-p1.obspm.fr

##### Installation système de base #####
# Configurer APT pour empêcher l'installation des paquets recommandés.
# Cette option qui peut conduire à  un sytème incomplet est réservée   des
# utilisateurs expérimentés.
#d-i base-installer/install-recommends boolean false

# Choix du générateur initramfs pour créer l'initrd des noyaux 2.6.
#d-i base-installer/kernel/linux/initramfs-generators string initramfs-tools

# Version du noyau à  installer (nom du paquet). Utilisez none si vous ne voulez pas
# installer de noyau.
d-i base-installer/kernel/image string linux-image-3.0.0-1-686-pae

##### Configuration APT #####
# Vous pouvez installer des logiciels des distributions non-free et contrib.
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
# Décommentez cette ligne si vous n'utilisez pas de miroir sur le réseau.
#d-i apt-setup/use_mirror boolean false
# Choisissez les services de mise à  jour et les miroirs à  utiliser.
# Les valeurs ci-après sont les valeurs par défaut :
#d-i apt-setup/services-select multiselect security, volatile
#d-i apt-setup/security_host string security.debian.org
#d-i apt-setup/volatile_host string volatile.debian.org

##### Choix des paquets #####
tasksel tasksel/first multiselect standard
# Si vous sélectionnez la tache desktop, vous pouvez installer les environnements kde ou xfce
# au lieu de l'environnement gnome.
#tasksel tasksel/desktop multiselect kde, xfce

# Paquets supplémentaires
#d-i pkgsel/include string openssh-server build-essential
# Mise à  jour des paquets après debootstrap.
# Valeurs autorisées : none, safe-upgrade, full-upgrade
#d-i pkgsel/upgrade select none

# Certaines versions de l'installateur peuvent signaler les logiciels que vous avez installés
# et ceux que vous utilisez. Par défaut, rien n'est signalé. Mais l'envoi de rapport
# d'installation aide le projet à connaître les logiciels populaires.
popularity-contest popularity-contest/participate boolean true

##### Installation programme d'amorçage #####
# Le paramètre suivant est sans danger : il installe grub sur le
# secteur d'amorçage principal s'il n'existe aucun autre système d'exploitation
# sur la machine.
d-i grub-installer/only_debian boolean true

# Si il y a d'autres os sur la machine, remplacer la ligne précédente par la suivante:
#d-i grub-installer/with_other_os boolean true

##### Terminer l'installation #####
# Pour éviter le dernier message disant que l'installation est terminée :
d-i finish-install/reboot_in_progress note

# Pour empécher l'éjection du cédérom au moment du redémarrage,
# c'est utile parfois :
d-i cdrom-detect/eject boolean false

## Test de late_command
#Le futur système ne se trouve pas à la racine, mais dans le répertoire /target/
#Pour exécuter une commande au sein du système installé, il faut faire précéder la commande de "in-target".
#d-i preseed/late_command string in-target wget -q -O /tmp/mon_beau_paquet.deb http://lien/mon/beau/paquet.deb; in-target dpkg -i /tmp/mon_beau_paquet.deb
#in-target dpkg -i /target/root/teamviewer.deb
#d-i preseed/late_command string in-target apt-get install htop
#d-i preseed/late_command string apt-install htop
# --> apt-install remplace "in-target apt-get install"

Pour ceux qui souhaiterait approfondir le partitionnement, ou autre, voir les liens en bas de l’article.
Pour les utilisateurs actuellement sous Debian, il est également possible d’avoir le résumé des questions/réponses de votre installation. Ça permet de se donner une petite idée de la configuration actuelle de votre système:
aptitude install debconf-utils
debconf-get-selections --installer > preseed-installer.txt

Ce fichier sert juste à modifier votre fichier principal preseed.cfg

4] Script génération d’image iso:

J’utilise un script pour modifier certaines valeurs du fichier preseed et pour régénérer l’image iso:

#!/bin/bash

PREFIX=/tmp/debian
# Emplacement temporaire
TMPDIR=${PREFIX}/tmp
# Emplacement temporaire où l'iso originale sera montée
MNTDIR=${TMPDIR}/mnt

# Emplacement qui contient les données à ajouter (preseed, isolinux) ainsi que la future image iso
DATADIR=/media/data/config_debian/sid
# Emplacement où sera stocké le contenu de la nouvelle image iso
NEWISODIR=${TMPDIR}/new_debian_businesscard
# Fichier preseed.cfg
PRESEEDFILE=${DATADIR}/preseed.cfg
# Fichier image iso originale
DEBIANISO=${DATADIR}/debian-testing-i386-businesscard.iso
# Fichier isolinux.cfg
ISOLINUX_CFG_FILE=${DATADIR}/isolinux.cfg
# Emplacement de la nouvelle image iso
NEWDEBIANISO=${DATADIR}/new-debian-testing-businesscard.iso
# Variable pour modifier le fichier preseed.cfg
MYHOSTNAME=""
MYDOMAINNAME=""

### Vérification que le script est bien lancé en root
if [ "${USER}" = "root" ]; then
echo "Lancement du script d'installation"
else
echo "/!\\ Le script nécessite d'être root /!\\"
exit 1
fi

### Vérification de la présence du paquet genisoimage
dpkg -s genisoimage|grep installed > /dev/null 2>&1
pkg_geniso=$?
if [ -n "${pkg_geniso}" ]; then
echo "genisoimage est installé" > /dev/null 2>&1
else
echo "/!\\ Le paquet genisoimage n'est pas installé /!\\"
echo "Appuyer sur une touche pour l'installer avec aptitude ou CTRL+C pour quitter le script et l'installer vous même."
read -p "" touche
aptitude install genisoimage
fi

# Changement des variables:
while [ -z "${MYHOSTNAME}" ] # Tant que la variable est vide
do
echo -n "Quel le nom de la future machine [${MYHOSTNAME}]?: "
read MYHOSTNAME
done
while [ -z "${MYDOMAINNAME}" ] # Tant que la variable est vide
do
echo -n "Quel le nom du futur domaine [${MYDOMAINNAME}]?: "
read MYDOMAINNAME
done

# Récupérer le contenu de l'image ISO:
mkdir -p ${MNTDIR}
mount -o loop ${DEBIANISO} ${MNTDIR} > /dev/null 2>&1

# Suppression d'un éventuel répertoire temporaire
rm -rf ${NEWISODIR}
mkdir -p ${NEWISODIR}
# Synchronisation du contenu de l'iso
rsync -a -H --exclude=TRANS.TBL ${MNTDIR}/ ${NEWISODIR}

# On démonte l'image iso et on supprime le répertoire
umount ${MNTDIR}
rmdir ${MNTDIR}

# Copie du fichier preseed.cfg
cat ${PRESEEDFILE}|sed -e "s/@@HOSTNAME@@/${MYHOSTNAME}/g" | sed -e "s/@@DOMAINNAME@@/${MYDOMAINNAME}/g" > ${NEWISODIR}/preseed.cfg

# Copie du fichier isolinux.cfg
cp ${ISOLINUX_CFG_FILE} ${NEWISODIR}/isolinux

# Régénération du fichier md5sum.txt
cd ${NEWISODIR}
md5sum `find -type f` > md5sum.txt

# Génération de l'image iso
cd ${NEWISODIR}
genisoimage -o ${NEWDEBIANISO} \
-r -J -no-emul-boot -boot-load-size 4 \
-boot-info-table -b isolinux/isolinux.bin \
-c isolinux/boot.cat \
${NEWISODIR}
cd -

# Un peu de ménage
rm -rf ${NEWISODIR}

exit 0


Il faut juste préciser l’emplacement du répertoire (DATADIR) qui devra comprendre les fichiers preseed.cfg et isolinux.cfg.
On rend ensuite le script exécutable puis une petite exécution:
chmod a+x gen_iso.sh
./gen_iso.sh

5] Sources:

6] Liens fichiers:

1] Ajaxterm :

Ajaxterm est comme son nom le laisse penser, un terminal en Ajax, donc accessible depuis un naviguateur web.
Il s’installe sur une première machine à laquelle on veut accéder à distance et ensuite depuis n’importe quel navigateur on peut accéder au terminal.
Le fonctionnement est assez simple, Ajaxterm va écouter sur le port 8022 (par défaut) et envoyer les informations sur le port par défaut (22) de SSH. Il faut donc que ssh soit actif sur le poste pour qu’Ajaxterm puisse vous ouvrir la connection !
But ? « C’est débile parce qu’il faudra que le port ssh soit actif de toute façon ! ». Certes, c’est pas très utile tant que vous avez le droit d’utiliser ssh (ou putty) depuis votre poste/réseau. Toutefois quand les ports sont bloqués, la connexion surveillée, etc etc … il sera quand même possible d’accéder à un terminal en passant par du http ! Donc au final pas si inutile que cela =)

2] Installation :

Il est nécessaire d’avoir un serveur web, le classique apache va suffir :
aptitude install apache2

Ensuite, pour debian & Co, il existe un beau paquet tout propre : ajaxterm
aptitude install ajaxterm

Pour les autres distributions, je vous laisse consulter les sources : https://github.com/antonylesuisse/qweb

En l’état, Ajaxterm devrait être accessible en local uniquement à l’adresse : http://localhost:8022

3] Configuration pour l’extérieur :

Pour pouvoir accéder depuis l’extérieur/un autre poste à Ajaxterm, on va utiliser du https.
On commence par activer les modules suivants d’Apache : proxy, proxy_http et ssl. La commande suivante fera donc très bien l’affaire :
a2enmod proxy proxy_http ssl

Il faut ensuite créer un fichier de configuration pour Ajaxterm :
vi /etc/apache2/sites-available/ajaxterm# Si cette ligne est déjà présente dans /etc/apache2/ports.conf, la commenter :
Listen 443
NameVirtualHost *:443
ServerName localhost
SSLEngine On
SSLCertificateKeyFile ssl/mykey.key
SSLCertificateFile ssl/mycert.crt

ProxyRequests Off

Order deny,allow
Allow from all
ProxyPass /ajaxterm/ http://localhost:8022/
ProxyPassReverse /ajaxterm/ http://localhost:8022/

On sauvegarde le fichier et on active le site avec la commande :
a2ensite ajaxterm

Dernier point, il faut créer le certificat pour le https. On va dans le dossier /etc/apache2/ssl (le créer si nécessaire) :
cd /etc/apache2/ssl
Création de la clé :
openssl genrsa -out mykey.key 1024
Création du certificat :
openssl req -new -x509 -days 365 -key mykey.key -out mycert.crtCountry Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:ma_belle_région
Locality Name (eg, city) []:mon_pti_village
Organization Name (eg, company) [Internet Widgits Pty Ltd]:gardouille_land
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:LE_NOM_DE_LA_MACHINE
Email Address []:adresse@mail.com

On redémarre apache :
service apache2 restart

Et pour finir, un test à l’adresse : https://mon_ip/ajaxterm/
Si tout s’est bien passé, Firefox/Iceweasel (ou tout autre navigateur libre) demandera d’accepter le certificat. Et vous aurez ensuite accès à un prompt pour vous identifier.

4] Configuration supplémentaires :

/etc/ajaxterm.conf
Ce fichier permet de changer la taille du terminal dans le navigateur. Les variables sont déjà renseignées.

/etc/init.d/ajaxterm
Ce fichier, qui permet de lancer Ajaxterm (entre autre), possède les variables sur lesquelles Ajaxterm va écouter (8022) et envoyer (22). N’ayant pas ssh sur le port 22, c’est ici qu’il faut modifier sa valeur (variable SERVERPORT).
Toute modification devra être suivie du redémarrage du service (évidemment) :
/etc/init.d/ajaxterm restart

5] Erreur rencontrée:

Erreur rencontrée number one :

Apache et Ajaxterm se lançait correctement et lorsque j’arrivais sur la page d’ajaxterm: écran blanc.
cat /var/log/apache2/error.log[warn] proxy: No protocol handler was valid for the URL /ajaxterm/. If you are using a DSO v\
ersion of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

J’avais activé uniquement le module proxy d’Apache et pas proxy_http comme indiqué dans certain tuto.
Il semblerait que d’autres personnes aient également résolu ce problème avec :
/etc/init.d/apache2 force-reload

Erreur rencontrée number two :

J’avais bien accès au login, mais Ajaxterm ne me proposait pas d’entrer mon mot de passe. C’était simplement dû au fait que j’avais zappé de modifier le port correspond à SSH.

6] Alternative :

SSLH : permet également de faire du ssh en passant par le port 443. Très bien expliqué ici (tuto un peu ancien mais toujours d’actualité, simplement que le paquet sslh est passé en stable). Contrairement à Ajaxterm, il ne sera pas possible de se connecter à partir d’un navigateur (point fort je trouve), ce qui ne plaira pas à ceux qui ne peuvent télécharger de logiciel ou utiliser de clé usb.

,

Ayant actuellement besoin d’utiliser Ubuntu, je rencontre un « pti » problème:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "fr_FR.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

Ce message apparaît entre autre quand je veux faire des mises à jours ou quand un de mes programmes a besoin de perl.
Après avoir un peu fouillé, j’ai remarqué qu’il manquait quelques trucs « basiques » sous ubuntu par défaut:
root@mysrv ~# locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
POSIX

Oui … « fr_FR.utf8″ n’est pas dans les locales disponibles par défaut.
Bon, j’ai encore un peu cherché et j’ai trouvé qu’il fallait simplement installer le paquet: language-pack-fr-base. Une fois cela fait, le résultat est un peu mieux quand même:
root@mysrv ~# aptitude install language-pack-fr-base
root@mysrv ~# locale -a
C
fr_BE.utf8
fr_CA.utf8
fr_CH.utf8
fr_FR.utf8
fr_LU.utf8
POSIX

Fail2Ban est un petit logiciel écrit en Python qui fait un travail exemplaire : bannir des ip qui tentent de se connecter à une machine. Avec quelques filtres et règles iptables fournit, il arrive à faire un très bon travail et à prévenir de ce qui a été fait.

On peut en fait créer des jails (prisons) par services (ssh, http, …), on renseigne quelques informations (fichier de log, filtre à appliquer, …) et lorsque le filtre trouve une concordance, une action est réalisée (bannissement, mail, whois, …).

Le logiciel est présent sur une grosse partie des distributions, donc un simple:
aptitude install fail2ban
ou:
yum install fail2ban

Devrait suffire =)

1] Surveillance des connections ssh:

A) Mise en place:

Dupliquer le fichier, puis modifier :
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.local
[ssh]
enabled = true
port = ssh,sftp
filter = sshd
banaction = iptables-multiport[name=SSH,port=22,protocol=tcp]
mail[dest="your@mail.com",name="ssh",sender="fail2ban@mail.com"]
# Analyse les 600 dernières secondes (10minutes)
findtime = 600
# bantime de 25h
bantime = 90000
# Fichier de log analysé:
logpath = /var/log/auth.log
# Maximum d'essais ratés: 3
maxretry = 3

Appliquer les modification :
fail2ban-client reload

Avec cette configuration, un mail d’avertissement sera envoyé pour dire qu’une ip a été bloquée pour 25h suite à 3 essais ratés dans les 10 dernières minutes. Un mail sera également envoyé à chaque arrêt/démarrage de la prison ssh.

Le mail reçu contiendra seulement l’information que telle adresse ip a été bannie. Il est possible d’avoir un « whois » en plus.

Pour cela, il suffit de remplacer la ligne :
mail[dest="your@mail.com",name="ssh",sender="fail2ban@mail.com"]
Par :
sendmail-whois[dest="your@mail.com",name="ssh",sender="fail2ban@mail.com"]

Pour voir toutes les autres actions possibles il suffit de regarder les fichiers présents dans le dossier /etc/fail2ban/action.d/.

Et pour avoir des informations sur l’état de la prison ssh :
fail2ban-client status ssh

B) Commandes utiles pour la surveillance de ssh :

  • Lister tous les accès ssh ratés :
    grep 'Failed' /var/log/auth.log|sort |uniq -c
  • Nombre de connections ssh ratées :
    grep 'Failed' /var/log/auth.log|sort |wc -l

2] Surveillance des logs de Fail2ban :

Il est possible qu’une adresse ip tente a plusieurs reprises de se connecter à un service et se fait bannir (par exemple 5 bannissements avec ssh). Ça fait que l’on reçoit 5 mails et qu’il est possible que l’ip continue ses tentatives. Et ça peut également être sur d’autres services.
Plutôt que de subir ces nombreuses tentatives, il est possible de mettre en place un filtre qui analyse le fichier de log de Fail2Ban, pour bannir sur une plus longue durée une adresse IP qui apparaîtrait trop de fois.

A) Création du filtre :

Créer un nouveau fichier : /etc/fail2ban/filter.d/fail2ban.conf :
# Fail2Ban: fichier de configuration
#
# Author: Tom Hendrikx
# Traduction: Gardouille
#
# Version: 1.0
#
[Definition]
# Option: failregex
# Notes.: regex qui correspond aux messages d'erreur relatifs
# à un mauvais mot de passe dans le fichier de log.
# L'hote doit correspondre à un groupe nommé "host".
# Le tag "<HOST>" peut être utilisé pour faire correspondre
# les IP/hostname et c'est seulement un alias pour
# (?:::f{4,6}:)?(?P<host>\S+)
# Valeur: Texte
#
# Compter toutes les ip bannies dans le fichier de log
failregex = fail2ban.actions: WARNING \[(.*)\] Ban
# Option: ignoreregex
# Notes.: regex à ignorer. Si cette regex correspond, la ligne est ignorée.
# Valeur: Texte
#
# Ignorer nos propres bannissements, pour garder nos comptes exacts.
# Dans le fichier de config, nommer la prison 'fail2ban', ou alors changer cette ligne!
ignoreregex = fail2ban.actions: WARNING \[fail2ban\] Ban

B) Définition de la prison (jail) :

Si ce n’est pas déjà fait, créer une copie du fichier de configuration :
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Créer ensuite une nouvelle prison dans ce dernier fichier :
[fail2ban]
enabled = true
filter = fail2ban
action = iptables-allports[name=fail2ban]
sendmail-whois[dest="votre@mail.com",name="fail2ban",sender="fail2ban"]
# Fichier de log analysé :
logpath = /var/log/fail2ban.log
# Analyse les logs sur 1 semaine
findtime = 604800
# bantime: 1 semaine
bantime = 604800

Note : « sendmail-whois » permet d’avoir un « whois » sur l’adresse IP qui a fait de nombreuses tentatives. Ça me paraît intéressant vu que l’adresse IP a vraisemblablement beaucoup insisté.

3] Divers:

A) Débannir une adresse IP:

Pour connaître la liste des adresses ip bannies :
iptables -LChain fail2ban-ssh (1 reference)
target prot opt source destination
DROP all -- XX.YY.WWW.ZZZ anywhere
RETURN all -- anywhere anywhere

Il y a trois méthodes pour débloquer une adresse ip :
iptables -D nom_de_la_chaine numéro_de_la_ligne
iptables -D fail2ban-ssh 1
iptables -D INPUT -s XX.YY.WWW.ZZZ -j DROP

Avec cette méthode, l’adresse ip ne sera pas rebannie si elle se trompe 3 fois de mot de passe. Pour réactiver ce bannissement automatique, il faut stopper et relancer fail2ban :
fail2ban-client stop
fail2ban-client start

B) Changer la langue des mails reçus :

Par défaut, les fichiers de configuration de Fail2Ban sont en anglais, par conséquent, les mails envoyés seront également en anglais. Cependant on va vu ci-dessus qu’il était possible de un double des fichiers de configuration (*.local). Il suffit de faire pareil pour les fichiers qui définisse les actions puis de traduire le texte que l’on veut dans chaque fichier.

Pour commencer, il faut déterminer quelle action est utilisée pour envoyer un mail, pour savoir quel fichier dupliquer. Cela dépend des prisons définies. Il faut donc aller regarder dans le fichier : /etc/fail2ban/jail.local (ou si il n’existe pas encore : /etc/fail2ban/jail.conf).
Par exemple pour la prison « ssh », on a :
mail[dest="your@mail.com",name="ssh",sender="fail2ban@mail.com"]
Il faudra donc dupliquer le fichier : /etc/fail2ban/action.d/mail.conf.
Pour « fail2ban », on a :
sendmail-whois[dest="votre@mail.com",name="fail2ban",sender="fail2ban"]
Il faudra donc dupliquer le fichier : /etc/fail2ban/action.d/sendmail-whois.conf.

« Dupliquer » un fichier signifie de simplement en faire une copie avec l’extension « .local » à la place de « .conf ». Ainsi Fail2Ban commencera par regarder si il existe un fichier « .local » avec les informations qu’il veut et ensuite, il regardera le fichier « .conf ».
Donc une fois le fichier « mail.local » ou « sendmail-whois.local » crée, il suffit de traduire les commentaires, le texte, … Libre à vous =).

,

1) Accéder aux partitions:

Sans accès au grub, j’ai eu besoin de récupérer un mot de passe root. Pour y arriver, je me suis servi du system rescue cd.
On démarre donc sur le cd:

Le clavier que l’on veut utiliser est demandé lors du démarrage du système. Il suffit donc de préciser « fr » pour avoir un clavier « azerty »:

Si vous avez raté le choix du clavier, une fois logué sur le prompt, il suffit de taper:
loadkeys fr

Il faut ensuite déterminer quelle partition correspond à notre partition système principal (/):
parted --list
ou:
fdisk -l
/dev/sda1 * 1 25 194560 83 Linux
/dev/sda2 25 3188 25600001 5 Extended
/dev/sda5 25 2456 19529728 83 Linux
/dev/sda6 2456 3064 4881408 83 Linux
/dev/sda7 3064 3188 991232 82 Linux swap / Solaris
Dans mon cas, ça sera donc /dev/sda5. Si vous n’arrivez pas à déterminer quelle partition est la partition principale, il est possible de les monter une par une et de voir laquelle contient le répertoire qui nous intéresse (/etc/).

On monte la partition sur un emplacement temporaire:
mkdir /tmp/root
mount -t ext4 /dev/sda5 /tmp/root

2) Supprimer le mot de passe:

Faire un backup du fichier /mnt/root/etc/shadow:
cp /tmp/root/etc/shadow{,.backup}
Ouvrir le fichier:
vi /tmp/root/etc/shadow
Aller à la ligne:
user:$mon_mot_de_passe_tout_crypté:14866:0:99999:7:::
Supprimer « $mon_mot_de_passe_tout_crypté » pour que ça ressemble à:
user::14866:0:99999:7:::
Pour sauvegarder le fichier et quitter « vi »: [Echap] puis taper « :wq« .

3) Modifier le mot de passe:

Plutôt que de supprimer le mot de passe, il est possible de le modifier directement. Pour se faire, il faut d’abord déterminer le type de hash utilisé par le système principal. Pour le savoir, regarder les trois premiers caractères du mot de passe dans /tmp/root/etc/shadow:

$1$: hash md5
$6$: hash sha-512

On génère ensuite un mot de passe hashé en fonction du type géré par le système

mkpasswd -m md5
mkpasswd -m sha-512

Au cas ou, l’utilitaire « mkpasswd » est fourni par le paquet « whois » =).

Il suffit ensuite de remplacer le mot de passe dans /tmp/root/etc/shadow par le résultat de la commande précédente. Pour ceux qui ne saurait pas faire de copier/coller en ligne de commande l’utilitaire screen permet de copier du contenu dans son buffer pour ensuite le recoller où l’on veut. ;)

-> Sous ubuntu, root n’a pas de compte à proprement parler. Il faut donc supprimer ou modifier le mot de passe d’un compte sensé avoir des droits en sudo.

4) Retour sur le système principal:

Puis on redémarre sur notre système principal =)
reboot

Il est maintenant possible de s’identifier sans mot de passe pour le compte choisi. Pour accéder au sudo, il faut remettre un nouveau mot de passe:
passwd
Chose très importante à faire dans tous les cas ^^ (y compris root!).

5) Conclusion …:

Au final, la grande question: comment sécuriser son système avec ces différents moyens pour récupérer un pass root?

  • Utiliser des lvm cryptés me paraît déjà un bon choix
  • Sécuriser le grub avec un mot de passe (pour le lien en fin de page) et verrouiller chaque entrée du grub pour éviter les modifications
  • Un cadenas (… ^^)
  • Enfermer le pc
  • Forcer le démarrage sur cd/dvd + mot de passe bios

Si j’avais eu accès au grub: http://www.korben.info/changer-le-mot-de-passe-dubuntu-quand-on-la-oublie.html

, ,

Vieille version du kernel, vieille version de l’environnement virutel, …, une petite maj de Proxmox s’impose donc =)

Vous savez ce que vous faites, vous suivez un tuto, …, dans tout les cas -> SAUVEGARDER =)
Cette maj n’inclut pas le support de OpenVZ.

Ça prend plus ou moins de temps suivant la taille de votre serveur, mais ça assure un minimum de garantie en cas de mauvaises manipulations.

Préparation

Une petite vérification de l’état du système actuel:
root@mysrv ~# pveversion -v
pve-manager: 1.7-11 (pve-manager/1.7/5470)
running kernel: 2.6.32-4-pve
proxmox-ve-2.6.32: 1.7-10
pve-kernel-2.6.32-4-pve: 2.6.32-32
... ...

Vérification du /etc/apt/sources.list:
deb ftp://mirror.ovh.net/debian lenny main contrib non-free
# PVE packages provided by proxmox.com
deb ftp://download.proxmox.com/debian lenny pve
# security updates
deb http://security.debian.org/ lenny/updates main contrib

Suivi d’une mise à jour standard si elle n’a pas déjà été faite:
root@mysrv ~# aptitude update
root@mysrv ~# aptitude safe-upgrade

Mise à jour de Proxmox VE:

Le noyau actuel est donc: 2.6.32-4. La dernière version de l’environnement virtuel est: 1.8-10 (2.6.35). Un petit aperçu de la description du paquet:
root@mysrv ~# aptitude show proxmox-ve-2.6.35
Package: proxmox-ve-2.6.35
Priority: optional
Section: admin
Maintainer: Proxmox Support Team <support@proxmox.com>
Architecture: all
Version: 1.8-10
Replaces: proxmox-ve, pve-kernel, proxmox-ve-2.6.18, proxmox-ve-2.6.24,
proxmox-ve-2.6.32, proxmox-virtual-environment
Provides: proxmox-virtual-environment
Depends: libc6 (>= 2.7-18), pve-kernel-2.6.35-1-pve, pve-firmware (>= 1.0-9),
ksm-control-daemon, pve-manager, qemu-server, pve-qemu-kvm, ssh, apt, vncterm,
vzctl, vzdump, vzprocps, vzquota
Conflicts: proxmox-ve, pve-kernel, proxmox-ve-2.6.18, proxmox-ve-2.6.24,
proxmox-ve-2.6.32, proxmox-virtual-environment
Filename: dists/lenny/pve/binary-amd64/proxmox-ve-2.6.35_1.8-10_all.deb
Size: 4152
MD5sum: 5bad5d9ebeef2c8923047a62e0f6b154
SHA1: b5bc87f97584098a1b62caad8365adc59cc701d3
SHA256: e2d2d680a7d51e04400307f6ded33df566478f1137f1ee8554f1bd84d8061bc0
The Proxmox Virtual Environment is an easy to use Open Source virtualization platform for running Virtual Appliances and Virtual Machines. This is a virtual package which will install everything needed. This package also depends on the latest available proxmox kernel from the 2.6.35 series

Le nouvel environnement dépend donc du dernier noyau disponible (2.6.35), on va donc se contenter de l’installer et il se débrouillera avec ses dépendances.

root@mysrv ~# aptitude install proxmox-ve-2.6.35

On fait un petit update du grub au cas ou on ne l’aurais pas vu passer pendant l’install:
root@mysrv ~# update-grub
Updating /boot/grub/grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.35-1-pve
Found initrd image: /boot/initrd.img-2.6.35-1-pve
Found linux image: /boot/vmlinuz-2.6.32-4-pve
Found initrd image: /boot/initrd.img-2.6.32-4-pve
done

Puis on redémarre le serveur. Après quelques minutes on a de nouveau la main et on peut vérifier que l’on est bien sur le nouveau kernel:
root@mysrv ~# pveversion -v
pve-manager: 1.8-15 (pve-manager/1.8/5754)
running kernel: 2.6.35-1-pve
proxmox-ve-2.6.35: 1.8-10
pve-kernel-2.6.32-4-pve: 2.6.32-32
pve-kernel-2.6.35-1-pve: 2.6.35-10