Fail2ban ne se présente plus. – Quoi, tu ne connais pas ?… Bon, c’est un démon qui parse (surveille) les activités du système (logs) de différents services pour y trouver les tentatives d’accès infructueuses et bloquer l’accès afin d’éviter les kikous ou les attaques par force brute.

Je ne vais pas revenir ici sur l’installation ou la configuration du service, je vais plutôt vous partager mes observations.

Ma configuration

Action par défaut en cas de ban :

actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP

En gros, on DROP complètement l’IP sur tous les ports dès qu’une attaque est détectée. C’est un peu hard, mais ça me plaît.

Je surveille un maximum de services (SSH, HTTP, HTTPS, IMAP, SMTP,…)

Il y a pas mal de filtres qui se trouvent sur Internet, notamment pour se protéger des script kiddies.

J’ai également remarqué que depuis que j’ai changé les ports par défaut des services/applications hébergées, j’ai beaucoup moins de tentatives de connexion.

Parfait donc ? Bah, je trouve qu’il y a quelques défauts tout de même.

Changer de ports n’est pas toujours faisable et ça ne bloque pas les attaques, ça offusque juste certains services ultra-connus.

Fail2ban est codé en Python, niveau performance du code, on peut faire mieux. Le démon consomme un peu de ressources, mais ça en vaut la peine si on a pas mal de trafic sur les services ouverts.
Le projet est toujours maintenu sur GitHub, par contre la version des dépôts est assez vieille. Préférez donc la stable release depuis GitHub.

Je déconseille l’utilisation de fail2ban sur les VPS premiers prix, car cela peut saturer le pauvre petit qui n’a déjà pas beaucoup de ressources. Analysez et testez en fonction de votre matériel, vos besoins et vos contraintes (trafic,…).

N’oubliez pas que fail2ban ne fait pas tout ! Bref rappel en sécurité système :

  • Changez les ports par défaut des services dès que vous le pouvez (SSH par exemple !)
  • Tenez votre serveur à jour.
  • Implémentez de la sécurité où vous le pouvez – Préférez des protocoles sécurisés (HTTPS, IMAPS,…)
  • Vérifiez la configuration de vos services
  • Mettez en place de la sécurité au niveau du réseau – Utilisez iptables comme firewall maison par exemple.
  • Tenez-VOUS à jour – Soyez au courant des dernières vulnérabilités et soyez prêts à patcher !

 

Docs fail2ban

Pour faire une seedbox, il faut tout d’abord :

  • Un serveur (qu’il soit dédié ou un vieux PC transformé en serveur pour la cause)
  • Une connaissance minimale en Linux (prenez la distribution que vous souhaitez, ici je prends Debian)

Quoi qu’il en soit, voici les instructions :

Installation :

apt-get install transmission-daemon

Configuration :

Important : la configuration du fichier se fait service éteint !

service transmission-daemon stop
nano /etc/transmission-daemon/settings.json

Maintenant nous pouvons configurer les options 😉

« download-dir » : « /home//Downloads », // le répertoire qui contiendra les fichiers téléchargés
« ratio-limit » : 2, //Stopper le torrent quand il a atteint un certain ratio (>1, sinon aucune utilité de la seedbox)
« ratio-limit-enabled » : false, //Activer le ratio
« rpc-authentication-required » : true, //laisser à true
« rpc-enabled » : true,
« rpc-password » : « Azerty123 », //votre mot de passe, il sera chiffré lors du démarrage du service
« rpc-port » : 9091, //Vous pouvez modifier le port si vous voulez
« rpc-username » : « transmission », //Vous pouvez modifier l’utilisateur pour vous connecter au webui
« rpc-whitelist-enabled » : false, //Mettre sur false pour autoriser toutes les IPs à se connecter au webui

Je pense avoir fait le tour de toutes les options intéressantes pour une seedbox.

Il ne vous reste plus qu’à démarrer le service et à vous connecter au webui.

service transmission-daemon start

Allez sur http://votreip:9091 authentifiez-vous avec l’utilisateur et le mot de passe que vous avez configurés plus haut.

transmission-web-interface

Et vous êtes prêts à télécharger des torrents sur votre seedbox.

Avant toute chose, un peu de théorie.

À quoi sert radius ?

http://fr.wikipedia.org/wiki/Remote_Authentication_Dial-In_User_Service

En bref, il sert à authentifier une personne à un service, il permet d’autoriser ou refuser toto à se connecter à un service.
Par exemple : l’utilisateur toto veut se connecter à un serveur FTP, ce serveur est configuré pour tourner avec un serveur radius.
L’utilisateur se connecte au FTP, le FTP va demander au serveur RADIUS si la personne a bien la permission de se connecter au service FTP à l’heure actuelle. Le serveur RADIUS va retrouver l’utilisateur toto dans un annuaire LDAP ou comme ici dans une base de données SQL, RADIUS va ensuite vérifier si l’utilisateur a bien la permission d’accéder ou non suivant les préférences. Et il va contacter le FTP pour lui dire si oui ou non l’utilisateur peut se connecter.

On y va

Installation des paquets nécessaires :

apt-get install mysql-server mysql-client phpmyadmin freeradius freeradius-utils freeradius-mysql

Création de la table et de l’utilisateur

echo "create database radius;" | mysql -u root -p
echo "grant all on radius.* to radius@'localhost' identified by 'password_bdd'; flush privileges;" | mysql -u root -p
mysql -u root -p radius < /etc/freeradius/sql/mysql/schema.sql
mysql -u root -p radius < /etc/freeradius/sql/mysql/nas.sql

Création d’un utilisateur

echo "INSERT INTO radcheck(UserName,Attribute,Value) VALUES ('Toto','Password','Azerty123');" | mysql -u root -p radius

Configuration de freeradius

nano /etc/freeradius/sql.conf

Modifier le contenu :

password=motDePasseSQL
readclient=yes

nano /etc/freeradius/radiusd.conf

Décommenter $INCLUDE sql.conf

nano /etc/freeradius/sites-available/default

Décommenter sql dans “authorize”, “accounting” et “session”

nano /etc/freeradius/clients.conf

secret = superSecret (mot de passe pour le radtest notamment)

On teste :

service freeradius stop
freeradius -X

(et regarder si tout est OK, pas de message d’erreur)

radtest Toto Azerty123 127.0.0.1 0 superSecret

-> access-accept = OK
CTRL+C

service freeradius restart