Articles

Affichage des articles du juillet, 2004

Un reverse proxy pour que ton web soit plus sur !

Avec un reverse proxy ton serveur web peut répondre plus vite en cachant les réponses, en plus il peut rediriger sur un ou plusieurs serveurs différents des requêtes web. Typiquement on peut utiliser Apache avec le mod_proxy Mais il faut aussi des projets tels que pound Ou encore mod_security Il y à même squid qui a été utilisé comme reverse proxy

Apache Virtual host

On désire parfois créer sur le même serveur web plusieurs sites différents. En utilisant dns on modifie notre config comme suit : cat /etc/bind/db.labo.org $TTL 1H @ IN SOA ns1.labo.org. root.labo.org. ( 2004071801 ; Serial 1H ; Refresh 1H ; Retry 1H ; Expire 1D ) ; Negative Cache TTL ; @ IN NS ns1.labo.org. @ IN NS ns2.labo.org. @ IN MX 10 ns1.labo.org. ns1 IN A 10.0.0.4 box3 IN A 10.0.0.3 fw1 IN A 10.0.0.1 ns2 IN A 10.0.0.2 box4 IN A 10.0.0.19 fw2 IN CNAME ns2 red IN CNAME box3 blue IN CNAME box4 ceci va nous permettre d'avoir des alias qui pointent sur notre serveur, maintenant il faut pouvoir les détecter dan

messagerie traitement avec procmail

Avec procmail on peut faire des traitements automatiques, ainis en ajoutant dans le home directory un fichier .forward qui va juste "pointer" sur procmail cat /home/cgil/.forward "|IFS=' '&&exec /usr/bin/procmail -f-||exit 75 cgil" et en créant ensuite un fichier .procmailrc qui peut lui, comme ici archiver des mail et faire une réponse automatique cat /home/cgil/.procmailrc :0c: $HOME/mail.backup :0 * !^X-Loop: cgil@labo.org | (formail -rk -A "X-Loop: cgil@labo.org" -A "Precedence: auto"; echo "Hello Thank you for your mail"; echo "I will answer as soon as possible"; ) | $SENDMAIL -t -oi

La Messagerie, POP3 sous Linux

Tout comme pour SMTP il y a une quantité impressionante de variantes de serveurs POP3 et IMAP a disposition pour Linux. Il faut prendre garde au fait que POP3 transmet le user et le mot de passe en clair (dsnif et ngrep sont de redoutables ennemis à ce niveau...) Citons les serveurs et outils tel que cyrus, teapot, fetchmail etc.. Le sujet de la messagerie sous Linux est manifestement un vaste sujet.

La messagerie SMTP sous Linux

Il existe plusieurs variantes de programmes de messagerie, du plus ancien et plus compliqué comme sendmail au plus "simple" comme exim en passant par postfix et qmail. Avec mutt on a un cllient en mode console pour les messages. En fait il faut installer et configurer un de ces programmes dans mon cas j'utilise postfix sous debian. Il faut que dns soit configuré et opérationnel ! Il faut typiquement ajouter l'entrée MX : cat /etc/bind/db.labo.org $TTL 1H @ IN SOA ns1.labo.org. root.labo.org. ( 2004071504 ; Serial 1H ; Refresh 1H ; Retry 1H ; Expire 1D ) ; Negative Cache TTL ; @ IN NS ns1.labo.org. @ IN NS ns2.labo.org. @ IN MX 10 ns1.labo.org. ns1 IN A 10.0.0.4 box3 IN A 10.0.0.3 fw

DHCP une adresse IP automatique

Pour que les machines de notre petit réseau obtiennent une adr ip automatiquement on va utiliser du dhcp donc on installe dhcpd3 serveur et on configure dans le fichier /etc/dhcp3/dhcpd.conf # # Sample configuration file for ISC dhcpd for Debian # # $Id: dhcpd.conf,v 1.1.1.1 2002/05/21 00:07:44 peloy Exp $ # # option definitions common to all supported networks... option domain-name "labo.org"; option domain-name-servers ns1.labo.org, ns2.labo.org; default-lease-time 600; max-lease-time 7200; # If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. #authoritative; # Use this to send dhcp log messages to a different log file (you also # have to hack syslog.conf to complete the redirection). log-facility local7; # No service will be given on this subnet, but declaring it helps the # DHCP server to understand the network topology. # This is a very basic subnet declaration. subnet

DNS - exemples de fichiers de config réseau local

l'idée c'est qu'on veut configurer un chtit caching name server sur un réseau local. Donc on commence par installer bind9,puis en avant la configuration Dans le fichier named.conf include "/etc/bind/named.conf.options"; // prime the server with knowledge of the root servers zone "." { type hint; file "/etc/bind/db.root"; }; // be authoritative for the localhost forward and reverse zones, and for // broadcast zones as per RFC 1912 zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; zone "com" { type delegation-only; }; zone "net" { type

Des animations flash sous Linux

Yeahhh ! Flash 7 est disponible sous Linux Pour l'installer il faut essentiellement copier les 2 fichiers contenus dans l'archive de Macromedia dans le répertoires des plugins de votre navigateur: tar xfvz install_flash_player_7_linux.tar.gz cd install_flash_player_7_linux/ cp flashplayer.xpt /usr/lib/mozilla-firefox/plugins/ cp libflashplayer.so /usr/lib/mozilla-firefox/plugins/ Pour connaitre le répertoire des plugins j'ai fait au préalable : dpkg -L mozilla-firefox |grep plugins Finalement pour tester si tout est okay il faut absolument passer sur le site de yeti pour tester online vos aptitudes au lancement de tux

IPTABLES - modifs d'un script firewall de base pour distcc

si on veut utiliser la puissance de calcul d'un firewall pour compiler avec distcc on peut modifier comme suit notre petit script : #!/bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward DMZ=10.0.0.0/24 IPT='/sbin/iptables' $IPT -F $IPT -F -t nat $IPT -P INPUT DROP $IPT -P FORWARD DROP # accept localhost internal trafic $IPT -A INPUT -i lo -s localhost -j ACCEPT #$IPT -P INPUT ACCEPT #$IPT -P FORWARD ACCEPT # accept ssh from dmz $IPT -A INPUT -s $DMZ -i eth1 -p tcp --dport 22 -j ACCEPT $IPT -A FORWARD -s $DMZ -i eth1 -p udp --dport 53 -j ACCEPT $IPT -A FORWARD -d $DMZ -i eth0 -p udp --sport 53 -j ACCEPT $IPT -A FORWARD -s $DMZ -i eth1 -p tcp --dport 80 -j ACCEPT $IPT -A FORWARD -d $DMZ -i eth0 -p tcp --sport 80 -j ACCEPT $IPT -A FORWARD -s $DMZ -i eth1 -p tcp --dport 9999 -j ACCEPT $IPT -A FORWARD -d $DMZ -i eth0 -p tcp --sport 9999 -j ACCEPT #allow all trafic for our network to go the internet $IPT -t nat -A POSTROUTING -s $DMZ -j MAS

Compilation en parallèle avec distcc

Grâce à distcc on peut méchamment augmenter la vitesse de compilation en utilisant des serveurs faisant le travail de compilation pour nous. On a des infos de configs sur debian sur le site de myrddin . il faut bien sur installer distcc apt-get install distcc apt-get install distccmon-gnome Il faut veiller à installer la même version du gcc sur toutes les bécannes. On peut sur le client utiliser des subterfuges pour forcer l'usage de distcc avec un path bidouillé mkdir -p /usr/local/distcc/bin cd /usr/local/distcc/bin ln -s /usr/bin/distcc c++ ln -s /usr/bin/distcc cc ln -s /usr/bin/distcc g++ ln -s /usr/bin/distcc gcc et quelques variables d'environnment modifiée dans un .bashrc CONCURRENCY_LEVEL=40 DISTCC_HOSTS="localhost tokra sokar alkesh osiris" PATH="/usr/local/distcc/bin:${PATH}" export CONCURRENCY_LEVEL DISTCC_HOSTS PATH

