Skip to content

Blog Net-Expression

Four-tout informatique !

Archive

Tag: sécurité

Introduction

Si vous maintenez un forum phpBB publique, vous avez certainement été confronté un jour ou l’autre à des utilisateurs peu scrupuleux qui peuplent votre forum de spams : messages inutiles (publicités pour médicaments, viagra, …), voir parfois avec du contenu pornographique !

Ayant été victime de ce type d’abus, il y a peu, ce post n’a pas pour but d’éradiquer tous les spamers de votre forum, mais vous permettra peut-être de vous fournir quelques pistes, ou quelques idées sur comment procéder…

Quelques conseils pour endiguer l’accroissement des spams sur votre forum

N’attendez pas d’avoir un million de spams (posts indésirables) pour réagir !

Plus vous attendez, plus le contenu utile et intéressant va être parsemé, plus la qualité de votre forum va baisser, et du même coup son attrait, et son référencement…

Les sauvegardes et manipulations nécessaires en base de données seront de plus en plus longues et difficile.

Sans parler des ressources consommées sur le serveur qui grandiront de manières exponentielles…

Faire régulièrement les mises à jour de votre logiciel de forum (phpBB ou autre)

C’est facile ! Il suffit de se rendre sur le site officiel du logiciel.

Si possible, empêchez l’inscription automatique

En général, il est nécessaire de se créer un compte utilisateur avant de pouvoir poster sur un forum.
La stratégie d’inscription devra empêcher les robots (bots spamers) de s’inscrire sur votre forum automatiquement.
Vous pouvez par exemple mettre en place un système de captcha ou poser une question simple auquel un humain sait répondre mais pas un ordinateur (test de turing).

Quelques pistes pour nettoyer votre forum

Attention ces pistes doivent être soumises à votre propre jugement, il va de soit qu’on ne maintient pas un forum utilisé par 30 personnes, comme un forum faisant 1000 posts par jours !…
Et donc que les solutions envisagées se verront plus ou moins efficaces, ou destructrices en fonction du type de fréquentation de votre forum….

  1. Supprimer les utilisateurs qui ont postés énormément de message.
  2. Supprimer les utilisateurs créés plusieurs fois avec la même adresse ip.
  3. Et enfin faites le ménage en nettoyant les tables de votre base de données (clé étrangères orphelines, optimisation des tables,…).

Conclusion

En suivant ces conseils, je suis passé de :

  • 60000 posts à un peu plus de 100 messages utiles.
  • Pratiquement autant pour les sujets (topics).
  • 1000 utilisateurs à environ 100
  • Les tables réservés à l’indexation de contenu ont été grandement nettoyées
  • 450Mo de base de données Mysql à 2Mo !


Quelques exemples pratiques sur le forum phpBB

N’oubliez pas de faire une sauvegarde de votre base de données avant d’intervenir dessus !!!!

J’ai repéré que ces derniers jours uniquement des topics indésirables sont tombés dans un forum…
Je commence par sélectionner tous les topics les plus récents du forum; et vérifie bien que uniquement les topics indésirables sont sélectionnés…


SELECT `topic_id`, `forum_id`, FROM_UNIXTIME(`topic_time`), `topic_time`, `topic_poster`, `topic_title`
FROM `pbb_topics`
WHERE `topic_time` >= 1337190526 AND `forum_id` = 5
ORDER BY `topic_time` DESC
LIMIT 0, 500

Puisque nous avons isolé les topics indésirables nous avons l’identifiant des utilisateurs indésirables `topic_poster`…

SELECT `topic_poster` FROM `pbb_topics` WHERE `topic_time` >= 1337190526 AND `forum_id` = 5

Nous pouvons donc en utilisant la requête du dessus construire la requête qui va supprimer les utilisateurs indésirables…

DELETE FROM `pbb_users` WHERE `user_id` IN (SELECT `topic_poster` FROM `pbb_topics` WHERE `topic_time` >= 1337190526 AND `forum_id` = 5)

Si on a supprimé des utilisateurs, les topics, posts, et d’autres objets du forum créés par ces utilisateurs vont se retrouver orphelins… Il est donc temps de faire le ménage…


-- Suppression des lignes n'ayant plus lieu d'être
DELETE FROM `pbb_user_group` WHERE `user_id` NOT IN (SELECT `user_id` FROM `pbb_users`);
DELETE FROM `pbb_topics` WHERE `topic_poster` NOT IN (SELECT `user_id` FROM `pbb_users`);
DELETE FROM `pbb_posts` WHERE `poster_id` NOT IN (SELECT `user_id` FROM `pbb_users`);
DELETE FROM `pbb_posts` WHERE `topic_id` NOT IN (SELECT `topic_id` FROM `pbb_topics`);
DELETE FROM `pbb_topics_posted` WHERE `topic_id` NOT IN (SELECT `topic_id` FROM `pbb_topics`);
DELETE FROM `pbb_topics_posted` WHERE `user_id` NOT IN (SELECT `user_id` FROM `pbb_users`);
DELETE FROM `pbb_topics_watch` WHERE `user_id` NOT IN (SELECT `user_id` FROM `pbb_users`);
DELETE FROM `pbb_topics_watch` WHERE `topic_id` NOT IN (SELECT `topic_id` FROM `pbb_topics`);
DELETE FROM `pbb_topics_track` WHERE `topic_id` NOT IN (SELECT `topic_id` FROM `pbb_topics`);
DELETE FROM `pbb_topics_watch` WHERE `topic_id` NOT IN (SELECT `topic_id` FROM `pbb_topics`);
DELETE FROM `pbb_search_wordmatch` WHERE `post_id` NOT IN (SELECT `post_id` FROM `pbb_posts`);
DELETE FROM `pbb_search_wordlist` WHERE `word_id` NOT IN (SELECT `word_id` FROM `pbb_search_wordmatch`);

Si vous visitez votre forum phpBB à cet instant, vous allez avoir peur… En effet, pour accélérer son fonctionnement le forum met en cache pas mal de données, il faut donc forcer le forum à rafraîchir ses données… Pour cela il y a pas mal de possibilité coté interface d’administration.
Enfin touche finale, pour forcer le rafraîchissement des statistiques d’un forum, il suffit de poster un nouveau sujet dans le forum souhaité, et de le supprimer juste après.

Installer le serveur via les paquets

[php]# aptitude install openssh-server[/php]

Votre serveur est alors prêt à fonctionner, toutefois, il est préférable de jeter un coup d’œil au fichier de configuration pour sécuriser votre installation…

Configurer le serveur SSH

Editer le fichier /etc/ssh/sshd_config


# Port d'écoute
Port 22

# Interdit les mots de passe vides
PermitEmptyPasswords no

# Interdit à l'utilisateur root de se connecter directement
PermitRootLogin yes

# Restreindre les groupes d'utilisateur pouvant se connecter directement
#AllowGroups thisgroup
#DenyGroups anothergroup

# Restreindre des utilisateurs particuliers pouvant se connecter directement
#AllowUsers thisuser
#DenyUsers anotheruser

Pour que les changements soient pris en compte, il faudra redémarrer le service :
# /etc/init.d/ssh restart

Quelques astuces pour sécuriser le service SSH

Le principal risque de ce service est qu’il est possible de trouver le mot de passe d’un utilisateur ayant de forts privilèges sur la machine, et de s’en servir pour installer un logiciel malveillant (par exemple un rootkit, un backdoor, ou encore un serveur de courrier servant à envoyer du spam), ou simplement trouver un moyen d’élever ses privilèges.

  1. Limiter les adresses logiques (Ip) et changer le port d’écoute du serveur.
    => évite d’attirer l’attention des robots qui cherchent des ports SSH en essayant des adresses ip arbitraires.
  2. Désactiver la possibilité de se loguer directement avec l’utilisateur root.
    => si le mot de passe d’un utilisateur est trouvé, mieux vaut que ce dernier ai de faibles privilèges sur la machine. L’attaquant ne sera pas beaucoup plus avancé.
  3. Choisir des mots de passe forts (chiffres, lettres, caractères spéciaux, éviter les mots trouvables facilement), ou utiliser un certificat
    => réduit considérablement la performance d’une attaque brute force, avec dictionnaire.
  4. Mettre en place un logiciel tel que “Fail2ban” .
    => Bloque l’adresse Ip automatiquement de l’attaquant à la suite de trop de tentatives de connexions infructueuses (rend l’attaque par brute force pratiquement inefficace).
  5. Limiter les clients pouvant se connecter à la machine en SSH via le fichier de configuration, et ou via un firewall comme iptables (ce n’est évidemment pas toujours possible).
    => Réduit le nombre d’attaques pouvant être menées à partir d’un ordinateur qui ne vous appartient pas.