SYN, SYN-ACK, ACK …

Steal This Blog

Archives Posts

VMware Server et Virtual Router Redundany Protocol (VRRP)

mars 3rd, 2009 by Corbier

Selon Wikipédia :

Virtual Router Redundancy Protocol (protocole de redondance de routeur virtuel, VRRP) est un protocole non propriétaire redondant décrit dans la RFC 3768 dont le but est d’augmenter la disponibilité de la passerelle par défaut servant les hôtes d’un même sous-réseau.

Le fonctionnement de VRRP est le suivant :

Chaque Routeur Virtuel utilise une adresse mac de l’IANA ces adresses mac sont réversées et vont de 00:00:5e:00:01:00 à 00:00:5e:00:01:ff (on peut donc avoir 256 routeurs virtuels par segment Ethernet)

Les routeurs communiquent entre eux via l’adresse multicast réservée 224.0.0.18 associé à la mac réservé 00:00:5e:00:01:02

Comme l’indique le paquet capturé suivant :

Frame 6 (70 bytes on wire, 70 bytes captured)
Ethernet II, Src: IETF-VRRP-virtual-router-VRID_02 (00:00:5e:00:01:02), Dst: IPv4mcast_00:00:12 (01:00:5e:00:00:12)
Internet Protocol, Src: 192.168.130.160 (192.168.130.160), Dst: 224.0.0.18 (224.0.0.18)
Virtual Router Redundancy Protocol

Afin d’utiliser une IP virtuelle associés a plusieurs routeurs nous utilisons le Common Address Redundancy Protocol ou CARP.

Selon wikipédia :

Common Address Redundancy Protocol ou CARP est un protocole permettant à un groupe d’hôtes sur un même segment réseau de partager une adresse IP.

Dans le cadre de préparation de labs, j’ai voulu émulé l’ensemble de via une solution freebsd (Pfsense) sous VMware Server. Cependant l’adresse virtuel CARP ne pouvait pas être utilisé. Les réponses ARP était bien présente mais le ping et tout les autres services était indisponible.

Le module kernel vmnet drop tout les paquets ethernet que ne sont pas à destination :

  • d’elle même
  • d’une addresse de broadcast FF:FF:FF:FF:FF:FF
  • d’une addresse de multicast

Cependant le bloc de IANA est manquant !!!Les packets sont donc droppés.

Afin de valider et corriger le module noyau, il faut éditer le driver.c contenu dans /usr/lib/vmware/modules/source

Le fichier qui nous intéresse est dans l’archive vmnet.tar. Il faut extraire cette archive.

tar xvf vmnet.tar

cd vmnet-only

Ensuite nous devons localiser la fonction VNetPacketMatch qui est responsable du matching de paquet.

*
*———————————————————————-
*
* VNetPacketMatch –
*
*      Determines whether the packet should be given to the interface.
*
* Results:
*      TRUE if the pasket is OK for this interface, FALSE otherwise.
*
* Side effects:
*      None.
*
*———————————————————————-
*/

Bool
VNetPacketMatch(const uint8   *destAddr, // IN: destination MAC
const uint8   *ifAddr,   // IN: MAC of interface
const uint8   *ladrf,    // IN: multicast filter
uint32   flags)          // IN: filter flags
{
/*
* Return TRUE if promiscuous requested, or unicast destined
* for interface, or broadcast (and broadcast requested), or
* if multicast (and all multicast, or this specific
* multicast MAC, was requested).
*/

return ((flags & IFF_PROMISC) || MAC_EQ(destAddr, ifAddr) ||
((flags & IFF_BROADCAST) && MAC_EQ(destAddr, broadcast)) ||
((destAddr[0] & 0×1) && (flags & IFF_ALLMULTI ||
(flags & IFF_MULTICAST &&
VNetMulticastFilter(destAddr, ladrf)))));
}

Il faut ajouter les lignes suivantes ajoutant le support des paquets de IANA :

((destAddr[0] == 0) && (destAddr[1] == 0) &&
(destAddr[2] == 0×5e) && (destAddr[3] == 0) &&
(destAddr[4] == 1))

Ce qui nous donne la fonction suivante :

return ((flags & IFF_PROMISC) || MAC_EQ(destAddr, ifAddr) ||
((flags & IFF_BROADCAST) && MAC_EQ(destAddr, broadcast)) ||
((destAddr[0] == 0) && (destAddr[1] == 0) &&
(destAddr[2] == 0×5e) && (destAddr[3] == 0) &&
(destAddr[4] == 1)) ||
((destAddr[0] & 0×1) && (flags & IFF_ALLMULTI ||
(flags & IFF_MULTICAST &&
VNetMulticastFilter(destAddr, ladrf)))));

Sauvegardez et recompilez le module :

make vmnet.ko

Il nous reste à copié le nouveau module au bon endroit

cp vmnet.ko  /lib/modules/`uname -r`/misc/vmnet.ko

/etc/init.d/vmware restart

Nous avons désormais un VMware Server fonctionnelle.

Archives Posts

DimDim Script

juillet 24th, 2008 by wolf

Dimdim est une application intranet-internet de réunion à distance, à l’instar de logiciels comme Netmeeting ou Ekiga. Ainsi, il est possible de diffuser la voix de trois personnes au maximum sur tous les clients, ou de voir la caméra du maître de conférence. Ce dernier peut choisir, en outre, d’afficher :
- son écran
- un document au format PDF
- un document au format Word
- un document au format Excel
- un document au format PowerPoint

Dimdim ne se trouve pas sous forme de logiciel, mais s’intègre à un site Internet déjà existant. L’éxécutable installera un serveur apache, Tomcat. Dès lors, l’intérêt devient énorme quand on pense aux plateformes d’apprentissage en ligne, où les étudiants pourront avoir des cours en direct.

Dimdim semble à terme avoir un gros potentiel, d’autant plus que des paquetages d’installation existent pour différents LCMS (Learning Content Management System) : Claroline, Moodle et SugarCRM et s’installent facilement, comme des modules.

Beaucoup de personnes sur les forums n’arrivent pas à le faire fonctionner sous Ubuntu. Voici un script qui permet le téléchargement et l’installation des paquets nécessaire afin de le faire fonctionner sous Ubuntu.

Install_dimdim.sh

#######ChangeLOG##################
#Createur : Maussion Frederic
#Contact : Fmaussion@starxpert.fr
#Date de creation : 16/05/08
###################################

#Installation des paquets necessaire a dimdim
apt-get update && apt-get -qy install lighttpd openoffice.org sun-java6-jre wget python-setuptools

#On stop lighttpd pour plus tard
/etc/init.d/lighttpd stop

#Telechargement de Dimdim
cd /usr/src/
wget http://surfnet.dl.sourceforge.net/sourceforge/dimdim/Dimdim_Linux_Native_Install_v3.5.tar.gz

#Decompression de dimdim
tar xzvf Dimdim_Linux_Native_Install_v3.5.tar.gz
mv dimdim/ /usr/local/

#Telechargement et installation de cherrypy
wget http://download.cherrypy.org/cherrypy/3.0.3/CherryPy-3.0.3.tar.gz
tar xzvf CherryPy-3.0.3.tar.gz
cd CherryPy-3.0.3
chmod +x *
python setup.py install
cd /usr/src
rm -rf CherryPy-3.0.3/
rm -rf CherryPy-3.0.3.tar.gz

#Telechargement et installation de flup
wget http://www.saddi.com/software/flup/dist/flup-1.0.tar.gz
tar xzvf flup-1.0.tar.gz
cd flup-1.0
chmod +x *
python setup.py install
cd /usr/src/
rm -rf flup-1.0
rm -rf flup-1.0.tar.gz

#Telechargement et installation de zdeamon
wget http://pypi.python.org/packages/source/z/zdaemon/zdaemon-2.0.2.tar.gz
tar xzvf zdaemon-2.0.2.tar.gz
cd zdaemon-2.0.2
python setup.py install
cd /usr/src/
rm -rf zdaemon-2.0.2
rm -rf zdaemon-2.0.2.tar.gz

#On backup les fichiers de configuration que l’on va modificer
cp /usr/local/dimdim/ConferenceServer/apache-tomcat-5.5.17/conf/wrapper.conf /usr/local/dimdim/ConferenceServer/apache-tomcat-5.5.17/conf/wrapper.conf.bak
cp /usr/local/dimdim/Mediaserver/mods/toolkit/osconfig.py /usr/local/dimdim/Mediaserver/mods/toolkit/osconfig.py.bak
cp /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_status.sh /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_status.sh.bak
cp /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_start.sh /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_start.sh.bak
cp /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_stop.sh /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_stop.sh.bak
cp /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_watcher.sh /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_watcher.sh.bak
cp /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_daemon_checker.sh /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_daemon_checker.sh.bak
cp /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_check.sh /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_check.sh.bak

#On indique ou se situe le fichier dans une variable
wrapper=/usr/local/dimdim/ConferenceServer/apache-tomcat-5.5.17/conf/wrapper.conf
osconfig=/usr/local/dimdim/Mediaserver/mods/toolkit/osconfig.py
java=/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/i386/jvm.cfg
startdimdim=/usr/bin/startDimdim

#On remplace la commande « source » par un point
sed -e ’s#source#.#’ -i /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_status.sh
sed -e ’s#source#.#’ -i /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_start.sh
sed -e ’s#source#.#’ -i /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_stop.sh
sed -e ’s#source#.#’ -i /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_watcher.sh
sed -e ’s#source#.#’ -i /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_daemon_checker.sh
sed -e ’s#source#.#’ -i /usr/local/dimdim/DTP3/Deployment/Reflector/reflector_check.sh
#Dans le fichier de configuration on remplace le root de java par le notre
sed -e ’s#wrapper.java.command=DIMDIM_JAVA_HOME/bin/java#wrapper.java.command=/usr/lib/jvm/java-6-sun-1.6.0.06/bin/java#’ -i $wrapper

