Como bots acessam diretórios em um servidor que não são DocumentRoot de endereço IP público? Como faço para pará-los?

0

Eu tenho uma rede local configurada com apache2 e "named" em execução no OpenSuse 13.1 Linux.

Eu usei o serviço "nomeado" para usar meu computador como um servidor de domínio. Eu configurei meu roteador para apontar para o meu computador para pesquisas de domínio, então eu tenho a chance de reescrever um monte de domínios na minha rede para o seu próprio IP local, 192.168.0.111

Isso funciona muito bem.

Eu uso a configuração de host virtual para permitir vários domínios e subdomínios (reencaminhados para o mesmo IP pelo named) para obter diretórios diferentes no meu computador.

UPDATE - (adicionado o domínio base VirtualHost info) Para meus domínios:

<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias for.us 192.168.0.111
    DocumentRoot /home/personal/network/for.us

    # if not specified, the global error log is used
    ErrorLog /var/log/apache2/for.us-error_log
    CustomLog /var/log/apache2/for.us-access_log combined
</VirtualHost>
<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias wa.net 192.168.0.111
    DocumentRoot /home/work/wa.net

    # if not specified, the global error log is used
    ErrorLog /var/log/apache2/ip-error_log
    CustomLog /var/log/apache2/ip-access_log combined
</VirtualHost>

E depois para os meus subdomínios:

<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias fmb.wa.net
    DocumentRoot /home/work/wa.net/fmb
</VirtualHost>
<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias postrecord.wa.net
    DocumentRoot /home/work/wa.net/postrecord
</VirtualHost>
<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias cvalley.wa.net
    DocumentRoot /home/work/wa.net/cvalley_local
</VirtualHost>

Isso possibilita que eu acesse o cvalley.wa.net de qualquer dispositivo da minha rede e obtenha o site que mora em /home/work/wa.net/cvalley_local

Decidi encaminhar a porta 80 para este computador, para poder compartilhar alguns sites de desenvolvimento com colegas de trabalho. Não consigo controlar qual site eles veem com o mesmo serviço nomeado, porque eles precisariam usar meu computador como servidor de nomes de domínio ...

Então, adicionei uma linha como esta:

<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias MY.IP.XXX.XX
    DocumentRoot /home/work/wa.net/cvalley
</VirtualHost>

Onde "MY.IP.XXX.XX" é o meu endereço IP público.

Isso funciona como esperado, quando você acessa meu endereço IP de uma rede pública, vê o site que mora em /home/work/wa.net/cvalley.

ATUALIZAÇÃO - esclarecendo ponto de confusão O ponto de confusão que tenho é que existem endereços IP públicos nos meus logs nos sites "for.us", além dos sites "wa.net". Eu esperaria que o "wa.net" tivesse algum acesso IP público, mas eu não entendo como os bots públicos estão chegando aos sites "for.us".

Eu teria esperado que fosse impossível acessar os sites "for.us" em minha rede, a menos que o usuário público de alguma forma descobrisse o que estou chamando de ServerAliases e esteja imitando meus configuração de domínio ...

Como o tráfego público pode atingir meus sites "for.us" ? Como posso recriar esse tipo de acesso?

Aqui estão alguns exemplos de IP públicos acessando meus sites do VirtualHost:

Atualização - melhor descrição do log

este log mostra atividade no "for.us" VirtualHost - Eu teria esperado que a atividade existisse apenas no domínio "wa.net" , onde eu tem logs esperados

