Unidade C - Instalação e configuração de serviços de acesso remoto

C.1. Acesso remoto

Os protocolos de terminal remoto foram criados para permitir a comunicação entre computadores de uma mesma rede. O host que disponibiliza esse serviço compartilha uma interface texto a partir da qual os clientes de rede podem ter acesso seus recursos. Este tipo de serviço é muito utilizado para realizar a manutenção servidores de rede. Remotamente o administrador da rede pode se conectar ao servidor de uma rede corporativa e verificar a disponibilidade dos serviços que este provê. Vamos supor o caso de uma rede de uma empresa composta por uma matriz e diversas filiais onde cada uma destas possui um servidor próprio com um banco de dados local, que ao final do dia atualiza as suas informações no servidor central. Caso algum destes servidores remotos das filiais pare de funcionar e o administrador da rede não esteja fisicamente no local onde o problema ocorreu ele poderá tentar imediatamente solucionar este problema conectando-se ao host remoto através do serviço de terminal.

Os serviços de terminal também permitem a execução remota de aplicativos. Esta técnica que era muito utilizada por sistemas administrativos projetados em linguagens de programação que utilizavam interface texto. Desta forma diversos clientes podiam ter acesso ao sistema armazenado no servidor simultaneamente através de diferentes seções de terminal remoto. Uma evolução deste tipo de acesso é o compartilhamento de desktop gráfico utilizado por serviços como o LTSP que permitem executar diversos aplicativos (como navegadores web, editores de texto, etc.) remotamente, mas isto é assunto para outra unidade.  Veremos a seguir as funcionalidades do telnetd e do openssh dois softwares que implementam acesso remoto em servidores Debian/Linux.

C.1.1. Telnet

O Telnet é um dos serviços de mais antigos da internet. A primeira implementação deste serviço data de 1969. Trata-se de um serviço cliente-servidor que realiza o compartilhamento de terminal. Este serviço permite ao usuário, através de uma interface texto, realizar diversas operações no host remoto tais como consultar informações, gerenciar serviços, etc. O servidor telnet, por padrão, aceita a conexão de clientes através da porta 23. A maioria dos sistemas operacionais atuais possui aplicativos clientes que realizam a interface com o servidor. No caso dos sistemas operacionais da plataforma windows e Linux ele se chama “telnet”. Veja o exemplo:

C:\> telnet 192.168.1.10

Para ter acesso ao servidor o cliente que enviou a solicitação deverá informar um usuário e senha que deverão estar previamente cadastrados no sistema. Uma vez autenticado o cliente tem acesso ao servidor. Apesar de funcional e rápido o uso do Telnet é recomendado apenas em controlados como uma rede interna, por exemplo, devido ao fato dos dados transmitidos pelo serviço para a rede não utilizarem nenhuma forma de criptografia e ficarem expostos na rede.

 

 

É possível utilizar o comando Telnet para verificar a disponibilidade de outros serviços de rede. Para isso, basta incluir o número da porta logo após o nome do host na chamada do comando. Por exemplo, se recebermos uma resposta ao comando: "telnet 192.168.1.10 80" onde temos o IP do servidor seguido pelo porta 80 (utilizada pelo servidor web) é sinal de que este serviço esta ativo e funcionando corretamente do servidor.

 

Instalação e configuração do serviço Telnet no Debian/Linux

Nas distribuições Debian/Linux o servidor utilizado é o para instala-lo utiliza-se o comando:

# apt-get install telnet telnetd

É possível realizar alguns ajustes que permitem controlar o acesso ao servidor através deste protocolo. Por segurança é indicado alterar a porta padrão pela qual o serviço responde já que ela pode ser facilmente identificada por portscaners. Para realizar esta tarefa deve-se alterar o arquivo /etc/services e configurar outro valor para a porta pela qual o servidor responderá. Também é possível também restringir este serviço aos hosts de rede declarados no arquivo /etc/hosts.allow e negar acesso aos hosts informados no arquivo /etc/hosts.deny.

Para gerenciar o acesso ao servidor também é possível verificar as mensagens de log das sessões realizadas são armazenadas no arquivo /var/log/daemon.log e os registros de autenticação no sistema salvos no arquivo as /var/log/auth.log.

C.1.2. SSH (Secure Shell)

O SSH (Secure Shell) é outro protocolo que prove acesso remoto cujo diferencial está na ênfase na segurança Por este motivo este é o protocolo de acesso remoto mais utilizado atualmente. O servidor SSH utiliza conjunto de técnicas de criptografia para assegurar que apenas as pessoas autorizadas tenham acesso ao servidor e que todos os dados transmitidos não possam ser capturados e a integridade da conexão seja mantida. O SSH utiliza chaves assimétricas para fazer a autenticação: a chave pública permite encriptar dados e a chave privada permite desencriptar estas informações. Quando um cliente se conecta a um servidor SSH, trocam-se suas respectivas chaves públicas, permitindo que um envie informações para o outro de forma segura. Assim como o Telnet, o SSH é um protocolo que utiliza a arquitetura cliente-servidor. O servidor responde as requisições dos clientes pela porta 22. Nas distribuições Debian/Linux o cliente SSH é nativo. Para solicitar o acesso a um servidor utiliza-se o comando:

$ ssh 192.168.1.10

Após a execução do comando será solicitado um usuário e senha. È possuvel já na linha de comando informar o usuário. Veja o exemplo:

$ ssh usuario@ip_do_servidor

Assim como no Telnet o acesso somente será estabelecido após a confirmação de um usuário e senhas validos. Na plataforma Windows não há clientes nativos, entretanto é possível fazer isso de programas como o Putty que é distribuído sem ônus por seus desenvolvedores. Este software possui uma interface simples onde deve-se informar o IP do servidor (ou nome DNS) e a porta de comunicação correspondente ao serviço solicitado. Veja a figura C 1.2.1:

Após clicar no botão "Open" exibida a tela de login em que será solicitado um usuário e senha de acesso. Se o usuário for autenticado o acesso ao servidor será disponibilizado. Veja o exemplo na figura C 1.2.2:

 

 

Para mais informações sobre este software acesse: http://www.chiark.greenend.org.uk/~sgtatham/putty/

 

Instalação e configuração do servidor SSH no Debian/Linux

Nas distribuições derivadas do Debian, o pacote correspondente ao servidor SSH se chama-se openssh-server e pode ser instalado por meio do apt-get:

# apt-get install openssh-server

O arquivo de configuração do servidor SSH é o sshd_config que é instalado em /etc/ssh/. Através deste arquivo é possível customizar o funcionamento do servidor alterando os parâmetros de algumas clausulas deste arquivo. Como comentamos anteriormente uma prática interessante para este tipo de serviço é alterar a porta padrão pela qual ele responde. Para tanto basta alterar a clausula Port. Por padrão ela esta declarada da seguinte forma:

Port 22

Para configurarmos o servidor SSH para responder por outra porta como 444, por exemplo, deve-se realizar a seguinte alteração:

Port 444

Após o reiniciarmos o serviço e efetivar essas alterações será necessário informar a nova porta de comunicação quando quisermos nos conectar ao servidor através de um cliente SSH. No terminal o comando ficaria assim:

#ssh usuario@192.168.1.10 –p 444

No putty da mesma forma devemos informar este novo parâmetro para efetivar a conexão. Veja o exemplo na figura C.1.2.1.1:

No sshd_config também temos a opção ListenAddress que permite identificar por qual interface de rede o servidor receberá conexões, supondo um o servidor possua duas ou mais placas de rede. Se tivermos, por exemplo, um servidor com duas interfaces uma ligada a rede interna com o IP 192.168.1.10 e outra ligada a internet com o IP 189.204.110.2 e não quisermos  disponibilizar o serviço de acesso remoto a rede externa configuraríamos esta clausula da seguinte forma:

ListenAddress 192.168.1.10

É altamente desaconselhado permitir que o usuário root realize login diretamente no terminal SSH. Se o nosso servidor estivesse na Internet e sofresse um ataque de algum usuário mal intencionado que buscasse realizar um acesso não autorizado ao servidor, este teria o seu o seu trabalho facilitado, pois iria centrar os seus esforços apenas tentar descobrir a senha do usuário root (já que esse usuário é conhecido por todos) e se obtivesse sucesso entraria no sistema sem nenhuma restrição de acesso. O padrão nas redes de computadores é que o administrador de rede tenha uma senha própria e somente após realizar o login SSH faça o acesso como root (su –root). Desta forma adiciona-se um nível de segurança de acesso eliminando a possibili­dade de algum atacante obstinado conseguir adivinhar a senha de root. Para habilitar esta restrição deve-se ajustar a instrução PermitRootLogin no arquivo de configuração do servidor SSH alterando o parâmetro para “no”:

PermitRootLogin no

Com relação às senhas também é possível também é possível configurar o servidor para não aceitar login com senhas em branco. Para inibir este tipo de acesso devemos configurar a instrução PermitEmptyPasswords:

PermitEmptyPasswords no

E assim como o telnet é possível também limitar os usuários do sistema que terão acesso ao serviço SSH adicionando a clausula AllowUsers ao final do arquivo de configuração e informando o nome dos usuários permitidos. Veja o exemplo:

AllowUsers administrador webmaster

Assim apenas os usuários declarados nesta clausula terão acesso ao sistema. Se quisermos inverter a lógica e conceder o acesso a todos os usuários e negar somente para alguns também é possível através adição da clausula DenyUsers:

DenyUsers root

Em termos de segurança a primeira política de restringir o acesso SSH a um número restrito de usuários é bem mais eficaz. Para reiniciar o serviço SSH pós salvar as alterações arquivo de configuração utiliza-se o comando:

#invoke-rc.d ssh restart

Assim como em todos os demais serviços de rede além da opção restart podemos gerenciar o serviço SSH através dos comandos: invoke-rc.d ssh start e invoke-rc.d ssh stop.