IPTABLES - un exemple de script firewall de base

ce bout de script iptables, permet de faire un SNAT, et laisse sortir du trafic http (port 80) et dns (53) en sortie vers internet et en entrée Les deux dernières règles permettent de voir ce qui ne va pas en allant voir le syslog avec tail -f /var/log/syslog #!/bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward DMZ=10.0.0.0/24 IPT='/sbin/iptables' $IPT -F $IPT -F -t nat $IPT -P INPUT DROP $IPT -P FORWARD DROP # accept localhost internal trafic $IPT -A INPUT -i lo -s localhost -j ACCEPT #$IPT -P INPUT ACCEPT #$IPT -P FORWARD ACCEPT # accept ssh from dmz $IPT -A INPUT -s $DMZ -i eth1 -p tcp --dport 22 -j ACCEPT $IPT -A FORWARD -s $DMZ -i eth1 -p udp --dport 53 -j ACCEPT $IPT -A FORWARD -d $DMZ -i eth0 -p udp --sport 53 -j ACCEPT $IPT -A FORWARD -s $DMZ -i eth1 -p tcp --dport 80 -j ACCEPT $IPT -A FORWARD -d $DMZ -i eth0 -p tcp --sport 80 -j ACCEPT #allow all trafic for our network to go the internet $IPT -t nat -A POSTROUTING -s $DMZ

IPTABLES - On veut laisser sortir les adresses internes sur internet

Deux cas de figures, soit on connait notre adr ip publique de façon sure et définitive, par exemple si on a un réseau de type classe C interne 10.0.0.0/24 et qu'on veut sur la machine qui a deux pates balancer (INTERNAL NETWORK) ----->[FIREWALL LINUX BOX]------->(THE INTERNET) ___10.0.0.2/24________[10.0.0.1______192.168.7.101]____All Internet IP iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to 192.168.7.101 sinon on peut aussi utiliser du masquerading iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE

Créer un lien VPN avec PPP sur SSH

En utilisant du ppp à travers du ssh on arrive a relier deux réseaux ! En fait il faut au préalable autoriser le login automatique avec ssh donc si on a une box1 avec un acces root via ssh sur un box2 ailleurs qui est lui même sur un réseau 10.qqqchose on aura Box1_______________________==SSH==>__________________Box2(192.168.7.101) PPP SERVER____________________________________________PPP CLIENT 10.0.0.1 ____________________________________________ 10.0.0.2 root du box1 doit pouvoir ssh sur box2 sans rentrer mot de passe il faut modifier /etc/ppp/pap-secrets sur serveur #user host password IP toto * "pw123" * et sur client #user host password toto * pw123 ensuite on peut ajouter toto dans le fichier /etc/ppp/options ... name toto ... depuis box1 en tant que root on fait un ssh-keygen -t dsa pour générer la clé privées et publique de root sur box1. On copie cette clé sur la machine destination box2 scp /root/.ssh/id_dsa.pub 192.168.7.

Comment créer un rescue floppy disk

