Tabela de conteúdo |
Nosso objetivo é configurar um servidor para fornecer o serviço de VPN, só que da forma mais simples e compatível com os Sistemas Operacionais, e da forma mais segura possível.O ambiente irá funcionar da seguinte forma:
Cliente ==> PPTPd ==> FreeRadius ==> OpenLDAP
A idéia é que os clientes sejam autenticados no OpenLDAP utilizando o FreeRadius para autenticação e seja feita uma contabilização de conexão com o FreeRadius.
Antes de começar a seguir este tutorial você precisa ter o FreeRadius e o OpenLDAP instalado. Tenha certeza que estes softwares estejam instalados e funcionando. De qualquer forma você pode testar a configuração inserindo um usuário simples diretamente no arquivo de usuários do PPP (como veremos abaixo).
# apt-get install pptpd
com o serviço instalado, vamos configurá-lo.
A configuração necessária é bem simples, primeiro vamos ativar os módulos necessários:
# modprobe ppp_mppe # modprobe ppp-compress-18
agora para que estes módulos sejam sempre inicializados:
# vim /etc/modules ppp_mppe ppp-compress-18
Depois de configurar os módulos, vamos ajustar o PPTPd:
# vim /etc/pptpd.conf option /etc/ppp/pptpd-options #debug logwtmp localip 192.168.250.1 remoteip 192.168.250.2-254 connections 250
utilize o debug para depurar suas conexões, mas não se esqueça de comentá-las depois.
Agora vamos ajustar as configurações da conexão do cliente com o PPTPd, para garantir que a versão mais segura e a melhor criptografia (128bits), seja utilizada:
# vim /etc/ppp/pptpd-options name pptpd refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 ms-dns 8.8.8.8 proxyarp nodefaultroute #debug lock nobsdcomp
Podemos neste passo criar um usuário básico só para realizar testes, por exemplo:
# echo "usuario pptpd senha *" >> /etc/ppp/chap-secrets
Feito isso, apenas reinicialize o serviço:
# /etc/init.d/pptpd restart
e teste a conectividade com usuário: usuario e senha: senha.
Para que a autenticação seja realizada utilizando um servidor FreeRadius configurado anteriormente, precisamos instalar no nosso servidor de VPN o cliente para o radius:
# apt-get install libradiusclient-ng2
depois vamos renomear o diretório do cliente radius:
# mv /etc/radiusclient-ng/ /etc/radiusclient/
e o próximo passo é criar um dicionário com as informações da RFC 2548 para Microsoft:
# vim /etc/radiusclient/dictionary.microsoft # # Microsoft's VSA's, from RFC 2548 # # $Id: dictionary.microsoft,v 1.1 2002/03/06 13:23:09 dfs Exp $ # VENDOR Microsoft 311 Microsoft ATTRIBUTE MS-CHAP-Response 1 string Microsoft ATTRIBUTE MS-CHAP-Error 2 string Microsoft ATTRIBUTE MS-CHAP-CPW-1 3 string Microsoft ATTRIBUTE MS-CHAP-CPW-2 4 string Microsoft ATTRIBUTE MS-CHAP-LM-Enc-PW 5 string Microsoft ATTRIBUTE MS-CHAP-NT-Enc-PW 6 string Microsoft ATTRIBUTE MS-MPPE-Encryption-Policy 7 string Microsoft # This is referred to as both singular and plural in the RFC. # Plural seems to make more sense. ATTRIBUTE MS-MPPE-Encryption-Type 8 string Microsoft ATTRIBUTE MS-MPPE-Encryption-Types 8 string Microsoft ATTRIBUTE MS-RAS-Vendor 9 integer Microsoft ATTRIBUTE MS-CHAP-Domain 10 string Microsoft ATTRIBUTE MS-CHAP-Challenge 11 string Microsoft ATTRIBUTE MS-CHAP-MPPE-Keys 12 string Microsoft ATTRIBUTE MS-BAP-Usage 13 integer Microsoft ATTRIBUTE MS-Link-Utilization-Threshold 14 integer Microsoft ATTRIBUTE MS-Link-Drop-Time-Limit 15 integer Microsoft ATTRIBUTE MS-MPPE-Send-Key 16 string Microsoft ATTRIBUTE MS-MPPE-Recv-Key 17 string Microsoft ATTRIBUTE MS-RAS-Version 18 string Microsoft ATTRIBUTE MS-Old-ARAP-Password 19 string Microsoft ATTRIBUTE MS-New-ARAP-Password 20 string Microsoft ATTRIBUTE MS-ARAP-PW-Change-Reason 21 integer Microsoft ATTRIBUTE MS-Filter 22 string Microsoft ATTRIBUTE MS-Acct-Auth-Type 23 integer Microsoft ATTRIBUTE MS-Acct-EAP-Type 24 integer Microsoft ATTRIBUTE MS-CHAP2-Response 25 string Microsoft ATTRIBUTE MS-CHAP2-Success 26 string Microsoft ATTRIBUTE MS-CHAP2-CPW 27 string Microsoft ATTRIBUTE MS-Primary-DNS-Server 28 ipaddr Microsoft ATTRIBUTE MS-Secondary-DNS-Server 29 ipaddr Microsoft ATTRIBUTE MS-Primary-NBNS-Server 30 ipaddr Microsoft ATTRIBUTE MS-Secondary-NBNS-Server 31 ipaddr Microsoft #ATTRIBUTE MS-ARAP-Challenge 33 string Microsoft # # Integer Translations # # MS-BAP-Usage Values VALUE MS-BAP-Usage Not-Allowed 0 VALUE MS-BAP-Usage Allowed 1 VALUE MS-BAP-Usage Required 2 # MS-ARAP-Password-Change-Reason Values VALUE MS-ARAP-PW-Change-Reason Just-Change-Password 1 VALUE MS-ARAP-PW-Change-Reason Expired-Password 2 VALUE MS-ARAP-PW-Change-Reason Admin-Requires-Password-Change 3 VALUE MS-ARAP-PW-Change-Reason Password-Too-Short 4 # MS-Acct-Auth-Type Values VALUE MS-Acct-Auth-Type PAP 1 VALUE MS-Acct-Auth-Type CHAP 2 VALUE MS-Acct-Auth-Type MS-CHAP-1 3 VALUE MS-Acct-Auth-Type MS-CHAP-2 4 VALUE MS-Acct-Auth-Type EAP 5 # MS-Acct-EAP-Type Values VALUE MS-Acct-EAP-Type MD5 4 VALUE MS-Acct-EAP-Type OTP 5 VALUE MS-Acct-EAP-Type Generic-Token-Card 6 VALUE MS-Acct-EAP-Type TLS 13
logo em seguida crie o mapeamento de portas e IDs caso ele não exista:
# echo "" > /etc/radiusclient/port-id-map
e inclua o mapa criado no final do arquivo de configurações do cliente radius, junto com outro já padrão do sistema:
# vim /etc/radiusclient/dictionary ... INCLUDE /etc/radiusclient/dictionary.merit INCLUDE /etc/radiusclient/dictionary.microsoft
Feito isso, precisamos editar as configurações do cliente radius para que ele se conecte ao nosso servidor FreeRadius:
# vim /etc/radiusclient/radiusclient.conf auth_order radius login_tries 4 login_timeout 60 nologin /etc/nologin issue /etc/radiusclient/issue authserver radius.exemplo.com.br:1812 acctserver radius.exemplo.com.br:1813 servers /etc/radiusclient/servers dictionary /etc/radiusclient/dictionary login_radius /usr/sbin/login.radius seqfile /var/run/radius.seq mapfile /etc/radiusclient/port-id-map default_realm radius_timeout 10 radius_retries 3 login_local /bin/login
Não se esqueça de comentar a entrada bindaddr, pois senão ele não vai enviar a requisição corretamente para o seu servidor. O próximo passo é inserir a senha que será utilizada para autenticação entre o servidor e o FreeRadius (a senha que você colocou no clients.conf do FreeRadius):
# vim /etc/radiusclient/servers radius.exemplo.com.br SENHA_COMPARTILHADA
Agora que o cliente radius está configurado para se comunicar com o nosso servidor FreeRadius, vamos ajustar as configurações no [[[PPTPd]]].
# vim /etc/ppp/pptpd-options ... plugin radius.so plugin radattr.so
Note que nós apenas adicionamos o carregamento dos módulos do radius ao final do arquivo. Ao adicionar estas duas linhas, você vai carregar o plugin de autenticação do radius dentro do PPTPd, reinicie o serviço:
# /etc/init.d/pptpd restart
E antes de tentar se conectar, não esqueça de ajustas as configurações do FreeRadius:
# vim /etc/FreeRadius/modules/mschap
mschap {
use_mppe = yes
require_encryption = yes
require_strong = yes
...
}
Pronto, teste a autenticação do seu servidor de VPN usando usuários válidos no FreeRadius.
Se a idéia é que os clientes VPN possam trafegar na rede usando o servidor de VPN como ponto, precisamos ativar o encaminhamento de pacotes e configurar também o mascaramento da rede:
# vim /etc/sysctl.conf ... net.ipv4.ip_forward=1 ...
Depois é necessário configurar no firewall o mascaramento da rede:
# iptables -t nat -A POSTROUTING 192.168.254.0/24 -j MASQUERADE
Pronto, sua VPN está pronta e em funcionamento.
As configurações realizadas foram feitas de tal forma a suportar conexões usando MSCHAPv2 e para realizar a menor quantidade de configurações possíveis nos sistemas. Abaixo vai uma tabela de quais sistemas são suportados neste ambiente:
| Fornecedor | ||||
|---|---|---|---|---|
| Microsoft | Windows XP SP3 | Windows Vista | Windows 7 | |
| Apple | MacOSX Snow Leopard | MacOSX Lion | iOS 4.2 | iOS 4.3 |
| Linux | Debian Squeeze | Ubuntu 10.04 LTS | CentOS 5.6 | |
| BSD | FreeBSD 7.3 | FreeBSD 8.1 | PCBSD 8.2 | |
| Android 2.1 | Android 2.2 | Android 2.3 | Android 3.0 |
A cor cinza representa um sistema ainda não testado, a verde, sistemas que foram testados e funcionaram, a amarela, para sistemas que conseguiram conectar mas falharam ao finalizar e a vermelha, sistemas que não funcionaram.
A configuração nos derivados do Debian é bem simples e usa o Network-Manager. Para dar suporte ao Network-Manager para gerenciar conexões PPTP é necessário instalar o pacote:
# apt-get install network-manager-pptp-gnome
Depois basta usar o Network-Manager para adicionar uma nova conexão VPN:
Selecionar o protocolo de encapsulamento como PPTP:
Inserir as configurações do seu servidor nos campos especificados:
E para que tudo de certo, você deve alterar algumas configurações em Avançado:
Agora basta conectar a sua VPN.
A configuração no iOS é muito simples, primeiro vamos criar uma conexão VPN em Ajustes->Geral->Rede->VPN:
e depois conectar:
simples assim.
Primeiro vamos criar uma nova conexão VPN do tipo PPTP:
agora vamos ajustar as configurações do servidor, usuário e criptografia:
e depois definir para todo tráfego ser redirecionado por dentro do túnel:
pronto, configuração finalizada.
--Brivaldo 18h42min de 8 de julho de 2011 (AMT)