Uma VPN (Virtual Private Network ou Rede Virtual Privada) consiste, basicamente, na extensão geográfica de uma rede local a partir de um meio inseguro (como a Internet). O processo é feito com tunelamento “protegido” (com criptografia, por exemplo) entre as redes envolvidas. Ou seja, é uma forma rápida, segura e de baixo custo para interconectar redes geograficamente distantes ou fornecer o acesso remoto aos recursos da empresa.
A construção de uma VPN pode ser feita de diferentes maneiras.
Conforme exposto na publicação anterior, tenho optado preferencialmente pela solução Tinc para construção de VPNs site-to-site. Mas, entre gateways Linux, também é comum encontrar implementações baseadas no OpenVPN (tunelamento SSL) ou Racoon (tunelamento IPSEC). Já a construção de VPNs client-to-gateway costuma ser baseada no protocolo PPTP ou IPSEC.
Como demonstrei uma alternativa de configuração para construção de VPNs PPTP site-to-site, nada mais justo que demonstrar o processo de configuração do servidor… 😉
Vale lembrar que, cada conexão é negociada por um serviço que trabalha sob socket tcp/1723, mas o túnel final é GRE (Generic Routing Encapsulation). Como o GRE não é orientado a conexão, será possível estabelecer apenas um túnel POR ORIGEM (IP público).
1. Ajustes mínimos de firewall e módulos de kernel
Por ser uma VPN baseada no protocolo GRE, é preciso carregar o módulo de kernel ip_gre, e o suporte a encriptação MPPE (Microsoft Point-to-Point Encryption) é implementado pelo módulo ppp_mppe. Ambos devem ser carregados manualmente.
Regras de INPUT (iptables) devem ser definidas para liberar o acesso ao serviço pptpd e fluxo de pacotes GRE. Mas, para controlar o tráfego entre diferentes redes, o administrador deverá configurar limites de acesso na cadeia FORWARD.
modprobe ip_gre modprobe ppp_mppe iptables -A INPUT -d 0/0 -p tcp --dport 1723 -j ACCEPT iptables -A INPUT -d 0/0 -p gre -j ACCEPT echo 1 > /proc/sys/net/ipv4/ip_forward
“Esta configuração deve ser prevista pelo script de firewall ou incluída no arquivo rc.local”
2. Configuração do servidor pptpd (arquivo /etc/pptp.conf)
A instalação e configuração do servidor em si é extremamente simples. Os maiores ajustes estão presentes na configuração do serviço pppd, onde podemos informar opções de autenticação, criptografia, servidores de DNS e WINS, por exemplo.
# – Instalação do serviço
apt-get install pptpd# – Configuração
# TAG: option # Specifies the location of the PPP options file. # By default PPP looks in '/etc/ppp/options' # option /etc/ppp/options.pptpd # TAG: logwtmp # Use wtmp(5) to record client connections and disconnections. # logwtmp # TAG: localip # TAG: remoteip # Specifies the local and remote IP address ranges. listen 0.0.0.0 localip 10.50.1.1 remoteip 10.50.1.100-150
Em “listen“, configure o endereço “autorizado” para negociar as conexões de VPN (porta tcp/1723). Assim como em diferentes serviços, ao configurar o endereço como 0.0.0.0, o socket fica disponível globalmente – ou seja, passa a aceitar conexão em qualquer endereço.
Neste exemplo, a faixa de endereçamento definida para os clientes varia de 10.50.1.100 a 10.50.1.150 (remoteip), utilizando como referência local – e servindo como gateway – o endereço 10.50.1.1 (localip).
“Como a interface de rede criada é ponto-a-ponto (PPP), o gateway padrão para os clientes remotos pode ser definido como o endereço configurado em localip, o próprio endereço atribuído ao cliente ou interface PPP“.
3. Definição das opções de rede em /etc/ppp/options.pptpd
Os principais ajustes de rede são feitos neste arquivo. É possível trabalhar com qualquer opção disponível para o serviço pppd (invocado sob demanda).
root@fwsrv:~# vim /etc/ppp/options.pptpd
# Name of the local system for authentication purposes # (must match the second field in /etc/ppp/chap-secrets entries) name pptpd # Authentication refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 # Network and routing ms-dns 10.67.50.10 ms-wins 10.67.50.10 proxyarp mru 1460 mtu 1460 # Disable compression nobsdcomp novj novjccomp # Deny IPX noipx # turn off logging to stderr, since this may be redirected to pptpd nologfd # timeouts idle 1800 lcp-echo-interval 30 lcp-echo-failure 4 nodefaultroute auth #plugin winbind.so #ntlm_auth-helper "/usr/bin/ntlm_auth --helper-protocol=ntlm-server-1"
A opção proxyarp permite ativar a função de pseudo-bridge sobre a interface ppp (tende ser utilizada em conjunto com bcrelay em pptpd.conf) O objetivo prático é permitir que pacotes em broadcast atravessem a VPN. Logo, será irrelevante caso o administrador configure um segmento de rede exclusivo para a VPN.
As opções icp-echo-interval e icp-echo-failure são úteis porque determinam a tolerância a falhas sobre interfaces ppp. Com icp-echo-interval é possível determinar o intervalo de tempo para (re)transmissão de echo (a cada 30s) e icp-echo-failure o limite máximo de falhas. Ou seja, o cliente será desconectado caso o servidor não receba nenhum sinal de echo no intervalo de 2 minutos (30s * 4). É um ajuste interessante em VPNs PPTP ou conexões PPPoE também.
Para autenticação de usuários demonstraremos a configuração de um banco local, através do arquivo /etc/ppp/chap-secrets. Mas, existem alternativas muito mais flexíveis.
“Caso exista interesse em ativar autenticação integrada com o AD, ingresse o concentrador ao domínio através do Winbind (Samba). Basta que o Winbind tenha visão dos usuários, não é necessário configurar a integração posix (a configuração do nsswitch é opcional). Neste caso, remova o comentário das duas últimas linhas. Também é possível integrar o pppd a um servidor Radius“.
4. Autenticação local
root@fwsrv:~# vim /etc/ppp/chap-secrets
# Secrets for authentication using CHAP # client server secret IP addresses fltunel2 * s3nhavpn2 10.50.1.52 fltunel3 * s3nhavpn3 10.50.1.53
Os usuários são definidos na primeira coluna e a senha na terceira. A reserva de IP pode ser feita pela última coluna. E, para alocação dinâmica (dentro do intervalo programado), basta configurar a última coluna como “*” ao invés do IP.
Por fim, basta reiniciar o serviço pptpd:
service pptpd restartou
systemctl restart pptpd
Espero que o material seja útil! 😉
[…] As etapas descritas são suficientes para ativar a autenticação prevista no artigo em que demonstramos a configuração de um concentrador de VPN PPTP. […]
Boa Jucá! Ajuda bastante ter conteúdo de qualidade assim que vai direto ao assunto.
Abraço!
Tem que ser feita alguma configuração no roteador para que o pptpd funcione?