Você está na página 1de 26

Usando o DansGuardian

O DansGuardian outra opo de filtro de contedo desenvolvido para trabalhar em conjunto com o Squid, filtrando contedo indesejado. A grande diferena entre ele e o SquidGuard que o SquidGuard se limita a bloquear pginas contidas nas listas, enquanto o DansGuardian utiliza um filtro adaptativo, que avalia o contedo da pgina e decide se ela uma pgina imprpria com base no contedo, utilizando um conjunto de regras adaptativas. Ele inclui um conjunto de regras prontas, que contm palavras, frases e tipos de arquivos freqentemente usados em pginas imprprias, alm de uma lista de pginas conhecidas e trabalha cruzando todas essas informaes. Se voc quer um filtro de contedo que possa implantar rapidamente e manter ativo sem ter muito trabalho, o SquidGuard a melhor opo, pois ele permite obter bons resultados mesmo com apenas uma configurao rpida. Se, por outro lado, voc quer um filtro programvel, que voc possa adaptar e personalizar de forma a obter melhores resultados, ento o DansGuardian pode ser uma boa opo. No screenshot abaixo, por exemplo, temos uma pesquisa do Google por um termo indecoroso, que foi bloqueada por ter retornado um grande nmero de pginas imprprias. O domnio "google.com" naturalmente no foi bloqueado no filtro, mas mesmo assim o DansGuardian foi capaz de bloquear a pgina baseado no contedo:

Originalmente, o DansGuardian foi desenvolvido como um filtro de contedo para uso em escolas primrias e para quem tem crianas pequenas em casa, mas nada impede que ele seja usado tambm em outras situaes. Atualmente, o DansGuardian um produto "semicomercial", que tem o cdigo aberto e gratuito para uso pessoal ou para qualquer fim no-comercial (pode ser usado em uma escola ou escritrio, por exemplo, desde que implementado internamente), mas pago para uso comercial (quando voc cobra pelo servio de implantao, ou o fornece como parte de uma soluo comercial). Voc pode ver mais detalhes sobre a licena de uso no: http://dansguardian.org/?page=copyright2 Ao instalar, comece verificando se j no existe um pacote disponvel na distribuio que est usando. O DansGuardian um pacote de uso muito comum; por isso, a maioria das distribuies o inclui nos CDs de instalao. No Debian, por exemplo, voc pode instal-lo com um: # apt-get install dansguardian Voc pode tambm encontrar pacotes para vrias distribuies, junto com o tradicional pacote com cdigo fonte nohttp://dansguardian.org/?page=download2. Depois de instalar o pacote, inicie-o com o comando: # /etc/init.d/dansguardian start ou: # dansguardian & Para que o DansGuardian funcione, preciso que o Squid esteja instalado e ativo. Ele trabalha sobre o Squid, implementando suas polticas de acesso, mas deixando que o prprio Squid faa o acesso web, cache e autenticao. O principal arquivo de configurao o "/etc/dansguardian/dansguardian.conf". Ao edit-lo pela primeira vez, importante verificar algumas opes: # UNCONFIGURED Esta linha deve ficar comentada, indicando que o arquivo j foi configurado por voc.

language = 'portuguese' Esta opo configura a lngua em que as mensagens de acesso bloqueado sero mostradas aos clientes. loglocation = '/var/log/dansguardian/access.log' Aqui vai a localizao do arquivo de log do dansguardian, onde ficam armazenados os endereos das pginas cujo acesso foi bloqueado. Serve tanto para verificar a eficincia do filtro, quanto para identificar falsos-positivos, ou seja, pginas legtimas que esto sendo bloqueadas por engano. Essas excees podem ser especificadas individualmente no arquivo "/etc/dansguardian/exceptionsitelist", que funciona como uma white list, contendo uma lista de pginas que sempre so permitidas, mesmo que sejam encontradas palavras proibidas dentro do texto. filterport = 8080 A porta onde o DansGuardian fica ativo. Ele sempre deve utilizar uma porta diferente do Squid, pois so duas coisas separadas. O padro a porta 8080. proxyip = 127.0.0.1 O endereo IP do servidor proxy que ser usado. Por padro ele vai utilizar uma cpia do Squid ativa na mesma mquina, mas possvel utilizar outro servidor Squid disponvel na rede. proxyport = 3128 A porta TCP onde o servidor Squid especificado na opo acima est ativo. Lembre-se de que, por padro, o Squid usa a porta 3128. A filtragem de pginas funciona em dois nveis. Ao receber a requisio do cliente, o DansGuardian verifica se o endereo a ser acessado est em uma das listas de domnios ou IPs proibidos. Caso esteja, o cliente recebe a mensagem de erro e o acesso sequer feito, economizando banda. Se no existir nenhum bloqueio relacionado ao domnio, a requisio enviada ao Squid e o acesso realizado. Ao receber os arquivos da pgina, o DansGuardian verifica o contedo em busca de expresses e palavras "ruins", freqentemente encontradas em pginas indesejadas, e tambm palavras "boas", normalmente encontradas em pginas de bom contedo. Cada palavra ruim soma um certo nmero de pontos. Por exemplo, a palavra "sexy" soma apenas 5 pontos, enquanto a expresso "sex orgies" soma 80 pontos. Palavras "boas", por outro lado, subtraem pontos, fazendo com que a pgina tenha uma possibilidade menor de ser bloqueada. A palavra "education" subtrai 20 pontos, enquanto "medical problem" subtrai 50. As listas com palavras boas e ruins, juntamente com o peso positivo ou negativo de cada uma, so armazenadas na pasta "/etc/dansguardian/phraselist". No final, o site recebe uma nota, apelidada pelos desenvolvedores de "naughtynesslimit", ou "ndice de semvergonhice", resultado da soma de todas as palavras boas e ruins. Voc define um ndice mximo a ser tolerado no arquivo "/etc/dansguardian/dansguardianf1.conf", na opo: naughtynesslimit = 160 Quanto mais baixo o nmero, mais severa a censura, porm mais pginas boas acabam sendo bloqueadas por engano (falsos positivos). Os valores recomendados pelos desenvolvedores so "60" para crianas pequenas, "100" para pr-adolescentes e "160" para adolescentes. Para um pblico adulto, onde a principal preocupao seja no bloquear pginas teis, mesmo que isso faa com que uma ou outra pgina inadequada passe pelo filtro de vez em quando, voc pode arriscar "200" ou mesmo "240". Como voc pode notar dando uma olhada no contedo dos arquivos das listas de palavras, o DansGuardian vem configurado com listas em ingls, que deixam passar muitos sites nacionais. Voc pode baixar um arquivo com listas em outras lnguas, incluindo portugus no: http://dansguardian.org/downloads/grosvenor/languages.tar.gz Para instalar, descompacte o arquivo "languages.tar.gz" e copie os arquivos de dentro da pasta "languages", que ser criada para a pasta "/etc/dansguardian/phraselist/". Falta agora configurar o DansGuardian para utilizar os novos arquivos. Para isso, abra o arquivo "/etc/dansguardian/weightedphraselist" e adicione as linhas:

.Include</etc/squid/dansguardian/languages/weightedphraselist.pornsites.portuguese> .Include</etc/squid/dansguardian/languages/weightedphraselist.pornwords.portuguese>

Antes de usar estas listas de palavras, verifique o contedo dos arquivos. As listas de palavras em portugus so excessivamente rigorosas, o que faz com que seja bloqueado o acesso a um nmero muito grande de sites "bons", mesmo ao usar um naughtynesslimit alto. Use-os com cautela. Aparentemente, os arquivos disponveis no site foram escritos por um estrangeiro, por isso, no se adaptam bem nossa realidade. Se decidir corrigir os arquivos, no deixe de envi-los para os mantenedores, para que sejam includos no pacote. Note que na configurao so especificados todos os arquivos de palavras que so utilizados. Na pasta existem vrias categorias diferentes e, em algumas situaes, voc pode querer desabilitar algumas delas, a fim de flexibilizar o filtro. Voc pode adicionar novas palavras ou editar o peso de cada uma, editando diretamente os arquivos. Concluindo, abra tambm o arquivo "/etc/dansguardian/bannedphraselist" e inclua a linha: .Include</etc/squid/dansguardian/languages/bannedphraselist.portuguese> Lembre-se de que necessrio reiniciar o DansGuardian para que qualquer uma das alteraes tenha efeito: # /etc/init.d/dansguardian restart O DansGuardian pode ser usado tanto dentro da rede, quanto localmente. Alm de ser utilizado em redes de todos os tamanhos, muita gente com crianas em casa se d ao trabalho de instal-lo avulso, no micro de casa. Nas configuraes do proxy (nos clientes), coloque o endereo IP do servidor (como, por exemplo, 192.168.1.1) e a porta do DansGuardian, definida no arquivo de configurao. Lembre-se de que, por padro, ele usa a porta 8080. No Firefox, a opo de configurar um proxy est em "Editar > Preferncias > Proxy". Ou seja, com exceo da porta diferente, a configurao para usar o DansGuardian a mesma que seria usada em conjunto com um proxy tradicional. Em casos onde ele usado num micro domstico, com o objetivo de servir como um simples filtro de contedo, voc pode at mesmo rod-lo localmente. Neste caso, use o endereo "127.0.0.1" como proxy:

Atualizando as blacklists
Alm do filtro com base em palavras, o DansGuardian utiliza uma lista de sites proibidos, que sequer chegam a ser acessados. Por padro, o DansGuardian vem com uma lista muito pequena e desatualizada, apenas como exemplo. Para efetivamente usar este recurso, preciso baixar uma lista mais elaborada. Voc pode baixar uma lista longa e atualizada no http://urlblacklist.com/, o mesmo site que citei no tpico sobre o SquidGuard. As listas do UrlBlacklist so mais adequadas para uso no DansGuardian, pois incluem tambm listas de termos (que so usadas pelo DansGuardian para complementar o filtro esttico baseado em URLs), mas ele possui a desvantagem de ser um servio no-gratuito, onde voc precisa assinar o servio para ter acesso completo s listas. O link completo para a verso mais recente : http://urlblacklist.com/cgi-bin/commercialdownload.pl?type=download&file=bigblacklist Para instalar, basta descompactar o arquivo e mover o contedo para dentro da pasta "/etc/dansguardian/", substituindo a pasta "/etc/dansguardian/blacklists" existente: $ tar -zxvf bigblacklist.tar.gz # cp -a --reply=yes blacklists/ /etc/dansguardian/ Depois de instalar o arquivo completo, voc pode usar o script de atualizao, disponvel no site, para baixar atualizaes de forma automtica. Baixe-o em: http://urlblacklist.com/downloads/UpdateBL Basta ativar a permisso de execuo e execut-lo. Em algumas distribuies preciso criar a pasta "/var/lib/lrpkg/", onde ele guarda os logs. Sem esta pasta, ele exibe um erro e no conclui a atualizao. # mkdir -p /var/lib/lrpkg/ # chmod +x UpdateBL # ./UpdateBL O pacote inclui vrias listas diferentes, separadas por assunto. Assim como na lista do Shalla's, as listas incluem muitos assuntos inocentes como, "cellphones", "sports" e "childcare" (sade infantil). Ele no uma "blacklist" no sentido estrito da palavra, mas sim um conjunto de listas que incluem tambm sites sobre contedos diversos. A idia aqui que voc pode bloquear todos os assuntos desejados.


Dentro de cada uma das subpastas, voc encontra trs arquivos: domains (sites completamente bloqueados), expressions (palavras comumente encontradas em sites de contedo imprprio) e urls (pginas especficas, dentro de sites permitidos). Para ativar o uso das blacklists, edite os arquivos "/etc/dansguardian/bannedsitelist" e "/etc/dansguardian/bannedurllist", adicionando (ou descomentando) as linhas referentes s categorias que devem ser ativadas. Para bloquear pginas de contedo adulto (adult), drogas (drugs), pginas pornogrficas (porn) e warez, adicione (ou descomente) no arquivo "/etc/dansguardian/bannedurllist" as linhas: .Include</etc/dansguardian/blacklists/adult/urls> .Include</etc/dansguardian/blacklists/drugs/urls> .Include</etc/dansguardian/blacklists/porn/urls> .Include</etc/dansguardian/blacklists/warez/urls> No arquivo "/etc/dansguardian/bannedsitelist" vo as linhas: .Include</etc/dansguardian/blacklists/adult/domains> .Include</etc/dansguardian/blacklists/drugs/domains> .Include</etc/dansguardian/blacklists/porn/domains> .Include</etc/dansguardian/blacklists/warez/domains> Voc pode usar tambm os arquivos com expresses proibidas, includos no pacote para reforar a lista adicional, com os termos em portugus, que j ativamos anteriormente. Para isso, abra novamente o arquivo "/etc/dansguardian/ bannedphraselist" e adicione as linhas: .Include</etc/dansguardian/blacklists/adult/expressions> .Include</etc/dansguardian/blacklists/drugs/expressions> .Include</etc/dansguardian/blacklists/porn/expressions> .Include</etc/dansguardian/blacklists/warez/expressions> Faa o mesmo com outras categorias que quiser adicionar.

Proxy transparente com o DansGuardian

