J'utilise fail2ban sur tous les serveurs avec des services visibles publiquement et je me demande:
- Existe-t-il un moyen simple de partager des adresses IP interdites entre les hôtes que je contrôle?
- Existe-t-il un service qui collecte et publie ces données?
J'ai eu d'innombrables tentatives de connexion depuis le premier jour de configuration de ce serveur.
Réponses:
J'ai vu une fois un système de centralisation des données fail2ban sur ce site , et créé une version modifiée. La base de données est la même, mais j'ai changé et créé des scripts.
Mon système a 4 composants:
base de données fail2ban
C'est une base de données MySQL contenant une seule table
erp_core_fail2ban
::fail2ban.php
Chaque fois qu'un hôte est banni, il remplira la base de données:
cron2ban
Vous mettez cela à exécuter sur crontab, chaque minute. Il récupérera les derniers hôtes ajoutés et les bannira.
phpconfig
Ce fichier va dans / etc / fail2ban et a une configuration de base de données et une sélection de prison.
Créez ces fichiers et modifiez la configuration à partir de fail2ban:
Après la ligne avec
actionban = .....
une nouvelle ligne insérée pour appeler le script PHP:/root/fail2ban.php <name> <protocol> <port> <ip>
L'utilisation de cette structure sur tous vos serveurs garantira que chaque fois qu'un hôte sera banni sur un serveur, tous les autres serveurs l'interdiront également.
la source
J'ai donc fait un tas de recherches sur la façon de le faire après avoir regardé la même adresse IP frapper mon cluster de serveurs Web l'un après l'autre. Étant donné que j'utilise AWS, j'ai pensé qu'il pourrait y avoir un moyen simple et que cela fonctionnerait à merveille au cours de mes deux premiers jours de test de 5 serveurs.
La première chose que je recommande est de désactiver temporairement SELinux, nous nous en occuperons à la fin. Je ne suis pas un expert SELinux mais ce que j'ai fait fonctionne jusqu'à présent.
La principale exigence est une source de fichiers partagée, j'utilise AWS EFS. Une fois le nouveau lecteur provisionné et monté, j'ai changé logtarget dans /etc/fail2ban/fail2ban.conf en un sous-dossier dans le lecteur EFS.
Ensuite, j'ai écrit un filtre simple et l'ai placé dans /etc/fail2ban/filter.d/fail2ban-log.conf
Ajout du filtre à /etc/fail2ban/jail.local
Puis redémarré fail2ban
Jusqu'ici tout va bien! Non, la partie douloureuse est SELinux. Après avoir laissé fail2ban fonctionner un peu, j'ai exécuté cette commande qui permettrait à fail2ban de passer par les filtres.
Audit2allow vous dira d'exécuter cette commande
Je vérifie toujours mes journaux SELinux ici et là pour voir s'il y a d'autres refus. Si quelqu'un a une astuce pour obtenir ce SELinux clair avec une autre méthode, ce serait génial.
À ce stade, je recevais toujours des erreurs lors du redémarrage de fail2ban. Il y a un bogue lors de l'utilisation de action = action_mwl dans jail.local. Après un peu de recherche sur Google, j'ai trouvé cela qui fonctionne jusqu'à présent. D'après ce que j'ai lu, c'est à cause des sauts de ligne dans la directive logpath pointant vers plusieurs fichiers. J'ai essayé avec des virgules, des espaces, etc. rien d'autre ne fonctionnait avec action_mwl.
N'oubliez pas de réactiver SELinux!
la source
Je viens de l'implémenter et jusqu'à présent, cela semble bien fonctionner. Cependant, j'ai dû mettre à jour une partie du php car les scripts de la réponse d'origine utilisent des fonctions obsolètes.
Voici les scripts mis à jour
phpconfig.php
fail2ban.php
cron2ban.php
De plus, partout où vous placez l'action fail2ban.php, elle doit être mise en retrait autant que la ligne au-dessus. Par exemple:
Sinon, fail2ban ne démarre pas. J'espère que cela aide quiconque essaie de déployer cela.
la source
Une alternative à
fail2ban
est DenyHosts qui est livré avec une fonctionnalité de synchronisation. L'installation est assez similaire àfail2ban
, voir le tutoriel de Cyberciti pour plus de détails .Le problème est que le service de synchronisation est centralisé et que le code source côté serveur ne semble pas être disponible, donc vous ne pouvez pas facilement démarrer votre propre service DenyHosts et vous devez vous fier à une tierce partie (ce qui pourrait convenir à certains cas d'utilisation).
la source
Oui et oui. Les deux peuvent être effectués.
Vous devez trouver un mécanisme approprié pour partager la liste des adresses IP. Si vous utilisez AWS par exemple, vous pouvez profiter de s3. Vous pouvez utiliser rsync entre des hôtes Linux ou une base de données commune à tous les hôtes. Vous pouvez créer un service avec votre langage de programmation préféré qui fournit une API reposante à vous de choisir.
En termes de partage de la liste allié public, vous pouvez créer un site Web et héberger un simple fichier texte, certains fournissent déjà de telles listes (pas de source ouverte que je sache). Comment créer votre propre site / service serait hors de portée d'une réponse, mais ne devrait pas être très difficile à faire.
la source
Une configuration assez manuelle serait de changer la configuration qui appelle
iptables
pour mettre à jour les règles afin qu'elle appelle un script de votre propre conception qui boucle à travers une liste d'hôtes (lue depuis un fichier?) Et effectue lesiptables
appels sur chacun via SSH. Vous auriez besoin d'une authentification basée sur des clés entre tous les hôtes configurés pour que cela fonctionne. Les outils d'automatisation d'administration tels que les marionnettes peuvent faciliter la configuration et la maintenance. Ce ne serait pas terriblement efficace, mais à moins que vous ne voyiez une énorme quantité de trafic de sondage (et / ou un nombre énorme d'hôtes), je suis sûr que ce serait suffisant. Si vous n'avez que quelques hôtes, vous n'avez même pas besoin de parcourir un fichier: configurez chacun pour simplement appeler les autres dans l'ordre. L'effort de script sera minime.Il y a sans aucun doute de nombreuses façons. Demandez au (x) script (s) ci-dessus de déposer les données dans une base de données et demandez aux clients de les lire, interrogeant les nouvelles règles et les exécutant au fur et à mesure qu'elles entrent. Le simple "exécuter une règle telle que vous la voyez" ne sera pas parfait si beaucoup les hôtes soumettent des informations, par exemple ce cas:
mais cela ne devrait pas être un problème important, et si vous devenez un peu plus intelligent avec la base de données, vous pouvez gérer plusieurs soumissions plus proprement si vous décidez que cela en vaut la peine.
L'exécuter en tant que service public vous ouvrirait cependant à un monde de tracas administratifs:
la source