Archive pour le ‘Administration’ catégorie

Mise en place d’un portknocking pour limiter les ports accessibles sur le net

13 février 2010

Hello …

Protéger des services non-public (type ssh) d’être accédés par n’importe qui ça peut être assez utile (pour éviter les connexions intempestives pour la prise d’information, tentative de login/bruteforce …), le tout sans avoir à déclarer d’ip, …

On peut utiliser pour cela du portknocking, le but étant de mettre en place une séquence de « toc toc qui est là » qui permettra ensuite d’ouvrir la porte, et si la séquence n’est pas bonne … ^^).
» En lire plus:Mise en place d’un portknocking pour limiter les ports accessibles sur le net

Limiter les droits d’un utilisateur sur Debian/Ubuntu (lshell)

11 février 2010

Plop à tous ….

Lorsque l’on doit partager/administrer une machine, on a souvent peur que les individus fassent de belles boulettes sur la machine en question (surtout si l’accès est partagé entre plusieurs utilisateurs).

Une technique consisterait à faire un chroot via SSH (si ça vous tente ^^ mais c’est super long).

Ou passer par un truc du genre dans /etc/ssh/sshd_config :

  1. Subsystem sftp internal-sftp
  2. Match user nomUser
  3.          ChrootDirectory /home/nomUser
  4.          X11Forwarding no
  5.          AllowTcpForwarding no
  6.          ForceCommand internal-sftp

Qui bloque la plupart des commandes et n’autorise que le sftp …

Pour les admins flemmards, il existe une solution : lshell, on peut choper un .deb sur le site et une fois installé, il n’y a pas grand chose à faire :

Modifier le fichier /etc/lshell.conf (assez facile à comprendre), avec des paramètres du genre :
Pour les commandes autorisées :

  1. allowed         : ['ls','echo','cd','ll','svn','vi','rm']

Pour kiker l’utilisateur après un certain nombre d’erreurs :

  1. warning_counter : 2

dans ce cas, après 2 erreurs, la connection SSH est coupée.

On peut chrooter un utilisateur :

  1. path            : ['/var/www/']

Pour obliger un utilisateur à utiliser ce shell, il y a 2 cas :
On modifie un utilisateur :

  1. usermod –shell /usr/bin/lshell nomUser

On créer un utilisateur

  1. adduser nomUser –shell /usr/bin/lshell nomUser

Et voilà … connectez vous avec un utilisateur « lshellé » (pour ma part chrooté et limité aux commandes « allowed » plus haut) :

  1. You are in a limited shell.
  2. Type '?' or 'help' to get the list of allowed commands
  3. kikoo:~$
  4. kikoo:~$ ls
  5. index.php  license.txt  robots.txt  svnup.php  system
  6. kikoo:~$ cat /etc/ssh/sshd_config
  7. *** forbidden path -> "/etc/ssh/sshd_config"
  8. *** You have 0 joker(s) left, before getting kicked out.
  9. This incident has been reported.
  10. kikoo:~$ svn up
  11. À la révision 12.
  12. kikoo:~$ echo "LOL"
  13. LOL
  14. kikoo:~$ echo "LOL" > /etc/ssh/sshd_config
  15. *** forbidden synthax -> "echo "LOL" > /etc/ssh/sshd_config"
  16. - Kicked out -
  17. Connection to 1.3.3.7 closed.

Voilà … bonne administration ;)

Mise en place d’iSCSI pour le partage de données

4 février 2010

plopinou …

Petit tuto rapide sur la mise en place d’un serveur et d’un client iSCSI sur linux … Alors c’est quoi l’iSCSI ?? c’est un peu comme un partage de disque en réseau du style SMB ou NFS … sauf que c’est plus rapide (c’était téléphoné ;) ). C’est du SCSI encapsulé sur IP pas de surcouche RPC (comme pour NFS).
» En lire plus:Mise en place d’iSCSI pour le partage de données

Monter un cluster avec kerrighed sur son réseau

19 décembre 2009

Plopinou … encore un article de type « retour d’expérience geek »
Temps : 2h (en compilant le tout avec un AMD 3000+)
Niveau : Noob (faut quand même savoir jouer à WoW le temps de la compil’ qui peut prendre 1 heures)

Le but de cette technique était de recycler quelques PC sur mon réseau et gagner en puissance de calcul avec de vieux AMD 3000+ avec 1Go de ram.
» En lire plus:Monter un cluster avec kerrighed sur son réseau

