Visite também: Br-Linux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org ·  [mais]
Voltar   Under-Linux.org Fóruns > UnderLinux Wiki
Fóruns Wiki Classificados Reviews Jogos Grupos Sociais RSS Feeds FAQ Termos de Uso Contato Sobre
Registrar FotosBlogs Calendário Marcar Fóruns Como Lidos

Ferramentas pessoais
Publicidade

From UnderLinux Wiki

Administração remota usando OpenVpn+NxServer

Tabela de conteúdo

Introdução

Durante algum tempo procurei uma forma segura para acessar meu desktop Linux do trabalho remotamente, a fim de facilitar na administração da rede. Ora ou outra, principalmente a noite e nos fim de semana, surgem problemas nos servidores ou no processamento que precisam ser resolvidos imediatamente. Para tal, precisava me locomover de casa até o trabalho, sendo que na maioria das vezes eram problemas simples, que poderiam ser resolvidos com poucos comandos ou configurações, e eu perdia um enorme tempo somente com a locomoção. Adicione a isso vários outros administradores (que na verdade são programadores e que utilizam Windows), necessitando acessar essa mesma rede para correções de erros ou configurações em programas quando eventual problema acontecia.

Pensando numa forma de facilitar na administração da nossa rede, de forma remota, ou seja, a partir de qualquer lugar e independente da plataforma operacional usada para acessar (Linux ou Windows), é que resolvi pesquisar e me aprofundar no assunto.

Achei diversas "receitas de bolos" que mostravam como fazer, mas encontrei nenhuma que me satisfizesse por completo, não queria apenas um nível de segurança, como acesso direto por ssh, como também gostaria de acessar meu desktop, afinal o ambiente da empresa é misto, ou seja, temos servidores com Linux, AIX e Windows, e para administrar os serviços Windows necessito de acesso ao seu desktop.

Enfim, após muita pesquisa e quebra-cabeça, descobri uma solução com OpenVPN + NxServer, sendo seus serviços disponibilizados numa máquina com Linux no meu trabalho. Neste computador temos instalado:

  • Ambiente desktop (KDE)

Um pacote chamado rdesktop, que na verdade é uma implementação cliente- servidor do próprio protocolo rdesktop utilizado pela Microsoft para o serviço de Terminal Service (esse programa é que faz a ponte de conexão para os desktops Windows na nossa rede)

  • O servidor de VPN: OpenVPN

Um programa que compartilha o desktop desta máquina (NxServer) que permite a conexão remota a partir da minha casa, independente do SO utilizado para me conectar (Linux ou Windows), ao desktop deste computador no trabalho.

  • Servidor SSH

O OpenVPN é um dos vários pacotes para Linux desenvolvidos para a criação de VPN (Virtual Private Network), existem outros como OpenSwan e outras formas de fazer, como por exemplo usar Ipsec, que é uma implementação do protocolo IP com segurança ou criptografia, feita pelo próprio kernel do Linux. Utilizei o OpenVPN por ser fácil de configurar e pela extensa documentação que o acompanha.

O NxServer é um serviço de compartilha a área de trabalho de um computador com Linux, igual ao VNC, só que muito mais rápido e seguro, permitindo acesso a até dois usuários simultaneamente, cada um com uma sessão independente e onde todos os dados transmitidos são criptografados. Lembrando que o próprio protocolo X (XFree86 ou Xorg) oferece a possibilidade de acesso remoto seguro em cima do protocolo SSH, isto é exatamente o que o NxServer faz.

Desta forma, teremos dois níveis de segurança, sendo um criado pelo túnel VPN e o outro pela implementação de segurança do pacote Nx.

Exemplo do diagrama da VPN:


Baseando-se no diagrama acima, verifica-se que usando a internet a partir da minha casa, criamos um túnel seguro com OpenVPN para acessar um servidor na empresa, o qual tem seu desktop compartilhado pelo NxServer, e a partir deste, acessamos a área de trabalho de qualquer computador com Windows XP ou 2003 usando o protocolo rdesktop, que é nativo do Windows para aplicações de Terminal Server.

Configurando o servidor

Pré-requisitos

Todos os procedimentos de instalação foram feitos usando a distribuição Debian e kernel 2.6, sendo que suponho que você já tenha um ambiente gráfico instalado, no caso o KDE.

Utilizei o OpenVPN baseado no protocolo PTPpoint-to-point-tunneling-protocol), sendo que para funcionar é necessário o módulo TUN/TAP ativo no kernel.

  1. Verifique em /lib/modules/versao-do-kernel/kernel/drivers/net/ se existe o arquivo tun.ko</p>
  2. Se não existir, é necessário compilar este módulo no kernel e não explicarei nesta documentação como realizar tal procedimento.
  3. Instale os pacotes openvpn, openssl, ssh e rdesktop

apt-get update
apt-get install openvpn openssl ssh rdesktop

4. Baixe os fontes *.deb do Nx no site www.nomachine.com

Por questão de dependência, é necessário baixar e instalar o nxclient, nxnode e nxserver, nessa ordem respectivamente.

dpkg -i nxclient_2.1.0-11_i386.deb

Configurando o OpenVpn

Existem vários modos de operação no OpenVpn, como Point-toPoint, Secret e TLS, estou utilizando o modo TLS, porque é o mais seguro. Não irei detalhar como funciona os outros modos citados acima. No caso do TLS, para utilizá-lo é preciso criar uma autoridade certificadora (ca), um certificado (cert), a chave privada (key) e a chave Diffie Hellman (dh) que são responsáveisl por autenticar a chave pública usada no cliente. Junto com o pacote openvpn vem alguns scripts que auxiliam na criação desses arquivos.

Copie a pasta /usr/share/doc/openvpn/examples/easy-rsa para /etc/openvpn/, então acesse /etc/openvpn/easy-rsa/2.0/

Edite o arquivo vars com as informações de país, estado e etc, então execute os comando abaixo preenchendo as informações necessárias:

  • source ./vars # para carregar as varáveis editadas nesse arquivo
  • ./clean-all # para limpar todos os certificados, se eles existirem
  • ./build-ca # cria a autoridade certificadora
  • ./build-key-server server # cria o certificado e chave privada do servidor com os nomes server.crt e server.key
  • ./build-dh # cria a chave Diffie Hellman de 1024 bits
  • ./build-key-pass cliente # cria a chave pública com senha que deverá ser utilizada pelo cliente, com os nomes cliente.crt e cliente.key.

Atenção: não esqueça essa senha, ela será usada para a conexão do cliente.

Todos as chaves e certificados criados serão gravados no diretório /etc/openvpn/easy-rsa/2.0/keys/. Se já não estiver, o faça, e permita que somente o root tenha acesso a esse diretório.

Copie esse diretório keys para /etc/openvpn/

Crie e edite o arquivo /etc/openvpn/openvpn.conf com o conteúdo abaixo:

#Arquivo de configuracao do servidor VP
#Interface virtual de rede utilizada
dev tun
# Modo de utilizacao da VPN
tls-server
# Arquivo de log e seu nivel
log /etc/openvpn/vpn.log
verb 3
# Faixa de rede que sera utilizada na VPN
# 20.0.0.1 # IP virtual do Servidor
# 20.0.0.2 # IP virtual do Cliente
ifconfig 20.0.0.1 20.0.0.2
# Certificados utilizados para autenticacao
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
# Porta padrao
port 1194
# Definindo o user padrao para executar o
# daemon "openvpn" para nobody
user nobody
group nobody
# Restringe o processo do openvpn somente ao diretorio /tmp
chroot /tmp
# Utilizando LZO como biblioteca de compreensao
comp-lzo
# Parametros utilizados para testar se a conexao
# continua "de pe" e para manter estabelecida em
# caso de firewall statefull
ping 15
# Evita que a interface virtual tun seja reiniciada e
# os arquivos de chaves relidos. Essencial quando
# se utiliza user nobody para execução do processo
persist-tun
persist-key

Reinicie o serviço openvpn: /etc/init.d/openvpn restart

Execute ifconfig e você verá que foi criada a interface virtual tun0 com IP 20.0.0.1, também será mostrado o IP original do computador (eth0). <p style="text-indent: 26px;" align="justify"> É interessante verificar também os logs do openvpn em /etc/openvpn/vpn.log

Configurando o NxServer

Os arquivos de configuração do nx são extensos e a princípio não há alterações a serem feitas, portanto apenas reinicie o serviço nxserver: /etc/init.d/nxserver restart.

Para quem quer se aventurar estejam a vontade para fuçar os arquivos de configuração.

Pronto, até aqui seu servidor já está pronto para autenticar a VPN e também com o desktop compartilhado.

Configurando o Firewall

Antes de passar para a configuração do cliente da VPN, se você possui um firewall, devemos fazer as devidas atualizações nas suas regras.

Como estamos falando em acessar um computador a partir da internet, é necessário que o mesmo possua um endereço IP válido para rotear na internet.

Ex: 200.175.x.y, pois do contrário você não conseguirá acessa-lo. Todo mundo que está conectado a internet já tem um IP válido, procure saber qual é, porque não entrarei nos méritos dessa questão.

No meu caso, possuo um firewall como barreira inicial para e da internet e quase todas as implementações de firewalls são feitas para realizarem “mascaramento” de endereços que vêem da internet, com destino as máquinas da rede interna. Portanto, para que a VPN possa funcionar é necessário que não haja esse mascaramento, ou seja, haverá apenas um redirect do nosso endereço de internet (200.175.x.y ou etc) para o destino na rede local (192.168.10.1, suponha que esse seja o IP original do servidor da VPN), só que neste caso, esse servidor da VPN vai estar numa DMZ.

Para quem já conhece, são os mesmos procedimentos tomados para acesso a um servidor Web. Tudo isto deve ser feito para que você possa autenticar a VPN a partir da sua usando um link ADSL ou mesmo internet discada.

Libere acesso no firewall da internet para o servidor VPN (192.168.10.1) na porta 1194 protocolo UDP.

No meu firewall, somente essas configurações foram necessárias. De acordo com a sua segmentação de rede, podem haver mais configurações.

Configurando o cliente

Vamos agora configurar o computador que fará o acesso à nossa VPN, ou nosso cliente.

Baixe e instale o cliente OpenVPN para Windows do site www.openvpn.org. Siga as instruções de instalação normalmente e você verá em Conexões de Rede que foi criado uma interface de rede virtual de nome TUN/TAP32.

Nas propriedades desse dispositivo adicione o IP 20.0.0.2 e máscara 255.0.0.0.

O arquivo de configuração dessa máquina cliente é quase idêntico ao do servidor, sendo adicionado somente a opção remote. Crie um arquivo em C:\Arquivos de programas\OpenVPN chamado cliente.ovpn com o conteúdo abaixo:

# will be pulling certain config file directives
# from the server.
client
# Use the same setting as you are using on
# the server. On most systems, the VPN will
# not function unless you partially or fully disable
# the firewall for the TUN/TAP interface.
dev tun
# Are we connecting to a TCP or
# UDP server? Use the same setting as
# on the server.
proto udp
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
Remote 200.175.x.y 1194 # esse será o IP e a porta usada pelo seu servidor VPN na internet.
ifconfig 20.0.0.2 20.0.0.1
# Keep trying indefinitely to resolve the
# host name of the OpenVPN server. Very useful
# on machines which are not permanently connected
# to the internet such as laptops.
resolv-retry infinite
# Most clients don't need to bind to
# a specific local port number.
nobind
# Try to preserve some state across restarts.
persist-key
persist-tun
# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
ca ca.crt
cert cliente.crt
key cliente.key
# Enable compression on the VPN link.
# Don't enable this unless it is also
# enabled in the server config file.
comp-lzo
# Set log file verbosity.
Verb 3

Copie de forma segura (disquete, pendrive, etc) as chaves do cliente e o certificado que foram criados no Linux, e cole em C:\Arquivos de programas\OpenVPN. São eles:

  • ca.crt
  • cliente.crt
  • cliente.key (somente)

Copie openvpn.exe e os dois arquivos *.dll que estão em C:\Arquivos de programas\OpenVPN\bin para C:\Arquivos de programas\OpenVPN\. <p style="text-indent: 26px;" align="justify">Pronto, nossa VPN já pode ser levantada. Crie um arquivo vpn.bat com o conteúdo abaixo, ele iniciará o processo da VPN.

"C:\Arquivos de programas\OpenVPN\openvpn.exe" --config cliente.ovpn --tls-client

Confirme se o servidor OpenVPN está em execução na máquina com Linux. Execute vpn.bat. Será necessário fornecer a senha usada na criação da chave do cliente. Se tudo der certo você verá algumas informações repetidas de tentativa de adição de rotas (é normal, inclusive a mensagem de erro no final), deixe o prompt aberto, não o feche.

Abra outro prompt do DOS e tente pingar 20.0.0.1, se responder pronto, nossa VPN está funcionando.

Detalhe: o próprio Daemon do OpenVPN, tanto no Linux, como no Windows, já cria as rotas padrões para a conexão.

Baixe e instale o cliente NX para Windows do site www.nomachine.com

Abra esse cliente e crie uma nova sessão com um nome qualquer, host 20.0.0.1 porta 22 e escolha o método de acesso de acordo com sua conexão (Ex: ADSL).

Na próxima tela escolha Unix; KDE; a resolução que quer usar e o mais importante: habilite criptografia TLS para todo o tráfego. Assim, tudo que for transmitido para ambos os lados será criptografado. Perceba que teremos 2 níveis de segurança: um na VPN que já é criptografada e outro do próprio cliente NX, que também garante a segurança de todo o tráfego.

Crie um atalho no desktop e pronto.

Conecte-se com o cliente NX instalado e forneça usuário e senha. Esses são os mesmos que você utiliza para efetuar logon no Desktop KDE do Linux. Tudo certo, você verá no seu desktop Windows uma janela que mostra o desktop do servidor Linux, no caso o KDE.

Verifique os computadores com Windows XP ou servidores com 2000 ou 2003 (Terminal Server deve estar habilitado) os quais você irá querer fazer acesso remoto. No XP libere conexão ao Desktop a partir de Propriedades do Sistema. Pronto já podemos acessar o Windows. Preste atenção na ponte que será utilizada para esse acesso: Windows na minha casa Servidor Linux no trabalho Windows XP ou 2003 no trabalho.

Na tela do Linux (KDE) que você está vendo no seu Desktop Windows, abra um konsole e digite:

rdesktop ip_ou_nome_do_computador_que_quer_acessar &

rdesktop 192.168.10.20 &
rdesktop computador20 &

Pronto agora, de forma segura, você pode administrar qualquer computador da sua rede a partir da sua casa. Divirta-se!!!

Autor

  • Bruno Roberto
  • brunaocomanda [NOSPAM] gmail.com
Horários baseados na GMT -3. Agora são 20:07.


Powered by vBulletin®
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Powered by vbWiki Pro 1.3 RC5. Copyright ©2006-2007, NuHit, LLC
SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.