Acesso seguro a um desktop remoto utilizando Linux, OpenVPN e Nxserver

Administrando redes de computadores remotamente e de forma segura, usando OpenVPN e NxServer para acessar áreas de trabalho compartilhadas na sua rede. Essencial quando se tem ambientes mistos com vários Sistemas Operacionais (Linux, Windows e etc).

[ Hits: 81.715 ]

Por: Bruno Roberto em 17/05/2007


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:
  1. Ambiente desktop (KDE);
  2. 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);
  3. O servidor de VPN: OpenVPN
  4. Um programa que compartilha o desktop desta máquina (NxServer) e 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.
  5. 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 de 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.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Configurando o servidor
   3. Configurando o firewall
   4. Configurando o cliente
Outros artigos deste autor

Instalando Xen 3.3.0 no Debian Lenny Linux

Leitura recomendada

Systemimager - O sistema de imagens do Linux

Configurando o CACIC (parte 2) - Atualizado

SIAGES: Uma oportunidade de negócio com software livre

Instalando VirtualBox 4.0 no CentOS 5.5

NXServer - Uma solução em remote desktop

  
Comentários
[1] Comentário enviado por lucas.suporte em 17/05/2007 - 12:00h

Bom artigo cara não olhei tudo mais só o pouco que vi achei mmuito bom, esta é uma solução muito boa!! Pra quem é administrador de rede e quer ter acesso as estações dos clientes.
Parabens
Abraço
Lucas Rocha

[2] Comentário enviado por carlosraniery em 17/05/2007 - 22:20h

Pessoal, estou tendo problemas com o NXClient, quando o executo recebo esta mensagem de erro:

NX> 595 ERROR: A fatal error occurred in NX Server.
NX> 595 ERROR: The exception id is: 6748CCBF. To get detailed information about
NX> 595 ERROR: the error search for the string 6748CCBF in the system log
NX> 595 ERROR: file (usually '/var/log/messages').
Killed by signal 15.

Em meu log tenho o seguinte:
May 17 22:12:25 localhost NXSERVER 2.1.0-22[21200]: ERROR: (exception id 0170694F) main::parse_args called at nxserver.pl line 4496
May 17 22:12:25 localhost NXSERVER 2.1.0-22[21200]: ERROR: (exception id 0170694F) eval {...} called at nxserver.pl line 4493

Estou usando Debian e o NX foi instalado com os .deb. Qualquer idéia eu agradeço.

[3] Comentário enviado por calaff2 em 17/05/2007 - 22:27h

cara muito bom msm! tbm n li tudo hauah tava lendo sobre ltsp ae parei para ver seu artigo ! + pelo o que eu li ta show!! qq dia vou testar ele aki!!

[4] Comentário enviado por brunaocomanda em 18/05/2007 - 12:59h

Caro Carlos Raniery,

Este erro (NX> 509 ERROR) ocorre no Linux, certo? Quando? No momento da instalação do nxclient*.*deb, por exemplo?!

[5] Comentário enviado por carlosraniery em 18/05/2007 - 20:08h

Opa Bruno, estou usando o Linux sim e o erro ocorre quando, usando o nxclient, tento me logar no servidor. Percebi que logo acima dessas mensagens de erro há uma outra que pode dar uma ideia melhor de qual é o problema:
NX> 148 Server capacity: not reached for user: raniery

[6] Comentário enviado por mpinho em 18/05/2007 - 22:05h

Gostei do artigo mas usar windows em casa eu tô fora. É muito mais prático para administradores Unix/linux usar linux também em casa para essas tarefas de administração remota. No windows tem que ficar instalando um monte de coisas e você fica sem poder fazer testes e acessar os man's localmente.

[7] Comentário enviado por sektor em 19/05/2007 - 16:37h

eu uso openvpn para interligar duas empresas distantes, funciona tudo muito ótimo, e na filial tenho um samba como servidor wins, para as maquinas se enchergarem na rede, quando preciso acessar o servidor remotamente para corrigir alguma coisa, ou ver como esta o andamento do mesmo utilizo o ssh, se eu estiver em uma estação windows, acesso usando o putty, =) muito bom, simples e nao precisa ser instalado, rodo do meu pendrive mesmo...segue o link abaixo para o download...

http://superdownloads.uol.com.br/download/46/putty/

[8] Comentário enviado por aprendiz_ce em 19/05/2007 - 22:59h

Parabéns pelo seu artigo!

Gostei muito mesmo e predendo implementa-lo o quanto antes.

Mas me tira um dúvida: Esse NX é semelhante ao VNC? Se for, essa solução não poderia ser implementa com o VNC?

Obrigado e aguardo retorno.

[9] Comentário enviado por brunaocomanda em 21/05/2007 - 09:03h

MRPINHO.... de acordo com a introdução do artigo, eu utilizo Linux sim em todos os lugares, mas há funcionários aqui na empresa que não utilizam Linux em casa e sim Windows, e como disse, procurava uma forma de acesso independente da plataforma utilizada, pois todos nós precisamos fazer ajustes na nossa rede e aplicações, claro, cada um dentro da sua área.

[10] Comentário enviado por brunaocomanda em 21/05/2007 - 09:07h

Caro SEKTOR... o artigo visa abordar exatamente isso... às vezes, principalmente para servidores com Windows, infelizmente a gente tem, somente SSH não resolve o problema, é preciso acesso ao Desktop e este é um dos focos do artigo, mas claro, nada impede que você acesse os demais servidores UNIX via SSH e isso exatamente que nós fazemos. Essa implemtentação é meio um "canivete suíço", ou seja, várias formas de se usar para vários gostos! =)

[11] Comentário enviado por brunaocomanda em 21/05/2007 - 09:12h

Caro MARDONIO... não, o NX não é a mesma coisa que VNC. Explico: O VNC funciona como "printscreens" da tela, entende? Ou seja, ele fotografa a tela, compacta a imagem e envia para a outra ponta do nó. Por ser assim, acaba sendo muito lento. Diferentemente, o NX passa os parâmetros necessários para que o servidor X monte a tela na outra ponta do nó, como se fossem as cordenadas para se criar outra tela exatamente como aquela está. Por ser assim, apenas comandos, parâmetros, cordenadas, o NX acaba sendo muito mais rápido, e isso faz muita diferença quando se fala em termos de tráfego pela internet.

[12] Comentário enviado por brunaocomanda em 22/05/2007 - 12:03h

Caro Raniery,

Realmente não consegui descobrir o que seja seu problema. Para verificar que não era nenhum tipo de erro no artigo, as vezes faltou algum detalhe, eu fiz uma instalação do Debian total a partir do zero, instalei o sistema básico mais o KDE e segui exatamente todos os passos descritos no artigo para criar o acesso remoto e funcionou perfeitamente, de primeira! Informo que nesta nova instalação, utilizei os drivers genericos do Linux para o vídeo, no caso "vesa" e não fiz alteração alguma em qualquer arquivo de configuração do kde, ssh e etc, apenas criei os ".conf" do openvpn!

[13] Comentário enviado por aprendiz_ce em 29/05/2007 - 15:51h

Bruno,

Entendi a sua explicação. OK?

Muito obrigado e um forte abraço.

[14] Comentário enviado por ricardoolonca em 26/06/2007 - 22:19h

Muito bom artigo. Eu estava com dificuldades da conectar a vpn da empresa através da minha estação Linux de casa. Com algumas pequenas modificações no teu artigo eu consegui numa boa.

Parabéns!

[15] Comentário enviado por caiquemd em 17/07/2007 - 18:13h

Amigo muito bom mais eu quero saber como farei para assesar ao mesmo tempo o servidor linux via openvpn e mapea ambas as maquinas externa...obrigado

[16] Comentário enviado por brunaocomanda em 20/07/2007 - 16:17h

Caiquemd,

Vc deve criar arquivos de configuração, com IP, porta e dispositivo de rede (tun0, tun1, tun2 e etc) diferentes para cada cliente que for acessar a VPN.
Da mesma forma vc configura cada cliente de acordo com cada IP e porta disponibilizados pela VPN. Reinicie o serviço OpenVPN e você verá muitos IPs, cada qual relacionado a cada arquivo de configuração criado. No demais, é tudo igual, inclusive, pode-se utilizar as mesmas chaves. Espero ter ajudado.

[17] Comentário enviado por antonioleite em 26/08/2007 - 17:57h

Amigos ja procurei por diversos artigos e livros e nada é o seguinte: Quando eu executo o ifconfig tun0 da o seguinte erro: TUN0: ERRO obtendo informações da interface: %s dispositivo não encontrado.
Só que eu ja reinstalei o Debian etch umas 1000 vezes e carrego o TUN "modprobe tun" o mesmo esta presente quando dou lsmod e sempre paro ai. Pergunto o que estou fazendo de errado se segui todos os passos acima, eu preciso estar com o outro computador conectado na filial para o TUN subir? Uma ajudinha por favor... Obrigado

[18] Comentário enviado por brunaocomanda em 27/08/2007 - 12:06h

Antonio,

Vc configurou e iniciou o serviço OpenVPN corretamente??? Somente quando o OpenVPN está de pé, é que ele cria a interface TUN0!

[19] Comentário enviado por antonioleite em 27/08/2007 - 14:03h

Eu utilizei o rcconf e o mesmo aparece para iniciar junto com o Debian etch eu até coloquei um link simbolico com o seguinte conteudo

openvpn --config /etc/openvpn/matriz.conf -daemon

e mesmo assim da este erro o que pode ser, sou iniciante tem outra forma de eu ver se o openvpn esta iniciado? ao iniciar o Linux o mesmo ja inicia correto? (/etc/init.d/openvpn restart )

Agradeço a ajuda...

[20] Comentário enviado por antonioleite em 28/08/2007 - 06:15h

Amigo brunaocomanda fiz o teste de restartar o openvpn como vc sugeriu e da o seguinte erro:
MATRIZ(FAILED)

segui exatamente o script acima e logo em seguida passei:
modprobe tun
openvpn --config /etc/openvpn/matriz.conf --daemon
/etc/init.d/openvpn restart

depois disto da MATRIZ(FAILED)

Eu instalei agora o debin sarg 3.1

Uma Ajudinha por favor....

[21] Comentário enviado por brunaocomanda em 30/08/2007 - 13:48h

Caro Antonio Leite,

Para iniciar o OpenVPN no Debian, vc o faz com o comando:
/etc/init.d/openvpn start

Não é necessário passar nenhum parametro. Após o comando execute "ps ax" e verifique se existe um processo para o OpenVPN. Utilize tbem "ifconfig" e veja se foi criado a interface tun0.

[22] Comentário enviado por brunaocomanda em 30/08/2007 - 13:50h

Outro detalhe é quanto ao nome do arquivo: matriz.conf.
Para desencardo de consciencia, mude o nome para openvpn.conf
Falowww...

[23] Comentário enviado por antonioleite em 31/08/2007 - 06:16h

Amigão


Mudei varias coisas para fazer um teste mais rapido, uma delas era o usuario e grupo nobody que não funcionava entaão criei outro usuario e grupo openvpn e ficou assim com o seguinte erro (não sei se é porta mas ja troquei por varias delas 5000, 5001, 5500, inclusive esta liberada no firewall)

openvpn.conf
dev tun
log /etc/openvpn/vpn.log
ifconfig 10.0.0.1 10.0.0.2
cd /etc/openvpn
secret chave
port 1194
user openvpn
group openvpn
comp-lzo
ping 15
verb 3

vpn.log
Fri Aug 31 06:04:37 2007 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Jan 21 2007
Fri Aug 31 06:04:37 2007 WARNING: --ping should normally be used with --ping-restart or --ping-exit
Fri Aug 31 06:04:37 2007 WARNING: you are using user/group/chroot without persist-key/persist-tun -- this may cause restarts to fail
Fri Aug 31 06:04:37 2007 Static Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Fri Aug 31 06:04:37 2007 Static Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Fri Aug 31 06:04:37 2007 Static Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Fri Aug 31 06:04:37 2007 Static Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Fri Aug 31 06:04:37 2007 LZO compression initialized
Fri Aug 31 06:04:37 2007 TCP/UDP: Socket bind failed on local address [undef]:1194: Address already in use

brunaocomanda

Obrigado

Abraços

[24] Comentário enviado por brunaocomanda em 31/08/2007 - 09:30h

Antonio,

Verifique se sua faixa de IP na rede não é a mesma usada no openvpn.conf (10.0.0.1), se for eles não podem estar na mesma rede. Utilize algo diferente como 10.0.0.1 para a VPN e 192.168.10.1 para a interface eth0 ou qualquer coisa nesse sentido.
Observe também se o modulo tun está compilado para o kernel em uso. tente "modprobe tun". Falowww...

[25] Comentário enviado por fabian em 05/01/2008 - 09:37h

Olá amigos.

Segui passo-a-passo o tutorial mas estou encontrando dificuldades para iniciar o openvpn. Quando executo /etc/initi.d/openvpn me retorna:
Starting virtual private network daemon: openvpn(FAILED).

Os amigos saberiam me dar uma luz?

Obrigado!
Diego Fabian


RESOLVIDO.

Executei o comando:

groupadd nobody

E resolveu.

Obrigado!

[26] Comentário enviado por inguants em 24/04/2008 - 18:55h

Carois Amigos,

Estou com problemas na hora de reiniciar o openvpn.

linuxserv:/home/luciano# /etc/init.d/openvpn restart
Stopping virtual private network daemon:.
Starting virtual private network daemon: openvpn(FAILED).

VPLOG

Fri Apr 25 12:30:30 2008 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Sep 20 2007
Fri Apr 25 12:30:30 2008 WARNING: --ping should normally be used with --ping-restart or --ping-exit
Fri Apr 25 12:30:30 2008 Cannot open /etc/openvpn/keys/dh1024.pem for DH parameters: error:02001002:system library:fopen:No such file or directory: error:2006D080:BIO routines:BIO_new_file:no such file
Fri Apr 25 12:30:30 2008 Exiting


ja fiz adcionei o grupo e tudo mas não vai

Desde ja agradeço....

[27] Comentário enviado por roosevelt_bh em 17/05/2008 - 13:14h

Sat May 17 13:10:22 2008 OpenVPN 2.1_rc7 Win32-MinGW [SSL] [LZO2] [PKCS11] built on Jan 29 2008
Sat May 17 13:10:22 2008 WARNING: using --pull/--client and --ifconfig together is probably not what you want
Sat May 17 13:10:22 2008 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Sat May 17 13:10:32 2008 Cannot load CA certificate file ca.crt path (null) (SSL_CTX_load_verify_locations): error:02001002:system library:fopen:No such file or directory: error:2006D080:BIO routines:BIO_new_file:no such file: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib
Sat May 17 13:10:32 2008 Exiting

sera que os senhores poderiam me auxiliar neste problema ????

[28] Comentário enviado por brunaocomanda em 18/05/2008 - 10:23h

Caro inguants,

A inicializacao do openvpn deve ser feita como root, pois se trata de um servico dentro do init.d. O usuario e grupo nobody e para uso do proprio daemon depois de iniciado como root. Se nao o tiver fazendo, tente iniciar com o root.

[29] Comentário enviado por brunaocomanda em 18/05/2008 - 10:25h

Caro Roosevelt_bn,

Vc colocou os arquivos ca.crt cliente.crt e cliente.key no diretorio c:/arquivos de programas/openvpn . Esse deve ser o lugar deles. Apos isso crie um arquivo .bat dentro desse mesmo diretorio com o seguinte conteudo:

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

Inicie a vpn a partir desse script. Lembre-se de configurar bem o arquivo cliente.ovpn confomre o artigo.

Desculpes a demora. Boa sorte e estou a disposicao.

[30] Comentário enviado por eesm_redhat em 02/03/2009 - 10:35h

Cara pode me dar um ajudinha

seguinte eu instalei so que quando tento iniciar o servico me aparece a msg abaixo

openvp /usr/local/sbin/openvpn --config /etc/openvpn/incorp.conf --daemon
Options error: Unrecognized option or missing parameter(s) in /etc/openvpn/incorp.conf:32: tls-server (2.0.7)
Use --help for more information.



[31] Comentário enviado por brunaocomanda em 02/03/2009 - 10:51h

Seguinte eesm_redhat,

Vc está usando a versão 2.0.7 do openvpn. Tente atualizar e usar a versão 2.1

Se não der certo, poste ai o conteudo do arquivo "incorp.conf"

[32] Comentário enviado por andrei_scaratti em 20/08/2009 - 11:22h

Bom dia inguants
estava com esse mesmo problema, para solucionar tive que gerar os certificados novamente.

Att Andrei Scaratti

Estou com problemas na hora de reiniciar o openvpn.

linuxserv:/home/luciano# /etc/init.d/openvpn restart
Stopping virtual private network daemon:.
Starting virtual private network daemon: openvpn(FAILED).

VPLOG

Fri Apr 25 12:30:30 2008 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Sep 20 2007
Fri Apr 25 12:30:30 2008 WARNING: --ping should normally be used with --ping-restart or --ping-exit
Fri Apr 25 12:30:30 2008 Cannot open /etc/openvpn/keys/dh1024.pem for DH parameters: error:02001002:system library:fopen:No such file or directory: error:2006D080:BIO routines:BIO_new_file:no such file
Fri Apr 25 12:30:30 2008 Exiting


ja fiz adcionei o grupo e tudo mas não vai

Desde ja agradeço....


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts