Sur cette page j'explique rapidement comment je bloque les « IA » et autres crawlers malveillants.
Je n'ai pas trouvé de solution qui me soit assez pratique pour facilement bloquer des plages d'IP ou des AS complets en les renseignant juste dans un fichier de configuration. Du coup j'ai codé ma propre solution : nft-btg.
nft-btg (pour « NFTables Block Table Generator ») est un outil en Python qui s'appuis sur des bases au format mmdb pour bannir des plages d'IP. Il permet en gros d'ajouter des règles dans nftables pour appliquer les blocages.
Actuellement il est déployé sur toutes mes infra perso et associatives avec la configuration suivante :
path: template: '/usr/local/share/nft-btg/template' mmdb_file: asn: '/usr/local/share/nft-btg/GeoLite2-ASN.mmdb' country: '/usr/local/share/nft-btg/GeoLite2-Country.mmdb' policy: default: 'accept' deny: 'drop' country: 'drop' asn: 'drop' chain: input: True forward: False output: False allow_list: [] deny_list: [] country_list: [] asn_list: - 132203 # TENCENT-NET-AP-CN - 136907 # HWCLOUDS-AS-AP - 21859 # ZEN-ECN - 28573 # Claro NXT Telecomunicacoes Ltda - 37963 # Hangzhou Alibaba Advertising Co - 45102 # Alibaba US Technology Co - 45899 # VNPT-AS-VN exclude_port: asn: [] country: []
En gros, ce sont Alibaba, Tencent et Huawei qui faisaient le plus de requêtes malveillantes.
Un classique mais avec des filtres personnalisés Fail2ban est top.
Je maintient donc un filtre de user-agents malveillants qui engendre un bannissement immédiat de plusieurs mois des IP qui le déclenche.
J'ai également mis en place la jail recidive pour trouver les relous qui retente plusieurs mois après un bannissement et qui les bannis bien plus longtemps.
Je déteste devoir mettre en place des mesures particulières, mais force est de constater que les crawlers malveillant s'attaquent massivement aux forges Git.
Je continu de refuser de déployer des outils comme Anubis qui en plus d'être de plus en plus inefficaces pénalisent surtout les utilisateur·ices précaires et sont donc néfastes pour les humains. Je veux que mes mesures de protection soient le moins contraignantes possible pour les humains qui accèdent à mes sites web.
Je test donc actuellement Iocaine sur ma forge Git. Il a été assez dur à mettre en place car la documentation n'est vraiment pas terrible, bien que cet article m'ai bien aidé. Je le déploie avec Nam-Shub of Enki.
La fonctionnalité qui m'intéresse le plus avec est clairement son filtre fake-browser. Je me fiche totalement de pourrir les IA avec du contenu généré car ça consomme de la ressource en soi et mon but est de dégager ces crawlers le plus rapidement possible de mes infra en utilisant le moins de ressources système possible.