Virtualisation et tunnel : rajouter des PCs sur son réseau

24 novembre 2009

Plopinou à tous …

Petite astuce toute simple, pour créer des tunnels et ainsi permettre à ses PCs virtuel (VMWare/VirtualBox) de communiquer en direct sur son réseau (enfin lorsque l’on a pas assez d’interface physique disponible … tout le monde n’en a pas 100 ^^).

Sous debian/ubuntu il faut faire un sudo apt-get install bridge-utils

Copiez les lignes suivantes dans un script nommé « tunnel.sh » (ou ce que vous voulez) :

#!/bin/bash
  1. #
  2. #Usage : tunnel.sh
  3. #Create 1 bridge + 2 tap
  4. # ./tunnel.sh -d eth0 -n 0 -n 1
  5. #Remove bridge and 2 tap
  6. # ./tunnel.sh -s 0 -s 1 -r eth0
  7. createBridge() {
  8.  brctl addbr br0
  9.  brctl addif br0 $1
  10.  ifconfig $1 promisc
  11.  dhclient br0
  12. }
  13.  
  14. deleteBridge() {
  15.  ifconfig $1 -promisc
  16.  ifconfig br0 down
  17. }
  18.  
  19. createTunnel() {
  20.  openvpn –mktun –dev tap$1
  21.  ifconfig tap$1 up
  22.  brctl addif br0 tap$1
  23. }
  24.  
  25. deleteTunnel()
  26. {
  27.  ifconfig tap$1 down
  28.  brctl delif br0 tap$1
  29.  openvpn –rmtun –dev tap$1
  30. }
  31.  
  32. chmod 0666 /dev/net/tun
  33.  
  34. while getopts d:n:s:r: OPTION
  35. do
  36.  case $OPTION in
  37.   d)createBridge $OPTARG;;
  38.   n)createTunnel $OPTARG;;
  39.   s)deleteTunnel $OPTARG;;
  40.   r)deleteBridge $OPTARG;;
  41.  esac
  42. done

Avant de créer des tunnels, il faut créer un pont sur l’interface principal (eth0), ce qui donne :

sudo sh tunnel.sh -d eth0

Puis on peut créer plusieurs tunnels : tap0, tap1 et tap2 soit la commande suivante :

sudo sh tunnel.sh -n 0 -n 1 -n 2

On peut aussi vers les 2 à la suite (l’ordre est important … d’abord le pont ensuite les tunnels) :

sudo sh tunnel.sh -d eth0 -n 0 -n 1 -n 2

Ensuite, il suffit de choisir dans l’interface de configuration de réseau de Virtualbox/VMWare une connexion par pont/bridge :

tunnel

Pour détruire l’interface tap2 (après utilisation généralement … éteindre la machine virtuelle AVANT) :

sudo sh tunnel.sh -s 2

Pour enlever le bridge :

sudo sh tunnel.sh -r eth0

Et encore une fois … les deux à la fois ^^ (l’ordre est important … on détruit d’abord le tunnel avant d’éteindre le pont : d’où le -s d’abord, puis le -r ) :

sudo sh tunnel.sh -s 2 -r eth0

Et voilà c’est tout pour ce soir …

Utiliser Git pour gérer ses projets (mini mémo)

21 novembre 2009

Petit mémo pour la gestion de projets via GIT, un gestionnaire de version (comme SVN, mais en mieux ;) ).

Pour ma part, depuis que je suis passé à GIT, je ne me vois plus bosser sur un SVN ^^. Les principaux points positifs de l’utilisation de GIT par rapport à l’utilisation de SVN sont (pour moi) :

  • Le fait qu’un dossier peut contenir plusieurs autres projets sous gestionnaire de révision (assez difficile à maintenir en SVN)
  • Le commit local, qui permet de ne pas à avoir à tout envoyer au serveur dès que l’on fait de grosse modifications (et devoir faire un revert sur le serveur si c’est pas bon), et aussi la possibilité donc de dev sans connexion au net en profitant d’un gestionnaire de révision
  • Le système de mise en ligne simplifié des projets (pas d’architecture super lourde à déployer comme pour SVN avec les modules dav/svn).
  • Plein d’autre choses encore à venir ;)

» En lire plus:Utiliser Git pour gérer ses projets (mini mémo)

Automatiser la récupération et la compilation du kernel et de son patch GrSec

31 octobre 2009

Plop à tous…

