AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 417543
Accepted
WEBjuju
WEBjuju
Asked: 2018-01-17 07:30:26 +0800 CST2018-01-17 07:30:26 +0800 CST 2018-01-17 07:30:26 +0800 CST

Proteja-se contra solicitações incorretas de virtualhost em centos/apache

  • 772

Executamos uma pilha LAMP do CentOS Linux versão 7.4 com Apache 2.4. Em um painel de monitoramento, acompanho várias métricas de desempenho, e uma delas é "solicitações de host inválidas", em que o host virtual não corresponde ao do nosso servidor.

Manualmente, eu uso o arin.net para procurar solicitações de host inválidas. Como a natureza do nosso negócio é nos EUA, apenas no mercado interno, bloqueamos intervalos de IP estrangeiros que nos visitam sem o nome de host virtual adequado. Fazemos isso usando iptables; o seguinte é uma amostra disso, fwiw.

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  187.0.0.0/8          anywhere             /* montevideo uruguay */
DROP       all  --  177.0.0.0/8          anywhere             /* vmontevideo uraguay */
DROP       all  --  164.77.0.0/16        anywhere             /* montevideo uraguay */
DROP       all  --  78-0-0-0.adsl.net.t-com.hr/8  anywhere             /* amsterdam */

Isso é eficaz para desacelerar todo aquele tráfego "farejador" do exterior. .


Quase de repente, nas últimas 2 semanas, começamos a receber de 3 a 6 solicitações por dia de Chicago IL, Amazon AWS (Seattle WA), Fremont CA e etc.


Aqui estão algumas entradas de log do access_log do apache:

./myurl.com-access.log:23.20.12.111 - - [16/Jan/2018:00:16:21 -0600] "HEAD / HTTP/1.1" 200 - "-" "Cloud mapping experiment. Contact [email protected]"
./myurl.com-access.log:23.20.54.152 - - [16/Jan/2018:08:10:03 -0600] "HEAD / HTTP/1.1" 200 - "-" "Cloud mapping experiment. Contact [email protected]"
./myurl.com-access.log-20180114:23.20.12.111 - - [13/Jan/2018:08:07:44 -0600] "HEAD / HTTP/1.1" 200 - "-" "Cloud mapping experiment. Contact [email protected]"
./myurl.com-ssl-access.log:74.82.47.3 - - [14/Jan/2018:07:20:31 -0600] "GET / HTTP/1.1" 200 21 "-" "-"
./myurl.com-ssl-access.log:108.178.61.58 - - [15/Jan/2018:06:40:17 -0600] "GET / HTTP/1.1" 200 20 "-" "Mozilla/5.0 zgrab/0.x"
./myurl.com-ssl-access.log:184.154.189.90 - - [15/Jan/2018:07:54:29 -0600] "GET / HTTP/1.1" 200 21 "-" "Mozilla/5.0 zgrab/0.x"
./myurl.com-ssl-access.log:108.178.61.58 - - [16/Jan/2018:06:16:45 -0600] "GET / HTTP/1.1" 200 21 "-" "Mozilla/5.0 zgrab/0.x"
./myurl.com-ssl-access.log:184.154.189.90 - - [16/Jan/2018:06:51:18 -0600] "GET / HTTP/1.1" 200 21 "-" "Mozilla/5.0 zgrab/0.x"
./myurl.com-ssl-access.log:74.82.47.3 - - [16/Jan/2018:07:28:43 -0600] "GET / HTTP/1.1" 200 20 "-" "-"
./myurl.com-ssl-access.log-20180114:74.82.47.3 - - [08/Jan/2018:06:25:14 -0600] "GET / HTTP/1.1" 302 - "-" "-"

Quais métodos estão disponíveis para proteger contra (bloquear totalmente o mais cedo possível) solicitações para o servidor que não possuem o host virtual único e adequado ?


Em resposta a uma solução que fail2banpode ajudar, verifiquei e o fail2ban está em execução:

$ ps aux | grep fail2ban
root      2824  0.0  0.0 368832 53632 ?        Sl    2017  17:44 /usr/bin/python2 -s /usr/bin/fail2ban-server -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid -x -b

