nyroBlog
Ban NyroBlog, by Matthieu
Image by Matthieu - ?

Tag: MySQL


Sécurité du serveur : fail2ban (Serveur Web sur Debian Squeeze)

fail2ban est utilisé pour lire les log de tous les autres démons et bannir des adresses IP s'ils ont échoués à plusieurs reprises de se connecter.

On installe simplement :

aptitude install fail2ban

Puis dans le fichier /etc/fail2ban/jail.conf nous allons paramétré chacun de nos règles pour tous les différents services que propose notre serveur. Certaines sont déjà pre-paramétrées, mais nous allons aussi en ajouter d'autres.

destemail = yoy@email.com
action = %(action_mwl)s

Puis dans le fichier, votre trouver des sections. Il faut simplement mettre enabled = true pour activer un filtre. Dans notre cas, vous pouvez directement activer pam-generic, apache, apache-noscript, apache-overflows, postfix and sasl. Bien sûr, vous pouvez modifier le nombre d'essai, le temps de ban, etc...

Pour apache, vous aurez compris qu'on ne peut pas utiliser la configuration par défaut. En effet, nous n'utilisons pas apache ! Mais les logs de Nginx sont similaire à ceux d'Apache. Il suffit simplement d'indiquer le bon chemin vers les fichiers de logs. Selon la configuration de chacun de vos virtualhost, utilisez :

logpath = /var/log/nginx/*error.log /var/log/nginx/*/*error.log

D'autre part, pour postfix, je désactive l'envoi de l'alerte par email car il y en aurait beaucoup trop. Dans la section de postfix :

action   = %(action_)s

Enfin, le chemin du sasl n'est pas bon car on utilise postix. Comme indiqué dans le fichier en commentaire, il faut utiliser :

logpath  = /var/log/warn.log

 

Puis ajoutons quelques règles qui ne sont pas par défaut dans fail2ban, mais que j'ai trouvé ici et là.

 

A la fin du fichier, ajoutez :

[apache-badbots]
enabled = true
port    = http,https
filter  = apache-badbots
logpath = /var/log/nginx/*error.log /var/log/nginx/*/*error.log
bantime = 86400
maxretry = 1

[apache-w00tw00t]
enabled = true
filter  = apache-w00tw00t
port = all
banaction = iptables-allports
port     = anyport
logpath  = /var/log/nginx/*error.log /var/log/nginx/*/*error.log
maxretry = 1
bantime = 86400

[apache-404]
enabled = true
filter  = apache-404
port = all
banaction = iptables-allports
port     = anyport
logpath  = /var/log/nginx/*error.log /var/log/nginx/*/*error.log
maxretry = 10
bantime = 86400

[pdns]
enabled = true
filter = pdns
port = all
banaction = iptables-allports
port = anyport
logpath = /var/log/pdns.log
maxretry = 1
bantime = 86400

[pdns-recursion]
enabled = true
filter = pdns-recursion
port = all
banaction = iptables-allports
port = anyport
logpath = /var/log/pdns.log
maxretry = 1
bantime = 86400

Et ensuite, il faut créer les fichiers filter de chacun de ces nouveaux filtres.

Le fichier /etc/fail2ban/filter.d/apache-404.conf :

[Definition]
failregex = ˆ<HOST> - - .* 404 .* "-" .*
ignoreregex =

Le fichier /etc/fail2ban/filter.d/apache-w00tw00t.conf :

[Definition]
failregex = ˆ<HOST> -.*"GET \/w00tw00t\.at\.ISC\.SANS\.DFind\:\).*".*
ignoreregex =

Le fichier /etc/fail2ban/filter.d/pdns.conf :

[Definition]
failregex = .*AXFR of domain '.*' denied to <HOST>
ignoreregex =

Le fichier /etc/fail2ban/filter.d/pdns-recursion.conf :

[Definition]
failregex = .*Not authoritative for '.*' sending servfail to <HOST> (recursion was desired)
ignoreregex =

 

Et voilà, il ne reste plus qu'à redémarrer le démon :

/etc/init.d/fail2ban force-reload

 

Et on passe à la suite, Munin pour créer des graphiques d'utilisation du serveur.

Retour au sommaire du tutorial complet.

Base de données : MySQL (Serveur Web sur Debian Squeeze)

Cette partie n'a pas évolué depuis Lenny. C'est exactement la même procédure.

On installe le serveur :

aptitude install mysql-server

Durant l'installation, il vous sera demandé le mot de passe de l'utilisateur MySQL root.

MySQL vient avec une commande sympathique qui permet de sécurisé le serveur :

mysql_secure_installation
# Current password : VOTRE_MOT_PASSE
# set new password : N
# remove anonymous Users : Y
# Disallow root login remotley : Y
# remove test database and access to it : Y
# reload privileges table now : Y

Si vous utilisez InnoDB comme moteur de stockage de vos tables, l'ensemble des données de chaque table est stockée dans un seul et même fichier pour toutes les tables InnoDB de toutes les bases de données. Cela peut vous embetter, et dans certains cas, causer des lenteurs du serveur. Il est possible de paramétrer MySQL pour créer un fichier de stockage par table. Nous allons aussi optimiser un chouilla la taille des caches. Pour ce faire, on édite le fichier /etc/mysql/my.cnf pour y ajouter dans la section [mysqld] :

innodb_file_per_table=1
innodb_buffer_pool_size=64M
tmp_table_size=32M
table_cache=128


On déplace les fichiers de la base de données dans /home/var en prenant soin d'arrêter le serveur avant : 

/etc/init.d/mysql stop
mv /var/lib/mysql /home/var/
ln -s /home/var/mysql/ /var/lib/mysql
chown mysql:mysql /home/var/mysql
/etc/init.d/mysql start

 