Premièrement compiler un noyau minimaliste avec support ramdisk Petite astuce : on peut modifier le makefile et utiliser un Os au lieu du O2 ceci va indiquer à gcc de compiler en optimisant sur une taille minimale Créer un Filesystem on va créer un répertoire rootfs puis on aller dedans: mkdir rootfs cd rootfs mkdir dev mkdir proc mkdir etc mkdir sbin mkdir bin mkdir lib mkdir mnt mkdir usr cp -dpR /dev/fd[01]* dev cp -dpR /dev/tty[0-6] dev cp -dpR /dev/console dev cp -dpR /dev/kmem dev cp -dpR /dev/mem dev cp -dpR /dev/null dev cp -dpR /dev/ram0 dev ls -RAl rootfs/ drwxr-xr-x 2 root root 4096 Jul 9 15:15 bin drwxr-xr-x 2 root root 4096 Jul 9 12:05 dev drwxr-xr-x 2 root root 4096 Jul 9 15:12 etc drwxr-xr-x 2 root root 4096 Jul 9 10:58 lib drwxr-xr-x 2 root root 4096 Jul 9 10:58 mnt drwxr-xr-x 2 root root 4096 Jul 9 10:58 proc drwxr-xr-x 2 root root

Un peu de graphismes avec Perl::Tk !

Avec perl on peut afficher des fenêtres avec le module Tk. En fait dans le Linux Magazine de Mai 2004 il y a un chouette article "Using Perl/Tk for Simple Graphing" avec un exemple de code perl qui permet de récupérer via un pipe le Uptime d'un serveur distant (avec ssh) et de l'afficher dans une jolie fenêtre tk, on peut récupérer le code perl #!/usr/bin/perl -w $ProgramToTrack = $ARGV[0] || "bash"; print "Perl process tracker\n"; print "About to track : $ProgramToTrack\n"; $val = `pidof $ProgramToTrack`; chomp($val); #print 'DEBUG - $val =' . . "\n"; @ListOfPid = split(/ /,$val); print "Found those entries :\n"; foreach $ThePid (@ListOfPid){ $TheStats=""; open(PSTAT,"/proc/$ThePid/stat"); while ( ) { $TheStats .= $_ } chomp($TheStats); print "$ThePid : $TheStats\n"; close(PSTAT); };

Que sauvegarder et comment sur Linux

Et bien oui, la question est de savoir quoi sauver sur un linux en plus des données, si on désire récupérer une machine rapidos : 1. Sauver vos données (base de données, log etc...) 2. Sauver les applications critiques (code source, binaire, config appli) 3. Le répertoire /etc 4. La liste des paquetages installés dpkg --get-selections>ListePaquetage.txt Ensuite on peut remonter une bécanne avec dpkg --set-selections <ListePaquetage.txt 5. Evt le contenu du répertoire /home 6. Evt /usr/src/Linux*/.config pour récupérer les configs 7. Documenter TOUT les infos de configs partitions, iptables rules etc... 8. Et double triple vérifer ce qu'on oublie A la limite il faut essayer de tester la remontée d'une bécanne avec les éléments On peut backuper avec tar, rsync, unison Le tout c'est d'avoir du bon sens et d'essayer d'être exhaustif

Un paquetage façon Linux

mkdir test-0.1 cd test-0.1 vim test.c #include #include "test.h" int main() { printf("Test\n"); return 0; } vim test.h #define TEST vim configure.ac AM_INIT_AUTOMAKE(TEST,1.0) vim Makefile.am bin_PROGRAMS=test test_SOURCES=test.c aclocal autoscan la il faut utiliser le contenu du configure.scan généré en lieu et place de notre configure.ac mv configure.ac bidon mv configure.scan configure.ac cat bidon >> configure.ac vim configure.ac pour remettre tout au bon endroit # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) AC_CONFIG_SRCDIR([test.c]) AC_CONFIG_HEADER([config.h]) AM_INIT_AUTOMAKE(TEST,1.0) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, an

Du RAID Logiciel avec Linux

