VPN L2TP no Mikrotik
Postei há um tempo atrás um artigo (http://wp.me/p1Ox5z-1C) que apresentava o Mikrotik, suas várias utilidades e como ele auxilia e facilita a administração de redes.
Neste post vou mostrar uma (das várias) opções que ele possui para conexões VPN. Só para deixar claro, o foco é a VPN, então não abordarei detalhadamente roteamento, firewall, proxy, controle de banda……
Principais termos do artigo:
- VPN (Virtual Private Network)
As redes virtuais privadas (VPNs) são conexões ponto a ponto em redes privadas ou públicas, como a Internet. Um cliente VPN usa protocolos especiais baseados em TCP/IP, denominados protocolos de encapsulamento, para realizar uma chamada virtual a uma porta virtual em um servidor VPN. (http://technet.microsoft.com/pt-br/library/cc731954(WS.10).aspx)
- L2TP (Layer Two Tunneling Protocol)
Protocolo que une as vantagens do PPTP (Point-to-Point Tunneling Protocol) e do L2F (Layer Two Forwarding), o L2TP realiza o encapsulamento de pacotes PPP podendo fazer uso dos mecanismos de autenticação. Também provê suporte para autenticação do túnel, permitindo que as extremidades sejam autenticadas. (http://www.lncc.br/~borges/doc/VPN%20Protocolos%20e%20Seguranca.pdf)
Cenário da solução:
Os mikrotiks foram usados para estabelecer uma conexão VPN entre a matriz e as filiais de uma empresa. Esta solução foi aplicada e os únicos problemas encontrados desde então são relacionados à indisponibilidade do link por parte da operadora. Após a conexão com a VPN é possível acessar todos os serviços de rede disponíveis na matriz, como por exemplo:
- Autenticação no domínio;
- Comunicador instântaneo corporativo;
- Email;
- Repositórios de dados;
- Compartilhamentos de rede;
- Acesso via SSH e Terminal service à servidores de desenvolvimento e estações de trabalho;
Na matriz o mikrotik recebe as conexões provenientes das filiais e faz a comunicação com a rede interna. Já nas filiais, os mikrotiks são responsáveis por:
- Receber a conexão da internet;
- Fornecer serviço de endereçamento à rede (DHCP);
- Fornecer serviço de resolução de nomes (DNS) – remoto e local;
- Compartilhar a conexão com a internet com o servidor proxy;
- Proteger a rede – Firewall de borda;
- Estabelecer a conexão VPN com a matriz;
Mikrotik da matriz (a partir de agora o chamaremos de servidor):
- Servidor L2TP;
- Interface 1: link dedicado – IP do servidor;
- Interface 2: rede local matriz – IP: 192.168.0.222;
- Endereçamento de rede da matriz: 192.168.0.0/24;
Mikrotik da filial (a partir de agora cliente):
- Cliente L2TP;
- Interface 1: internet – IP dinâmico;
- Interface 2: rede local filial – IP: 192.168.30.254;
- Interface 3: proxy – IP 10.1.1.3;
- Endereçamento de rede da filial: 192.168.30.0/24;
Nota: nestas configurações foi utilizada a solução completa da Mikrotik: o sistema e o hardware.
1 Configuração do servidor
- Para saber mais sobre o Winbox acesse o link: http://www.mikrotik.com/testdocs/ros/2.9/guide/winbox.php
- Download do software: http://wirelessconnect.eu/articles/winbox_download
1.1 Conectar ao router através do Winbox
Conect to: selecionar o IP ou MAC do dispositivo desejado Login: admin Password: por default o router não possui senha de conexão
1.1.1 Para alterar identificação (nome do router), clique no menu System (1) -> Identity (2) e insira o novo valor para o campo(3);
1.1.2 Para alterar configurar/alterar a senha de acesso do router, clique no menu System (1) > Password (2) > informar os valores solicitados (3);
1.2 Ajustar a data e o horário
1.2.1 Para alterar habilitar o serviço NTP client, clicar no menu System (1) > NTP Client (2) > Preencher as informações com os servidores da preferência (3)
1.2.2 Para ajustar o horário, clicar no menu System (1) > Clock (2) > Selecionar o Time Zone de acordo com o GMT, no nosso caso America/Sao_Paulo(3)
Na maioria das interfaces de configuração presentes no Mikrotik, aparecem os botões de funções sobre interface, regras, rotas, pool, são eles:
1.3 Alterar endereços das interfaces
1.3.1 Clicar no menu IP (1) > Adresses (2) > Add (3) e preencha as informações:
Address: endereço IP da interface; Network: máscara de subrede; Broadcast: endereço de broadcast da rede; Interface: interface que receberá o IP.
OBS: As interfaces Dinâmicas (D) são criadas pelo quando uma nova conexão é estabelecida, portanto não devem ser alteradas.
Nota: Caso o modem/router do provedor de internet possua um servidor DHCP ativo, basta conectar o cabo ao Mikrotik, não sendo necessário configurar um IP para o mesmo
1.4 Criar a conexão L2TP
1.4.1 Clicar no menu PPP (1) > L2TPSERVER (2) > Enabled (3) > OK
OBS: No servidor L2TP as interfaces são dinâmicas, portanto criadas quando a conexão é estabelecida.
1.4.2 Ainda na interface do PPP clicar em Secrets (1) > Preencher os dados da nova conexão (2)
Name: nome para a conexão; Password: senha que será informada pelo cliente para conectar; Service: tipo de serviço (padrão: any); Profile: tipo de criptografia (padrão: default-encryption); Local Address: endereço local do túnel estabelecido; Remote Address: endereço remoto do túnel estabelecido;
1.5 Criando as rotas
1.5.1 Clicar no menu IP (1) > Routes (2)
1.5.2 Para que o router tenha acesso à internet, deve ser adicionada uma rota direcionando os as requisições a qualquer endereço (0.0.0.0) para a interface do gateway (1);
1.5.3 Para cada subrede (172.60.x.x), deve ser adicionada uma rota direcionando os acessos feitos a esta subrede para o endereço do servidor (2);
1.5.4 Os acessos à rede remota devem ser direcionados à interface da VPN correspondente (3);
OBS: As rotas dinâmicas (DAC) são criadas quando a conexão é estabelecida, portanto não devem ser alteradas.
1.6 Firewall
1.6.1 Clicar no menu IP (1) > Firewall (2) > NAT (3)
1.6.2 Adicionar a regra de mascaramento de endereço para as requisições partindo da rede interna e direcionando a saída para a interface do gateway (4).
1.6.3 Adicionar a regra de mascaramento de endereço para as requisições partindo das redes remotas e direcionando a saída para a interface da rede local (5).
1.6.4 Ainda na interface do firewall, selecionar a opção Mangle (1) > Add (2).
Esta seção será utilizada para marcar os pacotes provenientes de tráfego P2P, posteriormente bloqueados pelo firewall.
1.6.4.1 Na nova regra, alterar os seguintes parâmetros:
Aba General:
1 – Chain: Prerouting 2 – P2P: all-p2p
Aba Action:
1 – Action: Mark packet 2 – New packet market: pck-p2p (nome do pacote marcado) Selecionar a opção Passthrough
1.6.5 Selecionar a opção Filter Rules na interface do Firewall
Segue descrição das regras aplicadas no firewall do servidor da VPN:
1.6.5.1 Liberar acesso para conexões estabelecidas
Para todas as interfaces em uso, devem ser adicionadas regras permitindo as conexões de entrada com os estados established e related, conforme imagem abaixo:
Em todas as regras adicionadas, a opção Action, na aba Action deve ter o valor accept.
1.6.5.2 Liberar o protocolo ICMP nas interfaces
Todos os parâmetros utilizados nestas regras são mostrados na imagem. As opções Chain, Protocol e In. Interface estão na aba General, a opção Action pode ser encontrada na aba de mesmo nome.
1.6.5.3 Liberar acesso aos serviços locais no roteador
Todos os parâmetros utilizados são mostrados na imagem. Foram liberadas, na interface da rede local, as portas de acesso aos serviços:
22 - SSH (TCP) 23 – Telnet (TCP) 8291 – Winbox (TCP) 199 – SNMP (TCP) 161 – SNMP (UDP)
1.6.5.4 Liberar portas para a conexão VPN
Na interface do gateway foram liberadas conexões de entradas para o protocolo UDP na porta 1701 e conexões do protocolo gre.
1.6.5.5 Bloquear portas de NetBios
Na interface do gateway foi bloqueado o forward nas portas 445 e 139 do protocolo TCP, e para as portas 137 e 138 do protocolo UDP.
1.6.5.6 Bloquear tráfego P2P
A regra número 17 corresponde ao pacote P2P marcado na sessão Mangle, a referência a este pacote é feita na opção Packet Market na aba General (ver imagem abaixo).
Nas regras 18, 19 e 20 são bloqueados o forward, input e output para pacotes P2P (a imagem abaixo mostra o bloqueio do forward, as regras input e output também devem ser criadas).
1.6.5.7 Bloquear tráfego desconhecido no roteador
As conexões de entrada de destinos desconhecidos são bloqueadas em todas as interfaces do roteador.
1.6.5.8 Liberar acesso entre a rede e as VPNs estabelecidas
Para cada VPN estabelecida através do roteador, é necessário liberar o acesso (input, output e forward) com destino às redes (192.168.x.x) e subredes (172.60.x.x) envolvidas.
2 Configuração dos clientes
Seguir as orientações das seções 1.1 e 1.2 para alterar as informações de acesso, e endereçamento e configuração de hora do router.
Neste caso, os routers clients da VPN também são responsáveis por receber a conexão de internet que será usada na rede interna e ‘encaminá-la’ ao Proxy (não foi utilizado o serviço do mikrotik, devido ao uso de disco do cache). Portanto, o router conta com 3 interfaces de rede: uma para o gateway, uma para a rede local e a terceira para o proxy. A interface da VPN é criada quando a conexão é estabelecida.
2.1.1 Conexão L2TP
2.1.1.1 Clicar no menu PPP (1) > Add (2) > L2TP Client (3)
2.1.1.2 Na opção Name, da aba General, informar o nome da conexão
2.1.1.3 Na opção Dial Out preencher as informações relativas ao servidor da VPN
Server Address: endereço do servidor da VPN User: usuário definido no servidor Password: senha definida no servidor Profile: tipo de criptografia (default: default-encriptation)
2.1.2 Servidor DHCP
2.1.2.1 Clicar no menu IP (1) > Pool (2) > Add (3) > Preencher as informações solicitadas (4):
Name: identificação do Pool Addesses: intervalo de endereços distribuídos pelo servidor Next Pool: deve ser selecionado caso haja um pool na sequência do criado.
2.1.2.2 Clicar novamente no menu IP (1) > DHCP Server (2)
2.1.2.3 Na aba DHCP selecionar a opção Add (1) > Preencher com as configurações desejadas (2)
Name: nome do servidor DHCP Interface: interface na qual o servidor distribuirá os endereços Address Pool: pool de endereços distribuídos
2.1.2.4 Na aba Networks selecionar a opção Add (1) > Informar as configurações (2)
Address: Rede do servidor DHCP Gateway: gateway da rede (pode ser o próprio mikrotik ou o Proxy, por ex.) Netmask: máscara de subrede DNS Servers: servidores de DNS da rede Domain: domínio da rede
2.1.3 Servidor DNS
2.1.3.1 Clicar no menu IP (1) > DNS (2)
2.1.3.2 Clicar em Add (1) > Preencher as informações relativas ao novo servidor (2)
Name: nome do servidor Address: endereço da interface da rede local do mikrotik
2.1.3.3 Ainda na interface do DNS, clicar em Settings (1) > adicionar os endereços dos DNS públicos para consulta do router (2)
2.1.4 Rotas
2.1.4.1 Clicar no menu IP (1) > Routes (2)
2.1.4.2 Para que o router tenha acesso à internet, deve ser adicionada uma rota direcionando os as requisições a qualquer endereço (0.0.0.0) para a interface do gateway (1);
2.1.4.3 Os acessos à rede da matriz devem ser direcionados para a interface da VPN (2);
OBS: As rotas dinâmicas (DAC) são criadas quando a conexão é estabelecida, portanto não devem ser alteradas.
2.2 Firewall
2.2.1 Clicar no menu IP (1) > Firewall (2) > NAT (3)
2.2.2 Adicionar a regra de mascaramento de endereço para as requisições partindo do proxy (5) e direcionando a saída para a interface do gateway (esta regra permite que o Proxy tenha acesso à internet através do router);
2.2.3 Adicionar a regra de mascaramento de endereço para as requisições partindo da rede interna (5) e direcionando a saída para a interface do gateway (esta regra está desabilitada, só será ativada se o Proxy não puder atender às solicitações da rede);
2.2.4 Ainda na interface do firewall, selecionar a opção Mangle (1) > Add (2)
Esta seção será utilizada para marcar os pacotes provenientes de tráfego P2P, posteriormente bloqueados pelo firewall.
2.2.4.1 Na nova regra, alterar os seguintes parâmetros:
Aba General:
1 – Chain: Prerouting 2 – P2P: all-p2p
Aba Action:
1 – Action: Mark packet 2 – New packet market: pck-p2p (nome do pacote marcado) Selecionar a opção Passthrough
2.2.5 Selecionar a opção Filter Rules na interface do Firewall
Segue descrição das regras aplicadas no firewall do cliente da VPN.
2.2.5.1 Liberar acesso de/para o servidor da VPN:
Devem ser permitidas conexões de entrada originadas do servidor da VPN e permitir conexões destinadas ao mesmo servidor.
2.2.5.2 Liberar acesso para conexões estabelecidas
Para todas as interfaces em uso, devem ser adicionadas regras permitindo as conexões de entrada com os estados established e related, conforme imagem abaixo:
2.2.5.3 Liberar o protocolo ICMP nas interfaces:
Todos os parâmetros utilizados nestas regras são mostrados na imagem. As opções Chain, Protocol e In. Interface estão na aba General, a opção Action pode ser encontrada na aba de mesmo nome.
2.2.5.4 Liberar acesso aos serviços locais no roteador
Todos os parâmetros utilizados são mostrados na imagem. Foram liberadas, nas interfaces da rede local e da VPN conexões copm origem na rede local e na rede da matriz, as portas de acesso aos serviços:
22 - SSH (TCP) 23 – Telnet (TCP) 8291 – Winbox (TCP) 199 – SNMP (TCP) 161 – SNMP (UDP)
2.2.5.5 Liberar tráfego entre as redes
É necessário liberar o acesso (input, output e forward) com destino à rede remota (192.168.0.0) e à subrede remota (172.60.30.0).
2.2.5.6 Liberar NetBios entre as redes
As portas do serviço de NetBios foram liberadas na interface da VPN, para permitir o compartilhamento de arquivos entre as redes.
2.2.5.7 Bloquear portas de NetBios
Na interface do gateway foi bloqueado o forward nas portas 445 e 139 do protocolo TCP, e para as portas 137 e 138 do protocolo UDP.
2.2.5.8 Bloquear tráfego P2P
A regra número 30 corresponde ao pacote P2P marcado na sessão Mangle, a referência a este pacote é feita na opção Packet Market na aba General (ver imagem abaixo).
Nas regras 39, 40 e 41 são bloqueados o forward, input e output para pacotes P2P (a imagem abaixo mostra o bloqueio do forward, as regras input e output também devem ser criadas).
2.2.5.9 Bloquear tráfego desconhecido no roteador
As conexões de entrada de destinos desconhecidos são bloqueadas em todas as interfaces do roteador.
Feitas todas as configurações é só ligar o cabo da internet, o proxy e a LAN nas interfaces correspondentes. Os servidores DHCP e DNS já estão ativos e assim que a conexão com a internet for identificada o router inicia a conexão com o servidor da VPN.
Comandos Linux
Quem trabalha ou usa linux sabe que com linha de comando podemos fazer muita coisa no sistema, mas também sabe que são muitos comandos e acredito que seja muito difícil (humanamente impossível, eu diria) saber sempre quais as funções, usos, descrição e todos os parâmetros usados por cada comando. Para dar uma forcinha pra memória, compartilho a iniciativa do Henrique Cisneiros:
Dicas de programação shell
Pequenos detalhes fazem grande diferença…. e na programação não ia ser diferente. Segue alguns posts com algumas dicas sobre programação em Shell
- Programação shell: a influência do ambiente Bash nos comandos emitidos pelo usuário
- Shell Script básico: Para programar Shell não é preciso Texaco
Mais uma busca em relação a shell, dessa vez sobre estruturas de repetição e controle de fluxo em scripts manipulando arquivos de texto, encontrei ótimos trabalhos e dicas que ajudaram bastante, segue:
Proxy reverso com Apache
Muita gente enxerga o proxy apenas como um servidor que intermedia as requisições entre a rede local e a internet, fazendo cache de páginas e controle de acesso. Sem dúvidas, o serviço mais conhecido e utilizado para este fim é o Squid (http://www.squid-cache.org/). Mas o Proxy tem outra característica/função, pouco conhecida mas muito útil: o Proxy Reverso.
Proxy Web x Proxy Reverso
O Proxy Web corresponde à ‘função’ conhecida pela maioria das pessoas. Nesta configuração, o proxy tem a função de compartilhar a internet com a rede local, receber as requisições feitas pelos clientes e buscar o que foi solicitado nos servidores Web. Além disso, o Proxy oferece mais algumas vantagens a um administrador de redes, como:
- Controle de acesso: O acesso à internet pode ser controlado com base no horário, endereço IP do cliente, login e sites com conteúdo indesejado;
- Cache de páginas: o Proxy guarda informações das páginas acessadas. Quando alguém acessa um endereço, o servidor procura primeiro nos seus arquivos armazenados, caso já possua a página, não precisa buscá-la novamente. O que acaba tornando a navegação mais rápida e evitando acessos desnecessários à Web;
- Relatórios de acesso: Todos os logs de acesso são armazenados, o que permite que possam ser criados relatórios dos acessos realizados pelos clientes através do servidor;
O Proxy Web possui tanto função de servidor quanto de cliente. É servidor quando possui os objetos solicitados pelos navegadores e lhe envia as respostas. É cliente quando não possui algum objeto solicitado e precisa requisitá-lo ao servidor Web. Os proxies vêm sendo muito usados nas empresas, com o intuito de acelerar o acesso à Internet e evitar investimentos em ampliação de largura de banda.
O Proxy Reverso é um servidor instalado entre a internet e os servidores Web internos de uma empresa. As requisições externas, são direcionadas a um servidor interno por meio de um roteamento feito pelo Proxy Reverso. Dessa forma, ele é a única interface para as requisições externas.
Imagine a situação: Sua empresa possui o domínio xyz.com.br registrado, seu site (www.xyz.com.br) está em um servidor dentro da sua rede e, além do portal há outras aplicações que precisam ser disponibilizadas externamente. Para cada aplicação é necessário possuir um domínio ou subdomínio registrados? Não! Neste caso, pode ser usado o Proxy Reverso. Como?! É o que vou explicar daqui a pouco.
Além do roteamento de requisições externas, são vantagens do Proxy Reverso:
- Segurança: Como o Proxy é a única interface externa da rede, ele “esconde” os demais servidores;
- Criptografia: a criptografia SSL pode ser delegada o Proxy ao invés dos servidores internos;
- Balanceamento de carga: o servidor pode distribuir a carga para vários servidores da rede;
- Cache: assim como o Web Proxy, o Proxy Reverso pode manter em cache o conteúdo estático das requisições realizadas, ajudando assim a diminuir a carga dos servidores Web.
- Compressão: o Proxy Reverso pode tornar o acesso mais rápido através da compressão do conteúdo acessado;
Configuração do Proxy Reverso
- Habilitar os módulos do Proxy. Para isso, descomente as linhas:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_connect_module modules/mod_proxy_connect.so
- Incluir vhosts na configuração. Para isso acrescente ou descomente a linha abaixo:
Nota: Os vhosts podem ser configurados no httpd.conf, optei pelo uso de um arquivo separado para organizar melhor o servidor.
Nota2: Os vhosts não são necessários na configuração do Proxy Reverso. São utilizados quando há mais de um nome para o mesmo servidor, e cada nome será direcionado para uma aplicação diferente.
Include conf/extra/httpd-vhosts.conf
- Incluir o arquivo de mod-proxy. Para isso acrescente ou descomente a linha abaixo:
Include conf/extra/mod_proxy.conf
Nota: Caso os dois arquivos citados acima não existam no servidor, os mesmos devem ser criados.
Para fazer o roteamento das requisições direcionadas aos servidores internos é utilizado o ProxyPass, a sintaxe é simples, basicamente temos a estrutura:
ProxyPass /destino http://servidor.da.app:porta/destino ProxyPassReverse /destino http://servidor.da.app:porta/destino
Para trabalhar com vhosts, crie ou edite o arquivo conf/extra/httpd-vhosts.conf e crie os vhosts com as seguintes configurações:
Nota: Sempre o contexto informado deve ser igual ao contexto da aplicação.
Nota2: Todos os diretórios referenciados pela aplicação no servidor de hospedagem devem ser configurados no Proxy, a não ser que eles sejam subdiretórios de algum que já tenha sido configurado.
<VirtualHost *:80> ServerName app1.xyz.com.br ErrorLog "logs/app1.xyz.com.br-error.log" CustomLog "logs/app1.xyz..com.br-access.log" common ProxyPass / http://app1.xyz.com.br:8040/ ProxyPassReverse / http://app1.xyz.com.br:8040/ ProxyPass /contexto1 http://app1.xyz.com.br:8040/contexto1 ProxyPassReverse /contexto1 http://app1.xyz.com.br:8040/contexto1 </VirtualHost>
Para trabalhar somente com o roteamento das requisições, apontando as requisições recebidas para outros servidores da rede, crie ou edite o arquivo conf/extra/mod_proxy.conf e insira as linhas de acordo com as aplicações e servidores da sua rede:
ProxyPass /aplicacao http://servidor.xyz.com.br:8040/aplicacao ProxyPassReverse /aplicacao http://servidor.xyz.com.br:8040/aplicacao ProxyPass /teste http://servidor2.xyz.com.br/teste ProxyPassReverse /teste http://servidor2.xyz.com.br/teste ProxyPass /teste_qa http://servidor2.xyz.com.br:8080/teste_qa ProxyPassReverse /teste_qa http://servidor2.xyz.com.br:8080/teste_qa
Sempre que uma alteração no apache for efetuada o mesmo deve ser reiniciado.
Fontes:
http://www.infoq.com/br/news/2010/06/proxy-reverso
http://pt.wikipedia.org/wiki/Proxy_reverso