Petit truc de geek … un script pour automatiser la récupération du dernier kernel stable depuis le site kernel.org puis le dernier patch grsecurity à appliquer sur le kernel en question (qui sort généralement un jour après la release du kernel).
Sur ubuntu, il faut tout d’abord installer le paquet kernel-package :

sudo apt-get install kernel-package

Puis récupérer le script suivant (nommé chez moi recupKernel.pl dans la commande qui suivra) :

  1. #!/usr/bin/perl
  2. require HTTP::Request;
  3. use LWP::UserAgent;
  4.  
  5. my $kernelUrl = recupKernel();
  6. my $kernelVersion = recupKernelVersion($kernelUrl);
  7. my $grsecUrl = recupGrSec($kernelVersion);
  8. my $grsecName = recupGrSecName($grsecUrl);
  9. if($kernelUrl && $grsecUrl)
  10. {
  11.  print "Url du dernier kernel stable : $kernelUrl\n";
  12.  print "Version du kernel : $kernelVersion\n";
  13.  print "Url du dernier patch GrSec stable : $grsecUrl\n";
  14.  print "Nom du Patch : $grsecName\n";
  15.  print "Recuperation du kernel : \n";
  16.  my $rK = `wget $kernelUrl`;
  17.  
  18.  print "Recuperation du patch : \n";
  19.  my $rG = `wget $grsecUrl`;
  20.  print "Extraction des données et compilation\n";
  21.  my $dT = `tar -xjf *.tar.bz2 && patch -p0 > $grsecName`;
  22. }
  23.  
  24. sub recupKernel
  25. {
  26.  my $req = HTTP::Request->new(GET => "http://kernel.org/");
  27.  my $ua = LWP::UserAgent->new;
  28.  $ua->agent("Firefox/4.0");
  29.  my $res = $ua->request($req);
  30.  if ($res->is_success) {
  31.   my $text = $res->content;
  32.   my $recherche = '<table id="brbtable([\n\t\r\W\w]*?)</table>';
  33.   $text =~ m/($recherche)/gm;
  34.   return recupHrefUrl($2);
  35.  }
  36.  return '';
  37. }
  38. sub recupHrefUrl
  39. {
  40.  my $ret=$_[0];
  41.  my $recherche = 'href="([^"]*)';
  42.  $ret =~ m/($recherche)/gm;
  43.  return $2;
  44. }
  45.  
  46. sub recupKernelVersion
  47. {
  48.  my $ret=$_[0];
  49.  my $recherche = 'linux-([0-9]+.[0-9]+.[0-9]+.[0-9]+)';
  50.  $ret =~ m/($recherche)/gm;
  51.  return $2;
  52. }
  53.  
  54. sub recupGrSecName
  55. {
  56.  my $ret=$_[0];
  57.  my $recherche = '/(grsecurity.*.patch)';
  58.  $ret =~ m/($recherche)/gm;
  59.  return $2;
  60. }
  61.  
  62. sub recupGrSec
  63. {
  64.  my $kernelV = $_[0];
  65.  my $req = HTTP::Request->new(GET => "http://www.grsecurity.net/test.php");
  66.  my $ua = LWP::UserAgent->new;
  67.  $ua->agent("Firefox/4.0");
  68.  my $res = $ua->request($req);
  69.  if ($res->is_success) {
  70.   my $text = $res->content;
  71.   my $recherche = "href=\"(test/grsecurity-[.0-9]+-$kernelV-[0-9]+.patch)\"";
  72.   $text =~ m/($recherche)/gm;
  73.   return "http://www.grsecurity.net/$2";
  74.  }
  75.  return '';
  76. }

Il suffit ensuite d’executer la commande suivante :

  1. perl recupKernel.pl && cd linux-* && make menuconfig && make-kpkg clean && make-kpkg –initrd –append-to-version "LoupZeur-grsec" kernel_image

Ce qui générera un fichier .deb qu’il faudra installer par un bon vieux dpkg -i.

PS: Lors de l’execution de la commande make menuconfig, une fenetre « bleu » apparaitra, il faudra selectionner la menu « security », puis grsecurity et choisir le niveau de sécurité « HIGH ».

PS2: Il faut aussi bien entendu selectionner ou deselectionner tout les modules inutiles (genre usb, support agp et … ).

Tentative de Hack … quand les kikoolols attaquent!!!

11 octobre 2009

Bijour …