#Dans le fichier de configuration on remplace le root de OOo par le notre
sed -e ’s#/opt/openoffice.org2.3/program/#/usr/lib/openoffice/program/#’ -i $osconfig

#Dans le fichier de configuration de java on indique a java qu’il n’agisse pas en temps que client regle des pb dans openvz
sed -e ’s#-client IF_SERVER_CLASS -server#-client KNOWN#’ -i $java

#Changement de l’executable de lighthttpd
sed -e ’s#/usr/local/dimdim/lighty/sbin/lighttpd#/usr/sbin/lighttpd#’ -i $startdimdim

#On creer les dossiers
mkdir /usr/local/share/swftools

#Copie des fichiers necessaire a dimdim
cp /usr/local/dimdim/swftools/pdf2swf /usr/bin
cp /usr/local/dimdim/swftools/swfextract /usr/bin
cp /usr/local/dimdim/swftools/swfdump /usr/bin
cp /usr/local/dimdim/swftools/libs/* /usr/lib
cp -r /usr/local/dimdim/swftools/swffonts/fonts /usr/local/share/swftools/
cp -r /usr/local/dimdim/swftools/swffonts/swfs /usr/local/share/swftools/

#Export du home de java dans le .bashrc
echo « JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.06/ » >> /root/.bashrc
echo « export JAVA_HOME » >> /root/.bashrc
echo « PATH=$JAVA_HOME/bin:$PATH » >> /root/.bashrc
echo « export PATH » >> /root/.bashrc

#Creation de lien symobilques
ln -s /usr/lib/openoffice/program/soffice.bin /usr/bin/soffice.bin
ln -s /usr/local/dimdim/startDimdim.pl /usr/bin/startDimdim
ln -s /usr/local/dimdim/stopDimdim.pl /usr/bin/stopDimdim
ln -s /usr/lib/libpcre.so.0 /usr/lib/libpcre.so.3
#pour wrapper
ln -s /bin/ps /usr/bin/ps

#On applique les permissions aux differents dossier
chmod +x /usr/local/dimdim/ConferenceServer/apache-tomcat-5.5.17/bin/*
chmod +x /usr/local/dimdim/red5/*
chmod +x /usr/local/dimdim/red5/conf/*
chmod +x /usr/local/dimdim/nginx/sbin/*
chmod +x /usr/local/dimdim/DTP3/Deployment/Reflector/*
chmod +x /usr/local/dimdim/Mediaserver/mods/*
chmod +x /usr/local/dimdim/Mediaserver/www/pages/*
chmod +x /usr/local/dimdim/swftools/*
chmod +x /usr/bin/*
chmod +x /usr/lib/*
chmod +x /usr/local/share/*

#/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/i386/jvm.cfg

#Lancement de dimdim
startDimdim

Si vous avez des soucis vous pouvez me contacter sur l’adresse suivante : fmaussion (at) starxpert.fr

Télécharger le script Install_Dimdim.sh

Références :

http://www.dimdim.fr

http://www.dimdim.com

Filed under Linux, scripting having No Comments »

Archives Posts

Nuit du hack 2008

juin 14th, 2008 by Corbier

Nous sommes donc le jour tant attendu, ce soir c’est du plaisir,

Nouvelle année, nouveaux locaux et nouveaux programmes, la nuit du hack revient du 14 au 15 Juin à Orsay avec au programme :
- des conférences sur l’actualité underground et la sécurité informatique ;
- un challenge Hacking codé spécialement pour l’occasion par nos rooteurs sur pattes ;
- divers concours avec de nombreux lots à gagner ;

Les conf :

Horaires Sujet Conférencier
18H-19H Nitendo DS Virtualabs
19H-20H Scapy Nono2357
20H-21H Exploitation kernel Ivanlef0u
21H-22H Securité physique Virtualabs’ Brother
22H-23H BackTrack 3 Final Shaman virtuel

Donc du plaisir j’attends avec impatience la conférence sur scappy de l’ami Nono2357, conférence que j’avais le plaisir de voir lors des python days. J’ai entendu dire de source plus ou moins sur (il se reconnaîtra) que la conférence de la nuit du hack sera beaucoup poussé techniquement.

Je vous posterai les photos dans la semaine.

Pourquoi un tel post sur le planet-libre ?

Tout simplement car je pense que le hacking dans son sens premier entre pleinement dans la philosophie du libre.

Archives Posts

Mirroring de traffic via iptables [Debian Etch]

juin 5th, 2008 by Corbier

This option adds a `ROUTE’ target, which enables you to setup unusual

routes. For example, the ROUTE lets you route a received packet through

an interface or towards a host, even if the regular destination of the

packet is the router itself. The ROUTE target is also able to change the

incoming interface of a packet.

To copy (duplicate) all traffic from and to a local ECHO server to a second box (nonfinal target)

iptables -A PREROUTING -t mangle -p tcp –dport 7 -j ROUTE –gw 1.2.3.4 –tee

iptables -A POSTROUTING -t mangle -p tcp –sport 7 -j ROUTE –gw 1.2.3.4 –tee

Afin d’activer la cible route pour iptables il est nécéssaire de recompiler l’ensemble « noyau + iptables »

Nous allons donc préparer notre environnement de travail.

apt-get install linux-source-2.6.18 gcc make ncurses-dev
cd /usr/src
tar -xvjf linux-source-2.6.18.tar.bz2
ln -s linux-source-2.6.18 linux

On télécharge les sources d’iptables et on les décompresses

wget http://www.netfilter.org/projects/iptables/files/iptables-1.3.6.tar.bz2

tar -xjpf iptables-1.3.6.tar.bz2

On peut maintenant télécharger le patch-o-matic :

wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20070728.tar.bz2

tar xvjf patch-o-matic-ng-20070728.tar.bz2

cd patch-o-matic-ng-20070728

Nous devons spécifié le dossier des sources d’iptables

IPTABLES_DIR=/usr/src/iptables-1.3.6 ./runme ROUTE

Hey! KERNEL_DIR is not set.

Where is your kernel source directory? [/usr/src/linux]

Loading patchlet definitions…………….. done

Welcome to Patch-o-matic ($Revision: 6736 $)!

Kernel: 2.6.18, /usr/src/linux

Iptables: 1.3.6, /usr/src/iptables-1.3.6

Each patch is a new feature: many have minimal impact, some do not.

Almost every one has bugs, so don’t apply what you don’t need!

——————————————————-

Already applied:

Testing ROUTE… not applied

The ROUTE patch:

Author: Cédric de Launois <delaunois@info.ucl.ac.be>

Status: Experimental

This option adds a `ROUTE’ target, which enables you to setup unusual

routes. For example, the ROUTE lets you route a received packet through

an interface or towards a host, even if the regular destination of the

packet is the router itself. The ROUTE target is also able to change the

incoming interface of a packet.

The target can be or not a final target. It has to be used inside the

mangle table.

ROUTE target options:

–oif ifname Send the packet out using `ifname’ network interface.

–iif ifname Change the packet’s incoming interface to `ifname’.

–gw ip Route the packet via this gateway.

–continue Route the packet and continue traversing the rules.

–tee Route a copy of the packet, but continue traversing

the rules with the original packet, undisturbed.

Note that –iif, –continue, and –tee, are mutually exclusive.

Examples :

# To force all outgoing icmp packet to go through the eth1 interface

# (final target) :

iptables -A POSTROUTING -t mangle -p icmp -j ROUTE –oif eth1

# To tunnel outgoing http packets and continue traversing the rules :

iptables -A POSTROUTING -t mangle -p tcp –dport 80 -j ROUTE –oif tunl1 –continue

# To forward all ssh packets to gateway w.x.y.z, and continue traversing

# the rules :

iptables -A POSTROUTING -t mangle -p tcp –dport 22 -j ROUTE –gw w.x.y.z –continue

# To change the incoming network interface from eth0 to eth1 for all icmp

# packets (final target) :

iptables -A PREROUTING -t mangle -p icmp -i eth0 -j ROUTE –iif eth1

# To copy (duplicate) all traffic from and to a local ECHO server

# to a second box (nonfinal target)

iptables -A PREROUTING -t mangle -p tcp –dport 7 -j ROUTE –gw 1.2.3.4 –tee

iptables -A POSTROUTING -t mangle -p tcp –sport 7 -j ROUTE –gw 1.2.3.4 –tee

—————————————————————–

Do you want to apply this patch [N/y/t/f/a/r/b/w/q/?] y

Excellent! Source trees are ready for compilation.

Nous pouvons maintenant compiler le noyau

cd /usr/src/linux

make oldconfig

Quelques librairies sont rapidement indispensable ;o)

apt-get install kernel-package

Et c’est partie pour de la compilation

make-kpkg clean

make-kpkg –initrd kernel_image kernel_headers

make-kpkg –initrd kernel_image

Une fois la compilation effectué il faut installer et booter sur le noyau.

dpkg –i monnoyau.deb

Vérifiez votre /boot/grub/menu.lst afin de voir si votre nouveau noyau apparait.

Ensuite Reboot

Pour monitorer tout le trafic entrant vers une ip (Un IDS par exemple J) utiliser la règle iptables suivante :

iptables -A POSTROUTING -t mangle -p tcp –sport 7 -j ROUTE –gw 1.2.3.4 –tee

Nous verrons dans un prochain billet comment utiliser ce trafic avec un IDS.

Archives Posts

Sécurité mysqld

mai 29th, 2008 by Corbier

Définition du mot de passe root mysql :

mysql> SET PASSWORD FOR root@localhost=PASSWORD(‘new_password’);

Query OK, 1 row affected (0.00 sec)

Lors de l’installation mysqld créée deux users avec  » en nom de user et  » en password il faut les supprimer.

mysql> DELETE FROM mysql.user WHERE user= » or pass  »;

Suppression des utilisateurs inutiles :

mysql> DELETE FROM user WHERE Host=’monhost’ AND User=’monuser’;

Query OK, 1 row affected (0.00 sec)

Ainsi que les mots de passe vides :

mysql> DELETE FROM user WHERE Password= »;

Query OK, 2 rows affected (0.00 sec)

La base de donné test créée par mysql à l’installation est inutile.

mysql> DROP DATABASE test;

Query OK, 0 rows affected (0.00 sec)

Par défaut, la base test et toutes les bases commençant par « test_ » sont accessibles par tous.

mysql> DELETE FROM db WHERE db=’test’ OR db=’test\_%’;

Query OK, 2 rows affected (0.00 sec)

Afin d’activé les modifications il est nécessaire de recharger les privilèges

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

Privilèges

Afin de garantir la confidentialité des données et des utilisateurs. Il faut autoriser les différents utilisateurs à se connecter et à modifier uniquement leurs bases de données. Nous utilisons la commande GRANT.

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,DROP ON userdb.* TO someuser@ »% » IDENTIFIED BY « pwd »;

Lister les bases de données

A l’aide de la commande SHOW DATABASES, un utilisateur lister toutes les bases de données du serveur.

mysql -u someuser -p

Enter password:

mysql> show databases;

+——————–+

| Database |

+——————–+

| mysql |

| someuserdb |

+——————–+

Il est possible de désactiver cette commande. Cependant il serait judicieux d’autoriser l’utilisateur à lister que les bases de données sur lesquelles il a des droits. Dans le fichier my.cnf, dans la section mysqld, ajouter safe-show-database.

mysql -u someuser -p

Enter password:

mysql> show databases;

+———-+

| Database |

+———-+

| someuserdb |

+———-+

Restriction réseau

Afin de limiter l’écoute du deamon mysql à une interface, utilisez bind-address.

netstat -lataupen |grep 3306

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 27 19963 7045/mysqld

Si aucune connexion réseau n’est requise, on peux la supprimer avec –skip-networking.

Chrooter Mysql

Malgré toutes ces modifications, nous ne sommes pas à l’abri d’un exploit sur le service mysqld. Il apparait donc nécessaire de chrooter mysqld. Ceci fait, mysqld ne pourra pas accéder à l’ensemble du disque. Il restera dans sa nouvelle racine.

Nous allons donc créer l’arborescence :

mkdir -p /chroot/mysql/var/lib/

cd /chroot/mysql

mkdir -p var/run etc tmp

chmod 1777 tmp

Ensuite nous allons recréer l’environnement de mysql et les bases nécessaires

grep « mysql: » /etc/passwd > etc/passwd

mv /var/lib/mysql var/lib/

ln -s /chroot/mysql/var/lib/mysql/ /var/lib/mysql

mv /var/run/mysqld var/run

ln -s /chroot/mysql/var/run/mysqld/ /var/run/mysqld

Enfin, nous ajoutons les librairies de mysqld.

[root@localhost mysql]# ldd /usr/libexec/mysqld
librt.so.1 => /lib64/librt.so.1 (0×0000003d59200000)
libz.so.1 => /usr/lib64/libz.so.1 (0×0000003d58600000)
libdl.so.2 => /lib64/libdl.so.2 (0×0000003d57a00000)
libssl.so.6 => /lib64/libssl.so.6 (0×0000003d65400000)
libcrypto.so.6 => /lib64/libcrypto.so.6 (0×0000003d61600000)
libpthread.so.0 => /lib64/libpthread.so.0 (0×0000003d58200000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0×0000003d6a000000)
libnsl.so.1 => /lib64/libnsl.so.1 (0×0000003d5b200000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0×0000003d69c00000)
libm.so.6 => /lib64/libm.so.6 (0×0000003d57e00000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0×0000003d69800000)
libc.so.6 => /lib64/libc.so.6 (0×0000003d57600000)
/lib64/ld-linux-x86-64.so.2 (0×0000003d57200000)
libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0×0000003d63400000)
libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0×0000003d63800000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0×0000003d5e200000)
libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0×0000003d5fa00000)
libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0×0000003d5fe00000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0×0000003d64000000)
libresolv.so.2 => /lib64/libresolv.so.2 (0×0000003d5ce00000)
libselinux.so.1 => /lib64/libselinux.so.1 (0×0000003d58e00000)
libsepol.so.1 => /lib64/libsepol.so.1 (0×0000003d58a00000)

mkdir -p lib64/ usr/lib64

cp /lib64/librt.so.1 /lib64/libdl.so.2 /lib64/libcrypto.so.6 /lib64/libpthread.so.0 /lib64/libcrypt.so.1 /lib64/libnsl.so.1 /lib64/libm.so.6 /lib64/libgcc_s.so.1 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 /lib64/libcom_err.so.2 /lib64/libkeyutils.so.1 /lib64/libresolv.so.2 /lib64/libselinux.so.1 /lib64/libsepol.so.1 lib64/

cp /usr/lib64/libz.so.1 /usr/lib64/libstdc++.so.6 /usr/lib64/libgssapi_krb5.so.2 /usr/lib64/libkrb5.so.3 /usr/lib64/libk5crypto.so.3 /usr/lib64/libkrb5support.so.0 usr/lib64/

Il faut aussi ajouter les librairies nécessaires à la résolution de noms

cp /lib/libnss_compat.so.2 /lib/libnss_files.so.2 lib64

Il nous reste à compléter la nouvelle racine dans le fichier my.cnf

/etc/my.cnf: chroot=/chroot/mysql

Filed under Linux, Securité having 1 Comment »

Archives Posts

Apache2 et SSL

mai 15th, 2008 by julio

Durant mon stage, j’ai été amené à créer une page web Apache avec SSL.

Depuis la version 2.2 d’Apache, la commande « apache2-certificate-ssl » n’existe plus, ce qui permettait la création de certificat. Du coup, on reprend les bonnes manières, à vous les fanas du terminal. Pour pouvoir créer un certificat, il faut biensûr le paquet openssl.

Voici un script permettant de créer le certificat :


openssl req -config openssl.cnf -new -out site.csr
openssl rsa -in privkey.pem -out site.key
openssl x509 -in site.csr -out site.cert -req -signkey site.key -days 365
openssl x509 -in site.cert -out site.der.crt -outform DER

Activez le module SSL :
a2enmod ssl

Rajouter le port 443 au fichier ports.conf :
Listen 80
Listen 443

Rajouter ces lignes au fichier apache2.conf :

SSLMutex default
SSLRandomSeed startup builtin
SSLSessionCache none

Lors d’une création de virtualhost rajouter ces lignes :
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/site.cert
SSLCertificateKeyFile /etc/apache2/ssl/site.key

Vérifier si le module est bien activé dans /etc/apache2/mods-enabled/

ssl.conf
ssl.load

Filed under Linux, Securité, system having 11 Comments »

Archives Posts

Déploiement Ntop

avril 30th, 2008 by julio

Présentation de l’outil Ntop

Ntop est un outil d’analyse réseau permettant de surveiller un parc informatique en temps réel. Toutes les données et statistiques sont représentées via une interface Web.

Quelques fonctionnalités de Ntop :

  • Tableau des hosts connus
  • Utilisation des protocoles réseaux
  • Charge bande passante par host
  • Graphes journaliers, hebdomadaire, mensuels, annuels

Installation Ntop

Ntop s’installe en ligne de commande :

Installation du package

apt-get install ntop

Vérification de la version

apt-cache policy ntop

Ntop est maintenant installé.

Renseigner le mot de passe Admin permettant de gérer l’interface Web Admin :

ntop -A

Pour lancer ntop, plusieurs possibilités de démarrage :

  • -i : défini l’interface de capture (Possibilité de mettre plusieurs interfaces séparés d’une virgule)

  • -w : permet de spécifier l’adresse IP du serveur ntop suivi du port

  • -W : permet de spécifier également une IP mais cette fois-ci en HTTPS

  • -d : permet de démarrer ntop en daemon

  • -u : défini l’utilisateur (par défaut l’utilisateur ntop est créé)

Dans mon exemple, je vais lancer ntop en daemon sur l’interface eth0 et eth1 sur mon serveur 192.168.0.1 en https avec le port 3001 :

ntop -u ntop -d -i eth0,eth1 -W 192.168.0.1:3001

L’utilisateur ntop doit être spécifié dans la commande afin d’avoir les droits nécessaires pour visualiser toutes les stats. Puis, si vous ne lancez pas ntop en daemon, vous devrez arréter le service manuellement (kill) au lieu de le faire via le daemon (/etc/ini.d/ntop stop).

Il est possible maintenant d’attaquer le serveur en https. Ntop intègre son propre serveur Web, il n’y a pas besoin d’installer un serveur Apache à coté.

https://votre_site:3001

Interface Web

Plusieurs onglets sont disponibles sur l’interface :

  • About : tous les informations sur Ntop, comment ça marche, …
  • Summary : récapitule toutes les informations sous forme de stat
  • All protocols : récapitule les informations par host et par protocoles
  • IP : défini l’ensemble du trafic IP
  • Media : utile pour le fibre channel et les sessions SCSI
  • Utils : permet de dumper les données en XML si Ntop a été compilé avec le xml et de voir les logs de ntop
  • Plugins : possibilité de rajouter des plugins à Ntop (NetFlow, RRD, …)
  • Admin : interface pour gérer les options de Ntop et toutes les préférences Admin

Dans le cas où l’on capture avec plusieurs interfaces réseaux, l’interface Web affiche les stats d’une seule interface. Pour switcher, il suffit de cliquer sur l’ongler Admin puis Switch NIC. L’interface Web vous affichera les interfaces disponibles.

Mirroring de port

Ntop permet de sniffer un réseau IP. Si la partie sniffée est un réseau IP avec Hub, il n’y a pas de problème car tous les paquets transitent sur tous les ports. Par contre, la plupart des réseaux utilisent aujour’hui des switchs. Dans ce cas, il faut dupliquer le trafic vert le port où se trouve le serveur Ntop.

Sur un switch Cisco, il faut configurer le SPAN permettant de récupérer le trafic que l’on souhaite vers un port de destination :

Dans mon exemple, j’utilise un switch Cisco Catalyst 2950. Ma sonde se trouve sur le port Fa0/11 et je veux dupliquer le trafic du port Fa0/12 et FA0/14 :

monitor session 1 source interface Fa0/11

monitor session 1 destination Fa0/12

monitor session 1 destination Fa0/14

Afficher votre configuration (sh run) pour voir si les commandes ont bien été appliquées et surveiller si Ntop récupère bien le trafic.

Filed under Linux having 2 Comments »

Archives Posts

Installation Zimbra + Synchro Funambol

avril 29th, 2008 by julio

Présentation de Zimbra

Zimbra est l’une des plus performante messagerie unifiée dans le monde Open Source. Cette plateforme permet de centraliser toutes les données de l’entreprise (contacts, calendriers, notes, documents). En plus du rôle de serveur de messagerie, cette solution intègre un système anti-spam et d’un antivirus.

Zimbra existe en plusieurs versions (Open Source, Network Edition, …) mais ce tutorial est adapté exclusivement à la version Open Source. Pour plus d’information, un comparatif est disponible sur le site http://www.zimbra.com/products/product_editions.html

Ce document a pour but de vous montrer l’installation d’un serveur Zimbra sur un serveur Linux puis d’interagir Zimbra avec un serveur Funambol.

Funambol est un serveur de synchronisation permettant de transférer sur des clients (Outlook, Mobile phone, Smartphone) tous les contacts et calendriers d’un compte zimbra.

La première partie du document concernera l’installation de Zimbra puis en second temps, nous verrons le fonctionnement du serveur Funambol.

Installation de Zimbra

Téléchargez la dernière version de Zimbra Open Source Edition sur le site officiel :

http://www.zimbra.com/community/downloads.html
Placez le fichier téléchargé dans le répertoire /usr/src/ puis l’extraire :

cd /usr/src/

tar -xvfz Zimbra-5.0.2.tgz

Avant d’installer Zimbra, téléchargez les paquets nécessaires :

apt-get install sudo libidn11 fetchmail libpcre3 libgmp3c2 libxml2 libstdc++6 openssl libltdl3 perl

Maintenant, exécutez le script install.sh :

cd /usr/src/Zimbra-5.0.2/

./install.sh

Normalement, le script trouvera les paquets téléchargés précédemment. S’il manque des paquets, téléchargez les via « apt » ou sur les sites officiels.
L’assistant Zimbra vous proposera désormais d’installer les services Zimbra que vous souhaitez. Répondez « Y » pour installé sinon « N ».

Install zimbra-ldap [Y]

Install zimbra-logger [Y]

Install zimbra-mta [Y]

Install zimbra-snmp [Y]

Install zimbra-store [Y]

Install zimbra-apache [Y]

Install zimbra-spell [Y]

Install zimbra-proxy [N]

Ensuite, il vous dira que le système a été modifié et si vous voulez continuer l’installation, répondez « Y » :

The system will be modified. Continue? [N] Y

Il va maintenant installer les services Zimbra sélectionnés auparavant. Cette étape est assez longue :

zimbra-core……zimbra-core_5.0.2_GA_1975.DEBIAN4.0_i386.deb…done

zimbra-ldap……zimbra-ldap_5.0.2_GA_1975.DEBIAN4.0_i386.deb…done

zimbra-logger……zimbra-logger_5.0.2_GA_1975.DEBIAN4.0_i386.deb…done

zimbra-mta……zimbra-mta_5.0.2_GA_1975.DEBIAN4.0_i386.deb…done

zimbra-snmp……zimbra-snmp_5.0.2_GA_1975.DEBIAN4.0_i386.deb…done

zimbra-store……zimbra-store_5.0.2_GA_1975.DEBIAN4.0_i386.deb…done

zimbra-apache……zimbra-apache_5.0.2_GA_1975.DEBIAN4.0_i386.deb…done

zimbra-spell……zimbra-spell_5.0.2_GA_1975.DEBIAN4.0_i386.deb…done

Si vous n’avez pas d’enregistrement MX sur votre serveur DNS, il va vous afficher un message d’erreur :

DNS ERROR resolving MX for zimbra.ace-service.fr

It is suggested that the domain name have an MX record configured in DNS

C’est alors qu’il va vous suggérer de changer de domaine. Si vous souhaitez changer de domaine, tapez « Yes », sinon « No ». L’installation continuera normalement même si vous n’avez pas d’enregistrement MX, c’est seulement un message à titre informatif.

Change domain name? [Yes] No

Ensuite, il vous affiche un menu pour connaître les informations manquantes pour continuer l’installation. Les informations manquantes sont précédées des caractères « ** ».

Dans mon exemple, je dois renseigner le mot de passe Admin :

******* +Admin Password UNSET

Pour cela je tape le numéro 3 pour accéder au menu « zimbra-store » où se trouve le sous-menu Admin password. Puis le 4 pour définir le mot de passe Admin.

Après avoir défini le mot de passe, tapez « r » pour revenir au menu général.

Enfin, tapez « a » pour continuer l’installation.
Après avoir défini les fichiers de sauvegarde, zimbra va procéder au démarrage des services installés :

Save configuration data to a file? [Yes]

Save config in file: [/opt/zimbra/config.14265]

The system will be modified – continue? [No] Yes

Liens web zimbra :

  • Zimbra Admin : https://votre_domaine:7071
  • Zimbra User : http://votre_domaine/

L’installation de zimbra est terminée. Toutes les configurations se passent dans l’interface Admin de Zimbra (Gestion des comptes, Alias, services, domaines, …)

Funambol : Serveur de synchronisation

Présentation de Funambol

Funambol est une suite logicielle permettant la synchronisation de données telles qu’un carnet d’adresses, un calendrier ou des emails, entre plusieurs ordinateurs et/ou périphériques portables.
Dans notre tutorial, Funambol nous servira de serveur de synchronisation entre un client outlook et un zimbra.

Mise en place de funambol

Rendez vous sur la page http://funambol.com/opensource/downloads.php

  • Fichier binaire pour installer le serveur sous linux

  • Fichier exécutable permet de configurer le serveur à distance sur un windows

Coté serveur placez votre binaire dans /usr/src puis rendez votre fichier exécutable :

cd /usr/src/

chmod 777 funambol-6.5.14.bin

Lancez le script :

./funambol-6.5.14.bin

Le script vous affichera la licence Funambol, rendez-vous en bas de la page et répondez « Yes » :

Do you agree to the above license terms? [yes or no]

yes

Laissez par défaut le répertoire d’installation /opt :

Directory to extract Funambol [/opt] <return to accept>?

Le serveur est bien installé et vous pouvez le démarrer.
Afin d’intégrer Zimbra au serveur de synchronisation, télécharger la dernière version du module Zimbra à l’adresse https://sourceforge.net/project/showfiles.php?group_id=219645

Placez le fichier téléchargé dans le dossier /opt/Funambol/ds-server-modules puis renommez le en ZimbraConnector :

cd /opt/Funambol/ds-server/modules
mv ZimbraConnector-0.4.96.s4j ZimbraConnector.s4j

Renseignez le nouveau module dans le fichier de configuration « install.properties » :

nano /opt/Funambol/ds-server/install.properties

Rajoutez le nom du module à la fin du fichier à la ligne « modules-to-install » :

modules-to-install=foundation-6.5.10,…,funambol-email-connector-6.5.9,ZimbraConnector

Pour appliquer les changements, lancez le script « install-modules.sh » à partir du répertoire « ds-server » :

cd /opt/Funambol/ds-server

./bin/install-modules-sh

Répondez « y » pour installer ou mettre à jour les modules

Coté serveur, tout est installé.

Nous allons désormais utiliser le logiciel sous windows pour attaquer le serveur Funambol/zimbra à distance. Après l’avoir téléchargé et installé, lancez-le.
Pour vous connectez au serveur, il vous suffit de cliquer droit sur Funambol Administrative Tool à gauche de la fenêtre puis « Login ». A la prochaine fenêtre, rentrez votre adresse IP de votre serveur Funambol puis laissez les paramètres par défaut (login = admin et password = sa et port = 8080).

Une fois connecté au serveur, vous devrez avoir les 3 modules suivants apparents :

L’étape suivante consiste à supprimer les champs suivants dans l’arboresence Modules > Foundation > FunambolFoundationConnector :

  • PIM Calendar SyncSource — cal; event; scal; stask; task
  • PIM Contact SyncSource — card; scard

Ensuite, nous allons ajouter des champs dans le module Zimbra > FunambolZimbraConnector :

Modules > zimbra > FunambolZimbraConnector>CalendarSyncSource

Ajouter les champs suivants : cal, event, scal, stask and task.

  • Source URI = cal,event,scal,stask,task

  • Name = cal,event,scal,stask,task

  • Zimbra URL = http://<hostname>:port/service/soap/

  • secure URL = https://<hostname>:port/service/soap/

Modules > zimbra > FunambolZimbraConnector>ContactSyncSource

Ajouter les champs card and scard.

  • Source URI = card, scard

  • Name = card, scard

  • Zimbra URL = http://<hostname>:port/service/soap/

  • secure URL = https://<hostname>:port/service/soap/

Modules > zimbra > FunambolZimbraConnector>GALContactSyncSource

  • Source URI = zimbraGalContacts

  • Name = zimbraGalContacts

  • Zimbra URL = http://<hostname>:port/service/soap/

  • secure URL = https://<hostname>:port/service/soap/

Maintenant, pour synchroniser vos contacts et agendas, téléchargez et installez le logiciel client Outlook sur le site http://funambol.com/opensource/downloads.php

Après installation, un plugin va s’ajouter dans votre client de messagerie et vous pourrez configurez vos différentes options selon vos besoins.

Ce document prmet également une synhcronisation avec les clients :

  • Windows Mobile PocketPC

  • Windows Mobile SmartPhone

  • IPod

Filed under Linux, system having 13 Comments »

Archives Posts

Forensic sur log apache avec pyflag

avril 17th, 2008 by Corbier

Contexte

Dans le cadre de mon travail je suis parfois obliger de faire des retours sur incident dans le cadre de dysfonctionement ou d’attaque.

J’ai donc choisi d’utiliser pyflag.

L’installation se fait facilement a coup de ./configure make make install

Récupération des log’s

J’ai donc récupéré les logs httpd sur le serveur du client ainsi que les logs tomcat. Le problême constaté est que le service tomcat tombe régulièrement (genre tous les deux jours).

Une fois pyflag configuré, il nous reste à nous connecter à l’adresse http://127.0.0.1:8000

Afin d’intégrer les log apache, il est nécessaire de créer un log Preset qui contiendra l’ensemble des log à analyser.

Un assistant apparaît pour injecter les logs. Quelques points me semble essentiel.

Sélectionnez Apache Log ;)

Ainsi que le format debian_forensic cliquez sur next et les logs apparaissent sous la forme de tableau

Ensuite il nous reste a nommer notre preset.

Cliquez sur Load a Log file

Sélectionner les logs a injecter dans le base mysql

L’upload est assez rapide.

Je peux donc travailler sur mes log’s

La suite au prochaine épisode :p

Archives Posts

Telechargement Zimbra

avril 16th, 2008 by wolf

Il s’avère que dans ma société nous travaillons avec zimbra. J’ai créer quelques petits scripts qui permettent de faciliter la vie. Ayant besoin d’avoir toutes les versions de zimbra sous le coude pour faire des tests, j’ai créer ce script qui permet de télécharger les dernieres versions de zimbra. Il vous suffira de mettre le script dans votre cron et le tour est joué.


#######ChangeLOG##################
#Createur : Maussion Frederic
#Contact : fmaussion@starxpert.fr
#Date de creation : 16/04/08
###################################

### VARIABLES ###

# Recuperation de la version de zimbra afin de pouvoir creer les repertoires
version=`wget -q -O – http://www.zimbra.com/community/downloads.html | grep HTTP | grep -oe ‘\(\w*.\)\{2\}\w*.GA\+’ | sed -e ’s/_GA//g’ |sort -u | tail -1`
#Definition des repertoires ou seront telecharger les archives de zimbra
NE= »/opt/iso/zimbra/NE »
OSE= »/opt/iso/zimbra/OSE »

## Dossier et telechargement ##

# Creation des dossier
echo « mkdir $NE/$version » > /tmp/get.sh
echo « mkdir $OSE/$version » >> /tmp/get.sh

# Telechargement des versions NE
echo « cd $NE/$version » >> /tmp/get.sh
wget –quiet http://www.zimbra.com/products/downloads.html -O – | sed -n ’s/.*\(http:\/\/.*tgz\).*/\1/p’ |sort -u
| sed -e ’s/http/wget -c http/g’ >> /tmp/get.sh

