Capítulo 3. Servidor Internet

Índice
Servidor Web - Apache
Servidor Web - Domínios Virtuais
Servidor FTP
Servidor Proxy

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.

Servidor Web - Apache

Apresentação

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, 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 dos arquivos de configuração do Apache, versão 2. A nova versão do Apache está com várias melhorias e uma estrutura mais organizada e funcional, permitindo a integração de módulos de forma rápida, e a configuração geral muito mais fácil.

Implementação

Pré-requisitos

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.

Instalação

Para instalação do servidor web Apache com a inclusão do módulo PHP4, execute o Synaptic e instale os seguintes pacotes:

  • apache

  • php4

  • openssl-progs

ou você pode utilizar o comando apt-get para a instalação:

# apt-get install apache php4 openssl-progs

Configuração

A configuração do Apache versão é toda feita sob um diretório: /etc/apache/conf. É com ele que iremos trabalhar, mostrando os principais arquivos de configuração.

O primeiro arquivo a ser mostrado é o httpd.conf, que contém as configurações de administração de servidor. Verifique a seguir as principais opções de configuração deste arquivo:

ServerAdmin: endereço de e-mail do administrador do servidor.

NameVirtualHost: se você desejar que vários domínios virtuais compartilhem o mesmo endereço de IP, digite o endereço neste campo.

ServerName: 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.

DocumentRoot: é o diretório em que os arquivos das páginas serão armazenados. O valor padrão é /srv/www/default/html e é recomendado que você não seja modificado.

ScriptAlias: 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. Padrão: ScriptAlias /cgi-bin/ "/srv/www/default/cgi-bin/"

User: usuário que deve rodar como servidor web. O padrão é www.

Group: grupo cujo o servidor web deve ser executado.

ServerRoot: configura o diretório base (topo) sob o qual os arquivos de log, configuração e de erros são mantidos. O padrão é usar /etc/apache.

DirectoryIndex: ajusta o arquivo que o Apache chamará, quando o diretório principal for requisitado. O padrão é index.html, mas pode ser modificado.