Nous voilà prêt pour installer le serveur DNS.

 

Retour au sommaire du tutorial complet.

Base de données : MySQL (Serveur Web sur Debian Lenny)

UPDATE : voir la version à jour pour Debian Squeeze.

 

On installe le serveur :

apt-get install mysql-server

Durant l'installation, il vous sera demandé le mot de passe de l'utilisateur MySQL root.

MySQL vient avec une commande sympathique qui permet de sécurisé le serveur :

mysql_secure_installation
# Current password : VOTRE_MOT_PASSE
# set new password : N
# remove anonymous Users : Y
# Disallow root login remotley : Y
# remove test database and access to it : Y
# reload privileges table now : Y

Si vous utilisez InnoDB comme moteur de stockage de vos tables, l'ensemble des données de chaque table est stockée dans un seul et même fichier pour toutes les tables InnoDB de toutes les bases de données. Cela peut vous embetter, et dans certains cas, causer des lenteurs du serveur. Il est possible de paramétrer MySQL pour créer un fichier de stockage par table. Pour ce faire, on édite le fichier /etc/mysql/my.cnf pour y ajouter dans la section [mysqld] :

innodb_file_per_table=1


On déplace les fichiers de la base de données sur /home en prenant soin d'arrêter le serveur avant :

/etc/init.d/mysql stop
mv /var/lib/mysql /home/var/
ln -s /home/var/mysql/ /var/lib/mysql
chown mysql:mysql /home/var/mysql
/etc/init.d/mysql start

Nous voilà prêt pour installer le serveur DNS.

Retour au sommaire.

Chips, Twix, and Mix

  • jQuery UI came out in final version and with it, we've got also the ThemeRoller which allow you to create and preview your own theme dymacally online. All the demo aren't yet available, but you can already have a preview of the animations here. My preferred is explode in 36 pieces
  • TinyMCE cam out in version 3.1.0 today. Many bugs fixed.
  • Symfony came out in version 1.1 RC2. Then some posts followed in their blog (and I'm sure others are on their way) regarding the new functionalities of this version
  • phpMyAdmin came out in version 2.11-7-rc1
  • MySQL wrote a post about Falcon (the next engine of MySQL 6) and its particularities by principally comparing to InnoDB. A quick look on this post could be a great idea
  • the iPhone came out in version 2. Wow, it's now coming with 3G, what a new thing! (I have a 2 year old phone which do it...) I personally wait for the first Android which could came at the beginning of the first quarter
  • Google Translate was refreshed last week. Note the new option to choose the origin language: "Detect automatic". I also like the new functionalities like the dictionary and the translated search!
  • All the session of the last Google IO are available here. Take a time to saw some of them ;)

Oh, I almost forgot. Today Firefox 3 came out and a world record is on the road! Go download it!

You can follow the number in real time (wait a little bit before the numbers start to animate) More than 4 millions and an half at this time!

Regarding the sport, today wasn't very cheerful (at least, from my point of view):

  • The French was miserably eliminated in the Euro. Goodbye Domenech.
  • The Lakers failed at the 6th game by loosing with 40 points! A sieve instead of defense and so many shoots missed. The Celtics played very well and was really the best. Kobe said: "The second place is the first place of the loosers..."

Version française de ce billet

Chips, Twix et Mix

  • jQuery UI est sortie en version finale et avec lui et aussi arrivé le ThemeRoller qui vous permet de créer et prévisualiser vos thèmes en ligne dynamiquement. Toutes les démos ne sont pas encore dispo, mais vous avez déjà un aperçu de toutes les animations ici. Ma préférée est le explode in 36 pieces
  • TinyMCE est sorti en version 3.1.0 aujourd'hui. Tout plein de bugs corrigés.
  • Symfony a sorti la RC2 de sa version 1.1. Ont suivi plusieurs billets sur le blog (et d'autres sont en chemin je pense) sur les nouveux éléments de cette version
  • phpMyAdmin est sorti en version 2.11-7-rc1
  • MySQL a édité un billet concernant Falcon (le prochain moteur de MySQL 6) et ses particularité, en le comparant à InnoDB principalement. Un petit coup d'oeil sur ce billet ne vous fera pas de mal
  • l'iPhone est sorti en version 2. Wahou, l'iPhone possède la 3G maintenant, quelle nouveauté. (j'ai quand même un téléphone qui fait ça depuis plus de 2 ans...) Moi j'attends le 1er Android, qui devrait arriver au début du 4ème semestre
  • Google Translate s'est payé un rafraîchissement la semaine dernière. A noter la nouvelle option pour choisir la langue d'origine : "Sélection automatique". On apprécie aussi les nouvelles fonctionnalité de dictionnaire et de recherche traduite !
  • Toutes les conférences du dernier Google IO sont disponible ici. Prenez le temps d'en regarder quelques une ;)

Ah, et j'ai failli oublier, aujourd'hui, Firefox 3 est sorti et un record du monde est en route ! Allez donc le télécharger !

Vous pouvez suivre les chiffres en temps réel (attendez un peu avant que les chiffres commencent à s'animer...) Plus de 100 000 téléchargement pour la France à l'heure où j'écris, et plus de 4 millions et demi au total !

Au niveau sportif, cette journée n'a pas été très joyeuse (enfin, de mon point de vue) :

  • La France qui est lamentablement éliminée de l'Euro. Au revoir Domenech.
  • Les Lakers qui échouent au 6ème match, en perdant avec 40 points de retard ! Une passoire comme défense et énormément de shoot manquées. Les Celtics ont très bien joués et étaient tout à fait supérieur. Kobe a dit : "La 2ème place, c'est la 1ère place des loosers..."

English Version of this post