# Telchargement des versions OSE
echo « cd $OSE/$version » >> /tmp/get.sh
wget –quiet http://www.zimbra.com/community/downloads.html -O – | sed -n ’s/.*\(http:\/\/.*tgz\).*/\1/p’ |sort -u
| sed -e ’s/http/wget -c http/g’ >> /tmp/get.sh

## Script temporaire ##

# Toutes les commandes ci-dessus sont envoyees vers un script temporaire
# Changement des permissions afin de le rendre executable
chmod a+x /tmp/get.sh

# Execution du script
/tmp/get.sh

# Supression du script
rm -r /tmp/get.sh

voila qui permettra de telecharger la totalité des versions, aussi bien Network que Open Source.

Filed under Linux, scripting, system having 2 Comments »

Archives Posts

L7-Filter Installation (partie 1)

avril 11th, 2008 by Corbier

J’avais fait un précédent billet sur l7-filter mais il n’est plus à jour. J’ai donc décidé d’en refaire un nouveau pour debian Etch noyau 2.6.18 avec iptables-1.3.5

L7-Filter o_O ?

C’est un module pour netfilter servant à filtrer le trafic par applicatif. L’utilisation se fait à l’aide d’expression régulière (pattern) servant de prise d’empreinte pour les protocoles.

Dans un premier temps installons les outils nécessaires à la compilation de noyau.