Include: esta diretiva especifica outros arquivos/diretórios de configuração a serem usados pelo Apache. Exemplo: Include conf/conf.d/*.conf - indica que todos os arquivos de configuração do diretório conf.d, localizado dentro do diretório de configuração geral do Apache, podem ser utilizados.

Existem outras configurações, todas comentadas no arquivo.

O arquivo apache-cnc.conf é uma configuração personalizada pela Conectiva para a utilização de certificados. Esse arquivo não será visto com detalhes aqui.

Para habilitar o módulo PHP, verifique se existem os arquivos php.conf e php.module, localizados em /etc/apache/conf/conf.d; o primeiro arquivo faz configurações de PHP, e o segundo carrega o módulo:

# php.module
# This file is included by a Include conf/conf.d/*.module
# directive in the Apache httpd.conf file.

#
# PHP is an HTML-embedded scripting language which attempts
# to make it easy for developers to write dynamically
# generated webpages.

LoadModule php4_module modules/libphp4.so

Após as configurações, execute o serviço apache:

# service apache restart

Testes de Configuração

  • Primeiramente, para testar a configuração do Apache execute um navegador (o Konqueror, por exemplo) e acesse o endereço da máquina local . Se a configuração estiver correta, você verá uma tela semelhante à Figura 3-1:

    Figura 3-1. Teste de Configuração do Apache

    Se esta página não for mostrada, verifique se existe existem erros contidos no arquivo /etc/apache/logs/error_log e tente configurar o Apache novamente.

    Dica: Para ter a tela inicial do Apache mais personalizada, instale o pacote indexhtml, e ao acessar o browser, você já verá a tela inicial diferente.

    Figura 3-2. Página Inicial do Apache Personalizada

  • Para testar a configuração do PHP, primeiramente acesse o diretório de arquivos do Apache em /srv/www/default/html. 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 módulo do PHP estiver funcionando, você verá a página mais ou menos como na Figura 3-3:

    Figura 3-3. Teste Bem-Sucedido de PHP

    Se a configuração estiver incorreta, você provavelmente irá ver a Figura 3-4:

    Figura 3-4. Página em PHP Visualizada Incorretamente

    Neste caso, é possível você ver o fonte da página (Ver ->Visualizar Fonte do Documento), o que é incorreto. Revise os passos da instalação para verificar o que está incorreto. Além disso, verifique o arquivo /etc/apache/logs/error_log, que deverá conter informações sobre o erro.

    Nota: Caso você queria desabilitar algum módulo do Apache, você deve renomear os arquivos referentes ao módulo no diretório /etc/apache/conf/conf.d, para o servidor não possa mais encontrá-los. Esta é a forma mais rápida, mas existem outras maneiras, que não serão explicadas aqui.

Referências

  • 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 o servidor .

  • Documentação e listagem dos módulos para o Apache .

  • Solução Conectiva Para a Implantação de um servidor Apache .

Servidor Web - Domínios Virtuais

Apresentação

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 é feita através do arquivo httpd.conf, 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.

Implementação

Pré-requisitos

Para esta solução é necessário:

  • que a rede esteja corretamente configurada;

  • que seu servidor Apache esteja configurado e funcionando corretamente;

  • que o seu serviço DNS esteja funcionando corretamente.

Instalação

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.

Configuração

Para configurar domínios virtuais, você deve modificar o arquivo /etc/apache/conf/httpd.conf; um exemplo de configuração está descrito abaixo:

# IP utilizado para os domínios virtuais

NameVirtualHost 10.0.0.2

# Configuração do domínio virtual

<VirtualHost 10.0.0.2>
ServerAdmin webmaster@minhaorganizacao
DocumentRoot /srv/www/default/site1
ServerName site1.minhaorganizacao
ErrorLog /var/log/apache/site1-error_log
CustomLog /var/log/apache/site1-access_log common
</VirtualHost>

Este exemplo apresenta várias opções já descritas na parte principal de configuração do Apache. A única diferença é que você deve criar novos diretórios para o novo domínio, principalmente os arquivos ErrorLog e CustomLog, pois assim 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, mas este tema não será coberto neste guia.

Após as configurações, reinicialize o Apache, com o comando service. Se você configurou novos arquivos de registros em outros locais, não esqueça de criar estes arquivos nos diretórios apropriados (/etc/apache/logs, por exemplo).

Não esqueça também de configurar corretamente o domínio no servidor DNS, pois os domínios virtuais dependem desta configuração. Para isso, dirija-se ao capítulo sobre DNS para mais detalhes.

Testes de Configuração

  • Copie um arquivo HTML qualquer para o diretório de documentos do domínio virtual (em nosso caso, /srv/www/default/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.0.0.2): 56 data bytes
    64 bytes from 10.0.0.2: icmp_seq=0 ttl=255 time=0.4 ms
    64 bytes from 10.0.0.2: icmp_seq=1 ttl=255 time=0.3 ms
    64 bytes from 10.0.0.2: icmp_seq=2 ttl=255 time=0.3 ms
    64 bytes from 10.0.0.2: 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.

Referências

Servidor FTP

Apresentação

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 em um dos CDs do Conectiva Linux.

Implementação

Pré-requisitos

Para implementar esta solução você não precisará de nenhum pré-requisito especial, basta que sua máquina possua uma placa de rede.

Instalação

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.

Configuração

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 Padrão"
ServerType standalone
DefaultServer on
ScoreboardPath /var/run/proftpd/scoreboard
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, basta descomentar. # <Anonymous /srv/ftp> 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:

Directory

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.

Limit

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
Anonymous

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 /srv/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
# service proftpd start

Testando a Configuração

  • 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.7 Server Ready (ProFTPD - Instalação Padrão)
    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.

Referências

Servidor Proxy

Apresentação

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.

Implementação

Pré-requisitos

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.

Instalação

Para instalação do servidor proxy, execute o Synaptic e instale os seguintes pacotes:

  • squid

  • linuxconf-squid

  • squid-auth

  • squid-extra-templates

ou utilize a linha de comando, executando o apt-get:

# apt-get install squid.* linuxconf-squid

Configuração

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

Figura 3-5. Configuração do Squid

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

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

  3. acl localhost src 127.0.0.1/255.255.255.255: esta acl define a máquina localhost, e recebe o mesmo nome.

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

  5. 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 de senhas especificado, que pode ser criado através do comando htpasswd. Esta acl necessita que a configuração de um programa de autenticação seja feita. No arquivo de configuração existe esta linha comentada, como exemplo:

# auth_param basic program /usr/bin/ncsa_auth /usr/etc/passwd

Modifique-a conforme a sua configuração.

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:

  1. http_access allow manager localhost: dá acesso ao protocolo chamado cache_object apenas para o próprio servidor (localhost).

  2. http_access deny manager: nega o acesso ao protocolo cache_object para qualquer outra máquina.

  3. http_access deny !Safe_ports: nega acesso a qualquer outra porta além das definidas na acl Safe_ports.

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

Testes de Configuração

  • 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-6:

    Figura 3-6. Configuração do Servidor Proxy no Netscape®

    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.

Referências

  • Mini Como-Fazer sobre proxy transparente .

  • Página oficial do Squid .

  • Solução Conectiva Para a Implantação de um Servidor Proxy .

Notas

[1]

Access Control List.