On va s'entrainer au Raid logiciel sans avoir plusieurs disques... On crée tout d'abord trois fichiers sur un disque (ou idéalement sur trois disques) Il faut compiler le noyau avec le support pour le RAID dd if=/dev/zero of=MyDisk0 bs=1024 count=20000 dd if=/dev/zero of=MyDisk1 bs=1024 count=20000 dd if=/dev/zero of=MyDiskSpare bs=1024 count=20000 Puis on en fait les associe à des loop devices losetup /dev/loop0 MyDisk0 losetup /dev/loop1 MyDisk1 losetup /dev/loop2 MyDiskSpare On peut vérifier que c'est okay avec un "echo hello > /dev/loop0" suivit d'un cat /dev/loop0 Ensuite il faut installer les raidtools2 et créer un fichier /etc/raidtab dans lequel on précise ce que l'on veut faire au niveau du Raid, par exemple un petit Raid1 avec un disque de spare... box3:/home/cgil/test# cat /etc/raidtab raiddev /dev/md0 raid-level 1 nr-raid-disks 2 nr-spare-disks 1 chunk-size 4 persistent-superblock 1 device /dev/

Un système de fichier dans un fichier...

On veut parfois créer un fichier qui contiendrait tout un système de fichiers. on peut donc commencer par créer un fichier d'environ 5 mb remplit avec des zéros : dd if=/dev/zero of=myfile bs=1024 count=5000 Puis après un "su" on peut en tant que root mke2fs -j myfile e2fsck myfile Ensuite on peut "mounter" le disque dans un répertoire mkdir /mnt/MonDiskAMoi mount -o loop myfile /mnt/MonDiskAMoi Et on peut aller dedans écrire et tout et tout On peut même monter ce truc automatiquement avec fstab autofs ne fonctionne a priori pas ici, mais ça c'est une autre histoire... Et en plus il faut pour autofs que le noyau soit compiler avec CONFIG_AUTOFS4_FS=y

Des Licences à la pelle !

Il devient cauchemardesque de s'y retrouver dans le monde des licences aussi voici quelques sites bien utiles Un site pour la génération des licences en dynamique http://creativecommons.org

Linux dans Linux dans Linux... (UserMode Linux)

Hiiijaaaa ! Aujourd'hui on va s'amuser un peu avec un linux qui tourne dans un linux qui tourne dans ... Bien souvent, on peut se retrouver dans ls situation ou on aimerait expérimenter quelquechose sur un box Linux sans pénaliser les autres aplications (quelquechose d'un peu plus fort qu'un simple ulimit), simuler un réseau etc... Et en fait pour faire cela on va utiliser le User Mode Linux Voila encore un super projet qui va nous permettre de lancer un linux pour y faire des "expériences" dignes de Billkenstein... On recopie /usr/src/linux-2.4.26 dans notre home directory, on va dedans et on fait un peu le ménage avev un make mrproprer on récupére le patch uml pour la 2.4.26 uml-patch-2.4.26-1.bz2 Bon maintenant il faut patcher le source dans /home/cgil/linux-2.4.26 avec un chtit : bzip2 -dc uml-patch-3.4.26-1.bz2 | patch -p1 make xconfig ARCH=um Bon il y a des infos bien plus détaillées sur le site UML alors je vais pas m'étendre la-de

PatchWork de noyau

Diantre, j'ai configuré et compilé un noyau, et j'arrive a rebooter . C'est plus magique que "Charmed" ! bon ben maintenant s'agit de patcher le noyau 2.4.25 en 2.4.26 il faut downloader le patch et le copier dans /usr/src/linux-2.4.25 bzip2 -dc patch-2.4.26.bz2 |patch -p1

Y viva la compilation del noyau !

Et voilà, c'est parti pour une semaine de cours Linux LPI201 ! On commence avec une install d'une debian . Intéressant, je n'avais jamais trop pratiqué cette distribution. Il n'y a rien de bien spécial à dire sur l'installation, si ce n'est que le minimal est vraiment minimal... Pour les paquetages debian on utilise essentiellement : apt-cache search nomdepaquetage pour avoir une liste des paquetages dispo apt-get install nomdepaquetage pour installer le paquetage de vos rêves ! Notez que pour éxecuter "apt-get" il faut être root (un chtit su) On s'attaque à une compilation de noyau, on récupère le source d'une 2.4.25 on copie le tout dans /usr/src on installe 2-3 trucs manquants tel que les librairies ncurses et bzip2: apt-get install libncurses5-dev apt-get install bzip2 et c'est parti pour un tar jxvf linux-2.4.25.tar.bz2 Ceci va désarchiver les sources de votre noyau dans le répertoire /usr/src/linux-2.4.25 Okay et