Como vimos at agora, o DansGuardian funciona como uma camada extra, uma espcie de "pedgio", por onde as requisies passam antes de chegarem ao Squid e por onde as respostas passam antes de serem enviadas ao cliente. Normalmente, os clientes precisam ser configurados manualmente para utilizar o DansGuardian como proxy, acessando-o atravs da porta 8080. Isso traz de volta o problema de configurar manualmente cada um dos micros e evitar que os usurios removam a configurao para acessar diretamente caso voc mantenha o compartilhamento via NAT ativo em adio ao proxy. Contudo, possvel configurar o DansGuardian para trabalhar como proxy transparente, da mesma forma que fizemos anteriormente com o Squid. Neste caso, o firewall redireciona as requisies recebidas na porta 80 para o DansGuardian e ele as repassa para o Squid, que finalmente faz o acesso. Os clientes precisam apenas ser configurados para acessar a internet usando o servidor onde esto instalados o Squid e DansGuardian como gateway. Para isso, comece configurando o Squid para trabalhar em modo transparente, adicionando a opo "transparent" na linha "http_port" do squid.conf: http_port 3128 transparent Depois vm as regras de firewall para habilitar o compartilhamento da conexo e direcionar as requisies recebidas na porta 80 para a porta usada pelo DansGuardian. Novamente, a mesma configurao usada para fazer um proxy transparente no Squid, mudando apenas a porta. Lembre-se de que o "eth0" deve ser substitudo pela interface ligada na rede local e o "eth1" pela interface ligada Internet: modprobe iptable_nat iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT \ --to-port 8080 iptables -A INPUT -m tcp -p tcp -s ! 127.0.0.1 --dport 3128 -j DROP A ltima regra bloqueia a porta 3128 usada pelo Squid, para impedir que algum espertinho configure o navegador para acessar diretamente atravs do Squid, sem passar pelo DansGuardian. A nica exceo o endereo 127.0.0.1, ou

seja, o prprio servidor. Lembre-se de colocar estes comandos no arquivo "/etc/rc.local" (ou no seu script de compartilhamento da conexo) para no precisar ficar digitando tudo a cada boot.

Obtendo um endereo fixo, usando um DNS dinmico


Tudo o que vimos ate agora, ou seja, compartilhar a conexo, configurar um servidor proxy e assim por diante soluciona o problema do acesso web a partir dos micros da rede local, permitindo que uma nica conexo via ADSL, cabo, rdio ou outra modalidade de acesso domstico seja compartilhada entre vrios micros. Sobra ento resolver o problema do acesso externo, ou seja, permitir que o servidor da rede seja acessado remotamente, de forma que voc possa prestar suporte remoto ou possa configurar uma VPN, interligando duas redes distantes, por exemplo. Uma conexo domstica oferece trs deficincias nesse sentido: * O endereo IP dinmico, mudando peridicamente ou a cada vez que o modem reiniciado. * A conexo dificilmente 100% estvel, caindo esporadicamente. * Algumas portas, como a 21, a 25 e a 80 so fechadas pelas operadoras, de forma a dificultar a criao de servidores domsticos. No podemos fazer nada com relao estabilidade da conexo, mas podemos alterar as portas utilizadas pelos servidores (o Apache pode ser configurado para utilizar a porta 8080 em vez da 80, por exemplo) e podemos solucionar o problema do IP dinmico utilizando um servio de DNS dinmico (DDNS). Os servios de DNS dinmico trabalham de uma forma bastante simples, onde um cliente instalado no seu servidor (ou em qualquer outra mquina da rede, acessando atravs da conexo compartilhada por ele) envia informaes sobre o endereo IP corrente para os servidores do servio, o que permite a eles manterem um subdomnio no estilo "meu-nome.no-ip.org" ou "minhaempresa.dyndns.com" apontando para seu endereo IP corrente. As contas so gratuitas, de forma que voc pode tranquilamente criar um domnio virtual para cada rede que voc administra, permitindo que, desde que a conexo esteja funcionando, voc possa resolver qualquer problema sem levantar da cadeira. Usar um domnio virtual permite tambm que voc crie VPNs, interligando duas ou mais redes com IP dinmico (como veremos em detalhes no captulo sobre o OpenVPN) ou at mesmo permitir que os usurios da rede acessem suas mquinas e rodem aplicativos remotamente (como veremos nos captulos sobre o SSH e acesso remoto). possvel tambm usar um DNS dinmico tambm para hospedar sites, disponibilizar arquivos via FTP e assim por diante ( necessrio apenas utilizar portas alternativas para os servidores). O problema que a baixa taxa de upload e a relativa instabilidade das conexes domsticas tornaro o acesso dos visitantes muito ruim, sem falar que o uso constante da banda tornar seu acesso muito mais lento. Voc pode muito bem configurar um servidor para fins de teste, aplicando as dicas que veremos ao longo do livro, mas para aplicaes mais srias, necessrio ter um servidor dedicado, ou pelo menos um plano de shared hosting. Os dois servios de DNS Dinmico mais usados (ambos gratuitos, com opes de servios pagos), so ohttp://www.no-ip.com e o http://www.dyndns.com, que aprenderemos a configurar aqui.

Cadastro de um domnio virtual no no-ip.com Em ambos os casos, basta fazer um cadastro gratuito para criar sua conta e poder cadastrar os domnios: http://www.no-ip.com/newUser.php https://www.dyndns.com/account/create.html Fica faltando ento a parte mais importante que a instalao do cliente. Para o No-IP, voc pode utilizar o prprio cliente Linux disponvel no: http://www.no-ip.com/downloads.php?page=linux Comece descompactando o arquivo. Dentro dele, existe uma pasta chamada "binaries", com o arquivo "noip2-Linux". Este o executvel que faz a atualizao do IP. Para us-lo, copie-o para a pasta "/usr/local/bin", como em: # tar -zxvf noip-duc-linux.tar.gz # cd noip-2.1.1/binaries/ # cp -a noip2-Linux /usr/local/bin/

O prximo passo executar o "noip2-Linux", usando a opo "-C -c" (create config), que cria o arquivo de configurao. Voc pode indicar onde o arquivo ser criado, basta indic-lo no comando. Nesta etapa ele pedir o login de usurio e o domnio registrado no site, como em: # noip2-Linux -C -c /etc/noip.conf Auto configuration for Linux client of no-ip.com. Please enter the login/email string for no-ip.com : meu@email.com Please enter the password for user 'meu@email.com ' ******** Only one host [meunome.no-ip.org] is registered to this account. It will be used. Please enter an update interval:[30] Do you wish to run something at successful update?[N] (y/N) N New configuration file '/etc/no-ip.conf' created. Com o arquivo de configurao criado, inicie o noip2-Linux usando o comando abaixo. Inclua o comando em uma dos scripts de inicializao do sistema, como o "/etc/rc.d/rc.local", para que ele seja executado durante o boot. No esquea de adicionar o "&" no final do comando, ele faz o programa rodar em background. Sem ele, o comando bloqueia o terminal, paralisando a inicializao do sistema. Note que agora usamos apenas o segundo "c", que indica que ele deve usar o arquivo de configurao anteriormente criado: # noip2-Linux -c /etc/noip.conf & Nas distribuies derivadas do Debian, existe a opo de instalar o pacote disponvel via apt-get: # apt-get install no-ip Ao ser instalado, ele cria automaticamente o script "/etc/init.d/no-ip", que se encarrega de ativar o programa durante o boot. Para que ele funcione, fica faltando apenas criar o arquivo de configurao, usando o comando: # no-ip -C -c /etc/no-ip.conf Para que a configurao entre o vigor, reinicie o servio, usando: # /etc/init.d/no-ip restart Para o DynDNS, utilizamos o ddclient, um pequeno aplicativo escrito em perl, que est disponvel nas principais distribuies. No caso das derivadas do Debian, a instalao mais simples, pois ele est disponvel diretamente nos repositrios principais, via apt-get: # apt-get install ddclient O script de instalao includo no pacote faz uma srie de perguntas, incluindo o domnio virtual registrado, seu login e senha no servio, a interface do servidor ligada internet e o tempo de intervalo entre as atualizaes:

No final, ele pergunta se voc deseja executar o ddclient como um servio. Responda que sim para que ele fique ativo continuamente e seja iniciado junto com o sistema. A configurao salva no arquivo "/etc/ddclient.conf", que voc pode editar manualmente caso precise fazer alteraes posteriormente. O arquivo inclui basicamente as mesmas opes feitas pelo wizard, com as respostas salvas em texto puro. No caso do CentOS e do Fedora, o pacote do ddclient est disponvel no repositrio do RPMForge. Voc encontra instrues de como ativar o repositrio no yum no https://rpmrepo.org/RPMforge/Using. Depois de adicionar o repositrio, a instalao feita da forma tradicional: # yum install ddclient O pacote RPM no inclui o wizard, por isso a configurao precisa ser feita manualmente, editando o arquivo "/etc/ddclient/ddclient.conf". Aqui vai um modelo pr-configurado, onde voc precisa apenas especificar seu login, senha e o domnio registrado: daemon=600 cache=/tmp/ddclient.cache pid=/var/run/ddclient.pid use=web, web=checkip.dyndns.com/, web-skip='IP Address' login=seulogin password=suasenha protocol=dyndns2

server=members.dyndns.org seudominio.dyndns.org Depois de terminar, reinicie o servio para que as alteraes entrem em vigor: # service ddclient restart Se voc usa um modem ADSL ou um roteador wireless para compartilhar a conexo, procure pela opo de usar um DNS dinmico (Dynamic DNS) dentro da configurao. A maioria dos modelos atuais incluem clientes para os servios mais populares:

Com isso, o prprio roteador pode se encarregar da atualizao, sem que voc precise instalar softwares adicionais no servidor da rede. Outros servios populares, que voc pode testar so o http://www.da.ru, o http://www.dtdns.com/ e o http://dns2go.com.

Captulo 6: Configurando servidores web

Os servidores web so a espinha dorsal da Internet, so eles que hospedam todas as pginas, incluindo os mecanismos de busca e servem como base para todo tipo de aplicativo via web, incluindo os webmails. No futuro, esta tendncia deve se acentuar, com pginas web dinmicas e aplicativos via web substituindo cada vez mais os aplicativos desktop. Nos primrdios da internet, eram utilizadas apenas pginas html estticas e scripts CGI. O Apache em si continua oferecendo suporte apenas a esses recursos bsicos, mas ele pode ser expandido atravs de mdulos, passando a suportar scripts em PHP, acessar bancos de dados MySQL, entre inmeros outros recursos. Sempre que solicitada uma pgina em PHP ou outra linguagem, entra em ao o mdulo apropriado, que faz o processamento necessrio e devolve ao Apache a pgina html que ser exibida. Entram em ao, ento, os gestores de contedo e fruns, que combinam os recursos do PHP com um banco de dados como o MySQL, acessado atravs dele. A combinao de tudo isso forma a soluo que popularmente chamada de "LAMP" (Linux + Apache + MySQL + PHP). O Apache e o MySQL, juntamente com o suporte a PHP podem ser tambm instalados sobre o Windows (formando o "WAMP"), uma soluo relativamente popular entre administradores Microsoft que no se sentem vontade em usar o IIS.

Instalando um servidor LAMP

