Catégories
Blog Open-source Planet-libre Reseau

Bannir les bannis avec Fail2Ban

Depuis la mise en place de Fail2Ban sur mon serveur perso pour bloquer les attaques DOS.  La règle mise en place est un bannissement de 10 minutes pour une machine générant plus de 360 requêtes en moins de 2 minutes. Malgré cela, il arrive certaines machines insistent  lourdement en recommencent leurs attaques toutes les 10 minutes…

J’ai donc décidé de mettre en place une règle un peu plus évoluée qui va bannir pendant 1 heures les machines bannies 3 fois en moins d’une heure puis 24 heures pour les gros lourds qui se font bannir 3 fois de suite de cette manière. En bonus, nous allons également voir comment pourrir la bande passante de la machine effectuant l’attaque en utilisant la règle de drop de type « tarpitting » de IpTable.

Avant de commencer

Je pars sur le principe ou vous disposez d’un Fail2ban fonctionnel (suivre mon premier billet pour avoir la procédure d’installation).

Le principe est le suivant: nous allons surveiller le fichier /var/log/fail2ban.log pour y analyser les logs de type ban et multi-ban et y associer les actions appropriés.

Pour cela on commence par créer les filtres.

Filtre ban.conf et multiban.conf

On édite le filtre ban.conf dans le répertoire /etc/fail2ban/filter.d:

[crayon url= »https://raw.github.com/nicolargo/fail2banarena/master/filter.d/ban.conf » /]

Rien de bien compliqué: on récupère dans la variable HOST l’adresse IP de la machine bannie.

Le second filtre multiban.conf (également dans le répertoire /etc/fail2ban/filter.d)

[crayon url= »https://raw.github.com/nicolargo/fail2banarena/master/filter.d/multiban.conf » /]

On actionne ensuite les filtre et les actions correspondantes dans la prison de Fail2ban.

Configuration de la prison Fail2ban

Le fichier prison (jail) par défaut se trouve dans /etc/fail2ban/jail.conf, il faut ajouter les sections suivantes (à adapter à vos besoins):

[crayon url= »https://raw.github.com/nicolargo/fail2banarena/master/jail.conf » /]

L’action choisie pour bannir ces attaques multiples est plutôt radicale: bloquer toutes les requêtes TCP (avec l’action iptables-allports) et envoyer un mail à l’administrateur (lors d’un bannissement de 24h). Il est bien sûr possible de modifier ces actions et les paramètres associés.

Le résultat

En surveillant le fichier fail2ban.log, on peut voir que la nouvelle prison fonctionne bien:

Après trois attaque HTTP DOS, le filtre MULTI BAN prend le relais et banni l’adresse IP pour 24 heures.

En bonus: la contre-attaque !

Le firewall IpTable qui protège mon serveur dispose d’une règle nommé TARPIT que l’on peut coupler avec un DROP pour saturer la liaison de la machine qui fait ce genre d’attaque (pour plus de précision, je vous conseille la lecture de ce très bon billet sur WikiGento).

Pour supporter la directive TARPIT, il faut charger le module IpTable de la manière suivante (procédure validée sous Debian Squeeze):

[crayon]

sudo apt-get install xtables-addons-common xtables-addons-source

sudo module-assistant auto-install xtables-addons-source

[/crayon]

Pour Fail2Ban, on commence donc par créer un nouveau fichier d’action que l’on va nommer iptables-tarpit.conf (dans le répertoire /etc/fail2ban/action.d).

Note: je suis bêtement reparti du fichier iptables-allports.conf auquel j’ai ajouté la ligne de commande iptables avec -j TARPIT

[crayon url= »https://raw.github.com/nicolargo/fail2banarena/master/action.d/iptables-tarpit.conf » /]

Pour activer cette nouvelle action dans notre jail, il suffit de remplacer les lignes:

action = iptables-allports[name=ALL]

par:

action = iptables-tarpit[name=ALL]

dans notre fichier jail.conf.

Conclusion

Il est difficile (voir même impossible) de se défendre contre les attaques DOS sans engager de gros moyens (financier et en temps). La solution proposée dans cet article n’est pas parfaite mais suffira largement contre les Bots ou les scripts kiddies.

Subissez-vous des attaques DOS sur vos serveurs ?

Si oui, quels sont les solutions techniques que vous mettez en place pour les contrer ?

Catégories
Developpement Open-source Planet-libre Systeme

En route vers Puppet, Chef, CfEngine…

  

Derrière ce titre un peu pompeux se cache une problématique que tout administrateur système s’est ou se posera un jour ou l’autre: Comment gérer l’installation, la mise à jour et la configuration de toutes les machines de son parc informatique ?

Ce billet a pour objectif de poser le problème de base et d’aborder quelques unes des solutions possibles. Il servira d’introduction à une série d’article sur ce vaste et intéressant sujet.

Introduction

Imaginons donc un responsable informatique disposant de trois administrateurs système: Michel, David et Jean-Pierre. Il leurs demande de travailler sur les solutions de déploiement des logiciels dans le système d’information de  l’entreprise. Quelques jours plus tard, il leur demande de présenter leurs solutions…

Première solution: « à la mimine »

La première solution pour répondre à la question posée est celle Michel, sysadmin de base (fort en technique mais moins en processus et en communication): lire la documentation du système (ou logiciel) à installer (ou mettre à jour), Googlelifier si la documentation est trop longue (ou seulement en Anglais), tester sur un environnement de développement (Jean-Pierre est quand même un garçon prudent) puis appliquer la dite procédure sur l’ensemble des machines.

On trouve également certains Michel (ceux qui ont passé la certification ISO) qui vont documenter leur installation dans un beau document (ou encore mieux un Wiki). Comme Michel travaille souvent seul, le document ne sera jamais partagé ou enrichie, il deviendra donc obsolète à la prochaine version du système (ou logiciel).

Cette première solution apporte quelques avantages: Michel peut maîtriser de manière unitaire toutes les installations et donc facilement identifier les problèmes, il a une connaissance précise et réelles des briques de ses machines.

D’un autre coté, Michel demande un certain temps pour déployer ou mettre à jour vos logiciels sur les 100 machines de votre parc et il deviendrait complètement débordé, voir incompétent,  si ce nombre passait à plusieurs centaines voir milliers de machines…

Deuxième solution: « script, script, script… »

Michel a un collègue, David, qui adopte une méthode similaire dans les premières étapes (lecture de la documentation, recherche sur Internet, test dans un environnement de développement). Mais qui, au lieu de faire lui même les opérations sur les machines, passe par un script Shell qui va automatiser ces taches. Si vous suivez ce blog, vous savez que j’utilise souvent cette méthode pour installer des composants sur mes machines persos (et quelques fois professionnelles).

David bichonne ses beaux scripts dans un repos Git. Ses procédures sont rodées: connexion en SSH, récupération du script et le exécution.

Tout semble parfait mais les développements de ces scripts peuvent vite devenir une vrai galère quand on s’attaque à un parc multi-distribution (ceux qui ont essayé de développer un script d’installation multi-plateforme/distribution doivent me comprendre…).

Troisième solution: « gestionnaire de configuration des machines »

Bienvenu dans le monde de Jean-Pierre. Lui, il utilise un gestionnaire de configuration des machines. Ces systèmes apportent une couche d’abstraction entre ceux que l’on veut faire (les besoins) et comment ces besoins sont concrètement résolus sur les machines cibles.Un pseudo langage de programmation permet de définir les actions à effectuer et le moteur de configuration des machines va s’occuper du déploiement, de l’exécution et de la génération d’un rapport sur chacune des machines cibles.

Plusieurs solutions existent, des propriétaires (comme IBM Tivoli, BSM ou HP Operations Manager i) et des libres (Puppet, Chef, CfEngine). C’est bien sûr sur ces dernières que Jean-Pierre, grand partisan des solutions libres, a donc porté son choix.

Il ne reste plus qu’à commencer à jouer avec le bébé en travaillant sur un environnement de développement/Cloud (teasing pour les prochains billets :)).

Conclusion

Je ne connais pas assez ces solutions pour avoir un avis tranché sur la meilleure solution libre. Après quelques recherches sur le net et la consultation des 3 sites internet officiels, je trouve que le projet Puppet est très bien structuré et documenté. Je pense donc partir sur cette solution pour mes prochains billet sur le sujet.

La discussion est cependant ouverte (et les commentaires sont fait pour cela).

Je suis preneur de retours d’expériences sur ces 3 solutions libres !

Sources ayant inspiré ce billet:

 

Catégories
Open-source Planet-libre Reseau Systeme

Un PPA pour Glances

Grâce à Arnaud Hartmann (un grand merci à lui), un PPA est maintenant disponible pour installer la dernière version stable de Glances sur votre système Ubuntu (ou dérivé).

Le PPA en question couvre les versions d’Ubuntu depuis la 9.10 (Karmic) jusqu’à la future 12.04 (Precise Pangolin).

Pour installer Glances sur votre système via ce PPA, il suffit d’effectuer les actions suivantes:

[cc lang= »bash »]

sudo add-apt-repository ppa:arnaud-hartmann/glances-stable

sudo apt-get update

sudo apt-get install glances

[/cc]

A la date de la rédaction de ce billet, la dernière version stable disponible est la 1.3.7. Pour les plus téméraires, il est possible, en parallèle de cette installation, de tester la version expérimentale (1.4b) en utilisant le PPA suivant en lieu et place du stable: ppa:arnaud-hartmann/glances-unstable

Petit bonus pour les lecteurs qui sont arrivés jusqu’ici, la lecture d’un billet (en anglais) de présentation de Glances que je trouve assez bien fait.

Catégories
Open-source Planet-libre Systeme

Ubuntu 12.04 – Participez à la conception du script de post-install

Dans quelques semaines, la version 12.04 (alias Precise Pangolin) de la distribution Ubuntu va sortir. C’est une version LTS (« Long Time Support ») qui sera intéressante pour une utilisation aussi bien personnelle que professionnelle. L’orientation grand-public de Canonical (l’éditeur d’Ubuntu) est, je le pense, un bien pour la promotion et la diffusion des systèmes GNU/Linux.

D’un autre coté, pour nous, les geeks/hackers, il est nécessaire d’effectuer pas mal d’actions après l’installation du système (« post-installation ») pour disposer d’un environnement adapté à nos besoins. Depuis la version Ubuntu 11.04, je mets à disposition sur un GitHub un script de post-installation qui va permettre d’automatiser ces actions de post-installation.

Je vous propose donc de travailler ensemble sur la conception de la prochaine version du script qui sera dédié à Ubuntu 12.04.

Structure générale du script

La prochaine version du script sera développé en langage Python (BASH pour les ancienne verison) en se basant sur un squelette commun que j’utilise pour d’autres scripts.

Ce dernier effectuera les actions suivantes:

  • ajout de certains dépôts officiels et non-officiels
  • installation d’une liste de paquets (logiciels, librairies…) non présents dans la distribution standard
  • mise à jour du système
  • configuration de l’interface graphique (Gnome Shell actuellement mais il est possible aussi d’ajouter des customs pour Unity), Conky…
  • configuration VIM (.vimrc)
  • configuration SHELL (alias, prompt…)

Liste des dépôts à ajouter

Voici la listes des dépôts que le script ajoute à votre système:

  • ppa:gstreamer-developers (le PPA officiel des développeurs de GStreamer)
  • ppa:shutter (pour avoir la dernière version de Shutter, l’outil de capture d’écran)
  • ppa:chromium-daily/dev (le daily build de Chromium, le navigateur Web libre basée sur WebKit)
  • ppa:ubuntu-wine (Wine, pour exécuter certains programme Windows sous Ubuntu)
  • ppa:tualatrix/ppa (pour une version toute fraiche d’Ubuntu Tweak)
  • ppa:gnome-terminator/ppa (le terminal ultime…)
  • ppa:nilarimogard/webupd8 (le site WebUpd8 maintient ce PPA avec pas mal de logiciels)
  • ppa:webupd8team/jupiter (si vous avez un portable, ce PPA est fortement conseillé pour augmenter l’autonomie)
  • ppa:clipgrab-team/ppa (convertisseur vidéo ClipGrab)
  • ppa:stebbins/handbrake-releases (Handbrake)
  • http://repository.spotify.com (Spotify)
  • http://archive.getdeb.net/ubuntu (GetDeb, le projet maintien à jour une liste importante de logiciels libres)

Pour Gnome 3 (Gnome Shell):

  • ppa:gnome3-team/gnome3 (le PPA officiel des développeurs de Gnome 3)
  • ppa:webupd8team/gnome3 (pas mal d’extensions en plus)
  • ppa:webupd8team/themes (des thèmes pour Gnome Shell)

Listes des paquets à installer

Les logiciels suivants sont installés.

Développement:

[cc]

build-essential

vim

subversion

git git-core

rabbitvcs-nautilus

textadept

geany

wine

ubuntu-tweak

terminator

pyjupiter

nautilus-dropbox xclip zenity dropbox-share

[/cc]

Multimédia:

[cc]

vlc

x264

ffmpeg2theora

oggvideotools

istanbul

shotwell

mplayer

hugin

nautilus-image-converter

pavucontrol

gimp

gimp-save-for-web

ogmrip

transmageddon

guvcview

wavpack

mppenc

faac

flac

vorbis-tools

faad

lame

nautilus-script-audio-convert

cheese

sound-juicer

picard

arista

nautilus-arista

milkytracker

mypaint

libdvdread4

clipgrab

handbrake-gtk handbrake-cli

spotify-client-qt

shutter

[/cc]

Réseau:

[cc]

iperf

ifstat

wireshark

tshark

arp-scan

htop

netspeed

nmap

netpipe-tcp

[/cc]

Système: 

[cc]

preload

gparted

lm-sensors

compizconfig-settings-manager

hardinfo

fortune-mod

libnotify-bin

compiz-fusion-plugins-extra

ubuntu-restricted-extras

[/cc]

Web:

[cc]

chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-extra chromium-codecs-ffmpeg-nonfree

pidgin

pidgin-facebookchat

pidgin-plugin-pack

flashplugin-downloader

xchat

googleearth-package lsb-core ttf-mscorefonts-installer

[/cc]

Gnome 3:

[cc]

gnome-shell gnome-tweak-tool gnome-documents

conky-all ttf-ubuntu-font-family

[/cc]

Comment participer à la conception ?

Tout simplement en laissant un commentaire en bas de ce billet. Les actions à mener sont:

  • ajouter des dépôt manquants (attention, il ne faut proposer que des dépôts stables et pérennes)
  • ajout d’applications/librairies obligatoires (au sens geek du terme :))
  • autres actions à mener en post-install (merci de détailler)

Update:

Le script est disponible en version alpha (bien sur il ne faut pas le lancer sur votre machine mais seulement dans des VMs !):

Il est donc possible de le forker et de participer plus pratiquement à son évolution (par exemple en suivant ce billet).

J’attends vos idées !