Quels RPMs surmon bô serveur

Et voici un petits shells scripts tout con, que j'ai écrit parceque je voulais savoir rapidement ce qui se trouvait sur mon serveur, il permet de savoir les RPM qui sont déjà installés, mais surtout de lire leurs description sans devoir se casser la tête. On peut sauver le fichier sous un nom évoquateur tel que listerpm.sh et ensuite on peut l'appeller soit tel quel sans arguments et alors il donnera l'intégrale des rpm présents sur le serveur, soit on lui passe un argument du style "./listerpm.sh open" et dans ce cas il ne listera que les paquetages rpm contenant dans leurs nom "open" en majuscules ou en minuscules (switch -i du grep)... #!/bin/sh if [ -z "$1" ]; then rpm -qa |sort |perl -ne 'print qx(rpm -qi $_).qq(\n).q(*)x80 . qq(\n);'| more else rpm -qa |grep -i $1 |sort |perl -ne 'print qx(rpm -qi $_).qq(\n).q(*)x80 . qq(\n);'| more fi En éspérant que cela soit utile, et/ou que cela vous inspire pour un autre usage !

Perl "OneLiner"

Perl a ceci de merveilleux qu'il peut être utilisé comme un formidable outil d'expérimentation. Avec un simple switch "-e" on peut partir à l'aventure : perl -e "print qq(Coucou le hibou)" Coucou le hibou Ainsi voici un chtit Search & Replace bien pratique sur le contenu d'un fichier: perl -pe 's/oldstring_re/newstring/gi ' MyFile.txt On verse dans le délire intégral ? Ok alors on a un fichier log d'un serveur web, qqch du style : 2003-02-06 06:34:41 10.18.15.9 SUISSE_VS\assa0018 W3SVC3 10.180.7.40 80 GET /goeland/parc/xml/CityWithParcelle.xml - 304 0 141 602 15 2003-02-06 06:34:41 10.13.21.4 SUISSE_VS\cmrs0062 W3SVC3 10.180.7.40 80 GET /goeland/parc/xsl/CGComboCityWithParcelle.xsl - 304 0 141 368 0 2003-02-06 06:34:43 10.18.15.42 SUISSE_VS\rsta0015 W3SVC3 10.180.7.40 80 POST /goeland/parc/xml/CNGetDataParcelle.asp - 200 0 89 739 922 2003-02-06 06:34:43 10.12.2.49 SUISSE_VS\rsta0015 W3SVC3 10.180.7.40 80 GET /g

Les certifications LPI pour Linux

La semaine prochaine je vais suivre le cours LPI201 à LinuxTraining . Le programme de certification LPI est un programme complet conçu pour affirmer les compétences en administration système sous Linux. Il y a beaucoup de documentation Linux sur Internet, mais il est parfois difficile de savoir par ou commencer. Avec le programme LPI on obtient une sorte de fil rouge qui guide le néophite du plus simple au plus compliqué dans l'art subtil de la gestion et de l'administration sous Linux. Il est intéressant de signaler que D.Robbins le président de Gentoo (cette superbe distribution Linux basée sur du code source) a commencé à écrire une série de cours d'introduction tous intégralements disponibles sur le site developerworks de IBM . C'est en anglais, mais ça vaut sont pesant de chips... Sur Linux France il y a des documents en français. Et puis il y a l'incontournable TLDP The Linux Documentation Project regroupant des manuels des HOWTOs etc... Personnell