162.253.66.76 - - [15/Aug/2014:19:20:47 -0600] "GET /xmlrpc.php HTTP/1.0" 404 1004 "-" "-"
162.253.66.74 - - [16/Aug/2014:10:50:28 -0600] "GET / HTTP/1.0" 200 262 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
185.4.227.194 - - [16/Aug/2014:11:16:45 -0600] "GET http://24x7-allrequestsallowed.com/?PHPSESSID=1rysxtj500143WQMVT%5E_NAZ%5BQ HTTP/1.1" 200 262 "-" "-"
101.226.254.138 - - [16/Aug/2014:13:32:14 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
162.253.66.74 - - [16/Aug/2014:14:26:19 -0600] "GET / HTTP/1.0" 200 262 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
212.129.2.119 - - [16/Aug/2014:16:00:51 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
91.240.163.111 - - [16/Aug/2014:18:34:32 -0600] "GET / HTTP/1.0" 200 262 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
162.253.66.74 - - [16/Aug/2014:19:02:53 -0600] "GET / HTTP/1.0" 200 262 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
122.226.223.69 - - [17/Aug/2014:05:53:09 -0600] "GET http://www.k2proxy.com//hello.html HTTP/1.1" 404 1006 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)"
::1 - - [17/Aug/2014:10:19:26 -0600] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.6 (Linux/SUSE) OpenSSL/1.0.1e PHP/5.4.20 (internal dummy connection)"
162.209.65.196 - - [17/Aug/2014:15:31:53 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
111.206.199.163 - - [18/Aug/2014:11:12:56 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
37.187.180.168 - - [18/Aug/2014:15:40:00 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
62.210.38.226 - - [18/Aug/2014:18:35:16 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"

Existe algo que eu possa fazer para negar publicamente o acesso público por padrão, mas permitir somente em um VirtualHost?

    
por tmsimont 22.08.2014 / 23:56

2 respostas

2

Tanto o wa.net quanto o for.us resolvem o mesmo IP, portanto, a rede não pode informar para qual domínio DNS um pacote IP (e o segmento TCP e o datagrama UDP) se destina. Por exemplo, o HTTP desambigua o tráfego de rede endereçado ao mesmo IP examinando o cabeçalho Host HTTP: para ver o domínio pretendido da solicitação (é assim que funciona a hospedagem virtual), mas o nome não tem nenhum conceito do endereço DNS de datagramas recebidos. / p>

Sugiro colocar wa.net e for.us em endereços IP diferentes e configurar ambos os endereços na interface física. Isso deve separar o tráfego no nível de IP, e o software de virtualização pode entregar os pacotes à interface virtual apropriada.

    
por 26.08.2014 / 23:38
2

for.us é o primeiro VirtualHost a torná-lo o VirtualHost "padrão", portanto, qualquer petição que não tenha Host header (ou que não corresponda a nenhum dos outros VirtualHosts) terminará lá.

HTTP/1.0 não requer que o Host header funcione, portanto, o padrão é VH.

EDIT: Se for uma configuração inicial, a solução mais rápida para esse caso é mover o host virtual "público" para o início, portanto, qualquer padrão de conexão para esse site.

Lembre-se que para um NameVirtualHost você terá sempre um VirtualHost "padrão" se o cabeçalho do Host não estiver presente ou não corresponder a nenhum dos seus Nomes / Alias configurados (o primeiro VirtualHost definido para esse IP)

Além disso, eu configuraria as diretivas ServerName para o valor que você está atribuindo a cada ServerAlias e não usando o ServerAlias no seu caso. ServerName destina-se a distinguir entre qual VirtualHost deve ser usado se você configurar um NameVirtualHost, portanto, ter o mesmo valor em todos os ServerName não está fazendo nenhum bem. O ServerAlias é usado para marcar nomes adicionais (por exemplo, ServerName hostname ServerAlias hostname.domain.com

Observe que, se seus colegas de trabalho editarem seu /etc/hosts e adicionarem entradas como fmb.wa.net MY.IP.XXX.XX , postrecord.wa.net MY.IP.XXX.XX , etc, eles obterão qualquer site em seu servidor da web. Você poderia bloquear isso com as diretivas Block , Allow e Order , mas as entradas com o código de erro 403 ainda apareceriam no seu access_log.

Por fim, para resolver esse problema adequadamente e já que há muito IP privado disponível para você usar, eu faria o seguinte:

  • Primeiro, atribua um IP adicional ao seu OpenSuse. Seu IP primário atual seria usado para seu servidor interno e o novo para o servidor interno e público.
    • Localize /etc/sysconfig/network-scripts/ifcfg-eth* . Deve ser apenas um arquivo se o seu servidor tiver apenas uma única placa de rede.
    • Edite e adicione essas linhas (adira-as para sua conveniência):

.

IPADDR1='192.168.0.112'
NETMASK1='255.255.255.0'
LABEL1='0' 
  • Reinicie a rede: /etc/init.d/network restart
  • Altere seu <VirtualHost *:80> atual para <VirtualHost 192.168.0.111:80> , exceto para você VirtualHost público, que deve ter, em vez disso, <VirtualHost 192.168.0.112:80>
  • Reinicie o apache
  • Edite seu named para apontar o nome "público" para o novo IP, se necessário (para seu uso interno)
  • Altere o NAT que você provavelmente tem no roteador para apontar para o novo IP.

Com essa configuração, a partir do seu IP público, eles só obteriam conteúdo do VirtualHost com o IP 192.168.0.112

    
por 27.08.2014 / 00:58