Clientes na Rede Local - teste simples?

1

Estou desenvolvendo um sistema da web para minha escola (é em PHP, mas isso não é importante).

O sistema precisa ter diferentes comportamentos dependendo se o usuário está ou não na rede da escola (especificamente, se eles não estão na rede da escola, eles precisam fazer o login).

Então eu preciso de uma maneira confiável, idealmente infalível (que pode estar pedindo muito ...) de verificar se os clientes estão na rede local.

Parece que a maneira usual de fazer isso é comparar a sub-rede do usuário com a sub-rede do servidor. No entanto, nossa escola tem várias sub-redes (incluindo vários campi, cada um com várias sub-redes, além de VPN), sendo que apenas uma delas é a sub-rede do servidor. Então esse método não funcionará

Eu leio RFC1918 , que reserva os seguintes espaços de IP para redes privadas:

 10.*.*.*
 172.16.*.* - 172.31.*.*
 192.168.*.*

Então, posso verificar se o IP do cliente está em alguma dessas sub-redes particulares? Existe alguma possibilidade de que usuários fora da rede possam ter tal IP? Ou que usuários conectados à rede escolar não teriam um IP em um desses intervalos?

    
por baum 19.06.2014 / 22:22

2 respostas

5

Se a sua escola estiver filtrando os endereços de entrada no ingresso, então, usar o espaço de endereço do RFC 1918, já que o sentinela por estar "na LAN" provavelmente está bom. Parece um pouco desonesto para mim, francamente, usar o endereço IP como algum tipo de autenticação implícita, mas vai funcionar.

Se a sua escola não estiver filtrando o espaço de endereçamento RFC 1918 na entrada, é possível, teoricamente, que um invasor de fora consiga colocar pacotes em seu servidor, a partir do espaço de endereço RFC 1918 que não está sendo usado pela escola. Isso dependerá de como o provedor de serviços de Internet da escola filtra o tráfego.

Quando alguém acessa seu aplicativo de uma LAN que usa o espaço de endereçamento RFC 1918, o dispositivo de borda do usuário remoto está direcionando o endereço de origem para um IP público, para que você não veja o tráfego RFC 1918 vindo da Internet (a menos que alguém esteja tentando fazer algo desonesto).

    
por 19.06.2014 / 22:42
1

De jeito nenhum isso funcionará. Existe uma enorme probabilidade de os usuários, quando em uma rede privada diferente, descobrirem que estão usando um intervalo RFC1918. O RFC não diz que eles são reservados para uso privado apenas pela sua escola. Essencialmente, toda organização que não possui IPs públicos para jogar fora (quase todos eles) está usando endereços RFC1918 para terminais.

O melhor método, possivelmente apenas confiável, é ter um nome de host que seja um ou ambos:

  1. Solucionável apenas pelos servidores DNS em seu uni que o cliente estaria usando.
  2. Acessível somente de dentro da sua rede.

É assim que coisas como o Microsoft NLA (reconhecimento de local de rede) no trabalho do Direct Access. Se você não pode acessar privateserver.myuni.edu, então você está na rede pública e precisa entrar pelo lobby.

/ edit Bah. Eu não entendi a pergunta. Senti falta do sistema da web, achei que o solicitante estava desenvolvendo um componente de software cliente. A resposta de Evan é a resposta apropriada.

    
por 19.06.2014 / 22:34

Tags