Vou procurar escrever uma regra para isso - não posso bloquear o tráfego que é legítimo - é seguro assumir que nenhum tráfego válido solicitará o host sem o virtualhost (certamente o aplicativo da web é escrito de uma forma que exige isso ser verdade).


atualizar

fail2ban não funcionará, pois eles atingem o servidor apenas uma vez com cada endereço IP - eles não os reutilizam. deixe-me afirmar que identifiquei efetivamente o tráfego na linha 2 do aplicativo da web. agora, estou enviando a eles um status 200 com um número aleatório, muito pequeno, muito rápido. mas preciso de uma maneira de "encobrir" o servidor, de alguma forma simplesmente não responder de uma forma que não coloque nenhuma carga real no servidor.

security iptables
  • 3 3 respostas
  • 770 Views

3 respostas

  • Voted
  1. Best Answer
    WEBjuju
    2018-01-19T17:01:19+08:002018-01-19T17:01:19+08:00

    Ok, fail2ban não funciona porque as solicitações ofensivas usam um endereço IP diferente a cada vez. As respostas 200, 403, 404 exigem que a solicitação do apache ocupe os recursos do servidor.

    Percebendo que eu queria apenas "desligar a chamada" e fazer com que o apache simplesmente parasse de falar com o solicitante, descobri que a instalação do mod_security permite que o apache seja configurado para descartar todas as solicitações que correspondam ao host virtual do ip do servidor. Instalar o mod_security no centos 7 foi fácil:

    sudo yum install mod_security

    Em seguida, coloco essas linhas na diretiva de host virtual em que ServerName é o endereço IP do host:

    <VirtualHost *:80>
        ServerName 1xx.1xx.1xx.1xx
    
        SecRuleEngine On
        SecRule REMOTE_ADDR "^\d" "log,drop,phase:1,id:111,msg:'dropped bad host request'"
        ...
    

    No firefox, acessar o servidor por ip agora fica assim:

    insira a descrição da imagem aqui

    ...boa sorte tentando de novo!

    nos logs do servidor, o drop está sendo registrado:

    # tail -f 1xx.1xx.1xx.1xx-error.log
    [Thu Jan 18 18:51:00.357113 2018] [:error] [pid 41716] [client 69.137.81.33] ModSecurity: Access denied with connection close (phase 1). Pattern match "^\\\\d" at REMOTE_ADDR. [file "/etc/httpd/vhost.d/ipaddyhost.conf"] [line "8"] [id "111"] [msg "dropped bad host access request"] [hostname "1xx.1xx.1xx.1xx"] [uri "/"] [unique_id "WmFA@q@5uqLACI9MKaxAAABbfwX"]
    

    em outras palavras, ou você sabe meu nome de host ou pode falar com o ban

    • 2
  2. cas
    2018-01-17T07:49:40+08:002018-01-17T07:49:40+08:00

    O fail2ban tem várias regras para bloquear endereços IP que escaneiam ou tentam fazer coisas ruins nos apacheservidores, e você pode escrever suas próprias regras (por exemplo, para corresponder a "solicitações de host ruins" nos logs de erro do apache) ou adicionar às existentes.

    fail2banestá disponível pré-empacotado para a maioria das distribuições Linux.

    • 1
  3. ivanivan
    2018-01-17T07:53:17+08:002018-01-17T07:53:17+08:00

    Eu configuraria um novo host virtual abrangente (ou seja, um padrão para qualquer nome que não corresponda ao seu nome real/configurado). Defina o erro 404 personalizado para redirecionar para o Google ou similar e, conforme mencionado por outras pessoas aqui, configure fail2banpara monitorar os logs desse host abrangente.

    • 0

relate perguntas

  • Regras do Iptables para permitir que o appVM passe pelo proxyVM configurado para passar apenas por uma VPN no QubesOS

  • Fortalecendo a segurança dos servidores rhel6/7 [fechado]

  • É possível manter um servidor como refém se alguém tiver acesso root? [fechado]

  • Como fazer todo o tráfego passar por uma interface no Linux

  • Existe um daemon syslog que implementa RFC 5848 "Signed Syslog Messages"?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve