Como impedir que clientes por endereço IP acessem determinados URLs no meu servidor web?

9

Como posso bloquear permanentemente qualquer endereço de ip que acesse páginas vulneráveis ​​conhecidas como /phpMyadmin/? Estou executando um servidor Debian e frequentemente vejo bots ou hackers examinando meu servidor tentando encontrar vulnerabilidades.

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"

Eu já segui esta pergunta sobre o stackoverflow: Como proteger o phpMyAdmin .

Eu estou olhando para começar a bloquear bots de ocupar largura de banda.

Gato branco
fonte
4
Isso limpará os arquivos de log, mas não ajudará na segurança. Sempre mantenha o phpmyadmin atualizado ou acesse-o apenas a partir do host local (e bloqueie todo o restante tráfego). Para acessar o servidor remoto, encapsule o túnel na porta via ssh.
Stefan M
Eu acho que isso ajudará na segurança, pois bloqueará os endereços IP maliciosos que tentarem acessar esse site.
Whitecat 16/10/19
@Whitecat 404significa o código HTTP Page not found. Como você acha que esses IPs são ofensivos? Com base em qual saída você decide bloquear esses IPs?
Valentin Bajrami
Quero bloquear o ip com base no fato de que eles estão indo para o phpMyAdmin. Eu protegi meu site e sei que qualquer pessoa que acesse essa página é maliciosa.
Whitecat 16/10/19
1
Por que não criar um.htpasswd
NICOX

Respostas:

18

Pode ser mais pesado do que você procura, mas você pode considerar o uso do fail2ban ( https://www.fail2ban.org ). Essa é uma ferramenta que pode monitorar seus arquivos de log e banir automaticamente endereços que geram logs que correspondem a um conjunto de padrões personalizáveis.

Andy Dalton
fonte
5
Este problema é exatamente o que fail2banfoi projetado para resolver. É um pouco pesado, mas, novamente, os critérios desejados são bastante dinâmicos. Tudo considerado fail2bané tão leve quanto você vai tentar resolver essa classe de problemas usando uma ferramenta padrão.
Bratchley
1
Bem, suponho que você possa escrever um cgi binário suid-root, hospedá-lo como / phpmyadmin, que adicione a regra de firewall de seu chamador.
Joshua
7

Não. Na melhor das hipóteses, você não conseguirá nada além de tornar seus logs menos confusos; na pior das hipóteses, você acabará bloqueando os visitantes legítimos que obtiveram (via DHCP) um endereço IP que pertencia a alguém cujo PC estava infectado como um nó de botnet.

O verdadeiro problema aqui é a confusão de logs, e isso pode ser resolvido apenas configurando seu log para descartar solicitações que são conhecidas como verificação de vuln em busca de vulns que seu site não tem, e não terá, porque você não está usando o vulnerável estruturas que eles estão procurando. Se você estiver preocupado com a perda completa de log (talvez eles forneçam evidências sugerindo quem foi o responsável por um ataque diferente, ou quando um ataque começou, etc.), limite várias entradas de log para URLs indesejados de um determinado IP em um curto espaço de tempo deve funcionar melhor.

R .. GitHub PARE DE AJUDAR O GELO
fonte
6
fail2banas proibições são temporárias - X acertos de uma tentativa incorreta de login dentro de Y segundos, banimento de Z minutos, com XY e Z configuráveis. Descartar registros de tentativas de intrusão ativas me parece uma opção significativamente mais perigosa.
Shadur
2
na chance de 0,1% disso acontecer, os usuários legítimos dessa instância do phpmyadmin devem poder apenas enviar uma mensagem para OP para serem desbloqueados. Além disso, o fail2ban pode interromper um ataque de verificação antes que aconteça com a vulnerabilidade sem patch ou com dia zero no servidor.
Segfault
1
@Segfault: Presumivelmente, não há usuários legítimos /phymyadmin/porque /phymyadmin/não existe no servidor (consulte: 404). Os usuários legítimos em questão são os usuários do site que seriam bloqueados pelo firewall deles.
R .. GitHub Pare de ajudar o gelo
1
O "melhor" inclui, na verdade, testes adicionais bloqueados, incluindo os que podem ter sido bem-sucedidos. Brincar com o conteúdo do log também parece ser uma boa maneira de perder informações quando você percebe que cometeu algum tipo de erro no filtro. Se você está preocupado com a confusão de logs, precisa de uma plataforma de análise como a ELK para analisar tudo o que interessa.
Bratchley 17/17/17
2
A outra questão relacionada é o uso crescente de CGN. Um ISP pode ter centenas de clientes compartilhando um único endereço IP, tornando o bloqueio de IP perigoso na melhor das hipóteses, mesmo temporários. Você pode ter um usuário legítimo e uma verificação ativa do mesmo endereço ao mesmo tempo.
22417 Bob
3

encontre o phpMyAdmin.conf em um dos diretórios httpd config e adicione deny 73.199.136.112na seção allow / deny do arquivo de configuração e um IP de requisição na seção 2.4. Eu coloquei um exemplo do arquivo de configuração completo abaixo, onde tenho as entradas ao contrário, bloqueio tudo, exceto os segmentos IP permitidos para acessar a ferramenta.

[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
fonte
Isso é incrível. Mas o problema é que existem bots constantes de muitos IPs diferentes. Não posso acompanhar todos os IPs diferentes, pois recebo entre 20 e 30 ips maliciosos exclusivos por dia.
Whitecat 16/10/19
2
Foi por isso que mostrei o contrário, onde você permite os segmentos que deseja acessar e bloqueia automaticamente o resto.
thebtm
Alias /phpmyadmin /usr/share/phpMyAdmind /phpmyadmindeve ser alterado para outra coisa por motivos de segurança. Alias /secret /usr/share/phpMyAdmind
NicoX 18/10
Modifiquei o arquivo de configuração padrão que acompanha a ferramenta quando você o instalou e criei alguns endereços IP aleatórios.
thebtm