Comment utiliser CSF LFD afin de bannir les ip qui tentent des attaques bruteforce sur des outils non standards (sites web sur nginx par exemple). Il est nécessaire de définir de nouvelles règles.

Procédure

Ajouter le nouveau fichier de log à surveiller.

vim /etc/csf/csf.conf  

Rechercher et définir la variable suivante:

CUSTOM1_LOG="/var/log/nginx/monsite.log"  

Créer un nouvelle expression régulière dans le fichier /etc/csf/regex.custom.pm

Exemple:

if (($lgfile eq $config{CUSTOM1_LOG}) and ($line =~ /REGEX/)) {  
 return ("Failed MONSITE login from",$1,"mysitematch","15","80,9443","1");
 }
## $1 => ip récupérée de la regex (à mettre entre parenthèses dans la regex)
## mysitematch => identifiant uniqu ## 15 => nombre de tentatives de connexion avant bannissement
## 80,9443 =>bannissement uniquement sur ces port (seulement utilisé si la variable LF_SELECT est définie dans csf.conf)
# 1 => 1=bannissement définitif, sinon nombre de secondes pour bannissement temporaire.

Redémarrer LFD:

csf -r && /etc/init.d/lfd restart  

Exemple Complet

si on se place dans le cadre de l’article NGinx – Bloquer les attaques bruteforce sur wp-login.php on doit ajouter dans le fichier /etc/csf/regex.custom.pm le code suivant

if (($lgfile eq $config{CUSTOM1_LOG}) and ($line =~ /^.*( limiting requests, excess).*(client: )([0-9]+.[0-9]+.[0-9]+.[0-9]+)/)) {  
  return ("limiting requests, 
    excess",$3,"unnomunique","15","80,443","100");
}

On obtient ainsi dans les log CSF:

Sep 26 13:48:40 toutatis lfd[24732]: (unnomunique match) limiting requests, excess XX.XX.XX.XX (xxxxxxxxxxxx): 15 in the last 3600 secs – *Blocked in csf* for 100 secs [LF_CUSTOMTRIGGER]  
Sep 26 13:50:20 toutatis lfd[24931]: Incoming IP XX.XX.XX.XX temporary block removed  
Sep 26 13:50:20 toutatis lfd[24931]: Outgoing IP XX.XX.XX.XX temporary block removed  

Un site pour faciliter la création des RegExp est disponible ici.