PPTPd

De Wiki
Ir para: navegação, pesquisa

PPTPd

Debian Squeeze 6.0

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.

Pacotes Necessários

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.

Configurações Básicas

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.

Configurando Autenticação pelo FreeRadius

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.

Fazendo o Encaminhamento de Conexões pela VPN

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.

Configuração dos Clientes

Clientes Suportados

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
Google 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.

Linux (Debian/Ubuntu)

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:

Debian-Add-VPN.png

Selecionar o protocolo de encapsulamento como PPTP:

Debian-Tipo-VPN.png

Inserir as configurações do seu servidor nos campos especificados:

Debian-Conf-VPN.png

E para que tudo de certo, você deve alterar algumas configurações em Avançado:

Debian-Conf-Avancada-VPN.png

Agora basta conectar a sua VPN.

iOS 4.2 ou Superior

A configuração no iOS é muito simples, primeiro vamos criar uma conexão VPN em Ajustes->Geral->Rede->VPN:

IOS-Configuracoes Gerais.PNG

e depois conectar:

IOS-Conexao Realizada.PNG

simples assim.

MacOSX Snow Leopard ou Superior

Primeiro vamos criar uma nova conexão VPN do tipo PPTP:

OSX-Nova VPN PPTP.png

agora vamos ajustar as configurações do servidor, usuário e criptografia:

OSX-Configuracoes Gerais.png

e depois definir para todo tráfego ser redirecionado por dentro do túnel:

OS-Configuracoes Avancadas.png

pronto, configuração finalizada.

--Brivaldo 18h42min de 8 de julho de 2011 (AMT)