apt-get install build-essential fakeroot kernel-package

Puis installons les sources du noyau.

apt-get install linux-source-2.6.18

Maintenant que les sources sont téléchargé dans /usr/src il faut les extraire.

cd /usr/src & tar xvjf linux-source-2.6.18.tar.bz2

Créons un lien symbolique vers les sources.

ln -s linux-source-2.6.18 linux

Il faut maintenant télécharger l7-filter

wget http://switch.dl.sourceforge.net/sourceforge/l7-filter/netfilter-layer7-v2.17.tar.gz

tar xvzf netfilter-layer7-v2.17.tar.gz

Afin de profiter des fonctionnalités de l7filter il faut patcher le noyau.

cp netfilter-layer7-v2.17/for_older_kernels/kernel-2.6.18-2.6.19-layer7-2.9.patch linux

cd linux

Procédons au patch.

patch -p1 < kernel-2.6.18-2.6.19-layer7-2.9.patch

cd ..

Il faut ensuite préparer iptables à recevoir l7-filter. Pour ce faire téléchargeons les sources afin de les patcher.

wget http://ftp.netfilter.org/pub/iptables/snapshot/iptables-1.3.5-20061006.tar.bz2 & tar xvjf iptables-1.3.5-20061006.tar.bz2

Copions le patch