Un truc assez amusant dernièrement, une tentative de hack de mon site … la deuxième attaque « importante » que mon site subit, la première avait fait planter ma base de donnée … prelude (couplé à MySQL) avait reporté les 100 000 alertes de ModSecurity (sûrement l’utilisation d’un soft genre Acunetix ou …) causant un DoS sur 2 jours le temps que la base de données sur mon RPS à 4Meg/s d’écriture de disque puisse écrire les données ^^ ou comment s’auto-détruire à cause de ses propres systèmes de sécurité en « période d’attaque » xD.

Depuis j’avais installé le mod_evasive pour blacklister les IP en cas d’accès répété dans des délais très court au service HTTP, et OSSEC qui a la capacité de bannir des IP en cas d’erreurs répétées sur différent services (ssh, http,…), histoire de limiter le spam dans ma base de données.

Et donc sur ce coup-ci, l’attaque a durée très peu de temps (environ 10 secondes) :
prelude-scan

Avant de se terminer par un sympatique ban ip :

ddos

Au passage je ferais remarquer à 82.246.200.104 (un freenaute) que mon blog utilise la dernière version de WordPress qui peut être facilement téléchargeable sur le net pour ensuite trouver des failles dans le site en local et pirater le site en question sans avoir à le scanner, donnant la possibilité pour le propriétaire de site web en question de découvrir la tentative d’attaque et éviter d’avoir son IP Fixe °(^.^)° publié sous le tag « kikoololz featured with scanner ».

Sinon, je recommande OSSEC comme IPS pour la protection de sites web, c’est assez sympa, on peut à la fois le coupler avec prelude-manager pour centraliser et visualiser l’ensemble des tentatives d’attaques sur une seule page web, envoyer un mail à l’admin (voir plusieurs en définissant des domaines d’expertises) et blacklister les attaques (même petites ^^ je me suis déjà fait ban de mon serveur en tentant une simple SQL Inj. dans l’url du blog … oui j’ai rien d’autre à faire).

Voilà pour ce sublime week-end …

Sécuriser un blog Wordpress par un IPS avec wpsyslog2 et ossec

23 septembre 2009

Adeptes de l’utilisation du bazooka pour tuer une mouche ? Ou de l’utilisation d’IDS/IPS pour sécuriser votre blog visité par 5 personnes par an ?? wpsyslog2 est l’extension Wordpress faite pour vous.

Petite mise en bouche en image (contenu du syslog et screen du module dans wordpress) :

wpsyslog2wpsyslog1

Pour cela, il suffit d’installer la dernière version de l’IPS Ossec (qui peut être couplé avec le manager de prelude).

Ayant déjà installé prelude en suivant mon tuto (‘tention recursivité powaaa!!!), la manip a été la suivante :

apt-get install libprelude-dev
  1. wget http://www.ossec.net/files/ossec-hids-2.2.tar.gz
  2. tar -xvf http://www.ossec.net/files/ossec-hids-2.2.tar.gz
  3. cd ossec-hids-2.2/src
  4. make setprelude
  5. cd ..
  6. sh install.sh

(Pour ceux qui n’ont (et ne veulent) pas installer prelude, il faut juste faire le wget, le sh install.sh et installer le module wpsyslog2 sur votre blog)

Pour l’install.sh, choisir le mode « local », et installer le logiciel où vous voulez.
Ensuite pour accoupler la bestiole avec prelude :

screen -R manager
prelude-adduser registration-server prelude-manager
CTRL+A puis D
screen -R register
prelude-adduser register OSSEC "idmef:w" localhost --uid ossec --gid ossec
CTRL+A puis D
screen -r manager

Attendre la fin de la création de la clé et suivre la manipulation pour le one-time-password généré (voir mon premier tuto pour prelude), puis modifier la configuration de ossec pour sortir les logs dans prelude.
Ajouter :

<prelude_output>yes</prelude_output>
  <prelude_profile>OSSEC</prelude_profile>
  <prelude_log_level>6</prelude_log_level>

Dans le fichier /var/ossec/etc/ossec.conf, entre les balises global.
Puis démarrer par un sympatique /var/ossec/bin/ossec-control start (ou suivant l’install /etc/init.d/ossec start) qui doit renvoyer ceci :