Segundo a Netcraft, pouco mais de 50% dos servidores web do mundo rodam o Apache (http://news.netcraft.com/archives/web_server_survey.html), a maior parte deles sobre o Linux. O percentual real na verdade um pouco maior, pois um grande nmero de administradores configuram seus servidores para divulgarem informaes falsas sobre o servidor web usado, de forma a no fornecer qualquer informao que possa facilitar ataques. Estes servidores no-identificados aparecem na pesquisa como "other". Alm de ser um dos servidores web mais antigos e um dos mais seguros, o Apache possui inmeros mdulos, que adicionam suporte aos mais exticos recursos. A maioria das pginas atuais utiliza uma estrutura em PHP, freqentemente com um banco de dados MySQL ou PostgreSQL. Existem, inclusive, muitos sistemas prontos, como o phpBB (frum) e o WordPress (para gerenciamento de contedo), que podem ser instalados sem muita dificuldade depois que o servidor web j estiver rodando. Outros recursos populares so a encriptao de pginas em SSL, necessrio para a criao de pginas seguras (usadas em lojas virtuais, por exemplo) e sistemas de gerao de relatrios de acesso, como o Webalizer.

Alm do servidor web em si, voc quase sempre vai precisar configurar tambm um servidor DNS, que responder pelo domnio do seu site ou empresa. Aprender a configurar o DNS corretamente importante, caso contrrio voc pode ter problemas ao enviar e-mails (pela falta do DNS reverso), ou mesmo ter problemas mais graves com o registro do domnio. A Apache permite hospedar vrios sites no mesmo servidor, recurso chamado de virtual hosts. Apenas os sites mais acessados so capazes de saturar os recursos de um servidor dedicado de configurao razovel, por isso hospedar vrios sites no mesmo servidor uma forma de economizar recursos e trabalho. Ao hospedar vrios sites, passamos a ter dois novos problemas: precisamos oferecer alguma forma de acesso aos arquivos, para que os responsveis possam atualizar suas pginas sem alterar os arquivos dos vizinhos, e precisamos de um sistema de quotas, para que cada um tenha sua fatia justa de espao em disco. Criamos, ento, vrios logins de acesso e configuramos um servidor FTP, para que cada um tenha acesso a seus prprios arquivos, mas sem ter como alterar os demais. Apesar de muito usado, o FTP inseguro. Ele na verdade um servidor de arquivos de uso geral, que no est limitado ao uso em conjunto com um servidor web. muito comum usar um servidor FTP para disponibilizar arquivos para download pblico, por exemplo. No captulo 10 veremos como usar o SFTP e o SHFS, que permitem acesso seguro, atravs de um tnel encriptado. Completando o time, temos o Quota, que permite limitar o espao em disco usado por cada usurio, garantindo uma diviso justa dos recursos disponveis. Ao atingir seu limite, o usurio recebe uma mensagem de "disco cheio", mesmo que ainda existam vrios GB's livres no HD do servidor.

Instalando o Apache
O Apache pode ser dividido em duas grandes famlias: o Apache 2.x e o Apache 1.3 que, apesar de muito antigo, ainda usado em muitos servidores. O Apache 2 trouxe muitas vantagens, sobretudo do ponto de vista do desempenho, alm de oferecer novos mdulos e mais opes de segurana, mas sua adoo foi retardada nos primeiros anos por um detalhe muito simples: o fato de ele ser incompatvel com os mdulos compilados para o Apache 1.3. Como os mdulos so a alma do servidor web, muitos administradores ficavam amarrados ao Apache 1.3 devido falta de disponibilidade de alguns mdulos especficos para o Apache 2. Conforme o tempo foi passando, mais e mais mdulos foram portados, sem falar de novos mdulos desenvolvidos diretamente para uso em conjunto com o Apache 2. Hoje em dia, o Apache 1.3 ainda sobrevive em muitas instalaes devido inrcia natural que temos dentro do ramo de servidores, mas no existe nenhum bom motivo para us-lo em uma nova instalao. O Apache 2 simplesmente melhor em todos os quesitos. Apesar disso, ainda existem casos de distribuies que continuam oferecendo as duas verses, de forma a satisfazer os dois pblicos. No Debian Etch, por exemplo, o Apache 1.3 instalado atravs do pacote "apache", enquanto o Apache 2 (a verso recomendada) instalado atravs do "apache2". Entretanto, no Debian Lenny j est disponvel apenas o Apache 2, assim como no CentOS, no Fedora e em outras distribuies. Ao instalar o Apache 2, o suporte a SSL instalado automaticamente junto com o pacote principal (mas ainda preciso ativ-lo na configurao, como veremos a seguir). Instale tambm o pacote apache2-utils, que contm diversos utilitrios de gerenciamento que usaremos a seguir: # apt-get install apache2 apache2-utils Se desejar ativar o suporte a pginas seguras, voc vai precisar tambm do pacote "ssl-cert", necessrio para ativar o suporte a SSL e gerar os certificados. Ele no instalado por padro ao fazer uma instalao enxuta do Debian ou do Ubuntu: # apt-get install ssl-cert Se voc estiver utilizando o CentOS ou o Fedora, instale o pacote "httpd", que contm o Apache 2 e os utilitrios: # yum install httpd Diferente do Debian, o servio no ser configurado para ser ativado no boot por padro e nem mesmo inicializado automaticamente aps a instalao. Para ativ-lo, necessrio ativar o servio e, em seguida, criar os links para incio automtico usando o chkconfig # service httpd start # chkconfig httpd on Seguindo os nomes dos pacotes, no Debian o servio se chama "apache2", enquanto no Fedora e no CentOS ele se chama "httpd". Para reiniciar o servidor voc usa, respectivamente, os comandos "/etc/init.d/apache2 restart" e "service httpd restart". Acessando o endereo "http://127.0.0.1", voc ver uma pgina de boas-vindas, que indica que o servidor est funcionando. Se no houver nenhum firewall no caminho, ele j estar acessvel a partir de outros micros da rede local ou da internet:

Por enquanto, temos apenas uma verso bsica do Apache, que simplesmente exibe arquivos html e executa scripts CGI. Por padro, o diretrio raiz do servidor Web "/var/www" (no Debian) ou "/var/www/html" (no Fedora). Com isso, a pgina "http://seu.servidor/index.html" , na verdade, o arquivo "/var/www/index.html" ou "/var/www/html/index.html". Como de praxe, o diretrio raiz definido atravs de uma opo dentro do arquivo principal de configurao (a opo "DocumentRoot") e pode ser alterado caso desejado. Ao hospedar diversos sites no mesmo servidor, voc define uma pasta raiz diferente para cada um. Como pode ver, a instalao do Apache propriamente dita bastante simples, o grande desafio configurar e otimizar o servidor, como veremos ao longo do restante deste captulo. Instalao a partir do cdigo fonte: Muitos administradores preferem instalar o Apache a partir dos fontes, o que oferece um controle maior sobre os recursos que ficaro ou no ativos. De uma forma geral, instalar a partir do cdigo fonte s uma boa idia se voc conhece muito bem o software e no est satisfeito com as opes de compilao usadas nos pacotes includos na distribuio. Alm da instalao e da configurao inicial, voc precisar tambm se preocupar com patches e atualizaes de segurana, j que voc no poder contar com as atualizaes disponibilizadas atravs do apt-get ou do yum. Ou seja, se voc no est confiante de que vai ter o tempo e o conhecimento necessrios para realizar um trabalho de manuteno melhor do que o realizado pelos mantenedores do Debian, Ubuntu, CentOS ou do Fedora, voc estar melhor servido simplesmente usado os pacotes pr-compilados. :) De qualquer forma, se voc quer encarar o desafio, pode baixar o cdigo fonte no: http://httpd.apache.org/. Lembrese de que para instalar qualquer aplicativo a partir dos fontes, voc precisa ter instalados os compiladores e bibliotecas de desenvolvimento. Os passos bsicos so descompactar o pacote, acessar a pasta que ser criada e executar o trio "./configure", "make" e "make install", este ltimo como root. Isso resultar em uma instalao padro, onde todos os arquivos so instalados no diretrio "/usr/local/apache2". Para personalizar as opes (que seria o principal motivo de instalar a partir dos fontes, afinal), voc deve passar as opes desejadas ao executar o "./configure", como em: $ ./configure --prefix=/etc/apache2 --exec-prefix=/usr --bindir=/usr/bin \ --sbindir=/usr/sbin --mandir=/usr/share/man --sysconfdir=/etc/apache2/conf \ --includedir=/usr/include/httpd --libexecdir=/usr/lib/httpd/modules \ --datadir=/var/www/ --with-mpm=prefork --enable-mods-shared="rewrite" Como pode ver, as opes incluem no apenas os diretrios de instalao, mas tambm os mdulos que sero ativados e diversas outras opes de configurao. Ao instalar a partir do cdigo fonte, a ativao e a desativao do servidor feita usando o script "apachectl", que substitui o "/etc/init.d/apache2" ou o "service httpd", como em: # apachectl start ou: # apachectl restart

Entendendo a organizao dos arquivos


A principal caracterstica do Apache a modularidade. Ao invs de ser um aplicativo grande e complexo, que tenta desempenhar sozinho todas as funes, o Apache se limita a executar uma nica tarefa: entregar pginas html e outros tipos de arquivos aos clientes. Qualquer outra coisa invariavelmente feita por um mdulo externo. Por exemplo, quando voc acessa uma pgina em PHP em um site que roda sobre um servidor Apache, ele (Apache) l o arquivo no disco e repassa a requisio para o mod_php, o mdulo encarregado de processar arquivos PHP. Ele, por sua vez, aciona o interpretador PHP, que processa a pgina e a entrega, j processada, ao Apache, que, finalmente, a entrega ao cliente. Caso seja necessrio acessar um banco de dados (como no caso de um frum ou de um gestor de

contedo), entra em ao outro mdulo, como o php5-mysql, que permite ao interpretador PHP acessar o banco de dados:

Pode parecer estranho que depois de toda essa volta o Apache ainda consiga entregar a pgina processada em tempo hbil, mas justamente essa diviso de tarefas que permite ao Apache ser to rpido e seguro. O trabalho dividido em vrias partes e cada mdulo mantido separadamente por uma equipe que entende do assunto e zela pelo desempenho e confiabilidade do cdigo. Graas a isso, bastante raro que sejam descobertos problemas graves de segurana no Apache ou no interpretador PHP, por exemplo. Quase sempre, os problemas de segurana no esto no servidor Web em si, mas sim no gestor de contedo (phpNuke, Xoops, phpBB, etc.) usado.

No Debian e derivados

Nas distribuies derivadas do Debian, a arquitetura modular do Apache extendida tambm aos arquivos de configurao. Tradicionalmente, a configurao do Apache centralizada em um nico arquivo, o "httpd.conf", que pode opcionalmente incluir referncias a arquivos externos (includes) que permitem segmentar e organizar a configurao. Aproveitando esta possibilidade, a equipe do Debian desenvolveu uma organizao bastante prtica, que usada tambm no Ubuntu e em outras distribuies derivadas dele. primeira vista, a organizao do Apache 2 nas distribuies derivadas do Debian parece muito mais complicada, mas, depois de entender, a coisa se revela bastante simples e lgica:

Todos os arquivos de configurao esto organizados dentro do diretrio "/etc/apache2". Dentro dele, temos as pastas "sites-available" e "sites-enabled", que contm a configurao dos sites hospedados; as pastas "mods-available" e "mods-enabled", que armazenam a configurao dos mdulos; o arquivo "ports.conf", onde vai a configurao das portas TCP que o servidor vai escutar; o arquivo "apache2.conf", que armazena configuraes diversas relacionadas ao funcionamento do servidor e a pasta "conf.d", que armazena arquivos com configuraes adicionais. O Apache capaz de hospedar simultaneamente vrios sites, cada um representado por um arquivo de configurao diferente. Imagine o caso de uma empresa de hosting que mantm um servidor com 2.000 pequenos sites. Quando cada cliente registra seu site e assina o plano de hospedagem, voc cria um novo arquivo dentro da pasta "sitesavailable" com as configuraes necessrias e um link para ele na pasta "sites-enabled". Como os nomes sugerem, a primeira pasta armazena a configurao de todos os sites (virtual hosts) hospedados no servidor, mas apenas os sites que estiverem presentes na pasta "sites-enabled" ficam disponveis. Quando necessrio suspender temporariamente um site por falta de pagamento, por exemplo, voc simplesmente remove o link na pasta "sites-enabled", sem precisar mexer na configurao. Ao invs de criar e remover os links manualmente, voc pode usar os comandos "a2ensite" e "a2dissite", que fazem isso para voc. Para ativar e desativar um site configurado no arquivo "/etc/apache2/sites-available/gdhn", por exemplo, os comandos seriam: # a2ensite gdhn (ativa) # a2dissite gdhn (desativa) Quando o Apache instalado, criado por padro o arquivo "/etc/apache2/sites-available/default", que contm a configurao de um site "raiz", que usa (por padro) a pasta "/var/www" como diretrio de pginas. Se o seu servidor web vai hospedar um nico site, ento essa configurao suficiente, mas, caso voc queira hospedar vrios sites no mesmo servidor, necessrio criar uma pasta e um arquivo de configurao para cada site adicional. Seu servidor pode, por exemplo, hospedar o "joao.com.br" e o "maria.com.br". Um servidor DNS, mantido por voc, configurado para responder pelos dois domnios, em ambos os casos fornecendo o endereo IP do seu servidor web aos clientes. Na configurao do apache, criamos os arquivos "/etc/apache2/sites-available/joao" e "/etc/apache2/sites-available/maria", cada um configurado para utilizar uma pasta diferente. De acordo com sua preferncia, podem ser usadas pastas dentro do diretrio home de cada usurio, como em "/home/joao/html" e "/home/maria/html", ou subpastas dentro do diretrio "/var/www", como em "/var/www/joao" e "/var/www/maria".

Quando um visitante digita "http://joao.com.br", o servidor do Registro.br (que responde pelos domnios .br) vai passar a requisio para seu servidor DNS, que responde com o endereo do seu servidor web. Ao acessar o servidor, o navegador solicita o site "joao.com.br" e o servidor responde enviando o arquivo "/var/www/joao/index.html" ou "index.php" ao cliente. Esta configurao parece bem complicada primeira vista, mas na prtica relativamente simples. Veremos mais detalhes sobre a configurao de servidores Apache com vrios domnios mais adiante. Continuando, a mesma idia das duas pastas separadas se aplica aos mdulos. A pasta "mods-available" contm a configurao e scripts de inicializao para todos os mdulos disponveis, mas apenas os mdulos referenciados (atravs de um link) na pasta "mods-enabled" so realmente carregados. Muita gente simplesmente cria e deleta os links manualmente, mas isso pode ser feito mais rapidamente usando os comandos "a2enmod" e "a2dismod", que ativam e desativam mdulos especficos. Para desativar o suporte a PHP, por exemplo, voc usaria o comando: # a2dismod php5 Para ativ-lo novamente, usaria: # a2enmod php5 Uma vez que um determinado mdulo ativado, ele fica automaticamente disponvel para todos os sites hospedados no servidor. Para que a alterao entre em vigor, necessrio reiniciar o servio, usando o comando "/etc/init.d/apache2 forcereload" ou o "/etc/init.d/apache2 restart" (no Debian os dois comandos fazem exatamente a mesma coisa): # /etc/init.d/apache2 force-reload Por outro lado, ao ativar ou desativar sites, ou ao fazer alteraes simples na configurao, voc pode utilizar o comando "/etc/init.d/apache2 reload" (sem o "force"), que apenas atualiza a configurao, sem reiniciar o servio: # /etc/init.d/apache2 reload A vantagem de usar o reload em vez do force-reload que ele no precisa finalizar os processos do Apache, o que evita que o servidor fique indisponvel durante a reinicializao do servio. Em um servidor movimentado, com um grande volume de sites hospedados e um grande volume de acessos, reiniciar o servidor web um processo caro, que causa interrupo do servio e perda de acessos, da as duas opes. Outra configurao que foi desmembrada a configurao de portas, que foi para o arquivo "ports.conf". Originalmente o arquivo vem com uma nica linha: Listen 80 aqui que voc altera a porta padro do seu servidor ou adiciona novas portas, como faremos mais adiante ao ativar o SSL, por exemplo. Voc pode tambm usar portas diferentes caso precise manter mais de um servidor web ativo na mesma mquina (muitos administradores usam este truque para testar novas verses do Apache, ou para combin-lo com um segundo servidor web, como o lighttpd, configurado para servir arquivos e pginas estticas). Outro uso comum para a opo (em casos em que voc quer disponibilizar um servidor web domstico) para burlar as restries das operadoras de planos de acesso, que geralmente bloqueiam conexes na porta 80, de forma a dificultar o uso de servidores web nas conexes domsticas. Para fazer com que seu servidor escute tambm na porta 443 (a porta do HTTPS) e na porta 8080, por exemplo, voc adicionaria duas novas linhas, como em: Listen 80 Listen 443 Listen 8080 Finalmente, chegamos ao arquivo "apache2.conf", que agrupa o "resto" das configuraes. ele que voc vai alterar quando, por exemplo, precisar ajustar o nmero de processos usados pelo Apache ou aumentar o nmero de conexes simultneas permitidas pelo servidor, como veremos em detalhes mais adiante.

