Um de nossos sites corporativos é executado no servidor Linux, construído com Apache2 e PHP5.
Várias páginas da web só podem ser acessadas da sub-rede OpenVPN (endereços 10.8.0.1/24). Para verificar cada solicitação, o script php compara o valor $_SERVER["REMOTE_ADDR"]
fornecido pelo apache e decide conceder ou negar a execução posterior.
A finalidade é negar o acesso a essas páginas a partir de dispositivos não configurados para funcionar através da VPN do servidor.
O servidor OpenVPN está rodando na mesma máquina , é por isso que o PHP recebe endereços como 10.8.0.25 de clientes dentro da VPN e endereços reais para outras solicitações.
-
O método correto é "proteger" a página do acesso público?
Testando este sistema, descobri uma coisa estranha: se eu solicitar uma dessas páginas "protegidas" usando uma máquina Windows, conectada à nossa rede OpenVPN, o servidor poderá ver o endereço IP real (não 10.8.0.xx), ao fazer o mesmo no dispositivo Android funciona como esperado (o servidor não pode ver o endereço IP real e obter 10.8.0.xx em php).
Eu uso o aplicativo OpenVPN Connect no Android e OpenVPN GUI no Windows. Em ambos os casos, o cliente roteia o tráfego através do servidor VPN e "Qual é o meu IP?" serviços mostram endereço VPN e não o endereço real do meu ISP.
Mas, de alguma forma, o cliente Windows é identificado por seu endereço real (provedor) no servidor da Web e não pode acessar páginas protegidas, independentemente de a VPN estar ativada ou desativada.
- Quais são as possíveis razões para isso?
Tenho suspeitas de que o OpenVPN não funcione corretamente no PC com Windows. Caso contrário, por que o servidor reconhece os clientes vpn Android e Windows de maneira diferente?
Obrigado.
UPD: iptables -L na máquina VPN / websrv
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 10.8.0.0/24 anywhere tcp dpts:63000:64000
REJECT tcp -- anywhere anywhere tcp dpts:63000:64000 reject-with icmp-port-unreachable
ACCEPT udp -- 10.8.0.0/24 anywhere udp dpts:64000:65000
REJECT tcp -- anywhere anywhere tcp dpts:64000:65000 reject-with icmp-port-unreachable
DROP all -- anywhere anywhere match-set banned_ips src
UPD :: cmd /k route print
na máquina Windows
Interface List
5...54 04 a6 3d 36 ff ......Realtek PCIe GBE Family Controller
7...fc 75 16 86 ad 84 ......Microsoft Wi-Fi Direct Virtual Adapter
17...00 ff b7 66 85 11 ......TAP-Windows Adapter V9
12...00 50 56 c0 00 01 ......VMware Virtual Ethernet Adapter for VMnet1
13...00 50 56 c0 00 08 ......VMware Virtual Ethernet Adapter for VMnet8
6...fc 75 16 86 ad 82 ......D-Link DWA-125 Wireless N 150 USB Adapter(rev.A3)
1...........................Software Loopback Interface 1
2...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
3...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
11...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
18...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #3
8...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #4
===========================================================================
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.137.1 192.168.137.97 25
0.0.0.0 128.0.0.0 10.8.0.5 10.8.0.6 20
10.8.0.0 255.255.255.0 10.8.0.5 10.8.0.6 20
10.8.0.4 255.255.255.252 On-link 10.8.0.6 276
10.8.0.6 255.255.255.255 On-link 10.8.0.6 276
10.8.0.7 255.255.255.255 On-link 10.8.0.6 276
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
128.0.0.0 128.0.0.0 10.8.0.5 10.8.0.6 20
xxx.53.xxx.yy 255.255.255.255 192.168.137.1 192.168.137.97 25
192.168.10.0 255.255.255.0 10.8.0.5 10.8.0.6 20
192.168.20.0 255.255.255.0 10.8.0.5 10.8.0.6 20
192.168.137.0 255.255.255.0 On-link 192.168.137.97 281
192.168.137.97 255.255.255.255 On-link 192.168.137.97 281
192.168.137.255 255.255.255.255 On-link 192.168.137.97 281
192.168.171.0 255.255.255.0 On-link 192.168.171.1 276
192.168.171.1 255.255.255.255 On-link 192.168.171.1 276
192.168.171.255 255.255.255.255 On-link 192.168.171.1 276
192.168.229.0 255.255.255.0 On-link 192.168.229.1 276
192.168.229.1 255.255.255.255 On-link 192.168.229.1 276
192.168.229.255 255.255.255.255 On-link 192.168.229.1 276
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 192.168.171.1 276
224.0.0.0 240.0.0.0 On-link 192.168.229.1 276
224.0.0.0 240.0.0.0 On-link 10.8.0.6 276
224.0.0.0 240.0.0.0 On-link 192.168.137.97 281
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 192.168.171.1 276
255.255.255.255 255.255.255.255 On-link 192.168.229.1 276
255.255.255.255 255.255.255.255 On-link 10.8.0.6 276
255.255.255.255 255.255.255.255 On-link 192.168.137.97 281
===========================================================================
Persistent Routes:
None
IPv6 Route Table
xxx.53.xxx.yy é o IP da máquina VPN / websrv.
UPD: mais dois fatos
- Webserver e páginas protegidas usam o certificado SSL (https)
- O DNS nos dispositivos Windows / Android está definido apenas para o DNS do Google.