Starting OSSEC HIDS v2.2 (by Trend Micro Inc.)...
21 Sep 15:33:36 (process:25711) INFO: Connecting to 127.0.0.1:4690 prelude Manager server.
21 Sep 15:33:36 (process:25711) INFO: TLS authentication succeed with Prelude Manager.
Started ossec-maild...
Started ossec-execd...
Started ossec-analysisd...
Started ossec-logcollector...
Started ossec-syscheckd...
Started ossec-monitord...
Completed.

Pour montrer qu’il s’est accouplé avec prelude (you’re 4 53X M4ch1N3!!!!).

Ensuite, il suffit d’installer le plugins wpsyslog2 sur votre blog (comme n’importe quel autre plugins), et hop go ban da world ;) Le must … ça detecte aussi les commentaires refusés (spam), et on peut mettre en place des règles pour bannir les spammeurs ;)

Alors bon … pourquoi préférer Ossec vis-à-vis de prelude-lml ?

Pour ma part (étant un gros noob sur la question ^^), l’intérêt étant la possibilité offerte par défaut d’Ossec de ban les ip incriminés dans les logs (à partir d’un certain niveau de sévérité), alors que prelude se contente de logger les alertes (pas de réponses actives … c’est à peu près la différence entre un IDS avec le D de Détection et IPS avec le P de Prévention qui en plus de détecter, met en place des moyens plus ou moins complexe (ban ^^) pour bloquer les accès suivant de la source).

Pourquoi cette différences entre un IPS et un IDS ? (J’en sais rien ;) ), dans certain cas il vaut mieux alerter et ne rien faire (genre un système bancaire qui va commencer à drop les transactions de certains clients ça le fait pas … quoique ;) ).

Bé voilà bloggez bien ;)

PS: Un des autres trucs sympa, c’est les check system qui vérifient si des fichiers de configurations ont été modifiés depuis le dernier check (modifications du fichier host, de la config d’apache, des certificats d’openvpn, …). Si vous êtes plusieurs à administrer un serveur, ça peut être sympa pour avoir le suivi de l’administration de la bête.

Installer la dernière version de firefox et firebug

10 septembre 2009

Bonsoir …

En lisant cette article, je suppose que vous utilisez au minimum Debian voir pire … Ubuntu, et que vous n’avez pas peur de mettre en périle votre vie numérique …
Je rappel juste que l’exécution de certaine commandes exécutées dans cet article peuvent être dangereuse ou pas … ça dépend de vous ;) Dans tout les cas, c’est votre responsabilité!! (Ze disclaimheure 2 ouf!!!)

Vous êtes suicidaire, vous adorez le risque et aimez vivre dangereusement, alors cette astuce est fait pour vous :

Pour utiliser la version pre-alpha-en-etat-anté-embryonnaire de firefox 3.7 (qui porte le doux nom de « Mine Field » … Champ de mine !?), il vous suffit simplement d’installer le dépôt suivant (pour Jaunty) :

echo "deb http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu jaunty main" >> /etc/apt/sources.list
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com EF4186FE247510BE
sudo apt-get install firefox-3.7

Il s’agit, comme vous l’aurez surement remarqué, d’un dépôt entretenue par un bot qui créé des paquets depuis le svn (d’où les noms à la star wars du genre hg20090910r32360). Donc si vous avez plusieurs update de firefox par jour … c’est normal!!! xD.

Et pis là comme tout développeur web, on tente d’installer l’addon indispensable : Firebug et … horreur, elle n’existe pas!!!

Alors bon ben comme des crados on peut remédier au problème façon L337 H4X0R du 17ème siècle :

cp -r ~/.mozilla/firefox/*/extensions/firebug@software.joehewitt.com/ ~/.mozilla/firefox-3.7/*/extensions/firebug@software.joehewitt.com/
sed -i "s/3.5/3.7/g" ~/.mozilla/firefox-3.7/*/extensions/firebug@software.joehewitt.com/install.rdf

Ou continuer sur la technique du geek suicidaire et installer … la version svn de firebug !! Ben ouai on est des noobs ou on l’est pas!!! ;)

svn checkout http://fbug.googlecode.com/svn/branches/firebug1.5/ ~/fbug
cd ~/fbug
zip -r firebug-svn.xpi *
firefox-3.7 firebug-svn.xpi
cd .. && rm -rf fbug/

Et vous voilà avec un firefox plus rapide que le 3.5 (plus instable parait-il, mais ça n’a pas planté pour moi …), et avec la nouvelle version de firebug … plus rapide elle-aussi. (Faut encore que j’arrive à faire fonctionner firephp ^^ c’est pas gagné).

Bonne nuit ;)