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.689 ]

Por: Bruno Roberto em 17/05/2007


Configurando o servidor



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

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

2.1. Verifique em /lib/modules/versão-do-kernel/kernel/drivers/net/ se existe o arquivo tun.ko.

2.2. Se não existir, é necessário compilar este módulo no kernel, 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.

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

4.2. Ex: dpkg -i nxclient_2.1.0-11_i386.deb

5. Configurando o openvpn

5.1. 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 é responsável 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/.

5.2. Execute os comandos abaixo preenchendo as informações necessárias:

# ./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.

5.3. 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 só e somente o root tenha acesso a esse diretório.

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

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

# Arquivo de configuração do servidor VPN
# Interface virtual de rede utilizada
dev tun
# Modo de utilização da VPN
tls-server
# Arquivo de log e seu nível
log /etc/openvpn/vpn.log
verb 3
# Faixa de rede que será 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 autenticação
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 padrão
port 1194
# Definindo o user padrão para executar o
# daemon "openvpn" para nobody
user nobody
group nobody
# Restringe o processo do openvpn somente ao diretório /tmp
chroot /tmp
# Utilizando LZO como biblioteca de compressão
comp-lzo
# Parâmetros utilizados para testar se a conexão
# 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

5.6. Reinicie o serviço openvpn:

# /etc/init.d/openvpn restart

5.7. 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).

5.8. É interessante verificar também os logs do openvpn em /etc/openvpn/vpn.log

6. Configurando NxServer

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

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

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

Página anterior     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

Tutorial Radio Web Livre = IceCast2 + Ices2 + FFMP3

Asterisk: Entendendo o arquivo extensions.conf

Instalação e configuração do MySQL 4.0.26, Apache 2.0.54, PHP 5.0.4 e PHP-Nuke 7.8 no Slackware 10.1

Softwares para Biólogos no Linux

Arapuca - Expandindo as funcionalidades do FreeRADIUS

  
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