Comment empêcher les clients par adresse IP d'accéder à certaines URL sur mon serveur Web?

9

Comment puis-je bloquer définitivement toute adresse IP qui accède à des pages vulnérables connues telles que /phpMyadmin/? J'utilise un serveur Debian et je vois souvent des bots ou des pirates qui analysent mon serveur en essayant de trouver des vulnérabilités.

73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpMyadmin/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpMyAdmin/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpmyAdmin/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpmyadmin2/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpmyadmin3/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpmyadmin4/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"

J'ai déjà suivi cette question de stackoverflow: comment sécuriser phpMyAdmin .

Je cherche à empêcher les bots de prendre de la bande passante.

Chat blanc
la source
4
Cela nettoiera vos fichiers journaux, mais n'aidera en rien la sécurité. Soit vous maintenez toujours phpmyadmin à jour, soit vous y accédez uniquement depuis localhost (et vous bloquez tout autre trafic). Pour accéder au serveur distant, tunnelez le port via ssh.
Stefan M
Je pense que cela contribuera à la sécurité car il bloquera les adresses IP malveillantes qui tentent d'accéder à ce site.
Whitecat
@Whitecat 404signifie le code HTTP Page not found. Comment sentez-vous que ces IP sont des IP offensantes? Sur la base de quelle sortie décidez-vous de bloquer ces IP?
Valentin Bajrami
Je veux bloquer l'ip sur la base du fait qu'ils vont sur phpMyAdmin. J'ai sécurisé mon site et je sais que quiconque accède à cette page est malveillant.
Whitecat
1
Pourquoi ne pas créer un.htpasswd
nicoX

Réponses:

18

Cela peut être plus lourd que ce que vous recherchez, mais vous pouvez envisager d'utiliser fail2ban ( https://www.fail2ban.org ). C'est un outil qui peut surveiller vos fichiers journaux et interdire automatiquement les adresses qui génèrent des journaux qui correspondent à un ensemble de modèles personnalisables.

Andy Dalton
la source
5
tbh c'est le problème exact fail2banest conçu pour répondre. C'est un peu lourd mais là encore le critère souhaité est lui-même assez dynamique. Tout ce qui fail2banest considéré est à peu près aussi léger que vous allez essayer de résoudre cette classe de problèmes en utilisant un outil standard.
Bratchley
1
Eh bien, je suppose que vous pourriez écrire un cgi binaire suid-root, l'héberger sous / phpmyadmin, qui ajoute la règle de pare-feu de son appelant.
Joshua
7

Non. Au mieux, vous n'obtiendrez rien d'autre que de rendre vos journaux moins encombrés; au pire, vous finirez par bloquer les visiteurs légitimes qui ont obtenu (via DHCP) une adresse IP qui appartenait à quelqu'un dont le PC a été infecté en tant que nœud de botnet.

Le vrai problème ici est l'encombrement des journaux, et il peut être résolu simplement en configurant votre journalisation pour supprimer les demandes connues de vuln-scanning pour les vulns que votre site n'a pas et n'aura pas parce que vous n'utilisez pas les personnes vulnérables les cadres qu'ils recherchent. Si vous êtes préoccupé par la perte complète de la journalisation (peut-être qu'ils fournissent des preuves suggérant qui était responsable d'une autre attaque, ou quand une attaque a commencé, etc.), il suffit de limiter plusieurs entrées de journal pour les URL indésirables à partir d'une IP donnée dans un court laps de temps devrait mieux fonctionner.

R .. GitHub ARRÊTEZ D'AIDER LA GLACE
la source
6
fail2banles interdictions sont temporaires - X coups d'une mauvaise tentative de connexion en Y secondes, Z minute d'interdiction, avec XY et Z configurables. La suppression des journaux de tentatives d'intrusion actives me semble être un choix beaucoup plus dangereux.
Shadur
2
dans la probabilité de 0,1% que cela se produise, les utilisateurs légitimes de cette instance de phpmyadmin devraient pouvoir simplement envoyer un message OP pour être débloqué. En outre, fail2ban peut arrêter une attaque d'analyse avant qu'elle ne survienne à la vulnérabilité non corrigée ou zéro jour sur votre serveur.
Segfault
1
@Segfault: Il n'y a probablement aucun utilisateur légitime /phymyadmin/car il /phymyadmin/n'existe pas sur le serveur (voir: 404). Les utilisateurs légitimes en question sont plutôt tous les utilisateurs du site qui seraient bloqués par un pare-feu.
R .. GitHub ARRÊTER D'AIDER LA GLACE
1
Le «meilleur» comprend en fait d'autres tests bloqués, y compris ceux qui auraient pu réussir. Jouer avec le contenu du journal semble également être un bon moyen de perdre des informations lorsque vous réalisez que vous avez fait une sorte d'erreur dans votre filtre. Si vous êtes inquiet au sujet de l'encombrement des journaux, vous avez besoin d'une plate-forme d'analyse comme ELK pour passer au crible tout ce qui vous intéresse.
Bratchley
2
L'autre problème connexe est l'utilisation croissante du CGN. Un FAI peut avoir des centaines de clients partageant une seule adresse IP, ce qui rend le blocage IP dangereux au mieux, même temporaire. Vous pouvez avoir un utilisateur légitime et un scan actif à partir de la même adresse en même temps.
Bob
3

recherchez le phpMyAdmin.conf dans l'un des répertoires de configuration httpd et ajoutez la deny 73.199.136.112section allow / deny du fichier de configuration et une IP requise dans la section 2.4. J'ai mis un exemple du fichier de configuration complet ci-dessous où j'ai les entrées à l'envers, je bloque tout sauf les segments IP autorisés pour accéder à l'outil.

[thebtm@server conf.d]# cat /etc/httpd/conf.d/phpMyAdmin.conf
# phpMyAdmin - Web based MySQL browser written in php
# 
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 10.10.26
       Require ip 192.168.56
       Require ip 127.0.0.1       
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 10.10.25
     Allow from 192.168.56
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

# These directories do not require access over HTTP - taken from the original
# phpMyAdmin upstream tarball
#
<Directory /usr/share/phpMyAdmin/libraries/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/lib/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/frames/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

# This configuration prevents mod_security at phpMyAdmin directories from
# filtering SQL etc.  This may break your mod_security implementation.
#
#<IfModule mod_security.c>
#    <Directory /usr/share/phpMyAdmin/>
#        SecRuleInheritance Off
#    </Directory>
#</IfModule>
thebtm
la source
C'est génial. Mais le problème est qu'il existe des bots constants provenant de nombreuses adresses IP différentes. Je ne peux probablement pas suivre chaque IP différente car j'obtiens entre 20-30 ips malveillants uniques par jour.
Whitecat
2
C'est pourquoi j'ai montré l'inverse où vous autorisez les segments auxquels vous voulez avoir accès et bloquez automatiquement le reste.
thebtm
Alias /phpmyadmin /usr/share/phpMyAdmind /phpmyadmindevrait être changé pour quelque chose d'autre pour des raisons de sécurité. Alias /secret /usr/share/phpMyAdmind
nicoX
J'ai modifié le fichier de configuration par défaut fourni avec l'outil lorsque vous l'installez et j'ai créé des adresses IP aléatoires.
thebtm