cp netfilter-layer7-v2.17/iptables-1.3-for-kernel-pre2.6.20-layer7-2.17.patch iptables-1.3.5-20061006/

cd iptables-1.3.5-20061006

patch -p1 < iptables-1.3-for-kernel-pre2.6.20-layer7-2.17.patch

Ensuite il faut installer iptables patché dans les sources du noyau.

chmod +x extensions/.layer7-test

make KERNEL_DIR=/usr/src/linux

make install KERNEL_DIR=/usr/src/linux

cd..

Enfin il nous reste à activer les modules afin de compiler le noyau.

cd linux

make menuconfig

Comme l’indique la doc, il faut activer les modules suivants :

* EXPERIMENTAL (Code maturity level options & Prompt for development and/or incomplete code/drivers)
* Netfilter (Device Drivers &Networking support & Networking Options & Network packet filtering)
* Connection tracking (Network packet filtering & IP: Netfilter Configuration & Connection tracking)
* “Connection tracking flow accounting” and “IP tables support” (on the same screen)
* And finally, “Layer 7 match support”
* Optional: Lots of other Netfilter options, ntably “FTP support” and other matches. If you don’t know what you’re doing, go ahead and enable all of them.

Il faut ensuite compiler les sources du noyau et créez les packages .deb.

make-kpkg

fakeroot make-kpkg –append-to-version=.666666 –initrd kernel_image

Et c’est parti pour une longue compilation.

Une fois ceci fait nous avons les packages dans /usr/src

linux-doc-2.6.18.181004_2.6.18.181004-10.00.Custom_all.deb

linux-image-2.6.18.181004_2.6.18.181004-10.00.Custom_i386.deb

linux-manual-2.6.18.181004_2.6.18.181004-10.00.Custom_all.deb

linux-source-2.6.18.181004_2.6.18.181004-10.00.Custom_all.deb

Installons-les.

dpkg -i *.deb

Un reboot est nécessaire. N’oubliez pas de vérifier dans votre /boot/grub/menu.lst que le noyau est disponible ;)

Une fois rebooté regardons les commandes disponibles pour l7filter

iptables -m layer7 –help

iptables v1.3.8-20071014

LAYER7 match v1.3.8-20071014 options:

–l7dir <directory> : Look for patterns here instead of /etc/l7-protocols/

(–l7dir must be specified before –l7proto if used!)

–l7proto [!] <name> : Match the protocol defined in /etc/l7-protocols/name.pat

Il est donc possible de modifier le path de recherche des patterns via –l7dir

Ainsi que spécifier un protocole via – -l7proto

Justement jetons un coup d’œil a ces fameux patterns.

Il faut les télécharger et les installer.

wget http://surfnet.dl.sourceforge.net/sourceforge/l7-filter/l7-protocols-2008-02-20.tar.gz

tar xzf l7-protocols-2008-02-20.tar.gz

cd l7-protocols-2008-02-20

make install

cd /etc/l7-protocols/protocols/

Prenons par exemple le protocole http.

Voici le pattern http qui match ce protocole.

http/(0\.9|1\.0|1\.1) [1-5][0-9][0-9] [\x09-\x0d -~]*(connection:|content-type:|content-length:|date:)|post [\x09-\x0d -~]* http/[01]\.[019]

On voit qu’en fait l7-filter match sur les entêtes http. Ce qui nous indique bien qu’il s’agisse du protocole http

Cependant selon la documentation :

  • l7-filter matching isn’t foolproof: there may be both false positives (one protocol can look like another) and false negatives (applications can do obscure things that we didn’t count on). Patterns that are known to regularly generate false positives are marked « overmatching » on the protocols page, but others may also do so occasionally.
  • Almost every type of Internet traffic has legitimate uses. For instance, P2P protocols, while widely used to violate copyright, are also an efficient way to distribute open source software and legally free music.
  • Programs can respond to being blocked by port-hopping, switching between TCP and UDP, opening a new connection for every trivial operation, using encryption, or employing other evasion tactics. Trying to block such protocols has consequences on two levels:
    1. In the case of port/protocol-hopping, you make it harder for yourself to identify protocols that already act this way.
    2. You encourage programmers to include these « features » in new programs, making it harder for everyone in the future. For example: In early 2006, Bittorrent started moving towards end-to-end encryption because many networks were either blocking it or severely restricting its bandwidth.
  • l7-filter patterns are not generally designed with blocking in mind. We consider a protocol to be well identified if the identification is useful for controlling its bandwidth. This means, for instance, that for P2P applications, we do not focus on catching connections that are not downloads.
  • Blocking with l7-filter provides no security, since any reasonably determined person can easily circumvent it.

