Mini COMO FAZER Conexão POP Segura via SSH Manish Singh, Traduzido e Revisado por Conectiva Informática, , no dia 30 de Março de 1999. v1.0, 30 de Setembro de 1998 Este documento explica como configurar conexões POP seguras através do ssh. ______________________________________________________________________ Índice geral 1. Introdução 2. Técnica Básica 2.1 Configurando o Reenvio 2.2 Testando isto 3. Usando isto com o seu programa de correio 3.1 Configurando o fetchmail 3.2 Automatizando tudo isto 3.3 Não usando o fetchmail 4. Diversos 4.1 Aviso de Garantias 4.2 Direitos autorais 4.3 Agradecimentos ______________________________________________________________________ 11.. IInnttrroodduuççããoo Seções normais de correio POP, pela sua própria natureza, não são seguras. A senha é enviada através da rede em formato de texto transparente, o qual pode ser visto por qualquer um. Isto pode ser perfeitamente aceitável, em ambientes confiáveis ou protegidos por firewalls. Porém, numa rede pública, como uma universidade ou em um Provedor de Serviços Internet, qualquer um, munido de um leitor de dados de rede, pode tomar conhecimento de sua senha. Isto piora com o fato de que muitas pessoas configuram seus computadores para verificar o correio em intervalos regulares de tempo, então, a senha é enviada com freqüência, o que a torna ainda mais vulnerável. Com esta senha, um atacante pode acessar o seu email agora e este pode conter informações sensíveis ou particulares. Também é bem comum que esta senha seja a mesma que a da conta do usuário em seu ambiente de trabalho. Temos então a possibilidade de danos maiores. Se todo o tráfego POP usar um canal criptografado, então, nnaaddaa será enviado em texto claro pela rede. Pode-se usar vários métodos ssh de autenticação, ao invés de uma simples senha em formato texto. Este é o ponto mais importante para se usar este método: não por que nós tenhamos conteúdos criptografados (o que é fútil neste ponto, uma vez que isto provavelmente já tenha sido enviado em formato não criptografado por várias redes antes de atingir a sua caixa de correio, e a tarefa de assegurar a segurança destas comunicações é trabalho do GNU Guardião de Privacidade ou PGP, e não do ssh), mas sim pela autenticação com segurança. Existem outros métodos de autenticação de segurança, como APOP, KPOP e IMAP. Contudo, o uso do ssh tem a vantagem de que ele trabalha com configurações normais POP, sem requerer clientes especiais (nem todos os clientes de correio suportam protocolos avançados) ou suporte no servidor (exceto pela execução do sshd no servidor). O seu provedor de correio pode ser incapaz ou relutar em usar um protocolo mais seguro. Além disso, usando ssh também pode-se compactar o tráfego, o que é muito bom em conexões lentas. 22.. TTééccnniiccaa BBáássiiccaa Esta técnica baseia-se em uma característica fundamental do ssh: o _r_e_e_n_v_i_o Existem muitas variações sobre o tema que dependem da configuração de correio desejada. Todas elas requerem o ssh, que pode ser encontrado em http://www.ssh.fi/, nos espelhos RPMs em ftp://ftp.replay.com/pub/crypto/ e nos pacotes Debian disponíveis em ftp://non-us.debian.org/debian-non-US/ (além de seus respectivos espelhos). 22..11.. CCoonnffiigguurraannddoo oo RReeeennvviioo Para iniciar o reenvio, deve-se executar o seguinte comando: ssh -C -f popserver -L 11110:popserver:110 sleep 5 Vamos olhar de perto este comando: ssh O binário do ssh é o programa mágico que faz isto tudo. -C Capacita a compactação do fluxo de dados. É opcional, mas normalmente útil, especialmente para usuários que utilizem conexões discadas. -f Uma vez que o ssh tenha realizado a autenticação e estabelecido o reenvio, entra em modo de execução em segundo plano, permitindo que outros programas possam ser executados. Uma vez que estamos usando somente as características de reenvio de ssh, não precisamos de um terminal ligado a ele. popserver O servidor POP ao qual estamos conectados. -L 11110:popserver:110 Reenvio local da porta 11110 para a porta 110 no servidor pop. Usamos uma porta local alta (11110) assim qualquer usuário pode criar um reenvio. sleep 5 Depois que o ssh entrou no modo de execução de segundo plano, ele executa um comando. Usamos o sleep, pois assim a conexão é mantida por tempo suficiente para o cliente de correio poder configurar a conexão com o servidor. Cinco segundos é normalmente um tempo suficiente para que isto aconteça. Pode-se usar muitas outras opções para o ssh quando apropriadas. Uma configuração comum pode ser um nome_de_usuário, desde que ele seja diferente do servidor POP. Isto _r_e_q_u_e_r o ssh funcionando no servidor POP. Entretanto, não é necessário ter um interpretador de comandos configurado para a conta. O tempo que ele leva para imprimir a mensagem: "Você não pode executar o telnet", é suficiente para configurar a conexão. 22..22.. TTeessttaannddoo iissttoo Uma vez que se tenha entendido os detalhes do comando para o estabelecimento de um reenvio, pode-se testá-lo. Um exemplo é: $ ssh -C -f coringa@servidor_pop -L 11110:popserver:110 sleep 1000 servidor_pop é o nome do servidor POP. Meu nome_de_usuário em minha máquina local é manish, então preciso especificar explicitamente o nome_de_usuário coringa (se o nome_de_usuário for igual para o servidor local ou remoto, a sua especificação é desnecessária). Isto imprime então: corina@popserver's password: onde se deve digitar a minha senha POP (pode-se ter senhas de ambiente de trabalho e POP diferentes, então use a senha do ambiente). Está pronto! Para testar, digite: $ telnet localhost 11110 isto deverá apresentar algo como: QUALCOMM POP v3.33 ready. Woohoo! Funciona. Os dados são enviados criptografados pela rede, e assim, o único texto claro está sobre as interfaces de loopback da minha caixa local e do servidor POP. 33.. UUssaannddoo iissttoo ccoomm oo sseeuu pprrooggrraammaa ddee ccoorrrreeiioo Esta seção descreve a configuração do programa cliente POP para usar a conexão de reenvio do ssh. O foco primário será o fetchmail (utilitário excelente para recebimento e envio de mensagens), uma vez que este é o programa mais flexível que eu encontrei para lidar com o POP. Ele pode ser encontrado em http://www.tuxedo.org/~esr/fetchmail/. Será de grande ajuda a leitura da excelente documentação que o acompanha. 33..11.. CCoonnffiigguurraannddoo oo ffeettcchhmmaaiill O que se segue é o meu .fetchmailrc: ______________________________________________________________________ defaults user msingh is coringa no rewrite poll localhost with protocol pop3 and port 11110: preconnect "ssh -C -f msingh@popserver -L 11110:popserver:110 sleep 5" password foobar; ______________________________________________________________________ Bem simples, não? O fetchmail tem um grande número de comandos, mas suas chaves são as linhas preconnect e a opção poll. Não estamos nos conectando diretamente com o servidor POP, mas sim com a porta 11110 da máquina local. O parâmetro preconnect faz o reenvio cada vez que o fetchmail for executado, deixando a conexão aberta por 5 segundos, quando então o fetchmail executa a sua própria conexão. O restante é feito pelo fetchmail. Então, cada vez que ele for executado, será solicitada a informação de senha do usuário via ssh para autenticação. Caso se execute o programa em segundo plano (como eu faço), é inconveniente ter que informar sempre a senha, o que nos leva para a próxima seção. 33..22.. AAuuttoommaattiizzaannddoo ttuuddoo iissttoo O ssh pode autenticar usando vários métodos. Um destes é um par de chaves pública/particular RSA. Pode-se gerar uma chave de autenticação para uma conta usando o utilitário ssh-keygen. Uma chave de autenticação pode ter associada a ela, uma frase-senha ou algo em branco. O uso de uma frase-senha depende de quão seguro se acha que é a conta local que se está usando. Caso se entenda que a máquina é segura, vá em frente e use uma frase- senha em branco. Assim, o .fetchmailrc acima funcionará perfeitamente. Pode-se então executar o fetchmail no modo servidor, quando há um acesso discada e as mensagens de correio são recuperadas automaticamente. Pronto. Entretanto, se você acha que precisa de uma frase-senha, as coisas tornam-se um pouco mais complexas. O ssh pode ser executado sob controle de um aaggeennttee, o qual pode registrar chaves e autenticar qualquer conexão feita sob ele. Para tanto criei o programa getmail.sh descrito a seguir: ______________________________________________________________________ #!/bin/sh ssh-add while true; do fetchmail --syslog --invisible; sleep 5m; done ______________________________________________________________________ Ao fazer um acesso discado, executo: $ ssh-agent getmail.sh Este procedimento solicita a minha frase senha uma vez, depois verifica o correio a cada 5 minutos. Quando a conexão discada é fechada, o agente ssh é encerrado (isto é, automatizado nos programas ip-up e ip-down). 33..33.. NNããoo uussaannddoo oo ffeettcchhmmaaiill O que acontece se eu não posso/não quero usar o fetchmail? Pine, Netscape e alguns outros clientes têm seus próprios mecanismos POP. Primeiro considere o uso do fetchmail! Ele é muito mais flexível e, de qualquer modo, é possível que os clientes do correio não possam executar este tipo de coisa. Tanto o Pine quanto o Netscape podem ser configurados para usar sistemas de correio locais. Se isto for possível, a não ser que o cliente tenha pré-conectado uma característica como fetchmail, será necessário deixar o reenvio ativo todo o tempo em que se estiver conectado. O que significa usar sleep 100000000 para deixar a conexão ativa. Isto pode não funcionar muito bem com o administrador de rede local. Segundo: alguns clientes (como Netscape) tem o número de porta pré-codificado para 110. Então será necessário ser superusuário para executar o reenvio proveniente de portas privilegiadas. Isto é um pouco incômodo, mas deve funcionar. 44.. DDiivveerrssooss 44..11.. AAvviissoo ddee GGaarraannttiiaass Não há garantia que este documento sobreviva ao seu propósito. Ele foi preparado simplesmente como uma fonte livre de referência. Sendo assim, o autor não pode dar qualquer garantia que tais informações sejam realmente precisas. O uso é de total responsabilidade do leitor. Programas de encriptação como o ssh podem estar sujeitos a algumas restrições, dependendo de onde o leitor reside. Em alguns países, deve-se ter uma licença para usar tal programa. Caso não se esteja seguro das leis locais, por favor consulte alguém que esteja familiarizado com esta situação para maiores detalhes. O uso das informações fornecidas neste documento é como uma antecipação às medidas de segurança implementadas pelo provedor de serviços de correio eletrônico. O autor não estimula o abuso ou mau uso dos serviços de rede e fornece este documento somente para um propósito informativo. Se você tem dúvidas sobre se o uso destas técnicas estão de acordo com os serviços do seu provedor de correio, sugerimos um contato prévio com a administração. 44..22.. DDiirreeiittooss aauuttoorraaiiss Este documento é autoria e propriedade de & cópia; 1998 Manish Singh É concedida a permissão para distribuir e copiar literalmente este manual provido da nota de Direitos Autorais e desta nota de permissão preservada em todas as cópias. A redistribuição comercial é permitida e estimulada, entretanto, o autor gostaria de ser notificado de qualquer distribuição. Todas as marcas registradas usadas neste documento são reconhecidas como sendo propriedades de seus respectivos donos. 44..33.. AAggrraaddeecciimmeennttooss Agradecimentos especiais vão para Seth David Schoen que me esclareceu sobre o reenvio no ssh.