Tornar o apache acessível apenas via 127.0.0.1, isso é possível?

19

Eu configurei meu servidor Apache e o PHP / MySQL funciona bem!

Mas a questão é: como faço para manter isso privado, já que é um servidor apenas para desenvolvimento ? A única razão para manter o conteúdo privado é que, se um script deu errado, não quero que apache apareça se ele se tornou um site público (e o fato de outros compartilharem a mesma rede também!), E sou menos probabilidade de usar meu PC como um host da web - é mais provável que eu desça usando a rota do provedor de host da web para um site ao vivo real.

Atualmente, posso acessá-lo de três maneiras:

  • http: // localhost (ou http://127.0.0.1 , o caminho alternativo e o IP do localhost, mas de qualquer maneira é aceitável comigo!)

  • http 192.168.0.1 (IP do meu roteador)

  • http pc-name-here (nome do meu PC, obviamente isso varia entre os PCs com Windows!)

[note, não é possível postar links; portanto, para os outros dois, você teria que inserir a barra de dois pontos / frente como no primeiro].

No entanto, eu só quero acessá-lo através do primeiro. Está escutando na porta 80 (e não quero mudar isso). Isso não é possível ou estou enganado? Eu sei um pouco mais sobre PHP / webdesign do que o lado da rede, então esta é a primeira vez para mim!

Basicamente, eu quero que ele seja acessível apenas via host local nessa máquina, e não o endereço IP externo ou 192.168.0.1.

Eu precisaria editar o httpd.conf e usar negar em todos os sites da plataforma de teste, ou existe alguma outra solução?

Exemplo:

<Directory /www/vhosts/localhost/>
    Options All
    AllowOverride All
    order allow,deny
    allow from 127.0.0.1
            deny from 192.168.0.1
            deny from my-pc-name
</Directory>
  • esse é um exemplo, mas não tenho certeza do que está certo ou errado aqui!

Meu sistema operacional é o Windows 7 Ultimate.

Eu dei uma olhada na net, mas algumas me pareceram um pouco técnicas.

O que você recomendaria?

linthurst53
fonte

Respostas:

34

A maneira mais fácil de fazer isso é através da Listendiretiva. Por padrão, há uma linha em nosso httpd.conf que diz:

Listen *:80

Isso significa que ele responderá a solicitações de ro na porta 80 em todos os endereços de rede do seu computador. Alterando para:

Listen 127.0.0.1:80

Dirá ao apache apenas para responder apenas às solicitações no adaptador local, ignorando assim qualquer outra coisa.

SmallClanger
fonte
12

A opção de escuta é provavelmente a melhor, mas, como um FYI, você pode fazer isso usando permitir / negar como este

<Directory /www/vhosts/localhost/>
    Options All
    AllowOverride All
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Directory>

Order deny,allowdiz ao Apache para "Negar todas as solicitações, a menos que seja especificamente permitido" ( Order allow,denyé o contrário, o IE permite todas as solicitações, a menos que seja especificamente bloqueado)
Deny from allfaz algo semelhante ao Order deny,allowbloquear todas as solicitações de todos os IPs, a menos que você as abra especificamente. Parece ser prática geral utilizar tanto Order deny,allowe Deny from allmas eu não estou 100% certo porque quando ambos fazem a mesma coisa
Allow from 127.0.0.1diz "Permitir que todos os pedidos de 127.0.0.1". 127.0.0.1 será mapeado para o host local para que você possa usar http://127.0.0.1/ ou http: // localhost / e será permitido

Isso exibirá um erro 403 (Proibido) para quem solicitar o site no no host local

Algumas outras coisas úteis;
Allow from 192.168.0.permitirá a solicitação de qualquer pessoa em sua rede (desde que sua rede seja 192.168.0.0-192.168.0.255) As
regras de permissão / negação são processadas em ordem;

Deny from 192.168.0.2
Allow from 192.168.0.2

permitiria solicitações e

Allow from 192.168.0.2
Deny from 192.168.0.2

negaria pedidos de 192.168.0.2

tão

Deny from 192.168.0.2
Allow from all

Permitiria solicitações de 192.168.0.2, mesmo que tivesse sido especificamente negado.

Você também pode usar regras de permissão / negação em arquivos .htaccess ou em uma base por diretório

mancha
fonte
Certifique-se de que "Pedido negar, permitir", não "Pedido permitir, negar". Um pequeno erro frequente que as pessoas cometem constantemente.
21715 Scott Scott Chu
3

Fiz alterações no ports.conf em / etc / apache2 para que cada referência a Listen to a port estivesse apenas ouvindo localhost. Nenhum outro arquivo parece ter o comando listen. Após reiniciar o apache, essas alterações pareciam ter o efeito desejado.

/etc/apache2/ports.conf

NameVirtualHost *:80
########################## Listen 80
Listen 127.0.0.1:80

<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
###############################Listen 443
Listen 127.0.0.1:443
</IfModule>

<IfModule mod_gnutls.c>
##################################Listen 443
Listen 127.0.0.1:443
</IfModule>
Mathew Peet
fonte