Sem dúvida, Internet é uma das ferramentas de comunicação mais utilizadas no mundo da Informática. Com ela é possível várias atividades: fazer compras, pesquisas, enfim, comunicar dados entre pessoas das mais diferentes raças e nacionalidades.
Do ponto de vista do administrador, a Internet deve ser uma ferramenta que proporcione segurança, flexibilidade e agilidade aos usuários. Ele deve se preocupar com a configuração do servidor web, evitando falhas e garantindo maior rapidez nas conexões.
Para implementar um servidor Internet, este capítulo mostrará as soluções contidas no Conectiva Linux, iniciando pelo servidor web Apache, um servidor completo e com muitos recursos, incluindo domínios virtuais que são tratados em uma seção. Em seguida, são mostradas as implementações do servidor FTP, muito útil para a transferência de arquivos, e um servidor proxy, que realiza tarefas que agilizam o acesso a páginas na Internet, além de garantir segurança.
As empresas preocupam-se com suas imagens na Internet, imagens estas que podem ser comprometidas não somente por má escolha no design de suas páginas como na qualidade dos serviços que pretendem prestar.
A boa implementação de um servidor web é portanto um dos fatores que determinam o sucesso de uma empresa nesta área.
O Servidor web Apache é largamente utilizado no mundo todo. Esta liderança deve-se ao fato de ter um excelente desempenho, alto nível de personalização, confiabilidade, portabilidade, vasta documentação disponível e seu baixo custo.
A palavra Apache significa A PAtCHy, pois foi baseado em um código juntamente com uma série de arquivos patch (um arquivo que tem apenas as diferenças entre duas versões). Para muitos desenvolvedores, porém, a palavra faz referência aos nativos americanos, ou seja, os índios Apache.
Entre as principais características do Apache, pode-se citar: altamente configurável, pode ser executado em diferentes plataformas, é flexível, está sempre em desenvolvimento para a inclusão dos protocolos mais atualizados (por exemplo, HTTP), fornece o código-fonte completo e não possui licenças restritivas, pode ser configurado para diferentes funções, é composto de módulos, cada um implementando uma característica diferente e aumentando a funcionalidade do servidor, além de várias outras características.
Nesta seção será descrito como implementar um servidor Apache com o módulo PHP através do Linuxconf.
Para implantar esta solução é necessário:
que sua rede esteja corretamente configurada e funcionando;
que seu serviço de DNS esteja corretamente instalado e configurado.
Para instalação do servidor web Apache com a inclusão do módulo PHP4, execute o Synaptic e instale os seguintes pacotes:
apache
linuxconf-apache
php4
mod_php4
openssl-progs
ou você pode utilizar o comando apt-get para a instalação:
# apt-get install apache linuxconf-apache php4 # apt-get install mod_php4 openssl-progs |
Execute o aplicativo Linuxconf e dirija-se ao menu Configuração -> Rede -> Tarefas de servidor -> Apache - servidor web . Clique primeiramente no menu Padrões . Através dele são feitas as configurações básicas para tornar o servidor web funcional. Veja a Figura 3-1, que mostra a primeira tela de configuração:
email do administrador: endereço de e-mail do administrador do servidor.
Endereço IP de domínio: se você desejar que vários domínios virtuais compartilhem o mesmo endereço de IP, digite o endereço neste campo.
Nome do servidor: nome do servidor HTTP. Se o serviço de resolução de nomes funcionar corretamente, ou seja, se ele for capaz de determinar o nome da máquina através do endereço IP, então você não precisa (nem deve) preencher este campo. Apenas utilize esta opção se o serviço de nomes for incapaz de resolver o nome do servidor.
Diretório raiz dos documentos: é o diretório em que os arquivos das páginas serão armazenados. O valor padrão é /var/wwww/default e é recomendado que você não seja modificado.
Nomes alternativos de script: configura o diretório de programas CGI. Deve estar em dois caminhos separados por espaços em branco, sendo que o primeiro é utilizado na URL que dispara a execução de um programa CGI, e o segundo indica onde o script está realmente localizado. É recomendado que a configuração padrão seja mantida.
SetUID de usuário para CGI: usuário que deve rodar como servidor web. O padrão é www.
SetUID de grupo para CGI: grupo cujo o servidor web deve ser executado.
Nota: O diretório padrão do Apache foi modificado para /var/www/default por motivos de segurança e padrões. Mais informações podem ser obtidas no Guia Entendendo o Linux.
Se você já possui uma configuração, basta modificar os campos do Linuxconf para que as configurações antigas possam ser lidas, ou poderá também transferir os arquivos que estavam no antigo diretório para o novo, deixando que a nova configuração de diretórios prevaleça.
As abas Registros e Ajustes configuram respectivamente o caminho para os arquivos de registro e ajustes referentes às portas e ao processo. Você não precisa modificar nada nestas abas.
A aba Funcionalidades habilita certas características do Apache. Para mais detalhes sobre essas opções verifique o menu de ajuda do Linuxconf (botão Ajuda). Para finalizar a configuração de padrões, clique em Aceitar.
Para habilitar o módulo PHP, edite o arquivo /etc/httpd/conf/httpd.conf e verifique se as seguintes linhas estão descomentadas (retire o símbolo "#"):
LoadModule php4_module modules/libphp4.so AddModule mod_php4.c AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps # Comente esta linha: # DirectoryIndex index.html index.wml DirectoryIndex index.php index.html index.wml |
Após as configurações, execute o serviço httpd no menu Controle -> Painel de Controle -> Controle de Atividades e serviços, deixando-o, de preferência, no modo automático.
Primeiramente, para testar a configuração do Apache execute um navegador (o Konqueror ou Netscape, por exemplo) e acesse o endereço da máquina local . Se a configuração estiver correta, você verá uma tela semelhante à Figura 3-2:
Se esta página não for mostrada, verifique se existe existem erros contidos no arquivo /etc/httpd/logs/error_log e tente configurar o Apache novamente.
Para testar a configuração do PHP, primeiramente acesse o diretório de arquivos do Apache em /var/www/default. Em seguida, utilizando o seu editor de textos, crie um arquivo chamado data.php, colocando o seguinte conteúdo:
<html>
<? setlocale ("LC_TIME","pt_BR");?>
<body>
Hoje é <? print(strftime ("%A, %d de %B de %Y")); ?>
</body>
</html>
|
Use o navegador para visualizar a página.
Se o mod_php estiver funcionando, você verá a página mais ou menos como na Figura 3-3:
Se a configuração estiver incorreta, você provavelmente irá ver a Figura 3-4:
Se este for o caso, revise os passos da instalação para verificar o que está incorreto. Além disso, verifique o arquivo /etc/httpd/logs/error_log, que deverá conter informações sobre o erro.
Documentação da página oficial do Apache .
Informações e notícias atualizadas, além de artigos, documentação, fóruns e listas de discussão .
Documento Como-Fazer, que descreve os projetos relacionados ao Apache e faz uma descrição geral do servidor web .
Documentação e listagem dos módulos para o Apache .
Solução Conectiva Para a Implantação de um servidor Apache .
A criação de domínios virtuais consiste em utilizar um único endereço IP para vários domínios, na mesma máquina. Cada domínio virtual trabalha de modo separado, com seus próprios arquivos HTML e sua própria configuração.
Quando uma empresa exige maior agilidade na criação de domínios virtuais, a manutenção do arquivo de configuração se torna um grande transtorno. A solução apresentada neste capítulo lhe possibilitará adicionar domínios virtuais através da simples criação de diretórios e entradas no serviço DNS. Em muitos casos é interessante manter um grande número de domínios virtuais. Por exemplo, serviços de hospedagem de domínios é um negócio rentável e que está se tornando bastante popular.
A tarefa de criação de domínios virtuais é bastante simples e é feita através do Linuxconf, envolvendo configuração do servidor web Apache e a configuração do servidor de nomes. Esta última configuração deve ser vista no capítulo sobre o DNS.
Para esta solução é necessário:
que a rede esteja corretamente configurada;
que seu servidor Apache esteja configurado e funcionando corretamente; verifique também se o módulo do Linuxconf para o Apache está instalado;
que o seu serviço DNS esteja funcionando corretamente.
Se você já houver atendido os pré-requisitos, não será necessário instalar nada. Não esqueça apenas de cadastrar corretamente os domínios virtuais no DNS.
Execute o Linuxconf para iniciar a configuração de domínios virtuais. Primeiramente é necessário que você se dirija ao menu Configuração -> Rede -> Tarefas de servidor -> Apache - servidor web -> Padrões e preencha o campo Endereço IP de domínio (aba Básico) com o endereço IP da máquina. Este endereço será utilizado para os domínios virtuais.
Em seguida, acesse a opção Domínios virtuais na configuração do Apache. Clique em Adicionar e surgirá uma tela como na Figura 3-5.
Esta tela mostra praticamente as mesmas opções da Figura 3-1 descritas na seção Configuração. A única diferença é que você deve criar novos diretórios para o novo domínio, como mostra a Figura 3-5. Na aba Registros podem ser criados novos arquivos de registro; isso é extremamente importante caso você tenha que criar uma quantidade considerável de domínios virtuais, pois assim cada domínio terá seus arquivos de erro e registro de acesso. Se nada for modificado, entretanto, todos os registros de todos os domínios irão para os arquivos padrão.
Outra opção que pode ser vista é a configuração do SSL para o domínio virtual (aba Opções do SSL), que será coberto em uma seção posterior com mais detalhes.
Após as configurações, reinicialize o Apache (Controle -> Painel de Controle -> Controle de atividade de serviços). Se você configurou novos arquivos de registros em outros locais, não esqueça de criar estes arquivos nos diretórios apropriados (/etc/httpd/logs).
Não esqueça de configurar corretamente o domínio no servidor DNS. Para isso dirija-se ao capítulo sobre DNS para mais detalhes.
Copie um arquivo HTML qualquer para o diretório de documentos do domínio virtual (em nosso caso, /var/www/site1) e acesse o domínio virtual através de um navegador. Se tudo estiver corretamente configurado, a página será vista normalmente.
Você pode tentar acessar o domínio virtual através do comando ping na linha de comando:
# ping site1.minhaorganizacao PING site1.minhaorganizacao (10.9.8.7): 56 data bytes 64 bytes from 10.9.8.7: icmp_seq=0 ttl=255 time=0.4 ms 64 bytes from 10.9.8.7: icmp_seq=1 ttl=255 time=0.3 ms 64 bytes from 10.9.8.7: icmp_seq=2 ttl=255 time=0.3 ms 64 bytes from 10.9.8.7: icmp_seq=3 ttl=255 time=0.3 ms |
Se aparecer esta tela, seu domínio virtual está corretamente configurado. Para finalizar o ping, basta pressionar as teclas Ctrl - c.
Documentação na página do Apache sobre domínios virtuais .
Como-Fazer sobre domínios virtuais do Apache com o Zope .
Solução Conectiva Para a Implantação de Domínios em Massa com o Apache .
SSL[1] é um método de criptografia desenvolvido pela Netscape™ para fornecer segurança na Internet. Este método suporta diferentes protocolos de criptografia e fornece autenticação ao cliente e ao servidor.
SSL opera através da camada de transporte criando um canal de dados seguro, podendo assim criptografar dados de diferentes tipos. Isto é comumente utilizado quando se acessa um site seguro para visualizar um texto seguro on-line através do Netscape Communicator®, e serve como base para comunicações com o Netscape Communicator®, tanto para este tipo de criptografia como para muitos outros tipos de dados.
Como o SSL trabalha?
Primeiro, executa-se a autenticação do servidor para o cliente. O servidor certificado é assinado por uma autoridade certificadora (ou auto-assinado) para garantir que não está corrompido, estabelecendo um canal de confiança.
Em seguida, o cliente e o servidor podem selecionar os algoritmos de criptografia. Ambos devem suportar estes protocolos.
Opcionalmente autentica-se o cliente, e usa-se criptografia com técnicas de chave pública para gerar segredos compartilhados.
Enfim, é estabelecida uma conexão SSL.
Após esta pequena introdução, será mostrado como configurar o SSL como um módulo do Apache para um servidor web, utilizando o Linuxconf.
Para implantar esta solução você precisa:
o Apache deve estar funcionando;
que um domínio virtual para o Apache esteja configurado e funcionando.
Para instalação do servidor web com segurança, não é necessária a instalação de pacote algum, visto que o Apache do Conectiva Linux é compilado com suporte a SSL.
O Apache disponível no Conectiva Linux já vem compilado com suporte a SSL. Por isso, quando você efetuou a sua instalação, ele já gerou os certificados necessários para esta configuração.
Se o seu plano é obter um certificado assinado por uma Autoridade Certificadora, será necessário criar uma requisição de certificado assinado (CSR), que deverá ser enviado para a empresa especializada. Nesta solução, é criado um certificado auto-assinado[2].
Para configurar o SSL, execute o Linuxconf e dirija-se ao menu Configuração -> Rede -> Tarefas de Servidor -> Apache - servidor web -> Domínios virtuais e edite o domínio virtual que se deseja implementar SSL. Será mostrada uma tela igual a Figura 3-5. Na aba Opções do SSL é que serão feitas as configurações referentes ao domínio virtual. Veja a Figura 3-6.
Serão mostradas com detalhes as opções desta tela:
Pacote Cipher: Cipher é um programa que pode fazer criptografia de dados personalizada. Nesta opção você pode configurar ciphers. Leia as páginas de manual do OpenSSL e os comentários no arquivo /etc/httpd/conf/httpd.conf para obter mais informações. O campo é de preenchimento opcional.
Autoriza arquivo: caminho do arquivo de certificado do servidor. Para nossa solução, o caminho é /etc/httpd/conf/ssl.crt/server.crt.
Autoriza arquivo chave: caminho para a chave privada do servidor. Para nossa solução o caminho é /etc/httpd/conf/ssl.key/server.key.
Autoriza caminho: é o caminho onde se encontram os certificados para a autenticação do cliente. Este campo é opcional.
CA Autoriza arquivo: não é necessário preencher este campo, a menos que você tenha um certificado de uma Autoridade Certificadora.
Registro: configura o arquivo de registro. O padrão é logs/ssl_engine_log.
Opções: Campo opcional. Configura opções para o SSL, como por exemplo protocolos, conexão e mensagens de erro personalizadas.
Mecanismo: Esta caixa deve ser selecionada, pois irá habilitar o SSL para o domínio virtual.
Verifica profundidade: especifica o nível de profundidade que deve se verificar para ver se o certificado é válido. O padrão é 10.
Tempo de espera de cache: configura o timeout, em segundos. O padrão é 300.
Nível de registro: informa que registros podem ser colocados. Por exemplo, o nível info indica o nível de registro de informações.
Verifica Cliente: tipo de autenticação do cliente. Basta escolher um tipo na lista fornecida. O padrão para este campo é none.
Protocolo SSL: escolha do protocolo. O OpenSSL contém todos os protocolos que estão na lista, e portanto é interessante escolher a opção All.
Se desejar, pode também configurar SSL para todos os domínios virtuais de um servidor, configurando o servidor Apache de um modo geral. Isso pode ser feito através do menu configuração do mod_ssl, no menu principal do Apache. As opções que diferem da configuração padrão de apenas um domínio virtual são:
Diálogo de frase-senha: configura o processo de obtenção da chave. O padrão é builtin, o que significa que este é um diálogo interno ao SSL.
Sessão de Cache: configura registros da sessão de cache. Pode conter duas opções: none ou o caminho para o mecanismo utilizado. Geralmente, o caminho correto já está indicado no campo.
SSL Mutex: configura registros de semáforos para a sincronização entre processos. A opção padrão está contida no campo.
Distribuição Aleatória: São dois campos, que configuram o PRNG (Pseudo Random Number Generator), para a biblioteca do SSL. As duas opções indicam inicialização e conexão aleatórios. É recomendado deixar os valores como estão indicados.
Após esta configuração, inicialize o servidor Apache (menu Controle -> Painel de controle -> Controle de atividades e serviços) para ativar as configurações.
Acesse o domínio virtual, configurado para SSL:
https://site1.minhaorganizacao |
Verifique se o certificado surge na tela. Se isto não ocorrer, verifique o arquivo de logs e reveja a sua configuração novamente. Verifique principalmente se os caminhos para os certificados e chaves estão configurados corretamente.
Documento da Linuxdoc sobre como configurar SSL (e outros serviços seguros) editando o arquivo de de configuração do Apache.
Página do Netscape sobre vários itens de segurança, incluindo SSL
FTP é um acrônimo para File Transfer Protocol ou Protocolo de Transferência de Arquivos. O protocolo FTP permite a transferências de arquivos binários e arquivos texto com alta eficiência através de uma rede. É muito interessante para empresas que desejam compartilhar arquivos com os usuários na rede, ou servidores web que desejam disponibilizar áreas para usuários fazerem transferência de arquivos.
Nesta seção será explicada a configuração do servidor FTP. O Proftpd (Professional File Transfer Protocol Daemon) é o programa que implementa o servidor padrão e realiza os serviços de FTP no Conectiva Linux. O Proftpd possui uma configuração muito simples, parecida com a configuração do servidor web Apache, possuindo todo a configuração do servidor em um único arquivo, com diretivas. Além disso, implementações de segurança podem ser feitas em diretórios (seguindo o exemplo do arquivo .htaccess do Apache, o Proftpd pode utilizar o arquivo .ftpaccess), permitindo restrições a diretórios que serão acessados por usuários.
O Proftpd possui muitas diretivas, bem como uma vasta documentação na Internet sobre elas. Assim, esta seção será destinada a mostrar a configuração básica de um Proftpd, incluindo o acesso ao servidor por usuários anônimos.
Nota: Se desejar, pode também implementar um servidor FTP através de um outro aplicativo chamado Wu-ftpd, contido no CD 2 do Conectiva Linux.
Para implementar esta solução você não precisará de nenhum pré-requisito especial, basta que sua máquina possua uma placa de rede.
Para instalação do servidor FTP execute o Synaptic e instale os seguintes pacotes:
proftpd
anonftp
ou utilize o apt-get:
# apt-get install anonftp proftpd |
Se desejar, instale também o pacote proftpd-doc, que possui a documentação sobre o Proftpd, instalada em /usr/share/doc.
O arquivo de configuração do Proftpd está localizado em /etc/profptd.conf, e possui o formato muito parecido com o arquivo de configuração do Apache. Abaixo está mostrado um exemplo simples de configuração, e a seguir serão mostradas as principais diretivas indicadas no exemplo.
# Configuração do ProFTPD
ServerName "ProFTPD - Instalação Default"
ServerType standalone
DefaultServer on
ScoreboardPath /var/run
DeferWelcome on
ServerAdmin suporte@minhaorganizacao
SyslogFacility AUTH
# Utiliza-se a porta 21 (padrão ftp) no caso de funcionamento standalone
Port 21
# Umask 022 é um bom padrão para prevenir que novos diretórios e
# arquivos sejam graváveis pelo grupo ou outros usuários
Umask 022
# Para prevenir ataques do tipo DoS, limita-se o numero de instâncias à
# 30. Caso se queira permitir mais de 30 conexões simultâneas, simplesmente
# aumenta-se este valor. Esta diretiva só se aplica ao funcionamento
# standalone
MaxInstances 30
# Usuário e grupo para o servidor
#
User nobody
Group nobody
<Directory /*>
AllowOverwrite on
</Directory>
# Configuração básica para ftp anônimo, sem diretório para recepção
# de arquivos
# Para ativar, descomentar.
#
<Anonymous /var/ftp/default>
User ftp
Group ftp
DirFakeUser on
DirFakeGroup on
# Esta opção habilita o usuário ftp sem que mesmo precise ter sua shell
# listada no arquivo /etc/shells
RequireValidShell off
# ftp = anonymous
UserAlias anonymous ftp
# número máximo de logins anônimos
MaxClients 10 "Número máximo de clientes."
# No máximo duas conexões por cliente.
MaxClientsPerHost 2 "Muitas conexões simultâneas."
# welcome.msg mostrado na conexão e .message mostrado para cada
# diretório acessado.
DisplayLogin welcome.msg
DisplayFirstChdir .message
AccessGrantMsg "Acesso anônimo aceito para %u."
# Limite gravação no chroot anônimo
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>
|
ServerName: nome do servidor FTP. Será mostrado quando um usuário acessar o FTP.
ServerType: tipo do servidor. Pode ser standalone, quando o servidor usa o script no diretório /etc/rc.d/init.d, ou inetd, que pode utilizar o xinetd (ou inetd) para escutar a porta. No exemplo e durante a seção, será usado o modo standalone. Se for usado o xinetd, é necessário colocar o arquivo ftp em /etc/xinetd.d, com o seguinte conteúdo:
service ftp
{
flags = REUSE
socket_type = stream
instances = 50
wait = no
user = root
server = /usr/sbin/proftpd
bind = IP_da_máquina
log_on_success = HOST PID
log_on_failure = HOST RECORD
}
|
DefaultServer: controla qual configuração de servidor é usada como padrão quando uma conexão de entrada é destinada para um endereço IP que não é nem o endereço IP da máquina ou um endereço especificado no bloco de configurações com a diretiva <VirtualHost>. Normalmente, conexões "desconhecidas" são rejeitadas, e com a opção DefaultServer colocada com o parâmetro on, as conexões desconhecidas são administradas pelo servidor padrão. O padrão para este campo é on.
ScoreboardPath: configura o diretório onde os arquivos necessários para que o Proftpd funcione corretamente (em tempo de execução do servidor) são mantidos.
DeferWelcome: configura um servidor retardar a transmissão do conteúdo da diretiva ServerName e de endereços para novas conexões, até que um cliente tenha se autenticado com sucesso.
ServerAdmin: e-mail do administrador do servidor.
SyslogFacility: configura a "facilidade" do syslog. Para o exemplo, toda a operação de acesso (AUTH) será guardada no syslog.
As outras entradas possuem explicações detalhadas no arquivo. A seguir, serão mostradas as configuração de diretivas:
Configura certas características para o diretório especificado. Pode tanto conter diretivas <Limit> (descrita adiante), que configura limites e permissões para o diretório, como pode estar contido em outras diretivas (por exemplo, <Anonymous>). Praticamente todas as opções podem ser aplicadas (ou aplicadas novamente) dentro desta diretiva, uma vez que o diretório em questão pode ter configurações diferentes do que o diretório global.
A opção AllowOverwrite com o parâmetro on, mostrada no exemplo, indica que o diretório /* (ou seja, todos os diretórios) permite que novas transferências de arquivos possam sobrescrever os arquivos existentes no diretório.
Este bloco de configuração indica restrições a comandos FTP, dentro de um contexto. Alguns comandos que podem ser configurados:
DELE: Apagar arquivo.
RMD: Remover diretório.
READ: Todos os comandos FTP que lidam com leitura de arquivos.
WRITE: Todos os comandos que lidam com escrita, criação e remoção de arquivos ou diretórios.
Em seguida, deve-se configurar a permissão para tais comandos. Como padrão, pode-se negar para todos o comando (DenyAll), mas também pode-se permitir para todos, o que já está explícito (AllowAll) ou negar de acordo com certas regras. Por exemplo, para negar acesso a todos os acessos provenientes do domínio teste.com, pode-se fazer:
Deny from teste.com |
Configura o acesso anônimo ao servidor, especificado no diretório /var/ftp/default. As opções estão bem comentadas no arquivo. Algumas opções estão descritas na lista a seguir:
UserAlias: Configura o nome de acesso a usuários anônimos. Neste caso, o usuário anônimo pode se conectar ao servidor tanto como anonymous como ftp.
DirFakeUser/DirFakeGroup: DirFakeGroup e DirFakeUser podem ser usadas para ocultar os verdadeiros usuários e grupos proprietários de arquivos, durante a listagem de um diretório. Se habilitada, a opção DirFakeGroup irá exibir todos os arquivos como sendo do grupo ftp.
AccessGrantMsg: Normalmente, a mensagem 230 é enviada ao cliente FTP imediatamente após a autorização, com uma mensagem indicando que o usuário normal ou anônimo conseguiu o acesso. A mensagem podem ser personalizada com esta opção, onde o argumento %u é substituído com o nome de acesso especificado durante o login.
Além disso, o acesso anônimo é restrito; o usuário não poderá fazer escritas, de acordo com as seguintes regras:
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
|
A configuração básica está concluída. Uma configuração que pode ser feita é em relação à permissão de arquivos.
Normalmente, você não precisará (e provavelmente nem desejará) que os usuários possam gravar arquivos em seu servidor FTP. Porém, em alguns casos, pode haver interesse em disponibilizar-se uma área para que os usuários possam guardar arquivos. Recomenda-se, portanto, que você não permita o acesso de escrita em seu servidor. Caso não tenha escolha, você deve ter alguém responsável por monitorar os arquivos guardados em seu servidor para evitar arquivos que possam trazer problemas no futuro.
Assim, tornou-se um costume fazer com que os usuários tenham um local específico nos servidores de FTP para gravarem arquivos. Esse local é o diretório /incoming. Para criar o /incoming, acesse o diretório raiz do FTP:
# cd /var/ftp |
e crie o diretório:
# mkdir incoming |
Agora você deve fazer com que o diretório criado seja de propriedade do usuário e grupo nobody (nobody.nobody).
# chown nobody incoming # chgrp nobody incoming # chmod 3773 incoming |
Basta agora fazer as configurações no arquivo /etc/proftpd.conf referentes a este diretório. Por exemplo:
<Directory incoming>
<Limit READ WRITE>
DenyAll
</Limit>
<Limit STOR>
AllowAll
</Limit>
</Directory>
|
Após cada configuração, pare e e inicie novamente o servidor:
# service proftpd stop Desligando proftpd: Suspending NOW [ OK ] # service proftpd start Allowing sessions again [ OK ] |
Primeiramente, verifique se um processo está executando o servidor:
$ ps aux | grep proftpd nobody 2446 0.0 0.7 2196 1220 ? S 18:01 0:00 proftpd \ (accepting connections) |
Para testar o acesso ao servidor FTP anonimamente, forneça o usuário anonymous e uma string qualquer (um endereço de e-mail, por exemplo):
$ ftp localhost Connected to localhost 220 ProFTPD 1.2.5rc1 Server Ready (ProFTPD - Instalação Default) Name (localhost:usuario): anonymous 331 Anonymous login ok, send your complete email address as your password. Password: 230 Acesso anônimo aceito para anonymous. Remote system type is UNIX. Using binary mode to transfer files. ftp> |
Note que a senha não é mostrada. O usuário anonymous não precisa (nem deve) ser cadastrado em seu Conectiva Linux, já que ele é um usuário especial para o servidor FTP. Quando é feita uma tentativa de acesso com o usuário anonymous, o servidor automaticamente trata o acesso como anônimo, aceitando o endereço de correio eletrônico como senha. Se algo não der certo, verifique se o pacote para acesso anônimo está instalado e reveja as configurações.
Você pode utilizar um arquivo .message para dar breves explicações sobre os propósitos dos diretórios que estão sendo acessados. Além disso, você poderia ajudar o usuário a encontrar o que ele está procurando. Para testar, crie um arquivo .message como um arquivo texto e coloque-o no diretório onde ele deve ser mostrado, com mensagens úteis sobre o acesso ao servidor FTP. Reinicialize o Proftpd e acesse o servidor novamente.
Quando você acessa, por exemplo, uma página da web ou um arquivo de FTP, uma requisição parte de sua máquina até o servidor; só então os dados são transmitidos para a sua máquina. Como muitas vezes a distância entre o servidor e a sua máquina é muito grande e a qualidade das linhas de transmissão muito irregulares, este processo acaba por tornar-se bastante lento.
Além disso, a maioria dos dados requisitados é estática; eles não mudam com o tempo. Os logotipos que as empresas colocam em suas páginas, por exemplo, não tendem a mudar. Entretanto, eles são, muitas vezes, bastante grandes. Isso é um enorme desperdício de recursos da rede e de tempo.
Uma solução encontrada foi o chamado caching. Sempre que é feita uma requisição de algum objeto da Internet, o servidor proxy consulta o cache para verificar se este objeto já não foi requisitado previamente. Se ele foi, então o servidor proxy pode responder à requisição utilizando sua própria cópia local do objeto. Isso acelera significativamente as operações na Internet, já que grande parte dos objetos acaba trafegando apenas localmente.
O servidor proxy verifica se a sua cópia é atualizada com o objeto original. Caso não seja, o proxy atualiza sua cópia. Naturalmente, um servidor de cache não poderia guardar todos os objetos acessados para sempre, pois isso iria rapidamente saturá-lo. A solução é simples: o servidor mantém apenas os arquivos utilizados há menos tempo. Isso garante, de uma forma indireta, que os objetos mais freqüentemente utilizados sempre estejam no cache.
Esta solução implementa um servidor proxy utilizando o Squid. Ele oferece alto desempenho de cache para servidores web. Também oferece grandes vantagens em comparação com outros servidores proxy:
ele realiza, além do cache de objetos como arquivos de FTP e páginas da web, um cache de procuras de DNS. Isso quer dizer que ele guarda informações sobre o mapeamento entre endereços IP e nomes de máquinas da Internet. Isso acelera a procura de máquinas;
ele mantém os objetos mais utilizados na memória RAM (cujo uso pode ser limitado pela configuração);
ele suporta SSL (acesso a páginas criptografadas) para segurança em transações;
pode ser organizado em hierarquias de servidores de cache para uma melhora significativa de desempenho;
responde às requisições em um único processo de acesso a disco.
Todo o servidor proxy Squid consiste de um programa principal (squid) e de seu próprio programa de resolução de nomes (dnsserver). Quando o Squid é inicializado, ele cria o processo do dnsserver, diminuindo o tempo de espera pela resposta do DNS.
Será explicado agora o processo de configuração de um servidor proxy através do Linuxconf.
Para implementar o servidor é necessário:
que o acesso à Internet esteja configurado corretamente;
recomenda-se que o servidor tenha uma boa quantidade de memória (por exemplo, 128 MB) e que seja usado um disco rígido SCSI para permitir um acesso mais rápido aos arquivos armazenados no buffer.
Para instalação do servidor proxy, execute o Synaptic e instale os seguintes pacotes:
squid
linuxconf-squid
squid-auth
squid-doc
squid-templates
ou utilize a linha de comando, executando o apt-get:
# apt-get install squid.* linuxconf-squid |
Primeiramente, execute o serviço squid através do Linuxconf em Controle -> Painel de Controle -> Controle de atividades de serviços. Após inicializado, é possível configurar o squid. Vá até o menu Configuração ->Rede ->Tarefas de servidor -> Squid - proxy http e cache.
A opção Padrões serve para modificar os parâmetros operacionais básicos. Veja a Figura 3-7.
A maioria dos campos já está configurada com o valor padrão. Veja o significado de cada um dos campos:
Porta http: porta pela qual o servidor irá receber as requisições. A porta padrão é 3128.
Tamanho da cache em disco (mega): você pode, neste campo, modificar o espaço máximo a ser utilizado para cache neste diretório. O valor padrão é 100 (em megabytes).
Tamanho da cache RAM (mega): limite de memória utilizada somente pela cache; o squid possui uma quantidade de memória cerca de três vezes maior. O padrão para este campo é 8 (megabytes).
Ative proxy transparente: proxy transparente é aquele que não precisa de configuração, porém os usuários da rede são obrigados a passar suas requisições para o servidor proxy, ou seja, as requisições web são interceptadas e redirecionadas para o squid. Ative esta opção caso você ache interessante.
Acelerador para a máquina: O modo acelerador permite ao squid responder como se fosse um servidor web real, e redirecionar a chamada para o servidor real. Se é isto que você deseja, basta colocar o endereço IP do servidor real.
Na porta: indica a porta utilizada para o modo aceleração do Squid. A porta padrão é 80.
Modo acelerador + proxy: se você deseja utilizar o Squid tanto como acelerador do processo httpd como um proxy local, ative esta opção.
Clique em Aceitar para finalizar estas configurações.
Existem ainda opções que podem personalizar ainda mais o servidor proxy. Por exemplo, você pode criar vários diretórios de cache para dividir a cache em diferentes partições do disco rígido, ou ainda modificar os arquivos de registro. Estas opções podem ser modificadas em /etc/squid/squid.conf, onde tudo está muito bem comentado e explicado.
O próximo passo é a definição de controle de acesso ao proxy através de ACL[3] ou Listas de Controle de Acesso. As listas de acesso meramente dão nomes a objetos. Estes objetos podem ser domínios de origem, domínios de destino, endereços de IP, etc., contidos no arquivo /etc/squid/squid.conf. Finalize o Linuxconf e edite o arquivo squid.conf. A forma geral de uma linha de lista de acesso é:
acl NOME TIPO OBJ1 OBJ2... |
Onde:
NOME: é um nome que será utilizado para identificar esta lista de acesso;
TIPO: indica qual é o objeto a que nos referimos nesta linha. Pode ser:
src: especifica um IP/máscara de origem, ou seja, entram nesta categoria as requisições que partiram da rede. Exemplo:
acl localhost src 127.0.0.1/255.255.255.255 |
Especifica uma lista de acesso chamada localhost, definida como requisições vindas da máquina local (127.0.0.1).
dst: especifica um IP/máscara de destino, ou seja, entram nesta categoria todas as requisições destinadas para aquele par IP/máscara;
srcdomain: especifica um domínio de origem, ou seja, entram nesta categoria as requisições que partiram do domínio especificado;
dstdomain: especifica um domínio de destino, ou seja, entram nesta categoria as requisições de objetos localizados naquele domínio;
time: especifica uma expressão descrevendo "tempo". É formado por uma expressão de data, que é uma lista de abreviações dos dias da semana (S - Domingo, M - Segunda-feira, T - Terça-feira, W - Quarta-feira, H - Quinta-feira, F - Sexta-feira e A - Sábado), seguida por uma intervalo de datas no formato hh1:mm1-hh2:mm2.
ident: especifica um ou mais nomes de usuário.
Existem outras opções possíveis para as listas de controle, mas como são menos utilizadas, não serão cobertas neste guia. Você pode ler o arquivo squid.conf para informações sobre as outras opções de segurança.
O squid define listas de acesso padrões, as quais estão abaixo:
acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistred ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT |
acl all src 0.0.0.0/0.0.0.0: esta acl define todas as máquinas que pertencem a rede (0.0.0.0/0.0.0.0) com o nome all.
acl manager proto cache_object: o campo proto nesta linha significa que a acl bloqueia um protocolo específico, neste caso o protocolo cache_object. Poderiam ser os protocolos FTP ou HTTP. Se você não conhece o protocolo cache_object, não se preocupe - é um protocolo do squid que apenas retorna informação para o servidor de como a cache está configurada, ou como ela está rodando.
acl localhost src 127.0.0.1/255.255.255.255: esta acl define a máquina localhost, e recebe o mesmo nome.
As acls:
acl SSL_ports port 443 563 acl Safe_ports port 80 21 443 563 70 210 1025-65535 acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http |
contêm as portas consideradas seguras para o proxy. Todas as outras portas são consideradas inseguras, e o acesso é negado.
acl CONNECT method CONNECT: esta acl contém o método de acesso aos arquivos na rede (GET, POST). O método CONNECT vale tanto por GET como por POST.
Pode-se ainda criar mais uma lista de acesso referente aos usuários do sistema.
acl password proxy_auth REQUIRED |
O nome da lista é password e é do tipo proxy_auth (autenticação de usuários). O campo REQUIRED informa ao squid para procurar o nome e a senha no arquivo /etc/squid/squid_passwd, que pode ser criado através do comando htpasswd. Esta acl necessita que a configuração da tag authenticate_program seja feita. No arquivo de configuração existe esta linha comentada, para exemplo.
Após definidas as listas de acesso, pode-se definir as restrições propriamente ditas. Isso pode ser feito com a diretiva httpd_access. As restrições padrão do squid são:
http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access deny all |
Estas instruções significam:
http_access allow manager localhost: dá acesso ao protocolo chamado cache_object apenas para o próprio servidor (localhost).
http_access deny manager: nega o acesso ao protocolo cache_object para qualquer outra máquina.
http_access deny !Safe_ports: nega acesso a qualquer outra porta além das definidas na acl Safe_ports.
http_access deny CONNECT !SSL_ports
É perigoso permitir ao squid conectar-se a certas portas. Por exemplo, pode-se utilizar o squid como relay de SMTP (e-mail). O relay de SMTP é uma das formas possíveis de se lotar (flood) caixas de correio. Para prevenir o relay de e-mails, o squid nega requisições quando o número da porta da URL é 25 (porta SMTP). Outras portas também são bloqueadas. A regra 3 informa ao squid para negar o acesso a qualquer porta que não esteja na lista Safe_ports. A regra 4 nega qualquer conexão que não seja referente às portas seguras.
O padrão do squid é negar acesso a tudo e a todos, como é mostrado na regra 5. Para permitir a utilização do proxy do squid, você deve configurá-lo para permitir o acesso. Normalmente, apenas insere-se algumas regra a mais, como por exemplo:
http_access allow password |
A acl password exige que os usuários forneçam uma senha para que possam utilizar o proxy.
Nota: Note que a ordem dessas regras é importante. Elas definem as prioridades de acesso.
Você pode verificar se o proxy está corretamente configurado através de um programa cliente; vamos utilizar o comando wget:
# wget http://www.conectiva.com.br > teste |
O aplicativo pode ser instalado do mesmo modo em que foram instalados os pacotes do squid.
Aproveite e crie restrições de acesso, e verifique se o comando é executado.
Outro modo de testar o squid é verificar se ele mesmo pode sinalizar um processo de verificação:
# squid -k check |
Verifique o status da variável de saída. Não esqueça de verificar também os arquivos de registro do próprio squid, especialmente os arquivos access.log e cache.log em /var/log/squid.
É interessante também configurar navegadores nas máquinas cliente para testar o squid. Suponha que o servidor seja kepler.minhaorganizacao. Acesse o Netscape® e vá até o menu Editar -> Preferências -> Avançado -> Servidores Proxy. Clique na opção Configuração manual do proxy e em seguida clique no botão Ver. A configuração seria como na Figura 3-8:
Note que neste exemplo utilizamos o servidor para FTP, HTTP e HTTPS. Além disso, instrui-se o navegador para não utilizar o proxy para endereços do domínio local (minhaorganizacao). Basta agora testar e ver as mensagens de registro, para verificar se existe algum erro nas conexões.
Para testar a configuração do proxy pelo Konqueror, basta executá-lo e acessar a opção Configurações -> Configurar Konqueror... -> Proxies e Cache e colocar o nome do servidor que será o proxy. Em seguida, basta digitar uma URL e verificar se ela é acessada corretamente.
Mini Como-Fazer sobre proxy transparente .
Página oficial do Squid .
Solução Conectiva Para a Implantação de um Servidor Proxy .
| [1] |
Secure Sockets Layer ou Camada de Conexão Segura. |
| [2] |
Self-signed certificate |
| [3] |
Access Control List. |