No CentOS, Fedora e RHEL

As distribuies derivadas do Red Hat, incluindo o CentOS, o Fedora e o RHEL, utilizam por padro uma organizao mais tradicional, onde toda a configurao concentrada no arquivo "/etc/httpd/conf/httpd.conf", em vez de ser desmembrada em diversos arquivos separados. Isso pode tornar a configurao mais simples ou mais complicada, dependendo do seu ponto de vista, j que por um lado temos um nico arquivo, mas por outro ele muito maior. No caso delas, ao adicionar um novo site na configurao, voc simplesmente adiciona a seo referente a ele dentro do arquivo httpd.conf (em vez de criar um arquivo separado, como no Debian) e, para desativ-lo posteriormente, comenta ou remove a configurao. Os mdulos so ativados atravs de arquivos criados dentro da pasta "/etc/httpd/conf.d/". Todos os arquivos com extenso ".conf" colocados dentro da pasta so carregados pelo servidor, de forma similar aos links dentro da pasta "/ etc/apache2/mods-enabled" do Debian. Ao ativar o suporte a PHP, por exemplo, criado o arquivo "/etc/httpd/conf.d/php.conf". No existe um script destinado a ativar e desativar os mdulos, como no caso do a2enmod/a2dismod do Debian; para desativar um mdulo, voc precisa apenas remover ou renomear o arquivo referente a ele dentro da pasta, alterando a extenso de ".conf" para ".disabled", por exemplo. Para desativar o suporte a PHP, por exemplo, voc renomearia o arquivo "php.conf", e em seguida reiniciaria o Apache, como em: # cd /etc/httpd/conf.d/ # mv php.conf php.disabled # service httpd restart Outra diferena que, como vimos anteriormente, o script responsvel por ativar e desativar o servio se chama "httpd" em vez de "apache2", como no caso do Debian. O nome "httpd" vem da juno da sigla "http" com o "d" de "daemon", indicando que ele o servio responsvel por servir pginas web. Para que ele simplesmente releia a configurao, sem derrubar os processos ativos (de uma forma geral, voc precisa realmente reiniciar o servio apenas ao alterar a configurao dos mdulos ou atualizar o pacote), voc pode usar o parmetro "reload", da mesma forma que no Debian: # service httpd reload

Outra diferena, que no Debian o Apache roda sob o usurio "www-data", enquanto no CentOS/Fedora roda sob o usurio "apache". Em ambos os casos usado um usurio limitado, que isola o servidor web e os scripts executados dentro dele do restante do sistema, evitando que eventuais problemas de segurana no Apache ou no PHP permitam ao atacante obter acesso de root. Para que as pginas sejam exibidas corretamente, necessrio que o usurio sob o qual roda o servidor web tenha permisso de acesso aos arquivos do site, de forma que o uso de usurios diferentes cria pequenas diferenas na configurao em algumas situaes. De uma forma geral, o servidor web precisa apenas de permisso de leitura para os arquivos do site, salvo em casos especiais, onde so usados scripts CGI ou pginas em PHP que salvam informaes em arquivos de texto em vez de utilizarem um banco de dados.

Instalando o suporte a PHP

No incio, existiam apenas pginas html estticas, com links atualizados manualmente. Depois, surgiram os scripts CGI (geralmente escritos em Perl), que permitiram criar vrios tipos de formulrios e automatizar funes. Finalmente, surgiu o PHP, adotado rapidamente como a linguagem padro para criao de todo tipo de pgina dinmica, frum ou gerenciador de contedo. Alm da linguagem ser bastante flexvel, um script em PHP chega a ser mais de 100 vezes mais rpido que um script CGI equivalente, alm de mais seguro. Em resumo, um script CGI um executvel, que precisa ser carregado na memria, executado e descarregado cada vez que feita uma requisio. No caso do PHP, o interpretador fica carregado continuamente e simplesmente vai executando de forma contnua os comandos recebidos dos scripts includos nas pginas. Para quem programa em Perl, existe a possibilidade de utilizar o mod-perl, instalvel atravs do pacote "apache-modperl" ou "libapache2-mod-perl2". Assim como o PHP, o mod-perl um mdulo do Apache que fica continuamente carregado na memria, executando os scripts Perl de uma forma bem mais rpida e segura que os scripts CGI. Voltando ao assunto principal, no Debian o suporte a PHP instalado atravs do pacote "php5" (ou "php4", de acordo com a verso escolhida). Para instal-lo, basta usar o gerenciador de pacotes da distribuio em uso, como em: # apt-get install php5 No caso do CentOS e do Fedora, usado um pacote unificado, o "php", que inclui a verso mais recente do interpretador, eliminando a confuso: # yum install php Com o interpretador PHP instalado, falta instalar o mdulo do Apache 2, que no Debian est disponvel atravs do pacote "libapache2-mod-php5" (ou "libapache2-mod-php4", de acordo com a verso desejada): # apt-get install libapache2-mod-php5 O mdulo "libapache2-mod-php5" instalado dentro da pasta "/usr/lib/apache2/modules/" e ativado de uma forma diferente que no Apache 1.3. Ao invs de adicionar as linhas que ativam o mdulo e criam as associaes de arquivos no final do arquivo httpd.conf, so criados dois arquivos dentro da pasta "/etc/apache2/mods-available/", com, respectivamente, a ativao do mdulo e as associaes de arquivos. Os links so criados automaticamente ao instalar o pacote, mas voc pode tirar qualquer dvida usando o comando a2enmod: # a2enmod php5 No esquea de reiniciar o servio para que o mdulo seja carregado e a configurao entre em vigor: # /etc/init.d/apache2 force-reload ou: # service httpd restart

No caso do CentOS/Fedora o mod_php instalado junto com o pacote "php" e ativado automaticamente, atravs da criao do arquivo "/etc/httpd/conf.d/php.conf". Dentro dele, voc encontra as linhas que carregam o mdulo e criam a associao com os arquivos .php, como em:

LoadModule php5_module modules/libphp5.so AddHandler php5-script .php AddType text/html .php DirectoryIndex index.php Se voc tiver a curiosidade de olhar o contedo dos arquivos "/etc/apache2/mods-enabled/php5.conf" e "/etc/apache2/mods-enabled/php5.load" em uma distribuio derivada do Debian, vai perceber que as linhas contidas neles so muito similares. Na verdade, o Apache usado no Debian e o usado no CentOS o mesmo software, apenas configurado de forma ligeiramente diferente.

Com o suporte a PHP ativado, o Apache continua exibindo diretamente pginas com extenso .htm ou .html, mas passa a entregar as pginas .php ou .phps ao interpretador php, que faz o processamento necessrio e devolve uma pgina html simples ao Apache, que se encarrega de envi-la ao cliente. Estas pginas processadas so "descartveis": cada vez que um cliente acessa a pgina, ela processada novamente, mesmo que as informaes no tenham sido alteradas. Dependendo do nmero de funes usadas e da complexidade do cdigo, as pginas em PHP podem ser bastante pesadas. No incomum que um site com 100.000 pageviews dirios (o que corresponde a umas 5 a 8 requisies por segundo nos horrios de pico) precise de um servidor dedicado, de configurao razovel. Quase sempre, os sistemas desenvolvidos em PHP utilizam tambm um banco de dados MySQL ou Postgre SQL. Naturalmente, perfeitamente possvel que os scripts simplesmente salvem as informaes em arquivos de texto dentro do diretrio do site, mas isso resultaria em um desempenho muito ruim, sem falar em eventuais brechas de segurana. Utilizar um banco de dados permite armazenar um volume muito maior de informaes, acessveis de forma mais segura. Para que o interpretador PHP seja capaz de acessar o banco de dados, necessrio ter instalado (alm do servidor MySQL propriamente dito) o mdulo "php5-mysql" (ou "php4-mysql"), que faz a juno entre os dois componentes:

# apt-get install php5-mysql No caso do PostgreSQL, utilizado o mdulo "php5-pgsql", que tem a mesma funo: # apt-get install php5-pgsql No se esquea de reiniciar o Apache, para que as alteraes entrem em vigor: # /etc/init.d/apache force-reload No caso do Fedora e do CentOS, muda apenas o nome do pacote, que passa a se chamar simplesmente "php-mysql": # yum install php-mysql Para verificar se o suporte a PHP est realmente ativo, crie um arquivo de texto chamado "info.php" (ou outro nome qualquer, seguido da extenso .php) dentro da pasta do servidor web, contendo apenas a linha abaixo: <?php phpinfo( ); ?> Salve o arquivo e abra a pgina atravs do navegador. A funo "phpinfo", que usamos no arquivo, faz com que o servidor exiba uma pgina com detalhes da configurao do PHP e dos mdulos ativos:

Depois de verificar, remova o arquivo, pois no interessante que essas informaes fiquem disponveis ao pblico.

Dicas de segurana

O interpretador php configurado atravs do arquivo "php.ini", um longo arquivo de configurao que permite ativar ou desativar opes diversas da linguagem como, por exemplo, a possibilidade de fazer upload de arquivos atravs de scripts colocados nas pginas. A localizao do arquivo pode variar de acordo com a distribuio, mas voc pode encontr-lo rapidamente usando o comando "locate". No caso do CentOS, o arquivo o "/etc/php.ini", enquanto nas distribuies derivadas do Debian usado o arquivo "/etc/php5/apache2/php.ini". Para melhorar a segurana, recomendvel desativar as funes "show_source", "system", "shell_exec", "passthru", "exec", "popen", "proc_open", "symlink", o que pode ser feito atravs da opo "disable_functions =", disponvel (no Debian Etch) na linha 224 do arquivo. Basta adicionar a lista das funes, como em: disable_functions = show_source, system, shell_exec, passthru, exec, popen, proc_open, symlink Outras opes que recomendvel manter desativadas dentro do arquivo so: expose_php = Off register_globals = Off allow_url_fopen = Off allow_url_include = Off A opo "allow_url_fopen" permite abrir ou processar uma pgina ou arquivo externo dentro do script php. Embora ela seja uma funo til, usada por scripts que geram uma lista de links a partir de um feed, por exemplo, ela pode ser usada para diversos tipos de abusos, o que faz com que seja desativada em diversos servios de hospedagem, como no caso do Dreamhost. Ao tentar executar algum script em PHP que dependa da funo, voc receber um erro similar a: Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /var/ww/site/rss.php on line 59 Nesse caso, voc tem duas opes. Ou volta a ativar a opo dentro do arquivo, substituindo a linha "allow_url_fopen = Off" por "allow_url_fopen = On" ( necessrio reiniciar o servio do Apache para que a alterao entre em vigor) ou reescreve o script usando a funo "cURL", para que o script baixe o arquivo antes de process-lo. Outra dica que alm do pacote bsico, existem diversos mdulos e add-ons para o PHP, disponveis atravs de pacotes complementares, como o "php5-gd" (usado por diversos scripts de CAPTCHA, os verificadores onde o usurio precisa digitar o texto contido na imagem) e o "php5-mcrypt" (uma biblioteca com funes de encriptao e

desencriptao). Voc pode comear com o pacote bsico e ir instalando os pacotes adicionais conforme for precisando deles.

Instalando o MySQL
O MySQL um banco de dados extremamente verstil, usado para os mais diversos fins. Voc pode acessar o banco de dados a partir de um script em PHP, atravs de um aplicativo desenvolvido em C ou C++, ou praticamente qualquer outra linguagem (at mesmo atravs de um shell script! :). Existem vrios livros publicados sobre ele, por isso vou me limitar a falar sobre a instalao e a configurao necessria para utiliz-lo em um servidor LAMP, em conjunto com o Apache e o PHP. O primeiro passo instalar o servidor MySQL propriamente dito. Nas distribuies derivadas do Debian precisamos instalar apenas o pacote "mysql-server" usando o apt-get: # apt-get install mysql-server No CentOS ou Fedora, instalamos os pacotes "mysql" e "mysql-server", usando o yum: # yum install mysql mysql-server Voc pode instalar tambm os pacotes "mysql-client" (o cliente que permite acessar os dados e fazer modificaes no banco de dados) e o "mysql-navigator" (uma interface grfica para ele). Para que o servio seja configurado para ser carregado durante o boot, ative-o usando o chkconfig: # chkconfig mysqld on Antes de iniciar o servio, rode o comando "mysql_install_db". Ele prepara o terreno, criando a base de dados "mysql" (usada para armazenar a configurao do servidor MySQL, incluindo informaes sobre os usurios e sobre as demais bases de dados) e tambm uma base de dados chamada "test", que pode ser usada para testar o servidor: # mysql_install_db O passo seguinte ativar o servidor MySQL: # /etc/init.d/mysql start No caso do Fedora e do CentOS, o servio se chama "mysqld", ao invs de simplesmente "mysql", como no caso do Debian: # service mysqld start O MySQL possui um usurio padro chamado "root", que, assim como o root do sistema, tem acesso completo a todas as bases de dados e usado para fazer a configurao inicial do sistema, assim como tarefas de manuteno. Esta conta inicialmente no tem senha, por isso voc deve definir uma logo depois de iniciar o servio, usando o comando "mysqladmin -u root password senha", incluindo a senha desejada diretamente no comando, como em: # mysqladmin -u root password psUT7wq01 Se voc precisar trocar a senha posteriormente, necessrio acrescentar o parmetro "-p" antes do "password" e, em seguida, especificar a nova senha, como em: # mysqladmin -u root -p password psUT7wq01 Enter password: ******** Veja que nesse caso necessrio incluir a senha antiga ao executar o comando, antes de continuar, j que do contrrio teramos uma brecha bvia de segurana. Continuando, depois de definir a senha, o prximo passo criar uma base de dados. Voc pode instalar vrios scripts diferentes (um frum, um chat e um gestor de contedo, por exemplo) no mesmo servidor e, inclusive, vrias cpias de cada um. Isso cada vez mais utilizado, tanto dentro de sites que oferecem diversos servios, quanto em servidores compartilhados, onde os responsveis por cada site tm a liberdade de instalar os sistemas de sua preferncia.

Administrao bsica do banco de dados

Existem muitas interfaces de administrao para o MySQL, mas a forma mais elementar usar o prompt de comando. Para acess-lo, use o comando: # mysql -u root -p <enter> Enter password: <senha> Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 43 to server version: 4.0.15-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> Veja que o cabealho normal do bash foi substitudo por um "mysql>", que lembra onde voc est. Para sair, pressione "Ctrl+C" ou execute o comando "quit". Dentro do prompt do MySQL, use o comando "CREATE DATABASE" (criar base de dados), seguido pelo nome desejado. Neste exemplo, estou criando uma base de dados para usar na instalao do phpBB, que veremos a seguir. Um detalhe importante que todos os comandos dados dentro do prompt do MySQL devem terminar com ponto-e-vrgula: mysql> CREATE DATABASE phpbb; Query OK, 1 row affected (0.04 sec) Para confirmar, use o comando "SHOW DATABASES", que lista as bases de dados criadas no servidor, como em: mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | phpbb | | test | +--------------------+ Note que alm da base "phpbb" que criamos, existem mais trs bases de dados, criadas durante a instalao. As bases "mysql" e "information_schema" so para uso interno do MySQL, incluindo o armazenamento das configuraes

(sendo um banco de dados, o MySQL usa a si mesmo para armazenar suas configuraes :), enquanto a base "test" uma DB vazia, que pode ser usada para fins de teste. Temos em seguida a questo das permisses de acesso. Nada impede que voc sempre utilize a conta "root" do MySQL e inclusive configure os scripts instalados para a utilizarem. Entretanto, isso extremamente inseguro, principalmente se voc pretende instalar vrios scripts e aplicativos no mesmo servidor, ou se as bases de dados sero acessadas por vrios usurios. O ideal que cada base de dados tenha um usurio prprio e seja acessvel apenas por ele. Se voc vai instalar o phpBB (frum) e o WordPress (gerenciador de contedo), por exemplo, crie duas bases de dados ("phpbb" e "wordpress", por exemplo) e dois usurios separados, cada um com permisso para acessar uma das duas bases. Na configurao de cada um dos gestores, informe a base de dados que ser usada e o usurio e senha correspondente. Isso evita que eventuais problemas de segurana em um coloquem em risco tambm os dados referentes ao outro. Outra situao comum ao configurar um servidor com vrios virtual hosts. Nesse caso, o webmaster de cada site vai precisar de uma ou mais bases de dados e, naturalmente, cada um vai precisar de um login prprio, com acesso apenas s suas prprias bases de dados. Para criar um usurio "phpbb", com senha "nDPIcqq9" e dar a ele acesso base de dados "phpbb" que criamos, use (dentro do prompt do MySQL) o comando: mysql> GRANT ALL ON phpbb.* TO phpbb IDENTIFIED BY 'nDPIcqq9'; (permita tudo na base phpbb para o usurio phpbb, identificado pela senha nDPIcqq9) mysql> FLUSH PRIVILEGES; O comando "FLUSH PRIVILEGES" faz com que o servidor MySQL atualize as tabelas de permisses, fazendo com que a alterao entre em vigor automaticamente, ao invs de apenas na prxima vez que o servidor for reinicializado. Na verdade, ele no necessrio ao adicionar usurios usando o comando "GRANT" (como no nosso caso), mas saudvel se acostumar a utiliz-lo sempre que usar comandos que modifiquem as permisses de acesso. Voc vai notar que a maioria dos tutoriais inclui o comando depois das operaes relacionadas a alteraes nas permisses de acesso. Continuando, para trocar a senha posteriormente, use o comando: mysql> SET PASSWORD FOR phpbb = PASSWORD('JSAm950A'); (defina senha para o usurio phpbb, onde a senha JSAm950A) Este mesmo comando pode ser usado para trocar a senha do root, como em: mysql> SET PASSWORD FOR root = PASSWORD('V5LQSxqL'); Se mais tarde voc precisar remover as permisses de acesso de um usurio anteriormente criado (em um site com vrios webmasters, onde um se desligou da equipe, por exemplo) use o comando: mysql> REVOKE ALL ON phpbb.* FROM phpbb; (remova todos os direitos para a base phpbb, para o usurio phpbb) mysql> FLUSH PRIVILEGES; Com isso, o usurio deixar de ter acesso base de dados especificada, mas ainda continuar existindo no sistema e poder acessar outras bases de dados a que tenha acesso. Para realmente remover o usurio, usamos o comando "DROP USER", como em: mysql> DROP USER phpbb O comando "DROP USER" suportado apenas pelas verses recentes do MySQL. Caso voc esteja usando uma verso antiga, onde ele ainda no seja suportado, pode usar o comando "DELETE FROM mysql.user WHERE User=", como em: mysql> DELETE FROM mysql.user WHERE User='phpbb'; Para remover uma base de dados, use o comando "DROP DATABASE", como em: mysql> DROP DATABASE phpbb; Todos estes comandos devem ser dados dentro da base de dados "mysql", a base de dados interna usada pelo MySQL, acessada por default ao abrir a interface. Se, por acaso, voc tiver mudado a base de dados de trabalho anteriormente (usando o comando USE), use o comando abaixo para voltar base administrativa: mysql> USE mysql; Veja que os comandos usados dentro do prompt do MySQL seguem uma linguagem literal, usando palavras do ingls. Quem tem uma boa familiaridade com a lngua tem bem mais facilidade em dominar os comandos. Outra observao que os comandos no so case sensitive. Tanto faz escrever "CREATE DATABASE phpbb;" ou "create database phpbb;". Escrever os comandos em maisculas apenas uma forma de dar mais destaque a eles.

Instalando o phpMyAdmin

Depois dessa configurao inicial, voc pode experimentar instalar um gerenciador grfico para facilitar a manuteno do seu servidor MySQL. Uma boa opo neste caso o phpMyAdmin. Para instal-lo, basta instalar o pacote "phpmyadmin", como em: # apt-get install phpmyadmin ou: # yum install phpmyadmin O pacote para instalao em outras distribuies, que no incluam o pacote por padro, pode ser encontrado no:http://www.phpmyadmin.net/. O phpMyAdmin um gestor de configurao escrito em PHP que trabalha em conjunto com o Apache. Ele permite que voc crie bases de dados, ajuste as permisses de acesso dos usurios, faa backup, e diversas outras atividades administrativas de uma forma mais simples que atravs do prompt de comando. Uma vez instalado, ele pode ser acessado atravs do endereo "http://servidor/phpmyadmin/" ou "https://servidor/phpmyadmin/". Na tela inicial, voc pode se logar usando qualquer uma das contas registradas no MySQL. Use o root para tarefas administrativas, quando for necessrio ter acesso a todas as bases ou fazer backup de tudo, e uma das contas restritas para acessar uma base especfica:

O acesso via HTTPS prefervel para acessos feitos via web, j que evita que as senhas de acesso e outras informaes fiquem circulando em texto puro por a. O pacote do Debian se encarrega de ativar o suporte a SSL no phpMyAdmin automaticamente, mas para us-lo necessrio tambm ativar o suporte a SSL na configurao do Apache, como veremos no tpico seguinte. Caso, mesmo depois de gerar o certificado e ativar o SSL no Apache, voc continue recebendo um erro ao tentar acessar a interface do phpMyAdmin via SSL, experimente reconfigurar o pacote usando o dpkg-reconfigure, como em: # dpkg-reconfigure phpmyadmin Selecione a opo "apache2" quando o script perguntar sobre o servidor web usado e responda "sim" quando ele perguntar se voc deseja reiniciar o servio:

No CentOS e em diversas outras distribuies o phpMyAdmin vem configurado por padro para permitir conexes apenas a partir da mquina local, uma precauo de segurana. Com isso, ao tentar acessar a interface remotamente, voc recebe um "Forbidden. You don't have permission to access /phpmyadmin/ on this server". Para solucionar o problema, edite o arquivo "/etc/httpd/conf.d/phpmyadmin.conf" e comente a linha "Deny from All", dentro da seo "<Directory "/usr/share/phpmyadmin">", como em: <Directory "/usr/share/phpmyadmin"> Order Deny,Allow # Deny from all Allow from 127.0.0.1 </Directory> Uma observao importante que ao ser usado em conjunto com o Apache, instalado no mesmo servidor que ele, o MySQL acessado apenas localmente, atravs da interface de loopback. O Apache envia a requisio ao mdulo PHP que faz o acesso ao banco de dados, tudo localmente. Nessa configurao, o servidor MySQL no deve ficar disponvel para a Internet. Configure o firewall para bloquear a porta 3306 usada pelo servidor MySQL, alm de todas as outras portas que no forem explicitamente necessrias. Caso o servidor MySQL precise ficar acessvel para outros servidores (voc pode configurar o phpBB e outros scripts para utilizarem um servidor MySQL externo), configure o firewall para deixar a porta aberta apenas para os endereos IP dos servidores que forem ter acesso. Como os servidores dedicados sempre utilizam endereos fixos (ao contrrio dos servidores domsticos), esta configurao fica mais simples. Para administrar seu servidor MySQL remotamente, o ideal que se conecte ao servidor via SSH e faa todo o trabalho atravs dele. Se precisar acessar diretamente alguma ferramenta de configurao, como o Webmin ou o phpMyAdmin, voc pode criar um tnel (novamente usando o SSH) ligando a porta correspondente do servidor a uma porta da sua mquina e fazer o acesso atravs dela. Veremos em detalhes como usar o SSH e criar tneis encriptados no captulo dedicado a ele.

Ativando o SSL
O SSL (Secure Socket Layer) o protocolo usado para criar pginas seguras, encriptando toda a transmisso entre o cliente e o servidor. Os dois usos mais comuns so em pginas de comrcio eletrnico, onde necessrio oferecer um ambiente seguro para concluir a transao e transmitir dados confidenciais e tambm na criao de ambientes

administrativos, como os usados pela maioria dos gestores de contedo, que permitem que voc gerencie o contedo do site. Na grande maioria das distribuies, o pacote com o mod_ssl instalado juntamente com o pacote principal do Apache, ou pelo menos disponibilizado como um pacote separado, instalvel atravs do gerenciador de pacotes. No caso das distribuies derivadas do Debian, voc precisa apenas ativar o mdulo usando o comando "a2enmod". Reinicie o servio para que a alterao entre em vigor: # a2enmod ssl # /etc/init.d/apache2 force-reload No caso do CentOS, necessrio instalar o pacote "mod_ssl" usando o yum. O script de ps-instalao se encarrega de adicionar o script de carregamento na pasta "/etc/httpd/conf.d" automaticamente, concluindo a instalao. No se esquea de reiniciar o servio para que a alterao entre em vigor: # yum install mod_ssl # service httpd restart Com o mdulo carregado, fica faltando apenas o componente mais importante, que o certificado SSL propriamente dito. Se voc quer ativar o SSL para testes ou para uso interno (para acessar alguma ferramenta administrativa instalada no servidor, ou para uso em uma pgina disponibilizada apenas para um grupo de amigos, por exemplo), voc pode simplesmente gerar seu prprio certificado, o que rpido, grtis e indolor. Se, por outro lado, voc est ativando o SSL para uso em um site de comrcio eletrnico, necessrio obter um certificado reconhecido atravs da Verisign ou outra entidade certificadora. Os certificados caseiros so chamados de certificados self-signed (auto-assinados), j que voc mesmo faz o papel de entidade certificadora, gerando e assinando o certificado. O algoritmo de encriptao usado o mesmo, de forma que um certificado self-signed corretamente gerado oferece a mesma segurana que um certificado reconhecido. O grande problema que os navegadores nos clientes no sero capazes de verificar a autenticidade do certificado, de forma que os visitantes recebero um aviso de "certificado no reconhecido" ao acessarem a pgina:

O propsito de entidades certificadoras, como a Verisign, confirmar a titularidade dos certificados, confirmando que o certificado recebido ao acessar determinado site pertence realmente entidade que o est fornecendo. isso que garante que voc est mesmo acessando o home banking do banco em que tem conta e no o site de um script kiddie qualquer. Certificados assinados por entidades certificadoras so automaticamente aceitos pelos navegadores (j que sua identidade j foi confirmada pela entidade certificadora), o que evita a exibio da mensagem. Vamos ento comear com a configurao de um certificado self-signed, e em seguida entender o que muda ao utilizar um certificado reconhecido.

Usando um certificado self-signed

No Debian e derivados voc pode gerar um certificado caseiro utilizando o script "make-ssl-cert", instalado atravs do pacote "ssl-cert": # apt-get install ssl-cert Ao usar o script, voc deve especificar o arquivo com o template (/usr/share/ssl-cert/ssleay.cnf) e o arquivo onde o certificado ser salvo (/etc/apache2/ssl/apache.pem, para gerar um certificado padro para o servidor), como em: # mkdir /etc/apache2/ssl/ # cd /etc/apache2/ssl/ # make-ssl-cert /usr/share/ssl-cert/ssleay.cnf apache.pem -days 1095 A opo "-days" especifica a validade do certificado, que no exemplo ser de 3 anos. O script solicitar as informaes sobre a organizao que sero includas no certificado, incluindo o cdigo de pas, estado, cidade e o nome da empresa. Estes so dados pblicos, que sero exibidos aos clientes como parte das propriedades do certificado. O mais importante vem no final, quando o script pergunta: Common Name (eg, your name or your server's hostname) []: Nesse ponto, voc deve sempre fornecer a URL completa do servidor onde o certificado ser usado, como em "www.gdhpress.com.br" ou "ssl.gdhn.com.br". Se voc especificar um domnio diferente, o cliente receber um aviso adicional ao se conectar, avisando do problema. Isso afastar visitantes, j que muitos pensaro tratar-se de uma fraude. Com o certificado gerado, abra agora o arquivo "/etc/apache2/ports.conf" e adicione a linha "Listen 443" (a porta usada pelo https), como em:

Port 80 Listen 443 Com isso, o Apache 2 j est configurado. Falta apenas ativar o uso do SSL dentro da configurao do(s) virtual host(s) onde ele for ser utilizado. Para testar, vamos ativ-lo na pgina padro que usamos para testar o servidor. Abra o arquivo "/etc/apache2/sites-available/default". No incio do arquivo, substitua a linha "NameVirtualHost *", por: NameVirtualHost *:443 NameVirtualHost *:80 Isso explica que o Apache deve escutar tanto a porta 80 padro, quanto a porta 443, usada pelo SSL. Logo em seguida, substitua a linha "<VirtualHost *>", por: <VirtualHost *:80> At aqui, dividimos a configurao em duas sees, uma para a porta 80, outra para a porta 443, usada pelo SSL. Falta agora adicionar a seo referente configurao do SSL no final do arquivo: <VirtualHost *:443> DocumentRoot /var/www/ ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.pem </VirtualHost> Reinicie o servidor (/etc/init.d/apache2 restart) e acesse o endereo "https://127.0.0.1" para testar a configurao. Ao conectar, o navegador exibe um aviso "O certificado do servidor falhou no teste de autenticidade" ou similar, o que normal ao usar um certificado caseiro. O CentOS no inclui o make-ssl-cert, mas inclui um outro script bastante prtico, disponvel dentro da pasta "/etc/pki/ tls/certs": # cd /etc/pki/tls/certs Uma vez dentro da pasta, use o comando "make" seguido pelo nome do arquivo que ser gerado, como em: # make apache.pem Por default, a validade do certificado gerado pelo script ser de 365 dias. Para usar outro valor, edite o arquivo "makedummy-cert" dentro da pasta, substituindo o "-days 365" na quinta linha de baixo para cima pelo valor desejado antes de gerar o certificado. Isso gerar o arquivo "/etc/pki/tls/certs/apache.pem", contendo o certificado. Para que ele seja usado, abra o arquivo "/etc/httpd/conf.d/ssl.conf" e localize a linha: #SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt Descomente-a e indique a localizao do arquivo gerado, como em: SSLCACertificateFile /etc/pki/tls/certs/apache.pem A partir da, voc pode reiniciar o servio httpd e testar a configurao acessando o endereo "https://servidor". Diferente do Debian, no necessrio adicionar a linha "Listen 443" na configurao do Apache, pois a linha faz parte do arquivo "/etc/httpd/conf.d/ssl.conf", que criado automaticamente ao instalar o pacote mod_ssl. Dentro do arquivo, voc encontra as linhas: # When we also provide SSL we have to listen to the # the HTTPS port in addition. # Listen 443 Em outras distribuies, voc pode usar diretamente o openssl para gerar o certificado. Nesse caso, o comando maior, j que precisamos especificar manualmente um volume maior de parmetros. Scripts como o make-ssl-cert so desenvolvidos justamente para tornar a gerao do certificado mais simples. # openssl req -new -x509 -days 1095 -sha1 -newkey rsa:1024 -nodes \ -keyout server.key -out meuservidor.csr Este comando gera dois arquivos separados, o "server.key", que contm a chave criptogrfica e o "meuservidor.csr", que contm o certificado que ser fornecido aos clientes. Estes dois arquivos tem a mesma funo do arquivo ".pem" que gerado pelos scripts do Debian e do CentOS, apenas desmembrado em dois arquivos separados. Para us-los, voc precisa apenas adicionar duas linhas separadas dentro do arquivo de configurao principal do Apache("/etc/apache2/httpd.conf" no caso do Debian ou "/etc/httpd/conf/httpd.conf", no caso do CentOS), especificando as localizaes dos dois arquivos: SSLCertificateFile /etc/apache2/ssl/meuservidor.csr SSLCertificateKeyFile /etc/apache2/ssl/server.key No esquea de ativar o mod_ssl e incluir a linha "Listen 443" na configurao do Apache, para que ele passe a escutar a porta do SSL. Certifique-se tambm de que a porta 443 est aberta na configurao do firewall.

Usando um certificado reconhecido

Finalmente, temos a configurao para um certificado reconhecido, que ser assinado por uma entidade certificadora, que voc utilizaria em um site de comrcio eletrnico aberto ao pblico. Uma das entidades certificadoras mais tradicionais a Verisign (http://www.verisign.com/), que oferece uma srie de garantias sobre os certificados emitidos. O grande problema com relao Verisign o preo: o certificado de validao mais simples custa nada menos de US$ 499 anuais, com opes de at US$ 1499. Com preos to altos, no de se estranhar que existam inmeras outras entidades certificadoras, que oferecem preos mais competitivos. Alguns exemplos so a Thawte (http://www.thawte.com) a GeoTrust (http://www.geotrust.com), a NetworkSolutions (http://www.networksolutions.com), a Digicert (http://www.digicert.com/) e a Comodo (http://www.instantssl.com), que possui opes a partir de US$ 79 anuais. A Comodo a mesma empresa que desenvolve o Comodo Firewall, distribudo gratuitamente como uma forma de divulgao dos servios de certificao. No site est disponvel tambm a opo de gerar um certificado de teste (vlido por 90 dias) gratuitamente, que voc pode usar para fins de teste, ou quando quiser colocar uma loja virtual no ar rapidamente, deixando para aderir a um dos planos pagos mais tarde:

Existem ainda casos de empresas que oferecem certificados de baixo custo, como a Godaddy (http://www.godaddy.com, a mesma que faz registro de domnios), que oferece certificados a partir de US$ 29.90. Em termos de segurana, no existe muita diferena entre um certificado emitido pela Godaddy ou pela Verisign, as principais diferenas so o nvel de validao e as garantias oferecidas por cada uma em caso de fraude ou de quebra da chave criptogrfica. Assim como em outras reas, o principal fator na deciso acaba sendo a questo da confiana. Muitos servios de hospedagem oferecem a possibilidade de utilizar um certificado compartilhado, onde a empresa responsvel "empresta" seu prprio certificado para uso dos clientes, em troca de uma taxa de manuteno anual. Esta opo pode parecer interessante devido ao baixo custo e facilidade de implementao, mas no o mesmo que obter seu prprio certificado, j que muito provavelmente voc precisar hospedar seu site em um subdomnio e os clientes vero o nome da empresa de hospedagem e no o nome da sua empresa ao examinarem as propriedades do certificado. Existe ainda a possibilidade de obter um certificado gratuito no http://www.cacert.org/. Ele reconhecido pela CAcert, mas o certificado raiz deles no vem pr-instalado na maioria dos navegadores, o que faz com que os clientes continuem recebendo a mensagem de certificado no vlido ao acessar o servidor, de forma similar ao que temos ao usar um certificado self-signed. Ao contratar os servios de uma entidade certificadora, sua parte no trabalho a de gerar uma chave de encriptao e uma requisio de certificado, o que novamente feito usando o openssl: # openssl req -new -nodes -keyout gdhn.key -out gdhn.csr O "gdhn.key" e o "gdhn.csr" indicam os arquivos com a chave e com a requisio do certificado que sero gerados. Voc precisar responder as mesmas perguntas sobre o pas, estado, cidade, nome da empresa, etc., que precisam ser respondidas corretamente, j que as informaes sero examinadas no apenas pela entidade certificadora, mas tambm pelos clientes: Country Name (2 letter code) [AU]: BR State or Province Name (full name) [Some-State]: Estado Locality Name (eg, city) []: Cidade Organization Name (eg, company) []: Minha Empresa LTDA Organizational Unit Name (eg, section) []: Vendas Common Name (eg, YOUR name) []: ssl.minhaempresa.com.br Como comentei anteriormente, o campo "Common Name" deve ser preenchido com o domnio onde o certificado ser usado (incluindo o "www" ou o subdomnio usado), caso contrrio os clientes recebero um aviso ao acessarem o site:

Em geral, as entidades certificadoras oferecem a opo de obter um certificado curinga (wildcard), que cobre automaticamente todos os subdomnios usados no site. Entretanto, como eles abrem a possibilidade de usar vrios

subdomnios usando um nico certificado, as certificadoras cobram bem mais caro por eles. A Comodo, por exemplo, cobra nada menos do que US$ 449.95 anuais, mais de 5 vezes o valor do certificado regular:

No final do processo, o openssl oferece a opo de especificar uma senha (challenge password) para o certificado. importante deix-la em branco, caso contrrio voc precisar fornec-la cada vez que o servidor web for iniciado, incluindo casos de reboots acidentais. O arquivo do certificado armazenado em uma pasta protegida do servidor, fora do diretrio disponvel para a web, de forma que se um atacante chega ao ponto de obter acesso a ele, significa que o problema mais embaixo e ele muito provavelmente j obteve acesso completo ao servidor de qualquer forma. Depois de gerar a requisio, o prximo passo enviar o arquivo .csr para a entidade certificadora, que o usar para gerar o certificado. O arquivo .csr na verdade um arquivo de texto plano, cujo contedo pode ser copiado e colado em um formulrio web. Depois de confirmada sua identidade e feito o pagamento, voc receber de volta o certificado assinado, que pode ser ento usado na configurao do Apache. A configurao consiste em adicionar as linhas "SSLCertificateFile" e "SSLCertificateKeyFile", indicando a localizao dos arquivos .crt e .key recebidos. Em muitos casos, voc receber tambm um terceiro arquivo, com extenso "cabundle" ou similar, que usado em conjunto com uma terceira opo, a "SSLCertificateChainFile". Este terceiro arquivo contm uma combinao de certificados, que permitem aos clientes chegarem at o certificado raiz da entidade certificadora, de forma a comprovarem a autenticidade do seu certificado. Devido a isso, ele tambm chamado de certificado intermedirio (Intermediate Certificate). Temos aqui um exemplo de configurao com as trs opes: <VirtualHost *:443> DocumentRoot /var/www/gdhn SSLEngine on SSLCertificateFile /etc/apache2/ssl/ssl_gdhn_com_br.crt SSLCertificateKeyFile /etc/apache2/ssl/gdhn_com_br.key SSLCertificateChainFile /etc/apache2/ssl/ssl_gdhn_com_br.ca-bundle </VirtualHost> O processo de emisso do certificado inclui uma verificao de identidade, que justamente um dos principais papis da entidade certificadora, j que se qualquer um pudesse gerar certificados vlidos no nome de qualquer outro, o sistema perderia completamente o sentido. Nos planos mais simples, como no certificado gratuito oferecido pela Comodo, feita uma simples verificao de titularidade via e-mail, onde voc deve confirmar um cdigo enviado para uma conta administrativa, como "admin@meudominio" ou "hostmaster@meudominio". Nos planos mais caros (onde a entidade certificadora realmente oferece garantias, inclusive financeiras sobre o certificado emitido), o processo mais burocrtico, incluindo o envio de documentos.

Usando o SSL para pastas especficas

Em geral, voc vai desejar usar o SSL apenas para sees especficas do site, como no caso de pginas de cadastro e de vendas, por exemplo. Na maioria dos casos, o cliente navega livremente pelo site, usando o protocolo HTTP no encriptado e acessa uma rea protegida pelo SSL ao concretizar a compra ou ao acessar uma rea onde precisa fornecer dados pessoais. Isso acontece por um motivo muito simples: servir pginas em HTTPS caro em termos de processamento, de forma que encriptar o acesso a todo o site acabaria gerando um grande desperdcio de recursos. Voc tem ento duas opes. Usar um domnio separado para a rea protegida, como "ssl.minhaempresa.com", de forma que ela fique completamente separada do restante do site, ou proteger apenas uma pasta especfica do site, tornando mandatrio o uso do HTTPS ao acess-la. Para a primeira soluo, voc usaria uma configurao similar a essa dentro da configurao do Apache: <VirtualHost *:80> ServerName www.gdhn.com.br DocumentRoot /var/www/gdhn </VirtualHost> <VirtualHost *:443> ServerName ssl.gdhn.com.br DocumentRoot /var/www/gdhn-ssl SSLEngine on SSLCertificateFile /etc/apache2/ssl/ssl_gdhn_com_br.crt SSLCertificateKeyFile /etc/apache2/ssl/gdhn_com_br.key SSLCertificateChainFile /etc/apache2/ssl/ssl_gdhn_com_br.ca-bundle </VirtualHost> Veja que, nesse caso, temos essencialmente dois sites separados, um acessvel apenas via HTTP e outro apenas via HTTPS. Ao acessar o "http://www.gdhn.com.br" o visitante acessaria a pasta "/var/www/gdhn", que conteria o contedo geral do site, enquanto ao acessar o "https://ssl.gdhn.com.br" ele acessaria as pginas da seo segura, armazenadas na pasta "/var/www/gdhn-ssl". A interligao entre as duas partes seria ento feita atravs de links, que levariam o visitante de uma seo outra do site. A segunda opo, usar uma pasta para o SSL, um pouco mais elegante, mas demanda uma configurao um pouco mais cuidadosa. Imagine que a seo segura do site ser armazenada dentro da pasta "/var/www/gdhn/loja", que dever ser acessada apenas via HTTPS. Ao acessar o "https://www.gdhn.com.br" o visitante cair direto na pasta segura e, ao tentar acessar o "http://www.gdhn.com.br/loja" ele ser automaticamente redirecionado ao "https://www.gdhn.com.br". Nesse caso, voc utilizaria uma configurao similar a essa:

<VirtualHost *:80> ServerName www.gdhn.com.br DocumentRoot /var/www/gdhn <Directory /var/www/gdhn/loja> SSLRequireSSL </Directory> Redirect /loja https://www.gdhn.com.br </VirtualHost> <VirtualHost *:443> ServerName www.gdhn.com.br DocumentRoot /var/www/gdhn/loja SSLEngine on SSLCertificateFile /etc/apache2/ssl/ssl_gdhn_com_br.crt SSLCertificateKeyFile /etc/apache2/ssl/gdhn_com_br.key SSLCertificateChainFile /etc/apache2/ssl/ssl_gdhn_com_br.ca-bundle </VirtualHost> Veja que agora, usamos o domnio "www.gdhn.com.br" nas duas sees da configurao, tanto para HTTP quanto para HTTPS, entretanto, a seo com a configurao do HTTPS aponta para a pasta "/var/www/gdhn/loja". Como a idia que os arquivos da pasta possam ser acessados apenas usando o SSL, adicionamos uma diretiva para a pasta (<Directory /var/www/gdhn/loja>), dizendo que ela s pode ser acessada via HTTPS (SSLRequireSSL). Para que os visitantes que tentarem acessar a pasta via HTTP sejam encaminhados para a rea protegida, usamos uma regra de encaminhamento (Redirect /loja https://www.gdhn.com.br). Esta regra utiliza o mdulo "rewrite", que precisa estar ativo na configurao do Apache. Caso necessrio, ative-o usando o comando "a2enmod rewrite". Finalmente, caso voc queira que todo o contedo do site fique disponvel via HTTPS e que os visitantes que tentarem acessar o http://www.gdhn.com.br/ sejam encaminhados para o https://www.gdhn.com.br, a configurao seria similar a essa: <VirtualHost *:80> ServerName www.gdhn.com.br DocumentRoot /var/www/gdhn <Directory /var/www/gdhn/> SSLRequireSSL </Directory> Redirect / https://www.gdhn.com.br </VirtualHost> <VirtualHost *:443> ServerName www.gdhn.com.br DocumentRoot /var/www/gdhn/ SSLEngine on SSLCertificateFile /etc/apache2/ssl/ssl_gdhn_com_br.crt SSLCertificateKeyFile /etc/apache2/ssl/gdhn_com_br.key SSLCertificateChainFile /etc/apache2/ssl/ssl_gdhn_com_br.ca-bundle </VirtualHost> Como pode ver, a configurao quase idntica do exemplo anterior. As nicas diferenas so que agora a seo com a configurao do HTTPS aponta para o diretrio raiz do site e a regra de redirecionamento encaminha todos os acessos feitos feitos via HTTP para o https://www.gdhn.com.br, fazendo com que o acesso a qualquer pgina do site seja feito via SSL.

Ativando o uso de Virtual Hosts


O suporte a virtual hosts um daqueles recursos fundamentais, que possibilitaram o surgimento da Internet da forma como a conhecemos hoje. Ele permite hospedar diversos sites, com domnios ou subdomnios diferentes usando um nico servidor e um nico endereo IP. Os nicos limitantes com relao ao volume de sites que possvel hospedar so os recursos de hardware do servidor e a banda disponvel. Servios de hospedagem compartilhada (os planos de shared hosting) utilizam este recurso de forma intensiva, de forma a espremer o maior nmero possvel de clientes em cada servidor, sem falar nos servios de hospedagem gratuita onde, em muitos casos, um nico servidor pode hospedar dezenas de milhares de sites diferentes. Ao usar virtual hosts, os arquivos de cada site ficam guardados em uma pasta diferente e o servidor se encarrega de direcionar cada visitante pasta correta. Os recursos do servidor (HD, memria, processamento e link) so divididos entre os sites hospedados, assim como vrios programas abertos simultaneamente disputam os recursos da mquina. Isso faz muito sentido no caso de sites pequenos ou mdios, que no possuem um nmero suficiente de visitas para saturarem, sozinhos, o servidor. Em geral, o servidor configurado de forma que os usurios tenham direito a uma determinada quota de espao em disco, possam acessar os arquivos do site via FTP ou SFTP e tenham acesso a uma ou mais bases de dados do servidor MySQL, o que permite a instalao de gestores de contedo como o WordPress. Entretanto, eles no podem instalar novos pacotes nem alterar a configurao do servidor. Feitas as apresentaes, vamos configurao. :) Invariavelmente, ao hospedar vrios domnios, voc precisa configurar um servidor DNS para responder por todos os domnios hospedados no servidor, entregando o endereo IP do seu servidor Apache. O cliente acessa ento o servidor, solicitando o site desejado, como em "joao.com.br"; o servidor web verifica a configurao e entrega os arquivos apropriados ao cliente. A configurao do servidor DNS pouco intuitiva, mas no chega a ser to complicada quanto muitos dizem. Em resumo, voc precisaria instalar o bind no servidor e editar a configurao, adicionando uma nova configurao de zona para cada domnio hospedado. Isso feito em duas etapas. Na primeira, voc edita o arquivo named.conf, adicionando uma entrada com esta, especificando o domnio e o arquivo com a configurao: zone "joao.com.br" IN { type master;

file "/etc/bind/db.joao"; allow-transfer { 64.234.23.13; }; }; Dentro do arquivo "/etc/bind/db.joao", especificado no arquivo, iria uma configurao similar a esta, especificando o domnio, o nome do servidor e o endereo IP usado por ele, assim como o nome e o endereo IP do servidor DNS secundrio: @ IN SOA servidor.joao.com.br. hostmaster.joao.com.br. ( 2008061645 3H 15M 1W 1D ) NS servidor.joao.com.br. NS ns2.joao.com.br. IN MX 10 servidor.joao.com.br. joao.com.br. A 64.234.23.12 www A 64.234.23.12 ns1 A 64.234.23.13 No necessrio que o DNS esteja instalado no mesmo servidor que o Apache, a funo dele ser unicamente responder s requisies dos clientes, fornecendo o IP correto. Vamos estudar a configurao do DNS em detalhes no prximo captulo, dedicado unicamente ao assunto. Este foi apenas um exemplo rpido para que voc tenha uma idia geral sobre a configurao. Por enquanto, vamos nos concentrar na configurao do Apache propriamente dito. Para ativar o uso dos virtual hosts, o primeiro passo criar uma pasta separada para cada site que ser hospedado. Voc pode usar a prpria pasta "/var/www", como em: # mkdir /var/www/joao # mkdir /var/www/maria Em seguida, necessrio adicionar uma nova seo dentro da configurao do Apache para cada um, logo depois da configurao do site default. Nas distribuies derivadas do Debian, so usados arquivos de configurao separados para cada site, armazenados na pasta "/etc/apache2/sites-available". Imagine que vamos hospedar os sites "www.joao.com.br" e "www.maria.com.br", usando as duas pastas criadas anteriormente. Criaramos, ento, um arquivo para cada site, contendo o seguinte: - /etc/apache2/sites-available/joao: <VirtualHost *:80> ServerAdmin joao@joao.com.br ServerName www.joao.com.br ServerAlias joao.com.br www.joao.com.br DocumentRoot /var/www/joao </VirtualHost> - /etc/apache2/sites-available/maria: <VirtualHost *:80> ServerAdmin maria@gmail.com ServerName www.maria.com.br ServerAlias maria.com.br www.maria.com.br DocumentRoot /var/www/maria </VirtualHost> Note que adicionei uma nova diretiva, a "ServerAlias", que permite que o site seja acessado tanto com, quanto sem o "www". A linha "ServerAdmin" , na verdade, opcional, contm apenas o e-mail de contato do administrador do site. A mesma configurao usada se voc quiser hospedar os sites usando subdomnios, como em "joao.gdhn.com.br" e "maria.gdhn.com.br". Nesse caso, no usamos o "www" e, por isso, no precisamos da linha "ServerAlias": <VirtualHost *:80> ServerAdmin hostmaster@gdhn.com.br ServerName maria.gdhn.com.br DocumentRoot /var/www/maria </VirtualHost> Depois de feita a configurao, ative ambos os sites usando o comando a2ensite, o que criar links para eles na pasta "/etc/apache2/sites-enabled": # a2ensite joao # a2ensite maria Para que a configurao funcione, necessrio editar tambm o arquivo "/etc/apache2/sites-available/default", substituindo as linhas: NameVirtualHost * <VirtualHost *> Por: NameVirtualHost *:80 <VirtualHost *:80> Essa configurao necessria para que voc possa ativar o suporte a SSL para os virtual hosts. Sem ela, alm do SSL no funcionar, voc precisaria modificar a configurao de cada um, usando sempre "<VirtualHost *>" ao invs de "<VirtualHost *:80>". Voc pode adicionar quantos sites quiser usando esses mesmos passos. Sempre que alterar a configurao, necessrio atualizar a configurao do Apache. Nesse caso, o parmetro "reload" suficiente (o "force-reload" necessrio apenas ao ativar ou desativar mdulos): # /etc/init.d/apache2 reload Alm de configurar o servidor web, preciso configurar tambm um servidor FTP ou SFTP, para que os usurios possam acessar os arquivos de suas respectivas pastas, a fim de atualizarem seus sites. A forma mais simples de fazer isso criar um usurio para cada um e dar acesso a eles via FTP (mais adiante veremos como configurar o servidor FTP com o Proftpd). Outra opo utilizar o SFTP, que permite acesso seguro. Veremos mais detalhes sobre ele no captulo sobre o SSH.

Veja que as trs coisas acabam se integrando: o Bind resolve os nomes de domnio, o Apache fornece as pginas e o FTP ou SFTP permite que os webmasters atualizem os sites. Continuando, ao utilizar o Fedora, CentOS ou outra distribuio derivada do Red Hat, a configurao de todos os virtual hosts adicionada na seo final do arquivo "/etc/httpd/conf/httpd.conf", depois do "# Section 3: Virtual Hosts". Procure pela seo "Virtual Hosts", perto do final do arquivo, e descomente a linha: NameVirtualHost *:80 A partir da, voc pode adicionar cada um dos sites hospedados no servidor usando a mesma configurao que vimos anteriormente, como em: <VirtualHost *:80> ServerName www.joao.com.br ServerAlias joao.com.br www.joao.com.br DocumentRoot /var/www/joao </VirtualHost> <VirtualHost *:80> ServerName www.maria.com.br ServerAlias maria.com.br www.maria.com.br DocumentRoot /var/www/maria </VirtualHost> A principal diferena nesse caso que para desativar um determinado site voc precisa abrir novamente o arquivo de configurao e remover (ou comentar) a seo referente a ele, em vez de utilizar o "a2dissite", como no Debian. Depois de fazer alteraes no arquivo, necessrio recarregar a configurao para que elas entrem em vigor: # service httpd reload Fazendo dessa forma, os logs de acessos sero misturados no log principal do Apache, o "/var/log/apache2/access.log". Isso no problema se voc est utilizando o Google Analytics ou outra ferramenta externa para auditar os acessos dos sites (ou se simplesmente voc no est preocupado em medir os acessos), mas um grande obstculo se voc pretende usar o webalizer para gerar os relatrios de acesso. Para que cada site tenha seus logs separados, voc deve adicionar duas linhas adicionais, na configurao de cada virtual host, especificando a localizao do arquivo que ser usado. Voc com certeza no gostaria que os logs ficassem disponveis ao pblico, por isso importante usar diretrios diferentes para os arquivos do site e para os logs, como em: <VirtualHost *:80> ServerAdmin joao@joao.com.br ServerName www.joao.com.br ServerAlias joao.com.br www.joao.com.br DocumentRoot /var/www/joao/html ErrorLog /var/www/joao/logs/error.log CustomLog /var/www/joao/logs/access.log combined </VirtualHost> Voc pode tambm salvar os logs na pasta de logs padro do Apache, de forma a se beneficiar do rotacionamento automtico de logs oferecido pelo logrotate. Nesse caso, voc precisa apenas especificar um arquivo de log diferente para cada site, todos salvos dentro da pasta padro, como em: <VirtualHost *:80> ServerAdmin joao@joao.com.br ServerName www.joao.com.br ServerAlias joao.com.br www.joao.com.br DocumentRoot /var/www/joao/html ErrorLog /var/log/apache2/joao.error.log CustomLog /var/log/apache2/joao.access.log combined </VirtualHost> Note que, como todos os sites ficam hospedados no mesmo servidor, a nica forma de chegar ao site desejado fazendo o acesso atravs do domnio. Se voc tentar acessar diretamente o IP do servidor, vai cair no site padro (configurado atravs do arquivo "/etc/apache2/sites-available/default"), que, por padro, usa o raiz da pasta "/var/www". Esta pgina default pode ser usada para mostrar alguma publicidade da empresa responsvel pelo servidor, ou uma lista dos sites hospedados, por exemplo. Concluindo, caso queira ativar o suporte a SSL para algum dos virtual hosts, adicione a sesso referente ao SSL dentro da configurao de cada site, indicando corretamente a pasta do site e os arquivos de log. O SSL pode ser tanto ativado para o raiz do site, permitindo que os visitantes visualizem qualquer parte do site usando o "https://", ou utilizar uma pasta separada, onde est a parte de comrcio eletrnico do site, por exemplo, como em: <VirtualHost *:443> ServerName www.joao.com.br DocumentRoot /var/www/joao/ssl SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.pem </VirtualHost> Neste caso, ao acessar o "http://www.joao.com.br", o visitante visualizar o contedo da pasta "/var/www/joao/html", enquanto ao acessar o "https://www.joao.com.br", visualizar a "/var/www/joao/ssl". Como vimos no tpico anterior, certificados SSL so vlidos apenas para um domnio especfico. Se voc deseja oferecer suporte a SSL para vrios subdomnios hospedados no servidor, a melhor opo adquirir um certificado wildcard, que valido para qualquer subdomnio dentro do domnio principal da sua empresa. Isso permite que voc crie diversos virtual hosts, como "loja1.minhaempresa.com" e "loja2.minhaempresa.com", utilizando o mesmo certificado. Essa configurao manual funciona para pequenos servidores, que hospedam algumas dezenas ou centenas de pginas. Grandes servios de hospedagem geralmente acabam desenvolvendo algum tipo de sistema para automatizar a tarefa. Nos servios de hospedagem gratuita, por exemplo, onde o nmero de clientes assustadoramente grande,

as alteraes so feitas de forma automtica quando o visitante faz seu cadastro, geralmente atravs de um sistema escrito em PHP ou Java. Conforme o nmero de usurios cresce e o espao em disco no servidor comea a ficar escasso, voc comear a sentir falta de um sistema de quotas, que limite o espao que cada usurio pode usar. Para isso, consulte o tpico sobre quotas de disco, mais adiante.

Gerando estatsticas

O Webalizer um gerador de estatsticas de acesso para o servidor web. O Apache, por si s, loga todos os acessos feitos ao servidor, incluindo as pginas acessadas, o trfego gerado, os navegadores e os sistemas operacionais usados pelos clientes, entre outras informaes teis para entender os hbitos e interesses de seus visitantes. Com o Apache funcionando, simples instalar o Webalizer: procure pelo pacote "webalizer" dentro do gerenciador de pacotes. Ele includo em todas as principais distribuies. Nas derivadas do Debian, voc pode instal-lo via apt-get: # apt-get install webalizer Ao contrrio do Apache, o Webalizer no um servio que fica residente, mas sim um executvel que precisa ser chamado cada vez que quiser ver a pgina de estatsticas atualizada (assim como o Sarg, que vimos no captulo sobre o Squid). Basta cham-lo como root: # webalizer Por padro, a pgina de estatsticas armazenada na pasta "webalizer/", dentro do seu servidor web. Se o Apache estiver configurado para armazenar as pginas dentro do diretrio "/var/www", ento as estatsticas vo para a pasta "/var/www/webalizer". O arquivo de configurao do Webalizer o "/etc/webalizer.conf". importante que voc revise o arquivo de configurao, indicando pelo menos a localizao correta do arquivo de log do Apache e alterando a pasta onde as estatsticas ficaro armazenadas, caso no queira que elas fiquem disponveis ao pblico. Voc pode armazen-las em uma pasta isolada no servidor web, como, por exemplo, "/var/webalizer", de forma que elas fiquem disponveis apenas localmente ou atravs de um script. As duas opes "essenciais" dentro do arquivo so: LogFile /var/log/apache/access.log OutputDir /var/www/webalizer Para no precisar executar o comando "webalizer" manualmente sempre que precisar atualizar as estatsticas, voc pode configurar o cron para execut-lo automaticamente uma vez por dia ou uma vez por hora. Para isso, basta criar um script dentro da pasta "/etc/cron.daily/" ou "/etc/cron.hourly/", contendo o comando "webalizer". Todos os scripts colocados dentro dessas pastas so, respectivamente, executados todos os dias de manh, ou uma vez por hora. Para que funcione, importante verificar se o servio "cron" ou "crond" est ativo. No caso do Debian, o script para execuo do webalizer atravs do cron criado automaticamente e configurado para ser executado uma vez por dia. Em um servidor Apache com vrios virtual hosts, possvel fazer com que o Webalizer gere estatsticas separadas para cada um, com uma configurao um pouco mais cuidadosa. Em primeiro lugar, voc deve configurar o Apache para gerar arquivos de log separados para cada site hospedado, como no exemplo que vimos h pouco: <VirtualHost *:80> ServerAdmin joao@joao.com.br ServerName www.joao.com.br ServerAlias joao.com.br DocumentRoot /var/www/joao/html ErrorLog /var/www/joao/logs/error.log CustomLog /var/www/joao/logs/access.log combined </VirtualHost> Configurando dessa forma, os logs do site "joao.com.br" ficaro armazenados no arquivo "/var/www/joao/logs/access.log", os do "maria.com.br" no "/var/www/maria/logs/access.log" e assim por diante, sempre separados dos arquivos disponveis ao pblico, que vo na pasta "html". O prximo passo criar um arquivo de configurao do Webalizer separado para cada um. Para manter as coisas organizadas, crie o diretrio "/etc/webalizer" e crie uma cpia do arquivo webalizer.conf original para cada site, dentro da pasta, como em: # mkdir /etc/webalizer # cd /etc/webalizer # cp webalizer.conf joao.conf # cp webalizer.conf maria.conf Precisamos agora editar cada um dos arquivos, informando o arquivo de log, domnio e diretrio onde ficaro armazenados os relatrios de cada site. No arquivo "/etc/webalizer/joao.conf", por exemplo, voc teria (alm das outras linhas do arquivo padro) as linhas: LogFile /var/www/joao/logs/access.log OutputDir /var/www/joao/html/webalizer HostName joao.com.br Depois de gerar os arquivos de configurao para todos os sites, falta fazer com que o Webalizer processe todos automaticamente. Uma forma rpida de fazer isso (dica do prprio FAQ do webalizer) usar o comando: # for i in /etc/webalizer/*.conf; do webalizer -c $i -q; done Esse , na verdade, um mini-script, que vai executar o Webalizer uma vez para cada arquivo ".conf" encontrado no diretrio "/etc/webalizer", gerando todas as estatsticas em uma tacada s. Para que o comando seja executado todos os dias automaticamente, coloque-o dentro de um script no diretrio "/etc/cron.daily". No Debian, temos o script "/etc/cron.daily/webalizer", que criado automaticamente durante a instalao do pacote e se encarrega de gerar as estatsticas diariamente, lendo o arquivo "/etc/webalizer.conf". Podemos modific-lo para que ele leia tambm os arquivos dentro do diretrio "/etc/webalizer". Para isso, edite o arquivo e substitua as linhas:

# Run webalizer ${WEBALIZER_BIN} -c ${WEBALIZER_CONF} ${WEBALIZER_BIN} -c ${WEBALIZER_CONF} -q ${nonrotatedlog}


Por:

quietly -q

# Run webalizer quietly ${WEBALIZER_BIN} -c ${WEBALIZER_CONF} -q ${WEBALIZER_BIN} -c ${WEBALIZER_CONF} -q ${nonrotatedlog} for i in /etc/webalizer/*.conf; do ${WEBALIZER_BIN} -c $i -q; done for i in /etc/webalizer/*.conf; do ${WEBALIZER_BIN} -c $i -q ${nonrotatedlog}; done

Um problema comum como restringir o acesso s estatsticas, afinal, na maioria dos casos, elas no devem ficar disponveis ao pblico. A soluo mais simples nesse caso usar um arquivo .htaccess, que permite restringir o acesso ao diretrio, exigindo login e senha. O primeiro passo criar um arquivo de senhas, usando o comando "htpasswd", que faz parte do pacote "apache2utils" (o mesmo que utilizamos para gerar as senhas do Squid). O arquivo de senhas deve, preferencialmente, ser armazenado em uma pasta fora do diretrio com os arquivos do site. Se possvel, use um arquivo separado para cada site hospedado. Vou usar como exemplo a pasta "/etc/apache2/auth": # mkdir /etc/apache2/auth # cd /etc/apache2/auth # touch joao.auth # htpasswd joao.auth joao New password: Re-type new password: Aqui, criamos o arquivo "/etc/apache2/auth/joao.auth", contendo o usurio "joao" e a senha digitada, armazenada de forma encriptada. Voc pode armazenar vrios logins no mesmo arquivo, executando o comando uma vez para cada usurio. Com o arquivo de senhas criado, crie um arquivo de texto chamando ".htaccess" no raiz do diretrio das estatsticas, contendo o seguinte: AuthName "Acesso Restrito" AuthType Basic AuthUserFile /etc/apache2/auth/joao.auth require valid-user A linha "AuthName" contm o texto que ser mostrado na tela de login exibida para o cliente, enquanto o "AuthUserFile" contm o arquivo de senhas gerado. Concluindo, embora o webalizer oferea bons recursos, o uso de relatrios de estatsticas locais est saindo um pouco de moda devido popularizao do Google Analytics, o servio de gerao de estatsticas oferecido pelo Google, que permite gerar estatsticas muito mais detalhadas e pode ser integrado ao AdSense e ao AdWords:http://www.google.com/analytics/. Enquanto o Webalizer trabalha gerando os relatrios a partir das estatsticas do Apache, o Analytics os gera a partir de um pequeno javascript que includo nas pginas e executado diretamente pelos clientes. Isso faz com que os relatrios do Analytics acabem oferecendo nmeros mais prximos da realidade, j que excluem o trfego gerado pelos crawlers dos mecanismos de busca e outros tipos de trfego automatizado, que acabam inflando bastante as estatsticas do Webalizer. Um ponto negativo do Analytics que ele no computa acessos de visitantes que bloqueiam a execuo de javascript no navegador (como os visitantes usando a extenso NoScript do Firefox) ou que acessam o site usando navegadores primitivos, sem suporte a javascript, como no caso de muitos navegadores mveis. Com isso, os nmeros mostrados pelo Webalizer acabam sempre ficando bem acima dos acessos reais, enquanto os do Analytics ficam sempre um pouco abaixo. Como nenhuma das duas ferramentas perfeita, muitos preferem simplesmente usar as duas.

Gestores de contedo e add-ons


Agora que j estudamos sobre a instalao do servidor LAMP e sobre a configurao dos virtual hosts, vamos a alguns exemplos de instalao de gestores de contedo que voc pode instalar no servidor. Com o MySQL instalado e o suporte a PHP ativo, voc tem pronta a estrutura necessria para instalar os diversos scripts de frum, chat, gestores de contedo e outros. A maioria destes scripts simples de instalar, voc precisa apenas criar uma base de dados no MySQL ou Postgre, copiar os arquivos para uma pasta dentro do servidor web e editar um arquivo (ou acessar uma pgina de configurao atravs do navegador) para incluir as informaes sobre o servidor (base de dados a ser usada, login e senha, etc.) e concluir a configurao. Note que, embora o Apache e o MySQL sejam bastante seguros, nada garante que os scripts desenvolvidos por terceiros tambm sero. De nada adianta ter um servidor web extremamente seguro, se o script de gerenciamento de contedo que voc instalou tem um buffer overflow no campo de login que permite executar comandos arbitrrios, obter a senha do servidor MySQL (que o script usa para fazer seu trabalho) ou fazer alteraes no contedo do site. O ponto fraco na segurana de qualquer site ou frum quase sempre a segurana do script usado. No escolha qual usar pensando apenas na facilidade de uso. Investigue o histrico de segurana e, uma vez escolhido qual usar, fique de olho nas atualizaes de segurana. Para os exemplos, escolhi o phpBB, o WordPress e o Ruby on Rails. O phpBB um sistema de frum open-source que alm de muito usado surpreendentemente robusto e expansvel; o WordPress uma soluo bastante flexvel de gestor de contedo, que alm de ser usado em blogs, pode ser adaptado para uso em diversas outras frentes, enquanto o Ruby on Rails um meta-framework com muitos recursos, usado em um volume cada vez maior de sites com pginas dinmicas e aplicativos web em geral.