Considérant ceci il semblerait que l7-filter soit plus utiliser dans le cadre de restriction de bande passante.

Dans un prochaine article nous verrons le traffic control sous linux avec l7filter.

Archives Posts

Stripe Size

mars 25th, 2008 by wolf

Stripe Size & Stripe Width

Les RAID qui utilise le stripping améliore les performances en partageant les fichiers en petites pièces et en les distribuant aux multiples disques durs. La plupart des mises en oeuvre de stripping permettent à l’administrateur plus de deux paramètres critiques qui définissent comment les données sont splittés, et envoyé aux différents disques durs. Chacun de ces facteurs a un impact important sur les performances du RAID.

Le premier paramètre clef est le stripe width du RAID. Le stripe width se réfère au nombre de stripes parallèles qui peuvent être écrites ou lu simultanément. C’est bien sûr égal au nombre de disques dans le tableau. Donc un RAID à quatre disques aurait un stripe width de quatre.

Les performances de lecture et écriture d’un RAID strippé augmente en même temps que le stripe width augmente. La raison est que l’ajout de disques durs au RAID augmente le parallélisme RAID, donnant ainsi l’accès à plus de disques durs simultanément.

Vous aurez généralement un taux de transfert plus performant d’un RAID comprenant huit disques durs de 18GB que d’un RAID de 36GB, tout en ayant le mêmes gammes de disques durs.

Bien sûr, le coût de huit disques durs de 18GB est plus onéreux que quatre disques durs de 36GB, tout en prenant compte la puissance nécessaire au niveau des alimentations.

Le second paramètre clef est le stripe size du RAID, quelques fois on retrouve ce terme comme la taille des blocs, longueur des blocs… Ce terme fait référence à la taille des blocs écrit sur chaque disques. Les RAID autorise la taille des blocs compris entre 2KB et 512KB (voir plus), chaque blocs est multiple de deux (2KB, 4KB, 8KB, …). Les RAID de type 3, n’autorise que un stripe size de 1B, voir moins, et n’est pas modifiable par l’utilisateur.

L’impact au niveau des performances du stripe size est plus difficile a quantifier que l’effet du stripe width.

Réduction du Stripe Size: comme le stripe size est réduit, alors les fichiers sont coupés en de plus petites pièces. Cela augmentera le nombre de disques contenant le fichier, en théorie, cela augmente le temps de transferts, mais ça réduit les performances de positionnement.

Augmentation du Stripe Size : l’augmentation du stripe size du RAID, fait l’opposé de ce que nous avons vu précédemment. Il faudra moins de disques durs pour contenir le fichier, du coup les performances de transferts seront réduites. Mais si le contrôleur est optimisé pour, la condition d’avoir moins de disques durs, permet aux disques durs non nécessaires d’avoir un accès particulier ceci afin d’être utilisé pour un autre transfert, améliorant la performance du positionnement

Exemple

Voici un exemple de deux différents disques avec des stripes size différents:

1.gif2.gif

A gauche, un RAID 0 de quatre disques avec un stripe size de 4 KB; à droite le même RAID avec les mêmes données, mais qui utilise un stripe size de 64 KB. Dans ce diagramme, quatre fichiers se distinguent par quatre couleurs différentes:

  • le fichier rouge à une taille de 4 KB
  • le fichier bleu à une taille de 20 KB
  • le fichier vert à une taille de 100KB
  • le fichier magenta à une taille de 500KB

Ils sont dessiné afin d’illustrer combien d’espace ils occupent en terme relatif dans le RAID (un pixel vertical représente 1KB).

On peut constater la différence de traitement de fichier entre les deux type de RAID. Les fichiers de 4KB prennent seulement un bloc sur un seul disque dans les deux RAID, et le fichier de 500KB est répartie au travers des quatre disque dans les deux RAID. Mais quand le plus large stripe size est utilisé, le fichier bleu apparaît seulement sur un seul disque à la place de quatre, et le fichier vert est réparti sur deux disques au lieu de quatre. Ceci améliore le positionnement aléatoire de ces fichiers. Dans les deux cas, le stripe width est bien sur de quatre.

Alors quel stripe size choisir ? La meilleur solution pour trouver lequel convient le mieux, est d’essayer plusieurs valeurs: plus ça empire, moins la solution sera bonne :) En outre, ne surestimez pas les performances entre les différents taille de stripe size, elle peut être significative, en particulier si vous prenez les opposés du spectre comme par exemple 4KB et 256KB, mais la différence n’est pas souvent aussi large entre deux valeurs.

Et si vous devez avoir un principe de base, je dirais ceci : les environnements transactionnels où vous avez un grand nombre de lecture et d’écriture sont probablement plus aisés avec une grande tailles de stripe size; les applications où de plus petits nombres de grand fichiers doivent être lus rapidement préféreront probablement de plus petit stripe size. Évidemment, si vous devez équilibrer ces conditions, choisissez quelque chose au milieu.

Sources

http://www.storagereview.com/guide2000/ref/hdd/perf/raid/concepts/perfStripe.html

Filed under Linux, system having 1 Comment »

Archives Posts

LVM fonctionnement & mise en place

mars 20th, 2008 by wolf

Introduction à LVM

LVM, dont l’acronyme anglo-saxon signifie Logical Volume Manager, est un gestionnaire de

volumes logiques qui apportent une vision abstraite du stockage de votre machine. La partition

physique devient un composant élémentaire et ne va plus directement supporter le système de

fichiers. Entre ces deux couches de bas et de haut niveau (successivement, la partition et le système

de fichiers), vont s’intercaler une première couche regroupant les partitions physiques (appelée

« volume groupe ») et une deuxième couche dans laquelle nous allons créer les systèmes de fichiers

(appelés « volumes logiques ») mais qui seront dynamiquement retaillables (indifféremment en

réduction ou en extension).

1.png

Figure 1 : Découpage des données sous LVM

L’intérêt principal de cette approche est à la fois de pouvoir étendre facilement un volume groupe en

ajoutant des partitions physiques (par exemple, un nouveau disque dur) et de changer la taille à

chaud des volumes logiques sachant que ces derniers ne possèdent pas un emplacement précis sur

un volume groupe et ne sont représentés que par leur nom et leur taille. Voici un exemple de ce que pourrait donner un système tournant sur LVM.

2.png

Figure 2 : Couches d’abstractions du modèle LVM

Le nommage des volumes groupes et logiques est libre même si la convention habituelle est de préfixer un volume groupe par « vg_ » et un volume logique par « lv_ ».

Tout l’espace disponible dans un volume groupe peut ne pas être utilisé dans les volumes logiques.

Cela permet de garder en réserve de l’espace disque pour l’ajouter aux volumes logiques qui en

auront besoin.

Un peu d’histoire

LVM (dont les principes ont été développés par l’Open Software Foundation) est notamment un

ticket d’entrée incontournable dans le monde de l’entreprise actuel. Il faut bien comprendre que les

gros Unix propriétaires possèdent tous leurs propres gestionnaires de volumes : Aix, Solaris, HP-

UX, Tru64, … (l’implémentation actuelle LVM de Linux, qui en est à sa version 1.0.7, est très

proche de celle de HP-UX). Linux n’est donc pas un précurseur en la matière mais disposer d’un

LVM est un enjeu primordial pour les décideurs informatiques souhaitant traiter des volumes de

données conséquents.

LVM 1.0.x (développé principalement par la société Sistina) est directement implémenté au niveau

du noyau Linux depuis sa version 2.4 (avec possibilité d’implémentation à partir du 2.2.17) ; la

version 2.6 qui devrait arriver fin 2003 va intégrer la version 2.0 de LVM. Cette dernière version

repose sur une nouvelle couche du noyau, le « device mapper », qui rationalise l’implémentation de

drivers supportant des devices virtuels en mode blocs comme par exemple le Raid logiciel. On peut

donc s’attendre à de meilleures performances et une plus grande fiabilité.

Pour la petite histoire, il s’en est fallu de peu que le LVM Linux ne soit supplanté par un équivalent

développé par IBM, appelé du doux acronyme de EVMS, et qui avait pour ambition de modifier la

vision que l’on pouvait avoir du stockage de données sous Linux en fédérant l’essentiel des couches

dans un même outil : partition, LVM, Raid logiciel, etc. (concept qui avait tout pour séduire). Les

développeurs du noyau Linux ont finalement tranché en faveur du LVM2 de la startup Sistina plutôt

que de choisir l’outil novateur (peut être un peu trop) du géant IBM : cela est la preuve, s’il en est

besoin, de l’approche démocratique et mature du développement du noyau Linux.

Autant être honnête, les fonctionnalités du driver EVMS restent très alléchantes à l’heure qu’il est ;

la preuve en est que le projet continue d’être développé comme vous pourrez le constater sur le site

officiel chez IBM. Peut être entendrons-nous un jour reparler de cet outil sous une forme différente ?

Cas d’utilisation de LVM

Après avoir lu le début de cet article, vous avez peut être la désagréable impression qu’utiliser un

gestionnaire de volumes est exclusivement réservé aux sociétés qui manipulent de grosses quantités

de données. Cette impression est fausse car LVM peut être aussi très utile sur la machine d’un

particulier, en fait sur n’importe quelle configuration.

Vous êtes un particulier et vous possédez une machine disposant d’un disque dur de 40 Go : vous

échangez régulièrement beaucoup de fichiers avec vos amis et cela entraîne une saturation du

répertoire /home ? Vous installez régulièrement de nouveau logiciels et votre /usr ne peut plus tenir

la cadence ? Une utilisation intensive de la machine cause la génération de fichiers de log qui

remplissent la partition supportant /var ? Avec LVM, il vous sera possible de préparer votre

machine avec des tailles de partitions adaptées en prévision de leur occupation théorique et, en cas

de nécessité, il vous sera possible d’adapter au fur et à mesure des besoins la taille des partitions à

leur utilisation réelle.

Vous êtes un ingénieur système et le volume de données à traiter de votre société est en continuelle

augmentation ? Avec LVM, il vous suffira de rajouter un nouveau disque dur (en SCSI, cela peut

même être fait à chaud) et de l’ajouter dans un de vos volumes groupes. L’espace nouvellement

affecté pourra être utilisé par les systèmes de fichiers les plus demandeurs en quelques commandes.

C’est même souvent utilisé pour isoler les applications critiques en créant un volume groupe par

application : vous gardez le contrôle de l’occupation disque et vous sécurisez votre système en cas

de débordement d’une application dont la volumétrie a été sous évaluée.

Le LVM Linux n’intègre pas directement le support du Raid1 (mode miroir ou les données sont

dupliquées sur au moins 2 disques pour supporter la perte d’un disque). Il faut pour cela utiliser une

carte raid hardware ou plus simplement le driver Linux MD (Linux Multiple Device) : LVM utilise

autant des partitions physiques que des partitions créées par Raid logiciel. Par contre, le support du

mode striping (les données sont écrites par morcellement sur plusieurs disques dur pour améliorer

les performances) est natif. Dans une utilisation professionnelle, l’utilisation d’une carte raid est tout

de même fortement conseillée vu son faible coût.

La plupart des distributions Linux récentes dispose du support LVM. La configuration du volume

manager est accessible aussi à l’installation de votre machine, au moins sur les distributions

RedHat, SuSE et Mandrake (l’installation se fait en mode graphique). Cela est aussi possible par

défaut sur la distribution Debian à partir de la version etch.

Cluster LVM

Le Clustered Logical Volume Manager (CLVM) est un ensemble d’extensions de cluster de LVM. Ces extensions permettent à un cluster de machine de gérer un stockage partagé (par exemple un SAN) tout en utilisant LVM.

Le daemon clmvd est l’outil qui permet le fonctionnement de LVM en cluster. Le deamon clvmd tourne sur chaque machine constituant le cluster et distribue les mises à jours des metadatas LVM au sein du cluster , présentant chaque machine fesant parti du cluster avec la même vue du volume logique.

3.png

Figure 3, Vue d’une architecture CLVM dans un Cluster Red Hat.

Les volumes logiques créer avec CLVM sur un stockage partagé sont visibles à toutes les machines qui ont accès à ce stockage partagé.

CLVM permet a un utilisateur de configurer des volumes logiques sur un stockage partagé en verrouillant l’accès au stockage physique pendant que le volume logique est en train d’être configuré.

Volumes Logiques LVM

Dans LVM, un volume group est divisé en volumes logiques. Il a trois type de volumes : volume linéaire, volume strippé, et volume mirroré.

Volumes Linéaires

Un volume linéaire agrège plusieurs volume physique en un seul volume logique. Par exemple, si Vous avez deux disque de 60 GB, vous pouvez créer un disque logique de 120 GB. Les volumes physiques sont donc concaténés.

4.png

Figure 4: Exemple d’un volume linéaire

Volumes Strippé

Quand vous écrivez des données sur un volume logique, le système réparti les donnés dans l’ensemble des disques physiques. On peut contrôler l’écriture sur les volumes physiques en créant un volume logique strippé. Pour les E/S importantes, cela peut améliorer les performances. Le stripping augmente les performances en écrivant les données dans un nombre prédéterminé de disques physiques en mode série. Avec le stripping, les E/S peuvent être fait en parallèles. Dans certaines situations, cela peut entraîner une performance linéaire pour chaque disque physique installé.

5.png

Figure 5: cas d’un volume strippé

Il est possible de spécifier sur quel partie du disque vous voulez utiliser. En effet si c’est un accès fréquent que l’on cible, alors on choisira le début du disque. En revanche, pour un accès moins fréquent comme des sauvegardes, alors la fin du disque semble être toute désignée pour accueillir ce genre de données.

Volume Mirroré

Un miroir maintient un copie identiques des données contenu sur différent périphériques. Quand une donnée est écrite sur un des périphériques, elle est automatiquement écrite sur le deuxième. Cela protège des pannes matérielles. Quand une des deux parties du mirroir cède, le volume devient alors linéaire, et reste accessible.

LVM supporte les volumes mirroré. Quand vous créez un volume mirroré, LVM s’assure que les données écrites sur un des volume physique soit bien répliqué sur un volume physique distinct. Avec LVM, on peut créer un volume logique avec plusieurs miroirs.

Un miroir LVM divise les données copier en régions qui généralement de taille 512KB. LVM maintient un petit log qui trace quel région est synchroniser avec quel miroir(s). Celui-ci peut être garder sur le disque et sera donc persistent aux redémarrage, ou bien il pourra être garder dans la RAM.

6.png

Figure 6: cas d’un volume mirroré avec log sur disque.

Snapshot des volumes

Les capacités des snapshots permettent la création d’images virtuelles d’un disque à un moment précis sans avoir à faire un interruption de service.

Quand un changement est fait sur le disque d’origine après qu’un snapshot soit pris, la fonctionnalité de celui-ci fait une copie de la nouvelle zone de données telle qu’elle était avant le changement de manière à pouvoir reconstituer l’état du périphérique.

Les snapshots LVM ne fonctionne pas à travers les cluster de LVM.

Parce que les snapshots copie seulement les zones de données qui on été changé après que le snapshot est été pris, la fonctionnalité requière un minimum d’espace disque. Par exemple, avec de rare mise à jour, 3 à 5% de la capacité d’origine est suffisante pour maintenir le snapshot.

Les copies des snapshots sont des copies virtuelles, et pas un système de backup pour le système. Les snapshots ne remplacement pas une procédure de backup.

Si un snapshot est saturé en terme de capacité, le snapshot est lâché. Cela pour être sur d’avoir assez d’espace pour le système de fichier. Il faut régulièrement surveiller la teille du snapshot. Les snapshots sont redimensionables, donc si vous avez la capacité de stockage, vous pouvez agrandir la taille du snapshot afin de prévenir la saturation de ceux-ci. A l’inverse si vos trouvez que la taille alloué au snapshot est trop importante, vous pouvez réduire la taille du volume afin de libérer de la place pour les autres volumes logiques.

Quand vous créez un volume de snapshot, le plein accès en lecture et en écriture à l’original reste possible. Si un morceau du snapshot est changé, celui-ci est marqué et ne sera jamais copié depuis le volume original.

Il y a plusieurs utilisation de la fonctionnalité de snapshot:

  • Fréquemment, un snapshot est pris quand vous avez besoin d’un backup d’un volume logique sans arrêter le système.

  • On peut exécuter la commande fdsk sur un snapshot pour vérifier l’intégrité et déterminer si le volume original a besoin d’une réparation.

  • Parce que les snapshots lise/écrive, vous pouvez tester des applications en production en prenant un snapshot et en recommençant les test, tout en laissant les vrais données intactes.

  • Vous pouvez utiliser la fonction de snapshot avec Xen afin de modifier une machine virtuelle, et de la restaurer en cas de besoin.

Pratique

Création d’une infrastructure LVM au sein d’un cluster

La création de ce type de volume dans un environnement de cluster est identique à la création d’un volume unique. Il n’y a pas de différences dans les commandes LVM, ou de l’interface d’administration disponible dans les distributions de Red Hat.

Pour la mise en place d’une infrastructure LVM en cluster, l’infrastructure du cluster doit être fonctionnel.

Installation d’une Debian GNU/Linux sur du raid1 soft avec md + lvm

Installation d’une Debian GNU/Linux sur du raid1 soft avec md + lvm

  • mdadm
  • lvm (pvcreate, vgcreate, lvcreate)

Installation d’une debian avec raid1 software et lvm

Installation d’une distribution debian sur le premier des deux disques

Tout d’abord installer de manière traditionnelle la distribution Debian GNU/Linux sur l’un des deux disques.

Préparation du deuxième disque en mode md + lvm

Création d’une partition root (hdc1)

256Mo me parait une valeur amplement suffisante :

debian:/boot# fdisk /dev/hdc The number of cylinders for this disk is set to 79656. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-79656, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-79656, default 79656): +128M Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. debian:/boot#

Création de la partition qui intégrera notre groupe raid (hdc2)

Attention s’assurer que vous pourrez créer une partition sur notre disque 1 faisant exactement la même taille. Ensuite créer cette partition de manière traditionnel avec fdisk par exemple.

debian:/boot# fdisk /dev/hdc

The number of cylinders for this disk is set to 79656.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/hdc: 41.1 GB, 41110142976 bytes
16 heads, 63 sectors/track, 79656 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

Device Boot Start End Blocks Id System
/dev/hdc1 1 249 125464+ 83 Linux

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (250-79656, default 250):
Using default value 250
Last cylinder or +size or +sizeM or +sizeK (250-79656, default 79656):
Using default value 79656

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
debian:/boot#

Mise en place du groupe raid à l’aide de mdadm

Nous allons commencer par créer un group raid dégradé avec seulement un disque.

debian:/boot# mdadm –create /dev/md1 –level 1 –raid-devices=2 /dev/hdc2 missing mdadm: array /dev/md1 started. debian:/boot# cat /proc/mdstat Personalities : [raid1] md1 : active raid1 hdc2[0] 40021056 blocks [2/1] [U_] md0 : active raid1 hda1[0] hdf1[1] 156288256 blocks [2/2] [UU] unused devices: <none> debian:/boot#

Mise en place des volumes logiques sur notre disque md1

-> Installer lvm

debian:~# apt-get install lvm2

-> Créer le volume physique LVM

debian:~# pvcreate /dev/md1 Physical volume « /dev/md1″ successfully created

-> Créer le volume groupe LVM vg01 et y affecter le disque /dev/md1

debian:~# vgcreate -A n vg01 /dev/md1 Volume group « vg01″ successfully created

-> Créer les volumes logiques LVM

debian:/boot# lvcreate -A n -L 200M -n backup vg01 Logical volume « backup » created debian:/boot# lvcreate -A n -L 5G -n usr vg01 Logical volume « usr » created debian:/boot# lvcreate -A n -L 3G -n var vg01 Logical volume « var » created debian:/boot# lvcreate -A n -L 10G -n home vg01 Logical volume « home » created debian:/boot# lvcreate -A n -L 19G -n goinfre vg01 Logical volume « goinfre » created debian:/boot#

-> Informations à propos de vg01 et des volumes logiques

debian:~# vgdisplay -v vg00

Copie des données depuis hde vers les différents volumes logiques

Rebooter avec une knoppix ou autre live cd

# mkfs.ext3 /dev/md1 # mount /dev/md1 /mnt/new_root # cd /mnt/new_root # tar -C / -clspf – . | tar -xlspvf -

Faire la même chose pour :

  • usr (/dev/vg01/usr)
  • var (/dev/vg01/var)

Création du disque hde2 et insertion dans le groupe raid

-> Création de la partition qui doit être exactement de la même dimension que la première

debian:/mnt# sfdisk -d /dev/hdc | sfdisk /dev/hde debian:/mnt#

-> Ajout de la nouvelle partition à l’intérieur du group raid

debian:/mnt# mdadm -a /dev/md1 /dev/hde2 mdadm: hot added /dev/hde2 debian:/mnt#

-> La phase de reconstruction démarre

debian:/mnt# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 hdf1[2] hda1[0] 156288256 blocks [2/1] [U_] [>....................] recovery = 0.4% (759040/156288256) finish=44.3min speed=58387K/sec unused devices: <none> debian:/mnt#

-> La phase de reconstruction se termine

debian:/mnt# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 hdf1[1] hda1[0] 156288256 blocks [2/2] [UU] unused devices: <none> debian:/mnt#

mdadm.conf

Ce fichier permet de définir les différents groupes raid à activer.

Ci-dessous les différents scripts qui permettent d’activer les daemons mdadm et activer le raid :

  • /etc/init.d/mdadm : start the RAID monitor daemon
  • /etc/init.d/mdadm-raid : start any arrays from mdadm.conf

debian:~# cat /etc/mdadm/mdadm.conf DEVICE /dev/hda1 /dev/hdf1 ARRAY /dev/md0 devices=/dev/hda1,/dev/hdf1 debian:~#

debian:~# mdadm –detail –scan >> /etc/mdadm/mdadm.conf
debian:~#
debian:~# cat /etc/mdadm/mdadm.conf
DEVICE /dev/hda1 /dev/hdc1
ARRAY /dev/md0 devices=/dev/hda1,/dev/hdc1
DEVICE /dev/hde* /dev/hdf*
ARRAY /dev/md1 devices=/dev/hde1,/dev/hdf1
ARRAY /dev/md2 devices=/dev/hde2,/dev/hdf2
ARRAY /dev/md3 devices=/dev/hde3,/dev/hdf3
ARRAY /dev/md4 devices=/dev/hde4,/dev/hdf4
debian:~#

Vous pouvez aussi déclarer vos disques avec le nom DEVICE et taper cette commande

Sources :

LVM Administrator’s Guide – RED HAT

LVM ou comment changer d’idée sur le stockage de données sous Linux – Lionel Tricon

Annexes

Commandes Admins

lvmdiskscan Cette commande donne un aperçu de tous les périphériques utilisables parLVM sur votre machine : liste les disques durs IDE et SCSI, les partitionsen Raid logiciel, les devices en loopback (loop device) et les devices bloc réseau (network block device)

pvscan Lecture et affichage de tous les volumes physiques disponibles sur le système : utile pour localiser l’espace non utilisé

vgscan Lecture et affichage de tous les volumes groupes présents sur le système

lvscan Lecture et affichage de tous les volumes logiques présents sur le système

pvcreate Initialisation d’une partition (ou périphérique compatible) pour pouvoir l’utiliser en volume physique : mise en place d’un descripteur de volumegroupe en début de partition

Les partitions doivent être de type 0×8e, à changer avec l’utilitaire « fdisk »

vgcreate Création d’un volume groupe à partir de 1 ou plusieurs volumes physiques. Le VG sera accessible sous /dev/[VG] et peut être créé dans un mode linéaire (par défaut) ou un mode striping . Le volume est automatique activé

lvcreate Création d’un volume logique dans un volume groupe. Le LV sera

accessible sous /dev/[VG]/[LV]

vgextend Ajout d’un volume physique dans un volume groupe

vgreduce Suppression d’un volume physique dans un volume groupe

lvextend Extension de la taille d’un volume logique

lvreduce Réduction de la taille d’un volume logique

pvdisplay Affiche des informations liées à un volume physique

vgdisplay Affiche des informations liées à un volume groupe

lvdisplay Affiche des informations liées à un volume logique

lvremove Supprime un volume logique

lvrename Renomme un volume logique

vgremove Supprime un volume groupe : vous devez vérifier qu’il n’y a pas de volume logique présent dans ce VG avant de le supprimer (le VG doit aussi être désactivé)

pvmove Déplace les données d’un volume physique dans un autre volume physique

appartenant au même volume groupe. Est souvent utilisé pour pouvoir enlever un disque du gestionnaire de volume sans arrêt de service

vgchange Active ou désactive un volume groupe
Filed under Linux, Planet-Libre, system having 2 Comments »

Archives Posts

CentOs et SElinux

mars 16th, 2008 by Corbier

Selon Wikipedia,

Security-Enhanced Linux, abrégé SELinux, est un LSM (Linux security module), qui permet de définir une politique d’accès MAC (mandatory access control) aux éléments d’un système basé sur Linux. Initié par la NSA sur la base de travaux menés avec SCC et l’université d’Utah aux USA (prototypes DTMach, DTOS, projet FLASK), son architecture dissocie l’application de la politique d’accès et sa définition. Il permet notamment de classer les applications d’un système, en différents groupes, avec des niveaux d’accès plus fins. Il permet aussi d’attribuer un niveau de confidentialité pour l’accès à des objets systèmes, comme des descripteurs de fichier, selon un modèle de sécurité multi-niveaux MLS (Multi level Security). SELinux utilise le modèle Bell LaPadula avec Type enforcement de SCC pour l’intégrité. Il s’agit d’un logiciel libre, certaines parties étant sous licences GNU GPL ou BSD.

Sous un système Linux classique le contrôle d’accès est dit de type DAC Discretionary Access Control Ce type de controle d’accès vérifie simplement le propriétaire, le groupe, et les autres (les autres désignent tout ce qui ne fait pas partie du propriétaire et du groupe) en se basant sur le GID et l’UID.

Cependant, les limites de ce système de permission est facile à définir. Imaginons que nous avons un compte sur une système type Linux. Un compte utilisateur avec tout les permissions qui l’en découle. Lorsque ce compte user exécute un processus, le processus hérite des droits du compte user mais aussi de tous ses privilèges.

Transposons ce modèle dans un autre contexte. Je travaille avec un collègue sur un projet professionnelle, et il hérite donc de mes privilèges et droit dans l’environnement professionnel mais il hérite également du droit de rentrer chez moi, dormir dans mon lit etc … Inacceptable non ?

Il est donc impensable de donnez tout les droits en se basant uniquement sur l’UID et le GID. Il faut intégrer une notion fondamentale dans la gestion de sa sécurité : le contexte.

Voici un exemple de droit classique linux.

[root@CentOs www]# ls -l
total 48
drwxr-xr-x 2 root root 4096 jan 16 02:36 cgi-bin
drwxr-xr-x 3 root root 4096 mar 12 22:38 error
drwxr-xr-x 3 root root 4096 mar 16 12:19 html
drwxr-xr-x 3 root root 4096 mar 12 22:38 icons
drwxr-xr-x 14 root root 4096 mar 12 22:42 manual
drwxr-xr-x 2 webalizer root 4096 mar 14 04:02 usage

Et voici les droits SELinux

drwxr-xr-x root root system_u:object_r:httpd_sys_script_exec_t cgi-bin
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t error
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t html
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t icons
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t manual
drwxr-xr-x webalizer root system_u:object_r:httpd_sys_content_t usage

Ce qui m’intéresse c’est httpd_sys_content_t. C’est a dire que le répertoire html est accessible par l’utilisateur apache uniquement lors du contexte d’utilisation du deamon httpd.

Un utilisateur usurpant ou détournant l’identité d’apache n’aura pas accès au répertoire html car il sortira du contexte d’utilisation du deamon httpd. Fabuleux non ?

Pour le reste, je vous laisse avec l’utilisation de la commande chcon pour modifier les contextes et les permissions de SELinux.

Donc.

man chcon

Archives Posts

VMWARE Server 2 Béta

janvier 8th, 2008 by Corbier

La version vmware server 2 est disponible en béta depuis quelques temps.

Au menu, une nouvelle gestion des machines virtuelles et surtout une interface web digne de ce nom. On peut noter, un très gros effort sur cette version qui est très abouti.

Comme d’habitude, l’installation sous linux se passe sans encombre (sous Ubuntu Gutsy), d’ailleurs le module pour le noyau 2.6.22-14 est déjà précompiler.

Voici les ports ouverts par défaut.

tcp 0 0 0.0.0.0:902 0.0.0.0:* LISTEN 9025/vmware-authdla
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9106/vmware-hostd
tcp 0 0 0.0.0.0:8085 0.0.0.0:* LISTEN 9106/vmware-hostd
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 9106/vmware-hostd

Il y a certainement une sécurisation à faire.

Le port 80 permet d’accéder au WebAccess en http.

Le port 443 permet d’accéder au WebAccess en https

Le port 902 permet d’accéder au vmware server via le client lourd vmware

Le port 8085 reste un mystère

Globalement l’interface web est agréable a utilisé, mais cependant, j’ai noté que mon Core 2 Duo n’est pas reconnu correctement.

Filed under Linux, system having No Comments »

« Previous Entries