<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Luiz Oliveira &#187; Servidores</title>
	<atom:link href="http://www.luizoliveira.org/category/linux/servidores/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.luizoliveira.org</link>
	<description>Linux, Windows, Tutoriais, dicas e diversas notícias sobre TI</description>
	<lastBuildDate>Fri, 11 Jun 2010 12:39:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>UltraSurf 9.6: Como bloquear</title>
		<link>http://www.luizoliveira.org/linux/ultrasurf-9-6-como-bloquear/</link>
		<comments>http://www.luizoliveira.org/linux/ultrasurf-9-6-como-bloquear/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 14:21:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Servidores]]></category>

		<guid isPermaLink="false">http://www.luizoliveira.org/?p=466</guid>
		<description><![CDATA[Vários usuários nos têm reportado que o script que criamos para combater o UltraSurf não tem sido eficiente no bloqueio da nova versão lançada no final do mês passado, o UltraSurf 9.6. Então, baixamos a nova versão e, como fizemos com a versão anterior, passamos a analisar o tráfego de uma estação que executava o [...]]]></description>
			<content:encoded><![CDATA[<p>Vários usuários nos têm reportado que o script que criamos para combater o UltraSurf não tem sido eficiente no bloqueio da nova versão lançada no final do mês passado, o UltraSurf 9.6. Então, baixamos a nova versão e, como fizemos com a versão anterior, passamos a analisar o tráfego de uma estação que executava o UltraSurf.</p>
<p>Uma das principais características que tínhamos observado na versão anterior era a grande quantidade de conexões HTTPS com servidores externos, na ocasião verificamos que o UltraSurf realizava em média 10 conexões simultâneas na porta 443. Utilizamos essa sua peculiaridade para criar o script stopUltraSurf.sh, que, até à versão anterior do UltraSurf, funcionava perfeitamente bloqueando as conexões.</p>
<p>Agora tudo mudou. Na versão 9.6, o UltraSurf tenta inicialmente se conectar a um servidor pertencente à rede 65.49.2.0/24, caso consiga, o acesso será estabelecido e a estação acessará livremente a Internet. Aliás, verificamos que conectado dessa maneira o acesso será bem mais rápido se comparado às versões anteriores do UltraSurf. Como os IPs dessa rede não respondem ao DNS reverso, não têm como serem verificados pelo script stopUltraSurfe.sh, logo a conexão não será bloqueada pelo script.</p>
<p>Uma forma elegante de quebrar essa conexão seria bloqueando o acesso HTTPS a endereços IP que não respondessem ao DNS reverso, fizemos até uma versão do script com essa característica, mas a quantidade de falsos positivos foi bastante grande, pois, infelizmente, vários sites não seguem a recomendação do Comitê Gestor Internet Brasil (CGI.br) que diz: &#8220;Todas as redes conectadas à Internet brasileira devem operar com registros direto e reverso de DNS corretamente configurados.&#8221;, se assim fizessem, teríamos como diferenciar IPs idôneos de IPs supostamente maliciosos. O pior é que sites como o do Banco do Brasil, do Banco Real, do Banco Itaú, do Hotmail etc., que deveriam ser exemplos, não têm o DNS Reverso configurado para os IPs que respondem às conexões HTTPS. Uma pena.</p>
<p>Qual a solução então? Bloquear esses endereços no firewall, o problema é que, se os mantenedores do UltraSurf mudarem a sua range de IPs, o bloqueio falhará. Para efetivar o bloqueio na solução OpçãoLinux PDC, acesse as regras do firewall (opl &gt; Firewall &gt; Editar Regras de Firewall) e altere a linha:</p>
<p>HTTPS/ACCEPT     loc     net<br />
para:</p>
<p>HTTPS/ACCEPT     loc     net:!65.49.2.0/24<br />
Problema resolvido? Ainda não, caso não consiga acesso aos IPs da rede 65.49.2.0/24, o UltraSurf 9.6 tentará acessar os servidores remotos da mesma maneira que fazia nas versões anteriores, só que dessa vez não abrirá diversas conexões HTTPS, fará apenas uma única conexão. Para fazer com que o script stopUltraSurf.sh consiga detectar essa conexão, edite o arquivo /usr/local/bin/stopUltraSurf e altere a variável limitServersHttps=8 para limitServersHttps=1, ou baixe a nova versão do script stopUltraSurf.sh (veja como mais adiante).</p>
<p>Pronto, com o bloqueio da rede 65.49.2.0/24 no firewall e com esse ajuste na variável limitServersHttps, o script stopUltraSurf.sh deverá voltar a funcionar. Bem, pelo menos em nossos testes voltou&#8230;</p>
<p>Prefira utilizar a nova versão do script stopUltraSurf.sh, pois, além de estar mais rápido devido a otimizações feitas no código, será informado também qual nome do servidor que provocou o bloqueio da estação e a data e hora do bloqueio em opl &gt; Firewall &gt; Configurações Avançadas&#8230; &gt; BlackList.</p>
<p>Caso esteja utilizando a versão mais recente da solução OpçãoLinux PDC, que já vem com o script stopUltraSurf.sh nativamente, atualize para a versão mais recente do script através dos comandos abaixo:</p>
<p># wget <a href="http://www.opcaolinux.com.br/download/scripts/stopUltraSurf.sh.gz">http://www.opcaolinux.com.br/download/scripts/stopUltraSurf.sh.gz</a><br />
# gunzip stopUltraSurf.sh.gz<br />
# cat stopUltraSurf.sh &gt; /usr/local/bin/stopUltraSurf<br />
# rm stopUltraSurf.sh</p>
<p>Fonte: <a href="http://www.opcaolinux.com.br/gnulinux/tutoriais/27-seguranca/126-ultrasurf-96-como-bloquear.html">http://www.opcaolinux.com.br/gnulinux/tutoriais/27-seguranca/126-ultrasurf-96-como-bloquear.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizoliveira.org/linux/ultrasurf-9-6-como-bloquear/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adicionando rotas estáticas permanentes</title>
		<link>http://www.luizoliveira.org/linux/adicionando-rotas-estaticas-permanentes/</link>
		<comments>http://www.luizoliveira.org/linux/adicionando-rotas-estaticas-permanentes/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 13:53:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Servidores]]></category>

		<guid isPermaLink="false">http://www.luizoliveira.org/?p=463</guid>
		<description><![CDATA[Roteadores ou equipamentos que interligam duas ou mais redes são chamados de Gateways. A necessidade de configurarmos rotas estáticas surge à medida que possuímos mais de um gateway na rede, sendo assim, configuramos as máquinas da rede 1, por exemplo, de forma que: quando quiser acessar a rede 2 saia pelo gateway A e quando for acessar as redes 3,4,5... saia pelo gateway B.]]></description>
			<content:encoded><![CDATA[<p>Roteadores ou equipamentos que interligam duas ou mais redes são chamados de Gateways. A necessidade de configurarmos rotas estáticas surge à medida que possuímos mais de um gateway na rede, sendo assim, configuramos as máquinas da rede 1, por exemplo, de forma que: quando quiser acessar a rede 2 saia pelo gateway A e quando for acessar as redes 3,4,5&#8230; saia pelo gateway B.</p>
<p>Traduzindo isso para o TCP/IP ficaria:</p>
<p>Suponha que</p>
<p>  rede 1 = 192.168.1.0 / 255.255.255.0<br />
  rede 2 = 192.168.0.0 / 255.255.0.0<br />
  rede 3 = 10.100.1.0 / 255.255.255.0<br />
  rede 4 = 10.100.2.0 / 255.255.255.0<br />
  rede 5 = 10.100.3.0 / 255.255.255.0<br />
  &#8230;.<br />
  ubuntu#&gt; route add -net 192.168.0.0/16 gw 192.168.10.1<br />
  ubuntu#&gt; route add -net 10.100.0.0/16 gw 192.168.10.10</p>
<p>Com isso a tabela de roteamento da máquina que estamos configurando ficaria assim:</p>
<p>  ubuntu#&gt; route<br />
  Tabela de Roteamento IP do Kernel<br />
  Destino         Roteador        MáscaraGen.    Opções Métrica Ref   Uso Iface<br />
  192.168.1.0     *               255.255.255.0   U     0      0        0 eth0<br />
  192.168.0.0     192.168.10.1    255.255.0.0     UG    0      0        0 eth0<br />
  10.100.0.0      192.168.10.10   255.255.0.0     UG    0      0        0 eth0<br />
Note que a primeira linha foi adicionada automaticamente quando configuramos o endereço IP da própria máquina.</p>
<p>Uma maneira de melhorarmos isso é trabalhando com default gateway, ou seja, ao adicionarmos um gateway default, ele será adicionado na última linha da tabela de roteamento, de forma que todo IP com destino a uma rede que não se encaixa nas definições iniciais da tabela de roteamento serão mandadas para o default gateway (que por isso está na última linha).</p>
<p>Mas o escopo dessa dica é como transformar as rotas estáticas, que até aqui foram adicionadas manualmente, em configurações adicionadas automaticamente sempre que ligamos a máquina.</p>
<p>Já vi várias formas de adicionarmos estas rotas, desde comandos adicionados no script de inicialização do usuário, o /etc/init.d/rc.local até scripts executados ao iniciar o ambiente gráfico (arghhhh!!!), porém o mais adequado é utilizarmos os recursos que o sistema oferece para isso que são:</p>
<p>No Ubuntu (debian em geral): basta adicionarmos no arquivo /etc/network/interfaces as seguintes linhas:</p>
<p>  post-up route add -net 192.168.0.0/16 gw 192.168.10.1<br />
  post-up route add -net 10.100.0.0/16 gw 192.168.10.10</p>
<p>Já em sistemas como o RedHat devemos criar o arquivo /etc/sysconfig/network-scripts/route-eth0 contendo:</p>
<p>  GATEWAY0=192.168.10.1<br />
  NETMASK0=255.255.0.0<br />
  ADDRESS0=192.168.0.0<br />
 <br />
  GATEWAY1=10.100.0.0<br />
  NETMASK1=255.255.0.0<br />
  ADDRESS1=192.168.10.10</p>
<p>Sendo assim toda vez que o serviço de rede subir estas rotas estáticas serão adicionadas automaticamente na tabela de roteamento de sua máquina.</p>
<p>Fonte: <a href="http://www.dicas-l.com.br/dicas-l/20061010.php">http://www.dicas-l.com.br/dicas-l/20061010.php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizoliveira.org/linux/adicionando-rotas-estaticas-permanentes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando um repositório Debian na rede local</title>
		<link>http://www.luizoliveira.org/linux/criando-um-repositorio-debian-na-rede-local/</link>
		<comments>http://www.luizoliveira.org/linux/criando-um-repositorio-debian-na-rede-local/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 18:41:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Servidores]]></category>

		<guid isPermaLink="false">http://www.luizoliveira.org/?p=451</guid>
		<description><![CDATA[Imagine você precisando fazer uma nova instalação Debian ou atualizar a distribuição ou um pacote em questão. Você irá depender de seu link com a internet para poder utilizar um dos diversos mirrors públicos existentes para tal tarefa e isso poderá levar um certo tempinho para fazê-lo. Então por quê não criar um mirror local em sua rede? Veja aqui como fazer.]]></description>
			<content:encoded><![CDATA[<p>Instalação e configuração do servidor</p>
<p>Instale o pacote &#8220;debmirror&#8221; disponível em testing ou unstable:</p>
<p># apt-get install debmirror</p>
<p>Crie um usuário e um grupo que será dono do processo que iremos automatizar para o uso do debmirror:</p>
<p># groupadd mirror<br />
# useradd -g mirror -d /mirror -c &#8220;Debian Mirror&#8221; mirror</p>
<p>Crie os diretórios necessários para o repositório.</p>
<p># mkdir -p /mirror/debian # mkdir /mirror/non-US # chown -R mirror:mirror /mirror</p>
<p>Criando os scripts para a sincronização</p>
<p>Iremos criar agora os script para a sincronização dos repositórios:</p>
<p>Repositório US:</p>
<p># emacs /usr/local/bin/mirror1.sh</p>
<p>#!/bin/bash<br />
su mirror -c &#8220;debmirror /mirror/debian &#8211;method=http &#8211;progress &#8211;nosource &#8211;host=ftp.br.debian.org &#8211;root=/debian &#8211;dist=woody,sarge,sid &#8211;section=main,contrib,non-free &#8211;arch=i386 &#8211;cleanup &#8211;getcontents&#8221;</p>
<p>Repositório non-US:</p>
<p># emacs /usr/local/bin/mirror2.sh</p>
<p>#!/bin/bash<br />
su mirror -c &#8220;debmirror /mirror/non-US &#8211;method=http &#8211;progress &#8211;nosource &#8211;host=ftp.br.debian.org &#8211;root=/debian-non-US &#8211;dist=woody/non-US,sarge/non-US,sid/non-US &#8211;section=main,contrib,non-free &#8211;arch=i386 &#8211;cleanup ?getcontents&#8221;</p>
<p>Você pode alterar a opção &#8211;method por ftp, http ou rsync -e. Leia o manual do debmirror para maiores detalhes.</p>
<p># man debmirror</p>
<p>Permitindo a leitura escrita e execução somente para o usuário root:</p>
<p># chmod 700 /usr/local/bin/mirror*.sh</p>
<p>Repositório local, http e ftp na sua LAN<br />
Para uso local, em seu /etc/apt/sources.list coloque as linhas:</p>
<p>deb file:/mirror/debian sid main non-free contrib<br />
deb file:/mirror/non-US sid/non-US main contrib non-free</p>
<p>Você pode alterar a versão conforme a sua necessidade trocando onde esta sid por woody ou sarge. <img src='http://www.luizoliveira.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Vamos agora configurar para que você possa ter o repositório disponível para outras máquinas.</p>
<p>Configurando o Apache:</p>
<p>Edite o arquivo de configuração /etc/apache/httpd.conf:</p>
<p># emacs /etc/apache/httpd.conf</p>
<p>Troque &#8220;&lt;Directory /var/www&gt;&#8221; por &#8220;&lt;Directory /mirror&gt;&#8221;.</p>
<p>Reinicie o Apache:</p>
<p># /etc/init.d/apache restart</p>
<p>Edite o arquivo /etc/apt/sources.list nos clientes para configurar o repositório no protocolo HTTP:</p>
<p># emacs /etc/apt/sources.list</p>
<p>deb http://(ip_ou_host_do_servidor)/debian/ sid main non-free contrib<br />
deb http://(ip_ou_host_do_servidor)/non_US/ sid/non-US main contrib non-free</p>
<p>Configurando o proftpd:</p>
<p>Para ter o repositório disponível por ftp, edite o arquivo de configuração do proftpd:</p>
<p># emacs /etc/proftpd.conf</p>
<p>Altere as TAGS da configuração compreendidas entre &lt;Anonymous &#8230;&gt; &lt;/Anonymous&gt; por:</p>
<p>&lt;Anonymous ~mirror&gt;<br />
User                     ftp<br />
Group                    nogroup<br />
UserAlias                anonymous ftp<br />
RequireValidSh           off<br />
# Limit the maximum number of anonymous logins<br />
MaxClients               20<br />
DisplayLogin             welcome.msg<br />
DisplayFirstChdir        .message<br />
# Limit WRITE everywhere in the anonymous chroot<br />
&lt;Directory *&gt;<br />
&lt;Limit WRITE&gt;<br />
DenyAll<br />
&lt;/Limit&gt;<br />
&lt;/Directory&gt;<br />
&lt;/Anonymous&gt;</p>
<p>Edite o arquivo /etc/apt/sources.list nos clientes para configurar o repositório no protocolo FTP:</p>
<p>deb ftp://(ip_ou_host_do_servidor)/debian/ sid main non-free contrib<br />
deb ftp://(ip_ou_host_do_servidor)/non_US/ sid/non-US main contrib non-free</p>
<p>Automatizando o processo<br />
Com o crontab podemos se aproveitar das horas de menor uso da rede para fazer a sincronização:</p>
<p># crontab -e</p>
<p>insira a linha:</p>
<p>0 22 * * * /usr/local/mirror1.sh 2&gt;&amp;1 &gt; /dev/null;/usr/local/mirror2.sh 2&gt;&amp;1 &gt; /dev/null</p>
<p>Salve e feche.</p>
<p># /etc/init.d/cron restart</p>
<p>No crontab configurei para que todos os dias a partir das 22:00hs o servidor atualize o repositório.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizoliveira.org/linux/criando-um-repositorio-debian-na-rede-local/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalando e configurando um servidor proxy com o Ubuntu Server – Em menos de duas horas!</title>
		<link>http://www.luizoliveira.org/linux/instalando-e-configurando-um-servidor-proxy-com-o-ubuntu-server-%e2%80%93-em-menos-de-duas-horas/</link>
		<comments>http://www.luizoliveira.org/linux/instalando-e-configurando-um-servidor-proxy-com-o-ubuntu-server-%e2%80%93-em-menos-de-duas-horas/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 19:59:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Servidores]]></category>

		<guid isPermaLink="false">http://www.luizoliveira.org/linux/instalando-e-configurando-um-servidor-proxy-com-o-ubuntu-server-%e2%80%93-em-menos-de-duas-horas/</guid>
		<description><![CDATA[Passo 1 – Preparando o Computador
Primeiramente, você deve começar pela parte que chuta: examine o hardware do seu novo servidor, e dimensione-o para suas necessidades. Ou seja, não configure um P100 com 16MB de RAM para servir uma empresa com 200 funcionários, nem compre um P4 de última geração e 1GB RAM para servir aquele [...]]]></description>
			<content:encoded><![CDATA[<p>Passo 1 – Preparando o Computador</p>
<p>Primeiramente, você deve começar pela parte que chuta: examine o hardware do seu novo servidor, e dimensione-o para suas necessidades. Ou seja, não configure um P100 com 16MB de RAM para servir uma empresa com 200 funcionários, nem compre um P4 de última geração e 1GB RAM para servir aquele escritório com 6 funcionários.</p>
<p>Leve em conta também que serão instalados vários serviços adicionais (e opcionais) além do squid que tomarão conta dos recursos da máquina. Memória é essencial aqui. No meu caso, peguei um Sempron 2600+ com 512MB num PCChips A31g que tinha acabado de chegar. Isso, para distribuir internet para 50 computadores, dá e sobra, mas a idéia é justamente essa, ter uma boa folga no uso. Lembre-se também que serão necessárias duas placas de rede. Pessoalmente, não recomendo o uso da placa onboard, mas fica ao critério de vocês.</p>
<p>Agora, antes de começar a instalar o sistema, entre no SETUP e desabilite TUDO aquilo que não será usado: som onboard, usb, modem, portas seriais e paralelas, e o que mais for possível. Com isso, conseguimos um pouco mais de segurança (através de qualquer porta usb ou equivalente), confiabilidade (com menos recursos habilitados, menor será a chance de uma falha de hardware, e menor será o seu trabalho para identificar uma possível falha futura) e velocidade (menos coisas para levantar no boot, menos serviços rodando desnecessariamente). Configure o boot pelo CD, coloque uma senha para o setup e saia, para começarmos a instalação de verdade.</p>
<p>Passo 2 – Instalando o sistema</p>
<p>Nenhum segredo aqui, se você já fez isso antes: configure o idioma, o teclado, crie um usuário, defina uma senha, formate as partições necessárias (ou deixe o Ubuntu cuidar disso), e aguarde a instalação. Dois pontos importantes:</p>
<p>1 – Será útil já ter uma conexão com a internet durante a instalação (diretamente ligada à máquina ou através de um outro proxy), pois o Ubuntu já fará uns ‘apt-get update’ durante a instalação.<br />
2 – Em dado momento, o instalador perguntará se você deseja instalar dois perfis pré-configurados: DNS Server e LAMP Server. A instalação fica a critério de vocês, já que boa parte dos pacotes desses perfis serão instalados mais pra frente. No meu caso, não instalei nada por enquanto.</p>
<p>Ao término, o sistema irá reiniciar o sistema.</p>
<p>Passo 3 – Configurações iniciais</p>
<p>Primeiramente, vamos configurar a rede. No meu caso, como eu já tenho um servidor DHCP em outro servidor, o Ubuntu já configurou automaticamente a primeira placa de rede. Mas o que queremos é um endereço estático, então vamos editar o arquivo /etc/network/interfaces</p>
<p>sudo vi /etc/network/interfaces</p>
<p>Seu arquivo deve estar qualquer coisa parecida com isso:</p>
<p># This file describes the network interfaces available on your system<br />
# and how to activate them. For more information, see interfaces(5).<br />
# The loopback network interface<br />
auto lo<br />
iface lo inet loopback<br />
#The primary network interface<br />
auto eth0<br />
iface eth0 inet dhcp</p>
<p>Altere as informações para algo parecido com:</p>
<p>auto lo eth0 eth1<br />
iface lo inet loopback<br />
#The primary network interface<br />
iface eth0 inet static<br />
address 192.168.1.254<br />
netmask 255.255.255.0<br />
network 192.168.1.0<br />
broadcast 192.168.1.255<br />
#segunda interface. Outras podem ser adicionadas segundo a mesma lógica<br />
iface eth1 inet static<br />
address xxx.xxx.xxx.xxx<br />
netmask xxx.xxx.xxx.xxx<br />
network xxx.xxx.xxx.xxx<br />
broadcast xxx.xxx.xxx.xxx<br />
gateway xxx.xxx.xxx.xxx</p>
<p>Nesse caso, considerei que a primeira placa de rede ficará ligada à rede local, e a segunda é que ficará ligada à internet. Nesse caso, tudo dependerá de como é a sua conexão. Para Speedy Businnes, é bem fácil, a Telefônica já te passa todas as informações logo no começo. Outros serviços não devem ser diferente.</p>
<p>Altere também o /etc/resolv.conf , inserindo os endereços DNS que o provedor utiliza:<br />
sudo vi /etc/resolv.conf</p>
<p>nameserver xxx.xxx.xxx.xxx<br />
nameserver xxx.xxx.xxx.xxx<br />
nameserver xxx.xxx.xxx.xxx</p>
<p>Novamente, os dados deverão ser obtidos com seu provedor. A partir daqui, o computador já deverá estar conectado à internet. Tente um ping <a href="http://www.ubuntu.org/">www.ubuntu.org</a> e veja se está tudo OK. Mas ainda não está pronto, precisamos instalar e configurar os pacotes necessários para que o proxy funcione e os outros usuários também acessem a internet.</p>
<p>É agora que a parte legal começa. Você com certeza já deve ter percebido isso, mas o CD do Ubuntu Server já traz vários pacotes de serviços prontos para o uso. Se você quiser, pode usar esse repositório, o que diminuiria e muito o tempo de download pelo APT-GET. No meu caso, como eu queria me livrar do drive de CD, copiei os pacotes para minha máquina, com os comandos abaixo:</p>
<p>sudo mount /media/cdrom/<br />
sudo cp -r /media/cdrom/dists /edgy<br />
sudo cp -r /media/cdrom/pool /edgy<br />
Logo depois, editem o arquivo de repositórios do apt, com um sudo vi /etc/sources.list</p>
<p>Comentem a linha</p>
<p>deb cdrom:(&#8230;)</p>
<p>Colocando um # na frente. Adicionem as linhas:</p>
<p>deb file:/edgy edgy main<br />
deb file:/edgy edgy restricted</p>
<p>Aproveitem e descomentem as linhas dos repositórios ‘Universe‘, retirando o # da frente delas. Salvem, e executem o apt:</p>
<p>sudo apt-get update<br />
sudo apt-get upgrade</p>
<p>Se tudo der certo, vocês terão o sistema pronto para a instalação dos pacotes. Percebam que esse passo é totalmente opcional. No meu caso, eu pude liberar o CD do Ubuntu (assim como o drive) e acelerar bastante as instalações. Se você quiser continuar com o CD, ou se todas as versões do mesmo já estiverem obsoletas, pule essa parte, apenas configurando para aceitar o repositório Universe.</p>
<p>Passo 4 – Instalando e Configurando o ‘Pacote básico do Administrador Feliz‘</p>
<p>Agora, vamos tratar de instalar e configurar alguns programas que irão nos ajudar a administrar o sistema: a trinca MC (Midnight Commander), OpenSSH e Webmin. Muitos experts que estejam lendo isso provavelmente irão querer me bater, mas considero o MC um ótimo navegador de arquivos/editor de textos, ainda mais quando estou com pressa. Se você prefere o VI, simplesmente não instale o MC.</p>
<p>sudo apt-get install mc openssh-server libmd5-perl libnet-ssleay-perl libauthen-pam-perl libio-pty-perl<br />
sudo wget <a href="http://prdownloads.sourceforge.net/webadmin/webmin_1.320_all.deb">http://prdownloads.sourceforge.net/webadmin/webmin_1.320_all.deb</a><br />
sudo dpkg -i webmin_1.320_all.deb<br />
Com isso, já podemos acessar o servidor via SSH e via Browser. Mas… já que queremos um mínimo de segurança, porque não alterarmos algumas coisinhas?</p>
<p>sudo mcedit /etc/ssh/sshd_config</p>
<p>Altere as seguintes opções:</p>
<p>Port 2756 #Altera a porta padrão do SSH, diminuindo a possibilidade de um port scan<br />
ListenAddress 192.168.1.254 # Somente poderá ser acessado por esse endereço de rede<br />
PermitRootLogin no # Precisa explicar?<br />
AllowUsers &lt;seu usuário padrão no Ubuntu&gt; #somente o usuário criado na instalação poderá se logar.</p>
<p>Assim já temos algo mais seguro. O mesmo pode ser feito com o Webmin, alterando o /etc/webmin/miniserv.conf. Nesse caso, alterar a opção “port” para 4044 ou qualquer outro número já é uma boa.</p>
<p>Agora, já podemos mexer no servidor pela rede, e sem muito medo de uma invasão. Que tal pararmos de enrolar e instalar logo o bendito do proxy, hein?</p>
<p>Passo 5 – Instalando o Squid, o Sarg e o Dansguardian</p>
<p>Apenas para entender: o Squid será o responsável por compartilhar o acesso à internet com todas as máquinas, o Dansguardian irá habilitar alguns filtros de acesso, e o Sarg será o ‘dedo-duro’ do sistema, gerando arquivos HTML com os ‘logs’ de navegação do Squid.</p>
<p>E aqui começa uma parte da configuração onde ‘cada caso é um caso’. O Squid permite um sem fim de combinações de restrições, permitindo que eu simplesmente compartilhe a internet, ou que eu compartilhe apenas para alguns IPs, ou que eu exija uma autenticação para o uso, ou que eu bloqueie algumas páginas de acordo com o horário.</p>
<p>A configuração das ACLs (regras que controlam o acesso) dependerá exclusivamente de como a empresa vê o acesso à internet pelos funcionários, e do quão odiado você quer ser pelos seus colegas de trabalho que não podem mais acessar o orkut.</p>
<p>Se a empresa para o qual você está instalando o proxy não se importa com restrições de acesso, a configuração padrão do squid já está perfeita. Caso contrário, sugiro que você leia a documentação do mesmo e encontre quais regras se adaptam melhor à sua situação. O exemplo aqui é bem restrito, mas já montei um servidor para um escritório de contabilidade onde TUDO era bloqueado, menos uma meia dúzia de páginas….</p>
<p>Vamos às configurações: Comece instalando os pacotes:</p>
<p>sudo apt-get install squid squid-common bind sarg dansguardian</p>
<p>E depois dê um</p>
<p>sudo mcedit /etc/squid/squid.conf</p>
<p>Comece alterando as primeiras linhas, antes das ACL’s:<br />
#Inicio<br />
http_port 192.168.1.254:3129 transparent<br />
visible_hostname proxyspeedy2<br />
hierarchy_stoplist cgi-bin ?<br />
acl QUERY urlpath_regex cgi-bin \?<br />
cache_mem 48 MB<br />
#Opções para otimização do sistema<br />
maximum_object_size 1024 MB<br />
minimum_object_size 0 KB<br />
cache_swap_low 50<br />
cache_swap_high 90<br />
cache_access_log /var/log/squid/access.log</p>
<p>Vamos às explicações, pra quem não conhece o squid:</p>
<p>http_port – qual porta o squid estará escutando. Ao colocar o endereço IP, eu impeço que alguém tente acessar pelas outras interfaces. O ‘transparent’ será explicado em breve.<br />
visible_hostname – Hostname do servidor<br />
cache_mem – Quantidade de memória RAM que o squid estará utilizando para guardar as páginas acessadas, aumentando a velocidade de acesso posterior.<br />
maximum_object_size e minimum_object_size – Qual o tamanho máximo e mínimo dos arquivos que ficarão armazenados no cache em disco.<br />
cache_swap_low e cache_swap_high – Com o cache_swap_high você define qual a porcentagem máxima que o cache deverá atingir para começar a apagar arquivos antigos. O cache_swap_low define qual a porcentagem deverá ser atingida durante a remoção desses arquivos.</p>
<p>Caso você queira que os usuários se autentiquem para usar a internet, insira esses dados no squid.conf:</p>
<p>auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd<br />
auth_param basic children 5<br />
auth_param basic realm</p>
<p>Agora, as ACL’s. Novamente, cada caso é um caso, e vou colocar as minhas aqui apenas para exemplo. Se você quiser entender mais sobre ACL’s do Squid e como usá-las, recomendo uma leitura desse texto .</p>
<p># ACLs normais<br />
acl all src 192.168.1.0/255.255.255.0<br />
delay_pools 1<br />
delay_class 1 2<br />
delay_parameters 1 114688/114688 32768/32768<br />
delay_access 1 allow all<br />
acl manager proto cache_object<br />
acl localhost src 127.0.0.1/255.255.255.255<br />
acl SSL_ports port 443 563<br />
acl SSL_ports port 873<br />
acl Safe_ports port 80<br />
acl Safe_ports port 21<br />
acl Safe_ports port 443 563<br />
acl Safe_ports port 70<br />
acl Safe_ports port 210<br />
acl Safe_ports port 1025-65535<br />
acl Safe_ports port 280<br />
acl Safe_ports port 488<br />
acl Safe_ports port 591<br />
acl Safe_ports port 777<br />
acl Safe_ports port 631<br />
acl Safe_ports port 873<br />
acl Safe_ports port 901<br />
acl purge method PURGE<br />
acl CONNECT method CONNECT<br />
no_cache deny QUERY<br />
# ACLs paulo<br />
acl Diretoria proxy_auth &#8220;/etc/squid/users/diretoria.acl&#8221;<br />
acl administracao proxy_auth &#8220;/etc/squid/users/administracao.acl&#8221;<br />
acl producao proxy_auth &#8220;/etc/squid/users/producao.acl&#8221;<br />
acl castigo proxy_auth &#8220;/etc/squid/users/castigo.acl&#8221;<br />
acl PornoURLs url_regex &#8220;/etc/squid/users/porno.acl&#8221;<br />
acl ProducaoURLs url_regex &#8220;/etc/squid/users/producaoURLs.acl&#8221;<br />
acl AdministracaoURLs url_regex &#8220;/etc/squid/users/administracaoURLs.acl&#8221;<br />
acl almoco time MTWHF 12:00-14:00<br />
acl executaveis url_regex -i &#8220;/etc/squid/users/executaveis.acl&#8221;<br />
acl castigo_ip src &#8220;/etc/squid/users/castigo_ip.acl&#8221;<br />
#Aplicação das ACL&#8217;s<br />
http_access allow manager localhost<br />
http_access deny manager<br />
http_access deny !Safe_ports<br />
http_access deny CONNECT !SSL_ports<br />
http_access allow purge localhost<br />
http_access deny purge<br />
http_access allow localhost<br />
http_access deny administracao PornoURLs<br />
http_access deny producao PornoURLs<br />
http_access deny castigo PornoURLs<br />
http_access deny Diretoria PornoURLs<br />
http_access deny administracao AdministracaoURLs !almoco<br />
http_access deny producao ProducaoURLs !almoco<br />
http_access deny castigo AdministracaoURLs<br />
http_access deny administracao executaveis<br />
http_access deny producao executaveis<br />
http_access allow Diretoria<br />
http_access allow producao<br />
http_access allow administracao<br />
http_access allow castigo<br />
http_access deny all<br />
http_reply_access allow all</p>
<p>Basicamente, existem três níveis de acesso diferentes, com várias restrições baseado em cada nível, mas com a possibilidade de liberar alguns sites no horário de almoço, a menos que você esteja na ACL ‘castigo’ (sacou? hein?). Pode parecer castrante, mas são normas da empresa, não me odeiem por configurar isso.</p>
<p>Salve o arquivo e saia. Agora que já temos o básico configurado, vamos configurar o firewall para compartilhar conexões. No terminal, digite os comandos abaixo:</p>
<p>sudo modprobe iptable_nat<br />
sudo modprobe ip_nat_ftp<br />
sudo echo 1 &gt; /proc/sys/net/ipv4/ip_forward<br />
sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE<br />
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp &#8211;dport 80 -j REDIRECT &#8211;to-port 3128</p>
<p>Na verdade, apenas os quatro primeiros comandos são necessários. Nesse caso, substitua o ‘eth1′ pela interface que está conectada à internet. O último comando gera o que chamamos de ‘proxy transparente’. Com ela habilitada, qualquer um que queira acessar a internet deverá obrigatoriamente passar pelo Squid (vocês lembram daquele ‘transparent’ logo na primeira linha do squid.conf, né?).</p>
<p>Uma ótima idéia é inserir esses comandos de firewall no arquivo /etc/init.d/boomisc.sh. Assim, caso o computador seja reiniciado, as regras passarão a funcionar automaticamente….</p>
<p>Aqui, já podemos testar o Squid. Primeiro, dê o comando:</p>
<p>sudo /etc/init.d/squid restart</p>
<p>E verifique se não apareceu nenhum erro. Uma lida nos arquivos em /var/log pode ser útil, caso apareça algo estranho. Agora, numa máquina qualquer, abre o seu browser e configure o proxy. No Firefox2, vá em Ferramentas &gt; Opções &gt; Avançado &gt; Rede &gt; Configurações e insira o endereço IP do servidor e a porta do squid. Tente acessar alguma página. Se der tudo certo, parabéns. O grosso do trabalho já foi, agora é cuidar da segurança.</p>
<p>Nota: Percebam que até o momento não é possível usar o Squid com transparência E autenticação ao mesmo tempo. Ao usar os dois você no máximo não terá acesso se não configurar o proxy nas máquinas locais. O que já ajuda em alguma coisas….</p>
<p>Nota2: Para criar um usuário no Squid, você pode usar o comando</p>
<p>sudo htpasswd /etc/squid/passwd &lt;usuário&gt;</p>
<p>E depois cadastrá-lo em uma das regras do squid. OU você pode usar o Webmin, o que eu considero um pouco mais prático…</p>
<p>O Sarg não exige muita configuração, podendo ser executado via Webmin mesmo, ou através do crontab, caso você queira automatizar a tarefa. Uma lida no /etc/squid/sarg.conf pode dar boas dicas do tipo de configuração que o Sarg permite. Para acessar os relatórios, acesse <a href="http://192.168.1.254/squid-reports/">http://192.168.1.254/squid-reports/</a> que eles deverão estar lá.</p>
<p>Agora, vamos ao Danguardian. Antes, uma observação importante: o DanGuardian é um super-filtro de conteúdo, conseguindo barrar vários tipos de conteúdos diferentes, sejam sites, frase, ou até mesmo tipos de arquivos. A configuração padrão é bem restrita, e você pode penar um pouco até ter uma configuração que lhe permita acessar tudo o que você precisa, e bloqueie o resto. Sempre que possível, utilize os arquivos de exceção para liberar apenas o necessário (exemplo, incluir o endereço da Caixa Econômica Federal como exceção, ao invés de liberar o acesso a arquivos .zip).</p>
<p>Outro ponto é que você pode precisar configurar bastante o DG no quesito performance. Ele utiliza o Clamav para fazer uma varredura antí-virus no que passa pelo proxy, o que pode ser bem ruim se você está usando um Pentium 100 como proxy para 100 máquinas… O Dansguardian é recomendado para ambientes corporativos preocupados com a segurança, e PRINCIPALMENTE em escolas ou universidades.</p>
<p>Comece com um:</p>
<p>sudo mcedit /etc/dansguardian/dansguardian.conf</p>
<p>Para uma configuração simples, comente a linha ‘UNCONFIGURED’ e altere as linhas:</p>
<p>language = ‘portuguese’<br />
loglocation = ‘/var/log/dansguardian/access.log’<br />
filterport = 3128<br />
proxyip = 127.0.0.1<br />
proxyport = 3129</p>
<p>Nota: muitos devem estar achando estranho eu ter configurado o Dansguardian na porta padrão do Squid. O motivo é simples: preguiça. Assim eu não preciso reconfigurar todos os outros computadores… </p>
<p>No ‘/etc/dansguardian/dansguardianf1.conf‘ verifique a opção ‘naughtynesslimit. Ele é o ‘medidor de putaria’ do Dansguardian. Quanto menor esse valor, maior será a possibilidade da página ser bloqueada. Para adultos, um bom valor é 200. Para crianças, pense em valores por volta de 40…</p>
<p>Agora, precisamos baixar as definições em português. Execute os comandos:</p>
<p>sudo wget <a href="http://dansguardian.org/downloads/grosvenor/languages.tar.gz">http://dansguardian.org/downloads/grosvenor/languages.tar.gz</a><br />
sudo tar -zxvf languages.tar.gz<br />
sudo cp -r languages/* /etc/dansguardian/languages/portuguese/</p>
<p>Agora, insira no arquivo ‘/etc/dansguardian/weightedphraselist’ as linhas:</p>
<p>.Include&lt;/etc/dansguardian/languages/portuguese/weightedphraselist.pornsites.portuguese&gt;<br />
.Include&lt;/etc/dansguardian/languages/portuguese/weightedphraselist.pornwords.portuguese&gt;</p>
<p>E, no ‘/etc/dansguardian/bannedphraselist’</p>
<p>.Include&lt;/etc/dansguardian/languages/portuguese/bannedphraselist.portuguese&gt;</p>
<p>Salve tudo, e reinicie o Dans:</p>
<p>sudo /etc/init.d/dansguardian restart</p>
<p>Se tudo correu bem, você provavelmente é o cara mais odiado pelos funcionários que enrolam no serviço…..</p>
<p>Há um extra para acelerar um pouco a navegação, que é instalar um servidor DNS na máquina. Com isso, as resoluções de nome ficarão mais rápidas, pois haverá um cache de endereços na sua máquina. Até onde eu sei, não é necessário alterar algum arquivo, apenas instalar o bind</p>
<p>Passo 6 – Incrementando o Firewall e instalando o Snort e o Guardian</p>
<p>A parfir daqui, tudo o que será feito é instalar sistemas que bloqueiem ataques externos, ou evitem problemas que um vírus possa causar internamente. As regras de Firewall servem para fechar portas e evitar ataques. O Snort é uma ferramenta de detecção de intrusos, ótima para ficar vigiando a sua rede e verificando se há algo errado. O Guardian trabalha junto com o Snort, criando regras de firewall de acordo com os alertas do Snort.</p>
<p>Para o firewall, vamos utilizar o kurumin-firewall mesmo (disponível no GuiadoHardware), mas com algumas modificações. Novamente, as portas que você irá abrir ou fechar dependerão exclusivamente das necessidades da empresa ou local onde você instalando o servidor.</p>
<p>sudo mcedit /etc/init.d/kurumin-firewall</p>
<p>E edite o arquivo:</p>
<p>#!/bin/bash</p>
<p># Script de configuração do iptables gerado pelo configurador do Kurumin<br />
# Este script pode ser usado em outras distribuições Linux que utilizam o Kernel 2.4 em diante<br />
# Por Carlos E. Morimoto</p>
<p>firewall_start(){</p>
<p># Abre para uma faixa de endereços da rede local<br />
iptables -A INPUT -p tcp &#8211;syn -s 192.168.1.0/255.255.255.0 -j ACCEPT</p>
<p># Abre uma porta (inclusive para a Internet)<br />
iptables -A INPUT -p tcp &#8211;destination-port 21 -j ACCEPT<br />
iptables -A INPUT -p tcp &#8211;destination-port 110 -j ACCEPT<br />
iptables -A INPUT -p tcp &#8211;destination-port 2535 -j DROP<br />
iptables -A INPUT -p tcp &#8211;destination-port 139 -j DROP<br />
iptables -A OUTPUT -p tcp &#8211;destination-port 139 -j DROP</p>
<p># Fechando as portas do SSH pra fora<br />
iptables -A INPUT -p tcp &#8211;dport 2756 -m iprange &#8211;src-range 192.168.1.0-192.168.1.255 -j ACCEPT<br />
iptables -A INPUT -p tcp &#8211;dport 2756 -j DENY<br />
# Ignora pings<br />
echo &#8220;1&#8243; &gt; /proc/sys/net/ipv4/icmp_echo_ignore_all</p>
<p># Protege contra synflood<br />
echo &#8220;1&#8243; &gt; /proc/sys/net/ipv4/tcp_syncookies</p>
<p># Desabilita o suporte a source routed packets<br />
# Esta recurso funciona como um NAT ao contrário, que em certas circunstancias pode permitir que alguem de fora envie pacotes para micros dentro da rede local.<br />
echo &#8220;0&#8243; &gt; /proc/sys/net/ipv4/conf/eth0/accept_source_route<br />
echo &#8220;0&#8243; &gt; /proc/sys/net/ipv4/conf/eth1/accept_source_route<br />
# Proteção contra ICMP Broadcasting<br />
echo &#8220;1&#8243; &gt; /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts</p>
<p># Proteções diversas contra portscanners, ping of death, ataques DoS, etc.<br />
iptables -A FORWARD -p icmp &#8211;icmp-type echo-request -m limit &#8211;limit 1/s -j ACCEPT<br />
iptables -A FORWARD -p tcp -m limit &#8211;limit 1/s -j ACCEPT<br />
iptables -A FORWARD -m state &#8211;state ESTABLISHED,RELATED -j ACCEPT<br />
iptables -A FORWARD -p tcp &#8211;tcp-flags SYN,ACK,FIN,RST RST -m limit &#8211;limit 1/s -j ACCEPT<br />
iptables -A FORWARD &#8211;protocol tcp &#8211;tcp-flags ALL SYN,ACK -j DROP<br />
iptables -A FORWARD -m unclean -j DROP<br />
iptables -A INPUT -m state &#8211;state INVALID -j DROP<br />
iptables -N VALID_CHECK<br />
iptables -A VALID_CHECK -p tcp &#8211;tcp-flags ALL FIN,URG,PSH -j DROP<br />
iptables -A VALID_CHECK -p tcp &#8211;tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP<br />
iptables -A VALID_CHECK -p tcp &#8211;tcp-flags ALL ALL -j DROP<br />
iptables -A VALID_CHECK -p tcp &#8211;tcp-flags ALL FIN -j DROP<br />
iptables -A VALID_CHECK -p tcp &#8211;tcp-flags SYN,RST SYN,RST -j DROP<br />
iptables -A VALID_CHECK -p tcp &#8211;tcp-flags SYN,FIN SYN,FIN -j DROP<br />
iptables -A VALID_CHECK -p tcp &#8211;tcp-flags ALL NONE -j DROP</p>
<p># Abre para a interface de loopback.<br />
# Esta regra é essencial para o KDE e outros programas gráficos funcionarem adequadamente.<br />
iptables -A INPUT -p tcp &#8211;syn -s 127.0.0.1/255.0.0.0 -j ACCEPT<br />
iptables -A INPUT -i lo -j ACCEPT</p>
<p># Esta regra é o coração do firewall do Kurumin,<br />
# ela bloqueia qualquer conexão que não tenha sido permitida acima, justamente por isso ela é a última da cadeia.<br />
iptables -A INPUT -p tcp &#8211;syn -j DROP</p>
<p>}<br />
firewall_stop(){<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
}<br />
case &#8220;$1&#8243; in<br />
&#8220;start&#8221;)<br />
firewall_start<br />
;;<br />
&#8220;stop&#8221;)<br />
firewall_stop<br />
echo &#8220;O kurumin-firewall está sendo desativado&#8221;<br />
sleep 2<br />
echo &#8220;ok.&#8221;<br />
;;<br />
&#8220;restart&#8221;)<br />
echo &#8220;O kurumin-firewall está sendo desativado&#8221;<br />
sleep 1<br />
echo &#8220;ok.&#8221;<br />
firewall_stop; firewall_start<br />
;;<br />
*)<br />
iptables -L -n<br />
esac</p>
<p>Salve, e configure para rodar no boot. Você pode testar as configurações do iptables dando um</p>
<p>sudo iptables -L</p>
<p>e verificando se ele lista todas as regras criadas.</p>
<p>Para o Snort e o Guardian, o procedimento é exatamente o encontrado na página do Ubuntu Brasil portanto eu não pretendo me repetir. Como dica adicional, insiram as linhas abaixo no bootmisc.sh, para que os serviços sempre rodem ao reinicar o servidor:</p>
<p>snort -c /etc/snort/snort.conf &amp;<br />
guardian.pl /etc/guandian.conf</p>
<p>Faça alguns testes finais, reinicie a máquina, e pronto. Você terá um servidor proxy leve, seguro, e que permite adicionar novos serviços (DHCP, SAMBA, Cups, LDAP, Postfix) facilmente. E tudo em menos de duas horas!</p>
<p>Nota final:<br />
- Caso algum passo descrito aqui não funcione, sempre veja as mensagens de erro e os arquivos de log. Boa parte das soluções podem ser encontradas vendo qual é exatamente o problema.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizoliveira.org/linux/instalando-e-configurando-um-servidor-proxy-com-o-ubuntu-server-%e2%80%93-em-menos-de-duas-horas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IPTABLES PARA QUEM NÃO CONHECE IPTABLES..</title>
		<link>http://www.luizoliveira.org/linux/iptables-para-quem-nao-conhece-iptables/</link>
		<comments>http://www.luizoliveira.org/linux/iptables-para-quem-nao-conhece-iptables/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 13:27:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Servidores]]></category>

		<guid isPermaLink="false">http://www.luizoliveira.org/?p=442</guid>
		<description><![CDATA[      A segurança da informação é, sem dúvida, um dos assuntos mais importantes dentre as pautas de reunião de tecnologia em qualquer entidade.]]></description>
			<content:encoded><![CDATA[<p><strong>1 Conceito de segurança</strong></p>
<p>      A segurança da informação é, sem dúvida, um dos assuntos mais importantes dentre as pautas de reunião de tecnologia em qualquer entidade.</p>
<p>      Autenticidade, confidencialidade em manter as informações a salvo de acesso e divulgação não autorizadas, confiabilidade, compartilhamento de dados, disponibilidade e integridade da informação estão diretamente ligados à segurança. Segurança da informação são mecanismos que promovem a integridade de uma estrutura de rede que se aplicam nos conceitos mais simples, que vão desde políticas de troca periódica de senhas até a trituração de documentos impressos.</p>
<p>      Mobilidade e facilidade já fazem parte do nosso dia-a-dia, comprar e configurar um roteador Wi-Fi tornou-se trivial, já com as mais diversas distribuições de Linux, instalar e configurar um servidor como proxy acaba sendo tarefa de 15 minutos. É exatamente neste tipo de facilidade que pessoas mal intencionadas aplicam as mais diversas formas comumente utilizadas para explorar estas “vulnerabilidades”, com o simples uso de ferramentas desenvolvidas especialmente para esta finalidade, a invasão.</p>
<p>     Ataques direcionados às redes além de comprometer os recursos e a disponibilidade comprometem o principal: as informações. Como os ataques podem ser originados de qualquer posição dentro ou fora da área da rede em questão, acaba dificultando a tarefa de localização precisa da origem do ataque e do atacante. O intruso que consiga entrar em uma rede ficará com um acesso privilegiado para lançar ataques aos elementos constituintes dessa rede havendo risco acrescido para ocorrência das situações exemplificadas a seguir:</p>
<p>• Furto ou violação da informação e dos serviços da rede;<br />
• Abuso da conexão com à Internet;<br />
• Utilização dessa conexão “ponte” para prática de atos ilícitos, o que, em caso de posterior investigação policial, envolverá o utilizador titular do link invadido;<br />
• Vandalismo – destruição de dados, interferência ao normal funcionamento da rede, etc.</p>
<p>A contra medida simples configurada em separado ou em conjunto não devem ser consideradas medidas de segurança suficientes para impedir um indivíduo motivado a entrar na rede.</p>
<p><strong>2 Mecanismos de segurança</strong></p>
<p>Contamos com os mecanismos de segurança físicos e lógicos:</p>
<p>• os métodos físicos são barreiras que limitam o contato ou acesso à informação ou a infra-estrutura de dados que contém as informações, podem ser exemplificados como: portas, trancas, acesso por identificação biométrica, blindagem, entre outros.<br />
• os métodos lógicos destacam-se por controles eletrônicos que impedem ou limitam o acesso à informação.</p>
<p>Adicionalmente, agregamos aos mecanismos lógicos:</p>
<p>- Criptografia: É a forma de cifrar dados, utilizando algoritmos altamente complexos, ou não, para tornar a informação ininteligível à terceiros. A decriptografia é utilizada pela parte autorizada a receber esta informação e devidamente com o algoritmo de decriptação é realizado o processo inverso.</p>
<p>- Assinatura digital: Código utilizado para verificar a integridade de um documento, porém, não garante sua confidencialidade.</p>
<p>- Garantia da integridade da informação: Conseguimos facilmente utilizando funções de “Hashing”, seria como tirar uma “foto” do documento antes de enviar, e então para o receptor verificar sua integridade ele tiraria outra “foto” do documento e realizava a comparação.</p>
<p>- Controle de acesso: destacam-se por senhas, sistemas biométricos, controle de acesso explícito, como por exemplo, um firewall&#8230;<br />
<strong>3 Conceitos de Firewall</strong></p>
<p>     Firewall, não é nada mais do que um porteiro ou um segurança com sua árdua função de verificar quem pode entrar e sair, além de manter a consonância das coisas, atualmente, já se tornou imprescindível sua utilização.<br />
     Existem firewalls comerciais, muitos; também existe um método de construção onde podemos definir as próprias regras, onde você define o que quer controlar; praticidade? Nem tanto para uma corporação com mais de 5 mil regras. De qualquer forma, com um pouco de organização, conseguimos trabalhar, e muito bem, com o iptables.<br />
     No Linux, o iptables é embutido no kernel, o que o torna, sem dúvida, superior em relação aos seus concorrentes. Obviamente nenhum firewall irá corrigir os erros de sua rede, mas ele poderá limitar o uso destes serviços à certos computadores. Não faz sentido disponibilizar um serviço de FTP a toda a internet sendo que apenas a filial necessita deste acesso, muito menos manter um serviço web ativo no seu servidor, se nem ao menos você necessita dele lá. Então, como definir políticas de acesso aos serviços em que eu realmente necessito mante-los?</p>
<p><strong>Iptables</strong><br />
Para entendermos o iptables, veremos como ele trabalha para então conhecermos o quê ele pode nos proporcionar. Teremos agora, um método bem didático de explicação. Preparado??</p>
<p>O iptables está organizado por 3 tabelas, a saber:</p>
<p><strong>Filter</strong>: Onde é controlado o de filtro de pacotes, basicamente, quem entra e quem sai da sua rede. É composta por três funções:</p>
<p>• INPUT: Controla o que <strong>entra</strong> no servidor.<br />
• FORWARD: Controla o que entra no servidor mas deve ser <strong>redirecionado</strong> a uma outra máquina.<br />
• OUTPUT: Controla o que <strong>sai</strong> do servidor.</p>
<p><strong>NAT</strong>: Ela trabalha com funções de NAT (Network Address Translation), seria uma troca do endereço de rede. As funções dela são:<br />
• PREROUTING: Utilizada quando necessitamos tomar ações <strong>ANTES</strong> do datagrama ser roteado.<br />
• POSTROUTING: Utilizada quando necessitamos tomar ações <strong>APÓS</strong> o roteamento do datagrama.<br />
• OUTPUT: Utilizada quando necessitamos realizar alterações nos datagramas após eles serem roteados.</p>
<p><strong>Mangle</strong>: Trabalha com alterações especiais nos pacotes, por exemplo alterar a prioridade de um datagrama IP, ou marcar um determinado datagrama para que ele seja trabalhado por um roteamento especial, como sair por outro gateway. As funções dela são:<br />
• PREROUTING: Utilizada quando necessitamos modificar os datagramas dando um tratamento especial antes que eles sejam roteados.<br />
• OUTPUT: Modifica especialmente os datagramas gerados pelo servidor antes que eles sejam roteados.<br />
Veja um exemplo didático:</p>
<p> <br />
Agora que já sabemos tudo sobre as situações das tabelas, vamos conhecer alguns comandos:</p>
<p><strong>Comandos do iptables</strong></p>
<p><strong>iptables</strong>: o binário<br />
<strong>iptables-save</strong>: binário que salva as regras em memória.<br />
<strong>ip6tables</strong>: iptables para IPv6.<br />
<strong>iptables-restore</strong>: binário responsável carregar em memória as regras que foram salvas pelo ‘iptables-save’.</p>
<p>Forma de utilização:<br />
# iptables –t nat<br />
diz ao iptables que será usado a tabela nat</p>
<p># iptables –t filter<br />
diz ao iptables que será usado a tabela filter</p>
<p># iptables –t mangle<br />
diz ao iptables que será usado a tabela mangle<br />
iptables -&lt;comando&gt; [cadeia]<br />
Ex: iptables -A INPUT</p>
<table border="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>-A <strong>chain</strong></td>
<td>Ex: iptables –A <strong>INPUT</strong></p>
<p>Iptables, insira as regras ao final da chain INPUT.</td>
</tr>
<tr>
<td>-D <strong>chain</strong></td>
<td>Ex: iptables –D <strong>INPUT</strong></p>
<p>Iptables, apague as regras da chain INPUT, não vou mais utilizá-las.</td>
</tr>
<tr>
<td>-D <strong>chain</strong> regra_num</td>
<td>Ex: iptables –D <strong>FORWARD</strong> 25</p>
<p>Iptables, apague da chain FORWARD a regra residente na posição 25.</td>
</tr>
<tr>
<td>-R <strong>chain</strong> regra_num</td>
<td>Ex: iptables –R <strong>FORWARD</strong> 20 –s 192.168.30.10 –d 192.168.40.0/24</p>
<p>Iptables, substitua a regra 20 da chain FORWARD pela regra dada ‘–s 192.168.20.10 –d 192.168.30.0/24 -j DROP.’</td>
</tr>
<tr>
<td>-I <strong>chain</strong></td>
<td>Ex: iptables –I <strong>INPUT</strong></p>
<p>Iptables, insira no inicio da lista a regra.</td>
</tr>
<tr>
<td>-L <strong>chain</strong></td>
<td>Ex: iptables –L <strong>INPUT</strong></p>
<p>Iptables, liste as regras da chain INPUT. Nota: Caso não haja nenhuma chain especificada, todas as regras em todas as chains são listadas.</td>
</tr>
<tr>
<td>-F <strong>chain</strong></td>
<td>Ex: iptables –F <strong>FORWARD</strong></p>
<p>Iptables, remova todas as regras da chain FORWARD. Nota: Se nenhuma chain for especificada, remove as regras de todas as chains existentes, inclusive as do usuário</td>
</tr>
<tr>
<td>-Z <strong>chain</strong></td>
<td>Ex: iptables –Z</p>
<p>Iptables, zere os contadores de datagramas e de bytes em todas as regras da chain especificada, ou para todas as chains se nenhuma for especificada.</td>
</tr>
<tr>
<td>-N <strong>chain</strong></td>
<td>Ex: iptables –N <strong>VIRUS</strong></p>
<p>Iptables, crie uma chain chamada VIRUS, utilizado para tratar diversos casos com o mesmo ALVO.</td>
</tr>
<tr>
<td>-e <strong>chain</strong></td>
<td>Ex: iptables –e <strong>WORMS</strong> worms</p>
<p>Iptables, renomeie a chain WORMS para worms</td>
</tr>
<tr>
<td>-X <strong>chain</strong></td>
<td>Ex: iptables –X <strong>WORMS</strong></p>
<p>Iptables, apague a chain WORMS, não vou mais utilizá-la. Nota: o iptables apagará todas se não for especificada uma.</td>
</tr>
<tr>
<td>-C <strong>chain</strong></td>
<td>Ex: iptables –C <strong>WORMS</strong></p>
<p>Iptables, verifique o datagrama descrito pela regra especificada contra a chain especificada. Este comando retorna uma mensagem descrevendo como a chain processou o datagrama. Isso é muito útil para testar a configuração do firewall, e para uma análise posterior.</td>
</tr>
<tr>
<td>-P <strong>chain</strong> política</td>
<td>Ex: iptables –P <strong>INPUT</strong> DROP<br />
Iptables, defina a política padrão para a chain INPUT dentro de uma política especificada a DROP. As políticas válidas são: <strong>ACCEPT</strong>, <strong>DROP</strong>, <strong>QUEUE</strong> e <strong>RETURN</strong>.</td>
</tr>
</tbody>
</table>
<p> <br />
<strong>Controles a serem tomados:</strong></p>
<table border="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>-p &lt;protocolo&gt;</td>
<td>Ex: -p tcp.</p>
<p>Iptables, é sobre o protocolo tcp! (você encontra uma tabela de protocolos em /etc/protocol)</td>
</tr>
<tr>
<td>-i &lt;interface&gt;</td>
<td>Ex: -i eth0, -i eth1, -i eth+ (todas eth)</p>
<p>Iptables, controle tudo o que <strong>ENTRA</strong> (-i de INPUT) pela interface ethX . Esta regra também se aplica a chain FORWARD.</td>
</tr>
<tr>
<td>-o &lt;interface&gt;</td>
<td>Ex: -o eth0, -o eth1, -o eth+ (todas eth)</p>
<p>Iptables, controle o que <strong>SAI</strong> (-o de OUTPUT). Esta regra também se aplica nas chains FORWARD e OUTPUT</td>
</tr>
<tr>
<td>-s &lt;ip&gt;</td>
<td>Ex: -s 192.168.0.1/24</p>
<p>Iptables, controle o que vier da <strong>ORIGEM</strong> (-s de SOURCE) 192.168.0.1/24</td>
</tr>
<tr>
<td>-d &lt;ip&gt;</td>
<td>Ex: -d 192.168.0.2/24</p>
<p>Iptables, controle o que vai com <strong>DESTINO</strong> (-d de DESTINATION)</td>
</tr>
<tr>
<td>! &lt;pacote|ip&gt;</td>
<td>Ex: -d ! 192.168.0.2/24, ou –p ! udp</p>
<p>Iptables, com qualquer <strong>DESTINO</strong> (-d de DESTINATION) <strong>EXCETO</strong> 192.168.0.2, o mesmo para protocolo, qualquer um exceto udp.</td>
</tr>
<tr>
<td>-j &lt;ação&gt;</td>
<td>Ex: -j ACCEPT, -j DROP, -j REJECT, -j LOG</p>
<p>Iptables, o que casar com as ações definidas voce vai <strong>ACEITAR</strong>, vai <strong>NEGAR</strong>, vai <strong>REJEITAR</strong> ou vai <strong>GRAVAR</strong>.</td>
</tr>
<tr>
<td>&#8211;sport &lt;porta&gt;</td>
<td>Ex: &#8211;sport 22</p>
<p>Iptables, o que for da <strong>PORTA</strong> de <strong>ORIGEM</strong> (&#8211;sport de SOURCE PORT) 22</td>
</tr>
<tr>
<td>&#8211;dport &lt;porta&gt;</td>
<td>Ex: &#8211;dport 80</p>
<p>Iptables, o que for para a <strong>PORTA</strong> de <strong>DESTINO</strong> 80 (&#8211;dport de DESTINATION PORT)</td>
</tr>
</tbody>
</table>
<p> <br />
DICA: Tanto para &#8211;sport quanto para &#8211;dport podemos utilizar range de portas:<br />
Ex: &#8211;dport 6881:6889<br />
Ou multiportas:<br />
Ex: -m multiport &#8211;dport 5190,4000,53</p>
<p><strong>Ações a serem tomadas quando alguma regra combina ou casa </strong>(para os íntimos)</p>
<table border="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>ACCEPT</td>
<td>Aceitar o datagrama IP</td>
</tr>
<tr>
<td>DROP</td>
<td>Bloquear o datagrama IP, descarta o datagrama sem informar ao emissor</td>
</tr>
<tr>
<td>REJECT</td>
<td>Rejeita o datagrama IP, informa o emissor, Ex: icmp destination host unreacheable</td>
</tr>
<tr>
<td>LOG</td>
<td>Cria Logs das ações solicitadas.</td>
</tr>
<tr>
<td>SNAT</td>
<td>Modifica o endereço de origem (SOURCE NAT) dos datagramas IP antes deles serem roteados. Ex: Dizer que um datagrama enviado do host X para o Y originou-se do host Z.</td>
</tr>
<tr>
<td>DNAT</td>
<td>Modifica o endereço de destino (DESTINATION NAT) dos datagramas IP das máquinas clientes. Ex: Encaminhar um datagrama com destino a porta 80 para a 3128 (do squid!)</td>
</tr>
<tr>
<td>REDIRECT</td>
<td>Redireciona a porta. Ex: o que vier para a porta 7153 redirecionar para a porta 3389 (a porta do Terminar Service)</td>
</tr>
<tr>
<td>TOS</td>
<td>Tratamento especial no datagrama, veremos mais adiante!</td>
</tr>
</tbody>
</table>
<p> </p>
<p>      Nossa! Quanta coisa hein? Se você conseguiu chegar até aqui, é sinal de que apenas passou os olhos pelas tabelas, não!? Tome notas, leia, imprima, releia e tenha as tabelas no bolso, se entendê-las dominará o iptables facilmente!<br />
Agora chega de “bla bla bla” e vamos as reais situações.</p>
<p>A maioria das situações abaixo foram retiradas da lista linux-board do YahooGroups, a qual sempre presto uma ajuda nas horas vagas.</p>
<p>Vamos tomar como exemplo a situação de rede, a quase padrão na maioria dos casos:</p>
<p>Rede: eth0 interna<br />
Rede: eth1 externa</p>
<p><strong>Trabalhando com NAT em sua rede</strong></p>
<p>Mascarar conexão</p>
<p>Devemos habilitar, antes, o nat em seu kernel:</p>
<p>echo 1 &gt; /proc/sys/net/ipv4/ip_forward</p>
<p>E então:</p>
<p>iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -j MASQUERADE<br />
Iptables, adicione na tabela nat (-t nat), após ser roteado (-A POSTROUTING):<br />
• O que for de origem da minha rede (-s 192.168.0.0/24)<br />
Qual o alvo, o que fazer?<br />
• -j MASQUERADE (mascarar a conexão)<br />
<strong>SNAT</strong>: modificação do endereço de origem das máquinas para um único IP ou faixa de IP&#8217;s.<br />
Qualquer regra que utilize <strong>SNAT</strong> deve ser aplicada a chain <strong>POSTROUTING</strong>.</p>
<p><strong>DNAT</strong>: modificação do endereço de destino das máquinas para um único IP ou fixa de IP&#8217;s.<br />
Qualquer regra que utilize <strong>DNAT</strong> deve ser aplicada a chain <strong>PREROUTING</strong>.<br />
E então, fácil? Calma, veremos muitos exemplos, até você decorá-los. Vejamos uma regra:</p>
<p>iptables –t nat –A POSTROUTING –s 192.168.0.1 –o eth0 –j SNAT -–to 192.168.2.12<br />
Iptables, adicione na tabela POSTROUTING (-t nat –A POSTROUTING):<br />
• o que vier com origem do host (-s 192.168.0.1)<br />
• e especificamente o que sai pela rede eth0 (-o eth0)<br />
• deverá ter seu endereço alterado (-j SNAT) para 192.168.2.12</p>
<p>Tá ficando bom, vejamos uma com DNAT:</p>
<p>Redirecionar conexões que entrem na porta 7155 para a porta 3389 (Terminal Service) de uma máquina interna de sua rede.</p>
<p>iptables -t nat -A PREROUTING -p tcp -m tcp &#8211;dport 7152 -j DNAT &#8211;to 192.168.0.126:3389<br />
iptables como vai? Adicione na tabela PREROUTING (-t nat –A PREROUTING):<br />
• O que for TCP e que vier com destino à porta 7152 (&#8211;dport 7152)<br />
terá seu destino de rede alterado para 192.168.0.126 (-j DNAT –-to 192.168.0.126:3389)<br />
Quando não especificamos uma origem ou um destino (-s &lt;IP&gt;, -d &lt;IP&gt;) o iptables segue o padrão que é ANY, ou seja, qualquer (0/0). É redundante colocarmos algo como –s 0/0 ou –d 0/0. Note que na regra acima, deixamos explícito a porta destino do pacote, já que ele viria pela 7152 e além de alterarmos o IP de destino, alteramos também a porta para 3389.<br />
Redirecionar conexões da porta 80 para 3128</p>
<p>iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp -i eth0 &#8211;dport 80 -j REDIRECT &#8211;to-port 3128<br />
iptables, adicione na tabela nat (-t nat), antes de ser roteado (-A PREROUTING) :<br />
• O que for de origem (-s, de source) 192.168.0.0./24<br />
• E que seja do protocolo tcp (-p tcp)<br />
• E que entre pela interface eth0 (-i de input, eth0)<br />
• Com destino a porta 80 (&#8211;dport 80)<br />
Qual o alvo, o que fazer? :<br />
• Redirecionar para a porta 3128 (-j REDIRECT –to-port 3128)</p>
<p> <br />
<strong>Trabalhando com filtros de pacote</strong></p>
<p>      Há pessoas que trabalham, de cara, bloqueando tudo e liberando apenas o necessário. Há outras que trabalham liberando tudo o que necessita e bloqueia o resto, veja, é diferente&#8230;</p>
<p>Note que quando se lista uma tabela do iptables (iptables –t filter –L), você vê que a política padrão é ACCEPT:</p>
<p># iptables -t filter -L<br />
Chain INPUT (policy ACCEPT)</p>
<p>Então, vamos montar a política de que, por padrão o pacote é bloqueado.</p>
<p>iptables –P INPUT DROP<br />
iptables –P OUTPUT DROP<br />
iptables –P FORWARD DROP</p>
<p>Bloquear tudo com destino ao site www.pornografia.com</p>
<p>iptables –A FORWARD –s 192.168.0.0/24 –d www.pornografia.com –j DROP</p>
<p>iptables, adicione na tabela de encaminhamento de pacotes (iptables –A FORWARD):<br />
• Tudo o que for de origem (-s, de source, origem ) 192.168.0.0/24<br />
• e com destino a (-d, de destination, destino) www.pornografia.com<br />
• seja bloqueado (-j alvo, “o que fazer?”) DROP (bloquear, negar)<br />
Liberar tudo o que vier do site www.empresa.com.br</p>
<p>iptables –A FORWARD –s www.empresa.com.br –d 192.168.0.0/24 –j ACCEPT<br />
iptables, adicione na tabela de encaminhamento (iptables –A FORWARD):<br />
• O que vier da origem (-s www.empresa.com.br)<br />
• Com destino a minha rede interna (-d 192.168.0.0/24)<br />
• Será liberado (-j ACCEPT)<br />
Bloquear totalmente aquele cara que esta consumindo sua banda:</p>
<p>iptables –A FORWARD –s 192.168.0.15 –d 192.168.0.1 –j DROP<br />
Adicionar na tabela de encaminhamento (-A FORWARD):<br />
• o que for de origem (-s) do IP 192.168.0.15 e com destino ao gateway de internet (-d) 192.168.0.1 será bloqueado (-j DROP).<br />
Já deu um susto? Então você pode excluir a regra:</p>
<p>iptabes –D FORWARD –s 192.168.0.15 –d 192.168.0.1 –j DROP</p>
<p>Há uma forma de excluir a regra pelo seu número, para listar as regras e sua ordem fazemos:</p>
<p># iptables -t filter -nL &#8211;line-numbers<br />
26 DROP 0 &#8212; 192.168.0.15 192.168.0.1</p>
<p>E então, excluímos:</p>
<p># iptables -D FORWARD 26</p>
<p><strong>Tratamentos especiais em pacotes, TOS</strong></p>
<p>      “O tipo de serviço é um campo existente no cabeçalho de pacotes do protocolo ipv4 que tem a função especificar qual é a prioridade daquele pacote. A prioridade é definida usando o algoritmo FIFO do próprio kernel, sendo uma das alternativas de controle/priorização de tráfego das mais simples e rápidas.<br />
Uma das vantagens da utilização do tipo de serviço é dar prioridade ao tráfego de pacotes interativos (como os do ICQ, IRC, servidores de chat), etc. Com o TOS especificado, mesmo que esteja fazendo um download consumindo toda a banda de sua interface de rede, o tráfego com prioridade interativa será enviado antes, aumentando a eficiência do uso de serviços em sua máquina.” &#8211; Guia Foca Linux.<br />
Antes de começar, algumas definições:</p>
<table border="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<p align="center"><strong>Tipo de TOS</strong></p>
</td>
<td>
<p align="center"><strong>AJUSTE</strong></p>
</td>
</tr>
<tr>
<td>Espera mínima (Minimize-delay)</td>
<td>
<p align="center">16</p>
</td>
</tr>
<tr>
<td>Máximo processamento (Maximize-throughput)</td>
<td>
<p align="center">8</p>
</td>
</tr>
<tr>
<td>Máxima confiança (Maximize-reability)</td>
<td>
<p align="center">4</p>
</td>
</tr>
<tr>
<td>Customínimo (Minimize-cost)</td>
<td>
<p align="center">2</p>
</td>
</tr>
<tr>
<td>Prioridade normal (Normal-service).</td>
<td>
<p align="center">0</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>Prioridade máxima para conexões SSH:</p>
<p>iptables –t mangle –A PREROUTING –i eth1 –p tcp –-sport 22 –j TOS –-set-tos 16<br />
iptables, adicione na tabela mangle (-t mangle) antes de ser roteado (-A PREROUTING):<br />
• o que entrar pela interface eth1 (-i eth1) que for tcp (-p tcp)<br />
• com origem da porta 22 (&#8211;sport 22) dar o máximo de processamento (-j TOS –-set-tos 16)</p>
<p>Você deve ter notado, na regra de DNAT láaa em cima, há uma coisinha estranha (-p tcp -m tcp) –m tcp&#8230; o que seria isto? Módulos!</p>
<p><strong>Módulos</strong></p>
<p>Os módulos ampliam o poder do iptables, é uma forma de explandir ainda mais suas regras, afinal, já somos expert em iptables!</p>
<p>Veja alguns módulos:</p>
<table border="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<p align="center"><strong>TIPO</strong></p>
</td>
<td>
<p align="center"><strong>DESCRIÇÃO</strong></p>
</td>
</tr>
<tr>
<td>limit</td>
<td>Limita o número de vezes de uma regra</td>
</tr>
<tr>
<td>state</td>
<td>Estado da conexão, (NEW,ESTABLISHED, RELATED e INVALID “já obsoleto”)</td>
</tr>
<tr>
<td>mac</td>
<td>Isto mesmo, podemos trabalhar por endereços MAC, bacana, não?</td>
</tr>
<tr>
<td>multiport</td>
<td>Já pensou especificar 10 regras de tratamento de portas? O Multiport faz isto por você!</td>
</tr>
<tr>
<td>string</td>
<td>Dá uma espiada no conteúdo do pacote em busca de uma “string”</td>
</tr>
<tr>
<td>owner</td>
<td>Observa quem criou o pacote, trabalha apenas com a chain OUTPUT.</td>
</tr>
</tbody>
</table>
<p> <br />
<strong>A opção <em>limit</em> </strong>limita a quantidade de vezes que a regra deve ser executada em um intervalo de tempo, estremamente útil para trabalhar com tentativas de ataques. Ataque DoS (Denial of Service), entende?</p>
<p>iptables –A INPUT –p icmp &#8211;icmp-type echo-request –m limit &#8211;limit 1/s –j ACCEPT<br />
Definimos que aceitaremos pacotes de icmp (-p icmp) tipo do ping (&#8211;icmp-type echo-request) se eles forem recebidos apenas no limite de um segundo (-m limit &#8211;limit 1/s). Podemos ter s, m, h, d (segundo, minuto, hora e dia).</p>
<p>Certo, se eu desejar bloquear estes tipos de requisições, afinal, ninguém precisa saber se estamos vivos ou não, a regra seria &#8230; ?</p>
<p>iptables –A INPUT –p icmp –j DROP</p>
<p>Bloquear tudo o que entrar e que seja do tipo icmp. Esta ficou fácil, não?</p>
<p>Mas&#8230; Como ele controla isto, a quantidade de vezes&#8230; é memória, banco de dados?</p>
<p>Não, ele utiliza as flags de inicialização de um datagrama IP, elas são:</p>
<table border="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<p align="center"><strong>FLAG</strong></p>
</td>
<td>
<p align="center"><strong>Descrição</strong></p>
</td>
</tr>
<tr>
<td>ACK</td>
<td><em>Acknowledgement</em>. Informa ao receptor o próximo número da seqüência do pacote</td>
</tr>
<tr>
<td>SYN</td>
<td><em>Syncronize</em>. Utilizada para realizar o sincronismo dos números seqüênciais.</td>
</tr>
<tr>
<td>FIN</td>
<td><em>Finalização</em>. Flag utilizada para indicar a finalização de uma conexão</td>
</tr>
<tr>
<td>PSH</td>
<td><em>Push</em>. Informa ao tcp que se deve enviar todos os pacotes que estejam no buffer ao destinatário</td>
</tr>
<tr>
<td>URG</td>
<td><em>Urgent</em>. Prioridade no envio.</td>
</tr>
</tbody>
</table>
<p> </p>
<p>Para um melhor entendimento, veja:</p>
<p> </p>
<p> </p>
<p>- O Cliente envia um datagrama com a flag SYN, para o firewall, é uma nova conexão;<br />
- O servidor recebe a requisição, e responde com a dupla SYN+ACK;<br />
- Para o firewall, há uma conversa, estabilizou!</p>
<p>Fechamento de uma conexão:</p>
<p> <br />
“<em>Imagine o que aconteceria se enviássemos vários pacotes SYN forjando a origem para um Host B, este host B enviaria um pacote SYN+ACK de volta para o Host A e ficaria aguardando o estabelecimento de conexão (ora se forjamos a origem, é óbvio que nunca o receberá), este é o tipo de conexão three-way e várias requisições neste estado de ‘half-connection’ geram o famoso Syn-flood, muitas conexões abertas aguardando um pacotinho ACK de confirmação que nunca chegará.</em>”<br />
<strong>A opção state</strong> trabalha com o estado da conexão:</p>
<p>NEW: nova conexão<br />
ESTABLISHED: conexão já pertencente e estabilizada entre as duas pontas.<br />
RELATED: conexão que se relaciona com um outro pacote, por exemplo mensagens de erro.<br />
INVALID: Conexões inválidas, pacotes com problemas ou não formados corretamente.<br />
iptables –A INPUT –m state &#8211;state INVALID –i eth1 –j DROP</p>
<p>Bloqueia o que entrar (-A INPUT) pela interface eth1 (-i eth1) e com estado inválido (&#8211;state INVALID).</p>
<p><strong>A opção mac</strong> permite-nos trabalhar por este tipo de endereçamento:</p>
<p>iptables –A INPUT –m mac &#8211;mac-source 00:50:04:EE:3D:FD –j DROP</p>
<p>Bloqueia o que for do endereço mac de origem (&#8211;mac-source)</p>
<p><strong>A opção multiport</strong> permite-nos trabalhar com várias portas, por exemplo:</p>
<p>iptables -A FORWARD -p udp -m multiport &#8211;dport 5190,4000 -j DROP</p>
<p>Bloqueia o encaminhamento de mensagens udp das portas 5190 e 4000</p>
<p>iptables -A FORWARD -s 192.168.0.0/24 -p tcp -m multiport &#8211;dports domain,ftp-data,ftp,https,pop3,smtp,21 -j ACCEPT</p>
<p>Libera o encaminhamento de mensagens das portas de destino domain,ftp-data,ftp,https,pop3,smtp,21. Uma relação de portas está disponível em /etc/services</p>
<p>Se você quer liberar um range de portas, pode fazer:</p>
<p>iptables -A INPUT -p udp -i eth+ &#8211;dport 33435:33525 -j DROP</p>
<p>Bloquear tudo o que for udp e que entrar por qualquer interface (-i eth+) para as portas de 33435 até 33525. Bloqueia o traceroute =)</p>
<p>A opção string permite-nos vasculhar o conteúdo do pacote, por exemplo, bloquear o que contém a string Kazaa.</p>
<p>iptables –A INPUT –m string &#8211;string “X-Kazaa” –j DROP</p>
<p>Hum… vamos ver o que está acontecendo? Log nele!</p>
<p>iptables –A INPUT –m string &#8211;string “sexo” –j LOG &#8211;log-prefix “IPTABLES: Log da string sexo, masculino ou feminino? =)”<br />
<strong>Dicas</strong></p>
<p>Não esqueça de sempre logar e depois bloquear, sempre liberar o chefe e depois bloquear o restante da empresa, e assim por diante, pois o iptables irá ler suas regras de cima para baixo, sempre.</p>
<p>O seu arquivo de firewall nada mais é que um “shell script”, permitindo, então você fazer:</p>
<p># Redireciona VPN e TS para o PDC<br />
PORTS=”1723 3306”<br />
PROTOCOLOS=”tcp udp”<br />
IFACEWEB=”eth1”<br />
      for PORTA in $PORTS;do<br />
            for PROTO in $PROTOCOLOS;do<br />
                  $IPTABLES -t nat -A PREROUTING -p $PROTO -m $PROTO &#8211;dport $PORTA -i $IFACEWEB -j DNAT &#8211;to 192.168.0.3<br />
      done<br />
done</p>
<p><strong>Resumão</strong></p>
<p><strong># Ativando o NAT e definindo variáveis.</strong></p>
<p>echo 1 &gt; /proc/sys/net/ipv4/ip_forward<br />
IPTABLES=”/sbin/iptables”<br />
LAN=”192.168.0.0/24”<br />
IFACEWEB=”eth1”</p>
<p><strong># Apagando as regras anteriores</strong></p>
<p>$IPTABLES -t nat -F<br />
$IPTABLES -t nat -X<br />
$IPTABLES -t nat -Z<br />
$IPTABLES -t filter -F<br />
$IPTABLES -t filter -Z<br />
$IPTABLES -t filter –X<br />
<strong># Configurando NAT e redirecionamento para SQUID, NINGUEM SAI PELA</strong><strong><br />
</strong><strong># porta 80</strong><br />
$IPTABLES -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -j MASQUERADE<br />
$IPTABLES -t nat -A PREROUTING -p tcp -m tcp &#8211;dport 80 -j REDIRECT &#8211;to-ports 3128<br />
$IPTABLES -t nat -A PREROUTING -p tcp -m tcp &#8211;dport 80 -j DROP</p>
<p><strong># Liberando acesso remoto Terminal Service a uma máquina da rede. </strong><strong><br />
</strong><strong># Lembre-se, tudo o que entrar pela porta 7150 será redirecionado para </strong><strong><br />
</strong><strong># a máquina interna 192.168.0.117 na porta 3389.</strong></p>
<p>$IPTABLES -t nat -A PREROUTING -p tcp -m tcp &#8211;dport 7150 -j DNAT &#8211;to 192.168.0.117:3389</p>
<p><strong># Liberando acesso a uma determinada porta de um programa especifico </strong><strong><br />
</strong><strong># (ERP) vindas da Filial (200.200.200.200)</strong></p>
<p>$IPTABLES -A FORWARD -s 200.200.200.200 -p tcp -m tcp &#8211;dport 1494 -j ACCEPT</p>
<p><strong>#Bloqueando ping com resposta unreachable</strong></p>
<p>$IPTABLES -I INPUT -i $IFACEWEB -p icmp -j REJECT &#8211;reject-with icmp-host-unreachable</p>
<p><strong># Bloquear Bittorrent, ou outras portas, SQUID, Samba, DNS, etc&#8230;</strong></p>
<p>$IPTABLES -I INPUT -p tcp -m tcp &#8211;dport 6881:6889 -j DROP<br />
$IPTABLES -I OUTPUT -p tcp -m tcp &#8211;dport 6881:6889 -j DROP</p>
<p><strong># Bloquear conexões de algum programa que utilize algum destino ou </strong><strong><br />
</strong><strong># alguma porta de destino, KAZAA, Emule</strong></p>
<p>$IPTABLES -A FORWARD -d 216.35.208.0/24 -j DROP<br />
$IPTABLES -A FORWARD -p tcp &#8211;dport 6346 -j DROP<br />
$IPTABLES -A FORWARD -d 209.61.186.0/24 -j DROP</p>
<p> Fonte: <a href="http://www.flaviotorres.com.br/fnt/artigos/firewall_iptables.php">http://www.flaviotorres.com.br/fnt/artigos/firewall_iptables.php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizoliveira.org/linux/iptables-para-quem-nao-conhece-iptables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fazer o Crontab não enviar e-mail</title>
		<link>http://www.luizoliveira.org/linux/fazer-o-crontab-nao-enviar-e-mail/</link>
		<comments>http://www.luizoliveira.org/linux/fazer-o-crontab-nao-enviar-e-mail/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 11:22:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Servidores]]></category>

		<guid isPermaLink="false">http://www.luizoliveira.org/linux/fazer-o-crontab-nao-enviar-e-mail/</guid>
		<description><![CDATA[Às vezes, algumas tarefas que são executadas através do crontab não queremos receber informações sobre o status da tarefa, ou seja, não queremos ser avisados em caso de execução com sucesso.
Para isso, podemos utilizar um “truque” que existe para não receber esse tipo de informação. Basta acrescentar 1> /dev/null
Explicando melhor, caso a tarefa tenha sido [...]]]></description>
			<content:encoded><![CDATA[<p>Às vezes, algumas tarefas que são executadas através do crontab não queremos receber informações sobre o status da tarefa, ou seja, não queremos ser avisados em caso de execução com sucesso.<br />
Para isso, podemos utilizar um “truque” que existe para não receber esse tipo de informação. Basta acrescentar 1> /dev/null<br />
Explicando melhor, caso a tarefa tenha sido executada com sucesso, ou seja, não teve erro nenhum, as informações que ela traria, como por exemplo: “OK” ou “SUCESSO” são enviadas para o diretório “escuro” (buraco negro) do Linux o /dev/null.<br />
Linha do crontab<br />
Antiga<br />
30 2 * * * /bin/tarefa.sh<br />
Nova<br />
30 2 * * * /bin/tarefa.sh 1> /dev/null</p>
<p>Fonte: http://www.brunorusso.eti.br/dicas/diversos/fazer-o-crontab-no-enviar-e-mail/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizoliveira.org/linux/fazer-o-crontab-nao-enviar-e-mail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O antivírus mais rápido do mundo!</title>
		<link>http://www.luizoliveira.org/seguranca/o-antivirus-mais-rapido-do-mundo/</link>
		<comments>http://www.luizoliveira.org/seguranca/o-antivirus-mais-rapido-do-mundo/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 12:06:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Servidores]]></category>

		<guid isPermaLink="false">http://www.luizoliveira.org/?p=295</guid>
		<description><![CDATA[No final do mês de outubro aconteceu o lançamento na versão 2009 da família de produtos de segurança da Symantec, linha Norton, que visa o mercado de varejo e uso pessoal. Já sei... Você está estranhando o título desta matéria. Dou razão a você.]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript"><!--
google_ad_client = "pub-8718825022783336";
/* 468x60, criado 19/10/08 */
google_ad_slot = "7914182088";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
<br />
<span style="font-style: italic;">Você precisa da velocidade do Norton 2009</span> e a outra afirmação <span style="font-style: italic;">&#8230;para conhecer a <span style="font-weight: bold;">velocidade máxima</span> em segurança da informação</span> são no mínimo muito ousadas ou provocativas. A Symantec sabe que em passado recente o badalado Norton Antivírus sofreu um impacto mercadológico, pois ficou com a fama de produto lento e que “derrubava” o desempenho dos PCs nos quais era instalado. Aqui mesmo no FORUMPCs toda vez que falei de Norton Antivírus muitas pessoas me criticavam (como se fosse minha a responsabilidade pelo produto). Verdade seja dita, desde a versão 2007 o produto melhorou consideravelmente, mas ainda não tinha chegado no nível de “esperteza” de alguns bons produtos como ESET (NOD), Kapersky, Trend, etc.</p>
<p>A chamada (slogan publicitário) do Norton 2009 tocando exatamente o dedo na ferida do passado, sua velocidade e morosidade soou para mim como muito provocativa. Por outro lado só propaganda não torna um produto melhor (e mais rápido). Deveria ter um fundo de verdade nestas audaciosas afirmações, caso contrário a Symantec estaria “dando um tiro no próprio pé”!!!</p>
<p>No lançamento algumas informações obtidas foram surpreendentes. O produto foi <span style="font-weight: bold;">refeito</span>, é um novo produto, exatamente para resolver em definitivo o ponto mais criticado, sua velocidade. Foram feitas 300 melhorias objetivando somente melhor desempenho. A começar pela instalação que por definição de projeto não poderia demorar mais de um minuto para ser efetuada. Usando PCs (notebooks) comuns, fizemos uma sessão para comprovar. Demorou de 38 a 52 segundos. Neste quesito, promessa cumprida.</p>
<p>Mais algumas afirmações fortes foram comparativos feitos com outros produtos de mercado. Os dados apresentados pela Symantec foram de testes feitos pela empresa PASSMARK LTDA, empresa com expertise em benchmarks. Estes foram testes efetuados em um PC com processador Core 2 Duo E6300 (1.86 Ghz), Vista Home 32 bits, 1 Gbyte de RAM. Este PC, esta configuração, não é nada sofisticada e foi o ambiente que os dados abaixo foram obtidos pela PASSMARK.</p>
<p><img onclick="javascript:window.open('http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-11.jpg')" src="http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-11.jpg" border="0" alt="" /><br />
<span style="font-size: 9px; line-height: normal;"><span style="font-weight: bold;">Atenção o segundo gráfico não está na escala correta &#8211; fato apontado pelo colega Felipe Pessoto</span></span></p>
<p>Se não bastasse tudo isso, Windows iniciando mais rápido e tempo de “scan” bem menor que os concorrentes, a memória gasta pelo NIS 2009 (Norton Internet Security) é de apenas 7 Mbytes enquanto KAPERSKY, o produto mais leve até então ocupava apenas 23 Mbytes. EU PRECISAVA CONFERIR ISSO TUDO!!! Obtive o produto para testes e no primeiro dia de novembro eu o instalei em um de meus PCs e desde então venho utilizando para poder agora, mais e um mês depois, dividir a minha experiência com os leitores do ForumPCs.</p>
<p>Porém preciso destacar que neste PC estava usando a ótima suíte de segurança ESET (NOD 32) que tinha transformado meu notebook, muito mais ágil, em relação ao Norton 360 2008 que estava usando antes. De fato ESET era bem mais leve que o Norton 360 2008. Mas para ter uma base de comparação ainda mais “radical”, usei este notebook por quase três dias SEM ANTIVÍRUS ALGUM, para ter um referencial ainda mais rigoroso. Claro que fui extremamente cuidadoso nestes dias.</p>
<p>Após instalá-lo em meu notebook (em 50 segundos) a interface completamente renovada é o que chama a atenção. Eu sempre preferi usar um antivírus e não um pacote de segurança completo (antivírus, firewall, antispam, etc.) exatamente por ser mais leve. A segunda percepção que tive foi que surpreendentemente o notebook estava com o mesmo comportamento, agilidade, que experimentara quando estive sem antivírus no PC. A terceira descoberta foi perceber que a forma como as atualizações das vacinas acontece é totalmente diferente agora. As atualizações ocorrem várias vezes por dia!! Raras foram as vezes que vi na tela do produto que ocorrera atualização há mais de uma hora (na tela abaixo apenas 4 minutos haviam se passado desde a última atualização). Esta estratégia já vinha sendo usada por alguns produtos de segurança. Com Internet melhor, fazer várias vezes por dia implica em downloads muito pequenos e processamento do pacote de vacinas muito mais leve e imperceptível. Sem contar que se uma ameaça é descoberta e a vacina criada, agora é muito mais rápido a proteção ser instalada no PC do usuário. Isso é muito bom. Veja também na tela abaixo que há na interface do Norton um medidor de consumo de CPU (que apresenta o mesmo resultado do Task Manager) e um medidor somente do uso de CPU do próprio Norton. Isso também serve para que o usuário possa conferir em um momento de uso mais intenso do PC o quanto o Norton está usando em relação ao resto do sistema. Até para provar que em momento de lentidão não é ele o culpado!<br />
<img onclick="javascript:window.open('http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-05.jpg')" src="http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-05.jpg" border="0" alt="" /></p>
<p>Está desvendado o segredo das atualizações mais leves. Mas como o NIS 2009 consegue ser dramaticamente tão mais rápido na varredura (scan) de vírus no computador? Isso se deve ao NORTON INSIGHT, uma tecnologia que pode ser descrita da seguinte forma (usando a própria explicação do produto):</p>
<p><span style="font-style: italic;">Norton Insight aumenta o desempenho do computador ao identificar arquivos confiáveis que não requerem verificação. A verificação repetida de arquivos conhecidos é eliminada permitindo a execução mais rápida do computador.</span></p>
<p>Este meu notebook, que é absolutamente lotado de programas, vários feitos por mim mesmo, que não pode ser classificado como “típico”, obtive um índice de CONFIANÇA de 25%, ou seja, 75% dos arquivos são verificados. Mas obter de 50% a 80% de índice de confiança é o esperado em um PC típico (não o PC de um colunista do ForumPCs).<br />
<img onclick="javascript:window.open('http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-06.jpg')" src="http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-06.jpg" border="0" alt="" /></p>
<p>Mas o que mais me surpreendeu foi que na primeira varredura (scan) da minha máquina foi achado um arquivo com vírus. Menos mal que o vírus não estava ativo (era só o arquivo), mas os dois antivírus que tivera antes (Norton 360 2008 e ESET) não conseguiram achar este arquivo infectado.<br />
<img onclick="javascript:window.open('http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-02.jpg')" src="http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-02.jpg" border="0" alt="" /></p>
<p>E se não bastasse isso, logo no primeiro dia que levei meu notebook um uma empresa, após alguns minutos usando a rede da mesma, fui brindado com uma “surpresa”, a tentativa de infecção de meu pendrive, também protegido pelo NIS, que deteve a ameaça prontamente.<br />
<img onclick="javascript:window.open('http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-03.jpg')" src="http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-03.jpg" border="0" alt="" /></p>
<p>E era um vírus dos mais “chatos” e de alto risco!<br />
<img onclick="javascript:window.open('http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-04.jpg')" src="http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-04.jpg" border="0" alt="" /></p>
<p>A eficácia na detecção de vírus é crítica para o usuário. A entidade <a class="postlink" href="http://www.av-comparatives.org/" target="_blank">AV-Comparatives.org</a> realizou testes comparativos que indicaram números interessantes. Embora o Norton 2009 não seja o produto que mais ameaças encontrou, foi o mais preciso. Um dos produtos apresentou 63 falsos positivos, que é algo muito ruim para o usuário. E velocidade de varredura do Norton 2009 foi a mais rápida.<br />
<img onclick="javascript:window.open('http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-07.jpg')" src="http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-07.jpg" border="0" alt="" /></p>
<p>Além de toda a competência no NIS 2009 para achar e proteger contra vírus, o firewall foi muito aprimorado, principalmente na sua administração que pode ser feita em vários níveis. O usuário leigo jamais irá alterar suas configurações. Os usuários intermediários e os avançados têm telas progressivamente mais abrangentes para adequar o comportamento do produto às suas necessidades.</p>
<p>O NIS também tem o gerenciador de identidade para que não sejam gravados cookies de rastreamento de dados no PC e ele faz a inserção de dados em formulários como usuário, senha, logins, etc. em determinados sites.</p>
<p>Apesar de eu ter o assunto SPAM bem resolvido em meu Outlook (eu uso o recurso do Outlook que só aceita a lista de confiança – só cai na minha caixa de entrada e-mails de pessoas que eu autorizei alguma vez) resolvi testar o AntiSpam do NIS 2009. Desliguei o recurso do Outlook e deleguei esta tarefa para o NIS. Existe um processo interessante chamado “TREINAR o NIS” que analisa sua caixa postal (as pastas que você escolher) e usa os remetentes destes e-mails para alimentar uma lista de confiança do NIS e também para avaliar o perfil dos e-mails que você recebe habitualmente e interpretar no futuro quais ele deve bloquear.<br />
<img onclick="javascript:window.open('http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-08.jpg')" src="http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-08.jpg" border="0" alt="" /></p>
<p>Eu esperava que o NIS 2009 resolvesse um dos meus problemas que ainda persiste em relação aos SPAMs. Ainda caem lixos na minha caixa de entrada, pois são e-mails cujo remetente sou “eu mesmo”. Claro que é um remetente forjado pelo diabólico spammer. Imaginei que bastaria eu bloquear a mim mesmo, colocar-me na lista “negra” para que e-mails que recebo enviados por mim mesmo sejam considerado spam. Mas não foi bem isso que o NIS 2009 entendeu.<br />
<img onclick="javascript:window.open('http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-09.jpg')" src="http://www.forumpcs.com.br/galeria/albums/userpics/36238/nis2009-09.jpg" border="0" alt="" /></p>
<p>O NIS me desaconselhou a me colocar na lista negra pois eu já estava na lista branca&#8230; Infelizmente vou ter que continuar a receber propaganda de medicamentos de origem suspeita em minha caixa postal. De toda forma vou seguir usando este recurso, pois pelo que entendi há a necessidade de certo tempo de “aprendizagem” do produto. Se isso se resolver eu retorno e atualizarei o texto.</p>
<p>Eu vejo que a Symantec, usando um termo bem popular, “deu a cara para bater” e foi bastante provocativa com a chamada para a versão nova de seu produto. De fato é um produto NOVO, nova engenharia, novos algoritmos, que se mostra realmente, até agora o mais rápido e eficiente do mercado. Espera-se que a concorrência se mexa e tente superar o Norton 2009. Isso é bom e muito positivo. Este segmento é muito complicado. Pensar que em 1988 havia apenas DOIS vírus, em 2000 eram 11.000 e que em 2008 estima-se que no final do ano serão mais de 1.2 milhões de vírus conhecidos, os produtos PRECISAM evoluir tecnologicamente. A própria Symantec já sinalizou que para 2010 terá novos mecanismos e tecnologias para poder atender a esta explosão da quantidade de ameaças. Afinal conferir assinaturas (as tais “vacinas”) para milhões de ameaças será cada vez mais difícil. Aos “incrédulos” de plantão, aqueles que sempre criticaram o Norton no passado, mesmo sem testá-lo, fica a minha sugestão e o convite para que experimentem o produto (há no site da Symantec uma versão para testes que funciona por quinze dias sem registro). Dessa vez, até que a concorrência responda, e como é BOA esta competição, a Symantec tem o antivírus mais rápido do mundo!!</p>
<p><span style="font-style: italic;">PS : Eu me esqueci de contar que o assunto velocidade é mesmo o mote desta versão. Quem compra a versão de caixinha do produto (varejo) ganha uma cópia do jogo NEED FOR SPEED UNDERGROUND!![i]</span></p>
<p>Fonte: <a href="http://www.forumpcs.com.br/coluna.php?b=247815">forumpcs</a><br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8718825022783336";
/* 468x60, tecnologia */
google_ad_slot = "0915315819";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizoliveira.org/seguranca/o-antivirus-mais-rapido-do-mundo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implementando quotas de disco no Linux</title>
		<link>http://www.luizoliveira.org/linux/servidores/implementando-quotas-de-disco-no-linux/</link>
		<comments>http://www.luizoliveira.org/linux/servidores/implementando-quotas-de-disco-no-linux/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 18:07:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Servidores]]></category>

		<guid isPermaLink="false">http://www.luizoliveira.org/?p=115</guid>
		<description><![CDATA[O Quota é um recurso muito útil em servidores de terminais, servidores web e servidores de arquivos com muitos usuários. Imagine, por exemplo, um servidor LTSP com 20 terminais, usado por 300 usuários diferentes. Como impedir que alguns poucos usuários comecem a baixar um monte de filmes e músicas em MP3, entupindo o HD do [...]]]></description>
			<content:encoded><![CDATA[<p>O Quota é um recurso muito útil em servidores de terminais, servidores web e servidores de arquivos com muitos usuários. Imagine, por exemplo, um servidor LTSP com 20 terminais, usado por 300 usuários diferentes. Como impedir que alguns poucos usuários comecem a baixar um monte de filmes e músicas em MP3, entupindo o HD do servidor?</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Através do Quota é possível limitar a quantidade de espaço em disco disponível para cada usuário, reservando 50 MB para cada aluno, por exemplo. O uso mais comum do Quota é utilizar uma partição &#8220;/home&#8221; separada e ativar o Quota para ela. Isso faz todo o sentido, pois, por default, os usuários podem gravar arquivos apenas dentro da pasta home. Entretanto, é possível usar o Quota em qualquer partição, como, por exemplo, em um servidor web compartilhado entre vários virtual hosts, onde a partição de dados está montada no diretório &#8220;/var/www&#8221;.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Ao ser ativado, o Quota procura por todos os arquivos de cada usuário dentro da partição, não por uma pasta específica. O sistema de Quotas funciona mesmo que os arquivos de um determinado usuário estejam espalhados por várias pastas.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Originalmente, apenas os sistemas de arquivos EXT2 e EXT3 ofereciam suporte ao Quota nativamente, mas, a partir do Kernel 2.6 (usado nas distribuições atuais), foi incluído também suporte para o ReiserFS. É possível instalar o suporte a Quota no ReiserFS em distribuições antigas, baseadas no Kernel 2.4, através de um patch para o Kernel.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para usar o Quota, o ideal é dividir o HD em três partições: uma partição menor (de 10 ou 20 GB) para a instalação do sistema, a partição swap e outra partição maior (englobando o restante do espaço do HD) para o diretório &#8220;/var/www&#8221;, &#8220;/home&#8221; ou outra pasta onde ficarão armazenados os arquivos dos usuários, para a qual o quota será ativado.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No Quota existem dois limites que podem ser estabelecidos, o <strong>soft limit</strong> e o <strong>hard limit</strong>. O hard limit é o limite de espaço em si, digamos, 1000 MB para cada usuário. Quando o hard limit é atingido, a gravação de novos arquivos é bloqueada, se necessário interrompendo a transferência:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O soft limit é um limite de advertência, um pouco inferior ao valor do hard limit. Se o hard limit é de 1000 MB, o soft limit poderia ser 500 ou 800 MB, por exemplo. Sempre que superar o soft limit, o usuário receberá uma mensagem de alerta, mas ainda poderá gravar mais dados até que atinja o hard limit. Você pode especificar também um <strong>grace period</strong>, que será o tempo máximo em que o usuário poderá ficar acima do soft limit (uma semana, por exemplo).</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Passado o período, o usuário será obrigado a apagar alguma coisa e voltar a ocupar menos que o valor estabelecido no soft limit antes de poder gravar qualquer novo arquivo. Nesse caso, a conta fica apenas temporariamente bloqueada para a gravação de novos arquivos, nenhum arquivo do usuário é deletado pelo Quota.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Um problema comum relacionado ao uso do Quota em servidores de terminais é que o KDE deixa de abrir quando o limite de espaço do usuário é atingido; ele precisa sempre de algum espaço disponível para criar os arquivos temporários que armazenam as informações da sessão. Nesses casos, você (administrador) vai precisar deletar manualmente alguns arquivos ou aumentar a quota do usuário para que ele possa voltar a usar a conta.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Você pode estabelecer os mesmos limites também para os grupos e inclusive combinar as duas limitações. Você pode, por exemplo, permitir que cada usuário do grupo &#8220;alunos&#8221; use 5 GB de espaço em disco, desde que o grupo todo não use mais do que 50 GB.</p>
<h2 class="western" style="page-break-before: always;">Configuração inicial</h2>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
Para que o Quota funcione, é necessário instalar os pacotes &#8220;<strong>quota</strong>&#8221; e &#8220;<strong>quotatool</strong>&#8220;, que contêm um conjunto de utilitários usados para configurar e verificar as quotas de disco. No Debian, os dois podem ser instalados via apt-get:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># apt-get install quota<br />
# apt-get install quotatool</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No Fedora, você precisa apenas instalar o pacote &#8220;quota&#8221; usando o yum:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># yum install quota</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Em seguida, é necessário carregar o módulo &#8220;<strong>quota_v2</strong>&#8220;, que ativa o suporte necessário no Kernel:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># modprobe quota_v2</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para que ele seja carregado automaticamente durante o boot, adicione a linha &#8220;<strong>quota_v2</strong>&#8221; no final do arquivo &#8220;<strong><span style="font-style: normal;">/etc/modules</span></strong>&#8220;, ou adicione o próprio comando &#8220;modprobe quota_v2&#8243; no final do arquivo &#8220;/etc/rc.d/rc.local&#8221; ou &#8220;/etc/init.d/bootmisc.sh&#8221; (esse passo não é necessário nas versões recentes do Fedora, onde o suporte a Quota vem compilado no executável principal do Kernel).</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com o módulo carregado, o primeiro passo da configuração é alterar a entrada no fstab referente à partição, de modo que o suporte a quotas de disco seja ativado. Abra o arquivo &#8220;<strong>/etc/fstab</strong>&#8220;, localize a linha referente à partição e adicione os parâmetros &#8220;usrquota,grpquota&#8221; logo após o &#8220;defaults&#8221;. Se você está ativando o Quota para a partição &#8220;/home&#8221;, por exemplo, a linha seria parecida com:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">/dev/hda2 <strong>/home </strong>ext3 defaults 0 2</span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Depois da alteração, a linha ficaria:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">/dev/hda2 /home ext3 defaults,<strong>usrquota,grpquota</strong> 0 2</span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Ao usar uma partição formatada em ReiserFS, a linha ficaria:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">/dev/hda2 /home reiserfs defaults,<strong>usrquota,grpquota</strong> 0 2</span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No caso de um servidor web, onde os diretórios dos sites são concentrados na pasta &#8220;/var/www/&#8221;, a configuração seria exatamente a mesma, mudando apenas a pasta onde a partição (onde as quotas serão aplicadas) será montada.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Se o diretório home (ou qualquer outro diretório onde você deseja aplicar as quotas) faz parte do diretório raiz e você deseja primeiro migrá-lo para uma partição separada, o processo é o seguinte:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">a) Instale o novo HD, particione-o e formate a partição de destino.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">b) Monte a partição de destino em um diretório temporário usando o comando mount, como em:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># mount /dev/sdb2 /mnt/sdb2</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">c) Certifique-se de que nenhum usuário ou processo está usando o servidor. Se necessário, reinicie a máquina e desconecte-a da rede.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">d) Copie todos os arquivos do diretório que está sendo movido para o raiz da nova partição, usando o comando &#8220;cp -a&#8221; (que copia recursivamente e mantém as permissões de acesso), como em:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># cp -a /home/* /mnt/sdb2/</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">e) Desmonte a partição e monte-a novamente no diretório de destino, como em:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># umount /mnt/sdb2<br />
# mount /dev/sdb2 /home</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">f) Verifique se todos os arquivos e diretórios foram copiados para os locais corretos. Montar a partição sobre o diretório antigo não subscreve os arquivos antigos, que ficam apenas ocultos. Se algo der errado, você pode restaurar o diretório anterior simplesmente desmontando a nova partição.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">g) Com tudo verificado, adicione a entrada no &#8220;/etc/fstab&#8221;, especificando a partição, o diretório onde ela ficará montada, o sistema de arquivos e os parâmetros do Quota, como em:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">/dev/sdb2 /home ext3 defaults,usrquota,grpquota 0 2</span></p>
<p class="western" style="margin-top: 0.4cm;" align="justify">h) Reinicie o micro (ou remonte a partição) e continue com a configuração do Quota, seguindo os passos a seguir. <img src='http://www.luizoliveira.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Em seguida, você deve criar os arquivos &#8220;<strong>aquota.user</strong>&#8221; e &#8220;<strong>aquota.group</strong>&#8221; (onde ficam armazenadas as configurações do Quota) no diretório raiz da partição. Se você está ativando o Quota para a partição montada no /home, então os dois arquivos serão &#8220;/home/aquota.user&#8221; e &#8220;/home/aquota.group&#8221;.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Por enquanto, vamos apenas criar dois arquivos vazios, usando o comando touch. É importante que ambos fiquem com permissão de acesso &#8220;600&#8243;, de modo que apenas o root possa acessá-los ou fazer modificações. Os comandos são executados com a partição montada:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># touch /home/aquota.user<br />
# chmod 600 /home/aquota.user<br />
# touch /home/aquota.group<br />
# chmod 600 /home/aquota.group</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Depois da configuração inicial, é recomendável reiniciar o servidor, para que os scripts de inicialização se encarreguem de formatar os dois arquivos, montar a partição usando os parâmetros corretos e outros passos necessários.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Naturalmente, é possível também aplicar as alterações sem reiniciar o servidor. Nesse caso, é necessário fechar todos os programas e serviços que estejam acessando arquivos dentro da partição e remontá-la (para que sejam aplicados os parâmetros incluídos no fstab) usando o parâmetro &#8220;-o remount&#8221; do mount, como em:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># mount -o remount /home</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para verificar se a partição foi montada corretamente, usando os parâmetros do quota, execute o comando &#8220;mount&#8221; (sem parâmetros) e veja se o &#8221; usrquota,grpquota&#8221; adicionados ao fstab aparecem nas propriedades da partição:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># mount</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">/dev/hda1 on / type ext3 (rw)<br />
&#8230;<br />
/dev/hda2 on /home type ext3 (rw,usrquota,grpquota)</span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Os arquivos &#8220;aquota.user&#8221; e &#8220;aquota.group&#8221; devem ser formatados em um formato especial antes de poderem ser usados pelo quota. Se você reiniciou o sistema depois de criar os arquivos, provavelmente o script de inicialização do quota já deve ter feito isso, caso contrário, é necessário rodar o comando &#8220;quotacheck&#8221; para que ele faça seu trabalho:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># quotacheck -vagum </strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O quotacheck faz a verificação inicial dos arquivos e usuários, gerando uma tabela oculta que lista os arquivos de posse de cada usuário. Essa tabela é usada pelo Quota para checar o espaço ocupado por cada um e é atualizada em tempo real conforme novos arquivos são gravados.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Da primeira vez que ele é executado, exibe uma mensagem de erro avisando que os arquivos &#8220;aquota.user&#8221; e &#8220;aquota.group&#8221; estão danificados (afinal, eles são arquivos vazios), mas isso é esperado. A função dele é justamente corrigir o problema:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">quotacheck: WARNING &#8211; Quotafile /home/aquota.user was probably truncated. Cannot save quota settings&#8230;<br />
quotacheck: WARNING &#8211; Quotafile /home/aquota.group was probably truncated. Cannot save quota settings&#8230;<br />
quotacheck: Scanning /dev/hda2 [/home] done<br />
quotacheck: Checked 36 directories and 331 files</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Depois de executá-lo, você perceberá que os arquivos &#8220;aquota.user&#8221; e &#8220;aquota.group&#8221; aumentaram de tamanho, indo dos zero bytes iniciais para alguns kbytes, sinal de que o quotacheck fez seu trabalho:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># ls -lh /home</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">-rw&#8212;&#8212;- 1 root root 7,0K 2008&#8211;01-25 08:24 aquota.group<br />
-rw&#8212;&#8212;- 1 root root 7,0K 2008&#8211;01-25 08:24 aquota.user<br />
&#8230;</span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com tudo pronto, ative o uso das quotas usando o comando &#8220;quotaon&#8221;, seguido da pasta onde está montada a partição, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># quotaon /home</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Se precisar desativar temporariamente o uso das quotas, use o comando &#8220;quotaoff&#8221;, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># quotaoff /home</strong></span></p>
<h2 class="western" style="page-break-before: always;">Definindo as quotas com o Webmin</h2>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
Em seguida, falta apenas definir as quotas. A forma mais prática é utilizar o Webmin, que oferece módulos para configurar os mais diversos servidores. Alguns são desnecessariamente complicados, mas outros (como no caso do Quota) são simples de usar e realmente facilitam o trabalho de configuração.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O webmin não faz parte dos repositórios oficiais do Debian (a partir do Etch), do Fedora nem do CentOS, mas isso não é um grande problema, já que você pode encontrar pacotes para as três distribuições no <a href="http://webmin.com/">http://webmin.com</a>, o site oficial do projeto.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Ao usar uma distribuição derivada do Debian, baixe o pacote .deb e instale-o usando o dpkg, não esquecendo de rodar o &#8220;apt-get -f install&#8221; em seguida para resolver qualquer eventual problema de dependências, como em:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># dpkg -i webmin_1.420_all.deb<br />
# apt-get -f install</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Depois de instalado, inicie o Webmin com o comando:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># /etc/init.d/webmin start</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No caso do Fedora e do<span><span style="font-family: Bitstream Vera Sans, sans-serif;"> CentOS, baixe o pacote usando o link &#8220;Download: RPM&#8221;, instale-o usando o &#8220;rpm -Uvh&#8221; e, em seguida, inicie o serviço</span></span>, como em:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># rpm -Uvh webmin-1.420-1.noarch.rpm<br />
# service webmin start</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span>O Webmin não é um programa gráfico no sentido tradicional, mas sim uma interface de configuração que você acessa usando o navegador. Isso permite que ele seja usado remotamente ou mesmo usado em servidores sem o ambiente gráfico instalado. </span>Para acessá-lo, abra o navegador e acesse o endereço: <a href="https://127.0.0.1:10000/"><strong>https://127.0.0.1:10000</strong></a></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O navegador exibe um aviso sobre a autenticidade do certificado. Isso é normal, pois o Webmin utiliza uma conexão criptografada (https) e gera um certificado self-signed durante a instalação, daí o aviso.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Na tela de login do Webmin, logue-se usando o login &#8220;root&#8221; e a senha de root da máquina. Se preferir, você pode trocar a senha de root do Webmin (de forma que as duas senhas sejam diferentes) na opção &#8220;Webmin &gt; Webmin Users&#8221;.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Por padrão, o Webmin só pode ser acessado localmente. Para acessar a partir de outras máquinas da rede, inclua os endereços autorizados dentro da opção &#8220;Webmin &gt; Webmin Configuration &gt; IP Access Control&#8221;. Você pode também fazer com que a interface fique em português no &#8220;Webmin &gt; Webmin Configuration &gt; Language&#8221;.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Depois de logado, acesse a seção &#8220;<strong>System &gt; Disk Quotas</strong>&#8220;. Comece clicando no &#8220;Enable Quotas&#8221;, isso faz com que ele realize uma varredura inicial, calculando o espaço ocupado por cada usuário, o que pode demorar alguns minutos em partições com muitos arquivos. Depois de tudo ativado, chegamos finalmente à tela inicial de configuração:</p>
<p> </p>
<p> </p>
<p> </p>
<p>Aqui você tem a opção de configurar quotas individuais para cada usuário (/home users) ou quotas para grupos de usuários (/home groups). Os valores são informados em blocos; o mais comum é que cada bloco tenha 1 KB, mas o tamanho pode variar de 512 a 4096 bytes, de acordo com o tamanho da partição e do sistema de arquivos usado. Do lado direito você tem a opção de limitar também o número de arquivos que o usuário pode criar, opção menos usada.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O espaço ocupado por cada usuário é recalculado periodicamente, mas você pode atualizar as informações a qualquer momento clicando no &#8220;Check Quotas&#8221;. Uma vez configurado, o Quota fica residente e é reativado automaticamente durante o boot, no momento em que a partição é montada. Não estranhe caso o sistema fique alguns minutos parado durante o &#8220;Checking quotas&#8221; a cada boot; isso é normal, pois é necessário refazer a busca de arquivos.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No caso do <strong>Fedora</strong>, o SSL não é ha<span>bilitado por padrão. Por isso, você deve acessar usando http, como em: </span><a href="http://127.0.0.1:10000/"><strong>http://127.0.0.1:10000</strong></a></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O script de instalação do pacote .rpm não define a senha de acesso automaticamente, como no caso do pacote para o Debian, por isso é necessário definir a senha manualmente logo depois da instalação usando o script &#8220;/usr/libexec/webmin/changepass.pl&#8221;, que deve ser executado como root, especificando a localização da configuração do webmin, o usuário (do webmin) e a senha a ser definida, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># /usr/libexec/webmin/changepass.pl /etc/webmin admin KWVYiJ5U</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Não existem muitos problemas em acessar o Webmin sem encriptação localmente, mas se você pretende acessá-lo a partir de outros micros, crie um túnel usando o SSH (veja detalhes no capítulo 10). Se preferir ativar o SSL no Webmin (de forma a poder acessar via https), você pode seguir as instruções do link: <a href="http://webmin.com/ssl.html">http://webmin.com/ssl.html</a>.</p>
<h2 class="western" style="page-break-before: always;">Definindo as quotas manualmente</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
É possível também definir as quotas via linha de comando, usando o comando &#8220;edquota&#8221;. Ele é uma ferramenta bastante rudimentar, mas funcional, que usa um editor de texto pré-definido para exibir e permitir a alteração das quotas.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O primeiro passo é escolher o editor que será usado, definindo a variável &#8220;EDITOR&#8221;, que pode conter o nome de qualquer editor de linha de comando (que esteja instalado), como o joe, mcedit, pico, nano ou vi, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># EDITOR=joe </strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para editar a quota para um usuário use a opção &#8220;-u&#8221;, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># edquota -u gdh</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Ele exibe um arquivo de texto, usando o editor escolhido, contendo campos com a utilização atual, os limites para blocos e os limites para o número de arquivos:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O que você faz aqui é editar os valores dos campos referentes aos limites, salvar o arquivo e sair do editor. Ao fazer isso, o edquota checa as mudanças feitas e as aplica. Note que os dois primeiros campos &#8220;soft&#8221; e &#8220;hard&#8221; da esquerda para a direita contêm os limites de blocos (ou seja, o espaço em disco que pode ser usado), enquanto os campos seguintes indicam os limites para o número de arquivos.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Os únicos valores editáveis dentro do arquivo são os 4 campos com os limites. Os demais (como o número de blocos usados) são exibidos apenas a título de informação. Você até pode alterar estes campos (afinal, trata-se de um arquivo de texto simples), mas as alterações são ignoradas pelo edquota.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Por default, cada bloco corresponde a 1 KB, de forma que o valor &#8220;2000000&#8243; corresponde a 2 GB, mas isso pode variar de acordo com as opções usadas ao formatar a partição. Se quiser checar, use o comando &#8220;fdisk -l&#8221; (como root). Ele mostra detalhes sobre as partições, incluindo o tamanho e o número de blocos.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Continuando, você pode editar também as quotas para os grupos, usando o parâmetro &#8220;-g&#8221;, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># edquota -g alunos</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para alterar o grace period, use o parâmetro &#8220;-t&#8221; (sem argumentos), como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># edquota -t</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Ele exibe outro arquivo de texto, dessa vez oferecendo as opções &#8220;Block grace period&#8221; (referente ao soft limit para blocos) e o Inode grace period (que se aplica ao soft limit para o número de arquivos, caso usado). O tempo pode ser especificado em dias (days), horas (hours), minutos (minutes), ou segundos (seconds), como em &#8220;7days&#8221;, &#8220;12hours&#8221; ou &#8220;5minutes&#8221; (sempre sem espaço):</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para ver um relatório com as quotas definidas para cada usuário e o espaço atualmente ocupado por cada um, use o comando &#8220;repquota&#8221;, seguido pela pasta (e não o device) onde as quotas foram ativadas, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># repquota /home</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O relatório é exibido no próprio terminal, usando uma formatação simples, com um usuário por linha:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Como pode ver, o webmin facilita bastante a configuração, eliminando parte do trabalho manual, mas é perfeitamente possível se virar com os comandos de modo texto quando ele não estiver disponível.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizoliveira.org/linux/servidores/implementando-quotas-de-disco-no-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalando um servidor FTP</title>
		<link>http://www.luizoliveira.org/linux/servidores/instalando-um-servidor-ftp/</link>
		<comments>http://www.luizoliveira.org/linux/servidores/instalando-um-servidor-ftp/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 18:03:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Servidores]]></category>

		<guid isPermaLink="false">http://www.luizoliveira.org/?p=113</guid>
		<description><![CDATA[O servidor de FTP mais usado no Linux é o Proftpd, disponível em quase todas as distribuições. O funcionamento do FTP é bem mais simples que o do Samba ou SSH, por isso ele é usado como uma forma simples de disponibilizar arquivos na internet ou mesmo dentro da rede local, sem muita segurança.
A principal [...]]]></description>
			<content:encoded><![CDATA[<p>O servidor de FTP mais usado no Linux é o Proftpd, disponível em quase todas as distribuições. O funcionamento do FTP é bem mais simples que o do Samba ou SSH, por isso ele é usado como uma forma simples de disponibilizar arquivos na internet ou mesmo dentro da rede local, sem muita segurança.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A principal limitação do protocolo FTP é que todas as informações são transmitidas de forma não encriptada, como texto puro, incluindo os logins e senhas. Ou seja, alguém capaz de sniffar a conexão, usando um programa como o Ethereal, veria tudo que está sendo transmitido. Para aplicações onde é necessário ter segurança na transmissão dos arquivos, é recomendável usar o <strong>SFTP</strong>, o módulo do SSH que permite transferir arquivos de forma encriptada. Apesar disso, se você quiser apenas criar um repositório com alguns arquivos para download ou manter um servidor público como o Ibiblio.org, então o FTP é mais interessante, por ser mais simples de usar.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O servidor aceita conexões remotas usando os logins dos usuários cadastrados na máquina. Lembre-se de que, para adicionar novos usuários, você pode usar o comando <strong>adduser</strong> ou algum utilitário de administração incluído na distribuição, como o system-config-users, o users-admin ou o <span>kuser</span>.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Não é difícil instalar o Proftpd, basta procurar pelo pacote &#8220;proftpd&#8221; na distribuição usada, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><strong><span style="font-family: Bitstream Vera Sans Mono;"># apt-get install proftpd<br />
# yum install proftpd</span></strong><br />
ou:<br />
<strong><span style="font-family: Bitstream Vera Sans Mono;"># urpmi proftpd</span></strong></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No Debian, durante a instalação do pacote do Proftpd, geralmente são feitas algumas perguntas. A primeira é se você deseja deixar o servidor FTP ativo em modo <strong>standalone</strong> ou em modo <strong>inetd</strong>.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O <span>standalone</span> é mais seguro e mais rápido, enquanto o inetd faz com que ele fique ativo apenas quando acessado, economizando cerca de 400 KB de memória RAM (que fazem pouca diferença hoje em dia). O modo standalone é a opção recomendada.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Você terá também a opção de ativar o <strong>acesso anônimo</strong>, que permite acessos anônimos (somente leitura) na pasta &#8220;/home/ftp&#8221;, onde você pode disponibilizar alguns arquivos para acesso público. Nesse caso, os usuários fazem login no servidor usando a conta &#8220;<strong>anonymous</strong>&#8221; e um endereço de e-mail como senha. Caso prefira desativar o acesso anônimo, apenas usuários com login válido na máquina poderão acessar o FTP.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-style: normal;">Depois de concluída a instalação, o servidor fica ativo por default, é inicializado automaticamente durante o boot e pode ser controlado manualmente através do serviço &#8220;proftpd&#8221;, como em</span> &#8220;/etc/init.d/proftpd start&#8221;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A configuração manual do servidor FTP é feita através do arquivo &#8220;<strong>/etc/proftpd/proftpd.conf</strong><span>&#8220;</span>. Um arquivo configurado no CentOS pode ser usado no Mandriva (por exemplo), ou vice-versa; afinal, independentemente de estar usando o Debian, Fedora ou o Mandriva, o proftpd será sempre o mesmo.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Sempre que fizer alterações no arquivo, reinicie o servidor para que elas entrem em vigor. Para isso, use o comando &#8220;<strong><span style="font-family: Bitstream Vera Sans Mono;">/etc/init.d/proftpd restart</span></strong>&#8220;.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No caso do Debian Etch e do Ubuntu 6.10 em diante, o servidor é configurado para utilizar endereços IPV6 por padrão, o que faz com que ele exiba uma mensagem de erro e aborte a inicialização caso você não tenha configurado a rede IPV6.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para solucionar o problema, abra o arquivo &#8220;/etc/proftpd.conf&#8221; e substitua a linha:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">UseIPv6 on</span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">por:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">UseIPv6 off</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Uma das primeiras opções do arquivo é a opção <strong>Port</strong>, que permite alterar a porta usada pelo FTP. O padrão é usar a porta 21, mas muitos serviços de banda larga bloqueiam as portas 21 e 80 para que os usuários não rodem servidores. Nesse caso, você pode mudar para a porta 2121, por exemplo:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"># Port 21 is the standard FTP port.<br />
<strong>Port</strong> <strong>2121</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Ao mudar a porta padrão do servidor, os usuários precisarão indicar manualmente a porta no cliente de ftp ou navegador, como em: ftp://200.234.213.23:2121.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Em seguida, vem a opção <strong>MaxClients</strong><span>, que limita o número de conexões simultâneas ao servidor FTP. Esta opção trabalha em conjunto com a limitação de banda (veja a seguir). Você pode limitar os downloads de cada usuário a um máximo de 10 KB/s </span>e limitar o servidor a 3 usuários simultâneos, por exemplo. Assim, o FTP consumirá um máximo de 30 KB/s do link do servidor.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong>MaxClients 30</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Se você quiser limitar o acesso dos usuários, prendendo-os em seus respectivos diretórios home, adicione a linha &#8220;<strong>DefaultRoot ~</strong>&#8221; no final do arquivo. Lembre-se de que no Linux o &#8220;~&#8221; é um curinga, que é automaticamente substituído pela pasta home do usuário que está logado:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong>DefaultRoot ~</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para ativar a limitação de banda, adicione a linha &#8220;TransferRate RETR <strong>8</strong>:10&#8243;, onde o &#8220;8&#8243; pode ser substituído pela taxa desejada, em KB/s, por usuário:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong>TransferRate RETR 8:10</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A princípio, apenas os usuários que tiverem logins válidos no servidor poderão acessar o FTP. Caso você queira abrir um FTP público, adicione estas linhas no arquivo de configuração. Elas ficam comentadas no arquivo original:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;Anonymous ~ftp&gt;<br />
User ftp<br />
Group nogroup<br />
UserAlias anonymous ftp<br />
DirFakeUser on ftp<br />
DirFakeGroup on ftp<br />
RequireValidShell off<br />
<strong>MaxClients 20<br />
DisplayLogin welcome.msg<br />
</strong>DisplayFirstChdir .message<br />
&lt;Directory *&gt;<br />
&lt;Limit WRITE&gt;<br />
DenyAll<br />
&lt;/Limit&gt;<br />
&lt;/Directory&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong>&lt;Directory incoming&gt;<br />
Umask 022 022<br />
&lt;Limit READ WRITE&gt;<br />
DenyAll<br />
&lt;/Limit&gt;</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong>&lt;Limit STOR&gt;<br />
AllowAll<br />
&lt;/Limit&gt;<br />
&lt;/Directory&gt;<br />
</strong>&lt;/Anonymous&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A linha &#8220;<strong>MaxClients</strong><span>&#8221; determina o número máximo de usuários anônimos que poderão se logar simultaneamente no servidor. Essa opção é separada da MaxClients principal, que limita o número de usuários com login válido. Você pode permitir 30 usuários válidos e mais 20 anônimos, por exemplo.</span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-style: normal;"><span>A opção &#8220;</span><strong>DisplayLogin welcome.msg</strong><span>&#8221; indica a mensagem de boas-vindas que é mostrada quando os usuários fazem login no FTP. Por padrão, é exibido o conteúdo do arquivo &#8220;</span><strong>/home/ftp/welcome.msg</strong></span>&#8220;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Os usuários anônimos têm acesso apenas aos arquivos dentro da pasta &#8220;<strong>/home/ftp</strong>&#8220;, que é visto pelo cliente FTP como o diretório raiz do servidor. Graças a isso, eles não têm como ver, muito menos alterar outros arquivos do sistema.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A seção <strong>&#8220;Directory incoming</strong>&#8221; mais abaixo cria uma pasta de upload (por padrão a &#8220;/home/ftp/incoming&#8221;), onde os anônimos poderão dar upload de arquivos. A idéia é que você veja periodicamente o conteúdo da pasta e mova o que for útil para a pasta &#8220;/home/ftp&#8221;, para que o arquivo fique disponível para download.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Por padrão, os anônimos não podem ver o conteúdo da pasta incoming, podem apenas dar upload. Se necessário, crie a pasta incoming usando os comandos:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"># <strong>mkdir /home/ftp/incoming</strong><br />
# <strong>chown nobody:nogroup /home/ftp/incoming</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para acessar o seu servidor, os clientes devem usar o login &#8220;anonymous&#8221; ou &#8220;ftp&#8221;, usando um endereço de e-mail qualquer como senha.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Uma medida comum ao ativar o upload para os usuários anônimos é usar uma partição separada para o FTP, para evitar que algum engraçadinho fique dando upload durante a madrugada até lotar o HD do servidor. Nesse caso, você precisa apenas adicionar uma linha no arquivo &#8220;<strong>/etc/fstab</strong>&#8221; para que a partição desejada seja montada durante o boot. Esta linha de exemplo montaria a partição /dev/hda3, formatada em ReiserFS na pasta /home/ftp:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong>/dev/hda3 /home/ftp reiserfs defaults 0 2</strong></span></p>
<h2 class="western" style="page-break-before: always;">Criando usuários e ajustando as permissões de acesso</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
Imagine agora que você quer uma configuração um pouco mais complexa, com vários usuários, cada um tendo acesso a apenas uma pasta específica. Esta configuração pode ser usada em conjunto com os virtual hosts do Apache (permitindo que os responsáveis possam atualizar os arquivos do site), ou em situações em que seu servidor hospeda arquivos de diversos usuários ou projetos diferentes.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O responsável pelo <strong>projeto1</strong> pode dar upload para a pasta &#8220;<strong>/home/ftp/projeto1</strong>&#8221; (por exemplo), mas não deve ter acesso a outras pastas nem a outros arquivos do sistema. Os usuários anônimos terão acesso às pastas de todos os projetos, mas, naturalmente, apenas para leitura.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A forma mais simples de fazer isso é criar os usuários que terão acesso ao FTP, colocando a pasta a que terão acesso como seu diretório home e bloqueando o uso do shell, para que eles não possam acessar o servidor remotamente através de outros meios (via ssh, por exemplo).</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Vamos começar adicionando no arquivo a opção que prende os usuários nos seus diretórios home. Abra o arquivo &#8220;/etc/proftpd.conf&#8221; e adicione (no final do arquivo) a linha:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong>DefaultRoot ~</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Você vai precisar adicionar também a seção para liberar o acesso anônimo ao ftp, que vimos acima. Como queremos apenas que os mantenedores dos projetos possam dar upload de arquivos, remova a seção &#8220;&lt;<strong>Directory incoming</strong>&gt;&#8221;. A seção vai ficar:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;Anonymous ~ftp&gt;<br />
User ftp<br />
Group nogroup<br />
UserAlias anonymous ftp<br />
DirFakeUser on ftp<br />
DirFakeGroup on ftp<br />
RequireValidShell off<br />
<strong>MaxClients 20<br />
DisplayLogin welcome.msg<br />
</strong>DisplayFirstChdir .message<br />
&lt;Directory *&gt;<br />
&lt;Limit WRITE&gt;<br />
DenyAll<br />
&lt;/Limit&gt;<br />
&lt;/Directory&gt;<br />
&lt;/Anonymous&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O diretório padrão do FTP, onde os usuários anônimos terão acesso aos arquivos, é a &#8220;<strong>/home/ftp</strong>&#8220;. Em outras distribuições pode ser usada a pasta &#8220;<strong>/var/ftp</strong>&#8220;; dê uma olhada em como o arquivo vem configurado por padrão.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">De volta à configuração, vamos começar criando subpastas para cada projeto:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-style: normal;"><span style="font-family: Bitstream Vera Sans Mono;"># <strong>mkdir /home/ftp/projeto1</strong><br />
# <strong>mkdir /home/ftp/projeto2<br />
# mkdir /home/ftp/projeto3<br />
</strong></span>etc&#8230;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O próximo passo é ir adicionando os usuários no sistema, tendo o cuidado de fazer as alterações no diretório home e no shell padrão, para que eles tenham acesso somente via FTP e apenas à pasta desejada.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para adicionar os usuários, use o comando &#8220;<strong>adduser</strong>&#8220;, como se estivesse criando uma conta normal:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"># <strong>adduser projeto1</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">Acrescentando usuário projeto1&#8230;<br />
Acrescentando novo grupo projeto1 (1005).<br />
Acrescentando novo usuário projeto1 (1005) com grupo projeto1.<br />
<strong>Criando diretório pessoal /home/projeto1</strong>.<br />
Copiando arquivos de /etc/skel</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">Enter new UNIX password:<br />
Retype new UNIX password:<br />
passwd: password updated successfully</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Veja que por padrão ele cria a pasta &#8220;/home/projeto1&#8243;, que passa a ser o diretório home do usuário criado. Entretanto, neste caso queremos que o home seja a pasta &#8220;<strong>/home/ftp/projeto1</strong>&#8220;, onde ele dará upload dos arquivos.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para alterar isso, abra o arquivo &#8220;/<strong>etc/passwd</strong>&#8220;, onde ficam guardadas as informações dos usuários. Na última linha do arquivo você verá:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">projeto1:x:1005:1005:,,,:<strong>/home/projeto1</strong>:<strong>/bin/bash</strong> </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Vamos alterar o &#8220;<strong>/home/projeto1</strong>&#8221; para &#8220;<strong>/home/ftp/projeto1</strong>&#8221; (para trocar o home) e o &#8220;<strong>/bin/bash</strong>&#8221; para &#8220;<strong>/bin/false</strong>&#8220;, de forma a impedir que usuário tenha acesso ao shell do servidor e possa executar comandos (fazendo o que não deve no servidor). Se você preferir que, além do acesso via ftp, os usuários tenham acesso via ssh, então mantenha o &#8220;/bin/bash&#8221;. Depois das alterações, a linha ficará:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">projeto1:x:1005:1005:,,,:<strong>/home/ftp/projeto1</strong>:<strong>/bin/false</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Você pode aproveitar para remover a pasta /home/projeto1, já que não precisaremos mais dela:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"># <strong>rm -rf /home/projeto1/</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Na verdade, esse processo serve para que você entenda melhor o procedimento de criação destes usuários &#8220;falsos&#8221; no Linux. Estas alterações podem ser especificadas ao criar o usuário. Não é preciso sair editando todos os arquivos manualmente. O comando para criar o usuário &#8220;projeto1&#8243;, usando a pasta &#8220;/home/ftp/projeto1&#8243; como home e o &#8220;/bin/false&#8221; como shell, seria:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"># <strong>adduser &#8211;home /home/ftp/projeto1 &#8211;shell /bin/false &#8211;no-create-home projeto1</strong> </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Não esqueça de acertar as permissões da pasta /home/ftp/projeto1:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><span>#</span><strong> chown -R projeto1:projeto1 /home/ftp/projeto1/</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Depois de concluir a configuração, falta só reiniciar o servidor FTP para que as configurações entrem em vigor:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># /etc/init.d/proftpd restart</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Em distribuições derivadas do Debian, você vai precisar adicionar a linha &#8220;/bin/false&#8221; no final do arquivo /etc/shells para que ele possa ser usado:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"># <strong>echo &#8220;/bin/false&#8221; &gt;&gt; /etc/shells </strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Feito isso, você já conseguirá se logar no servidor usando o login criado. O usuário não enxerga nada fora da pasta &#8220;/home/ftp/projeto1&#8243; e todos os arquivos que ele der upload vão para lá.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A senha de acesso ao FTP é a mesma definida na hora de criar o usuário. O Proftpd simplesmente aproveita o sistema de autenticação do sistema. Se você precisar alterar a senha do usuário, use o comando &#8220;<strong>passwd projeto1</strong>&#8220;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para usar o Proftpd em conjunto com os virtual hosts do Apache, a configuração é a mesma, com exceção de que você não precisaria habilitar o acesso anônimo, já que o FTP seria usado apenas pelos webmasters dos sites hospedados.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Nesse caso, ao criar os usuários, use a pasta com os arquivos do site como home, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"># <strong>adduser &#8211;home /var/www/joao &#8211;shell /bin/false &#8211;no-create-home joao</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A opção &#8220;&#8211;no-create-home&#8221; evita que o sistema copie os arquivos do diretório &#8220;/etc/skel&#8221; (como os arquivos .bashrc, .bash_history e outros) para dentro da pasta de arquivos, &#8220;sujando&#8221; o diretório. Ao terminar, não se esqueça de alterar as permissões da pasta, de forma que o usuário tenha permissão de escrita:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><span>#</span><strong> chown -R joao:joao /var/www/joao</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Graças ao uso da opção &#8220;DefaultRoot ~&#8221;, os usuários terão acesso apenas à pasta com os arquivos do site, sem acesso às pastas dos outros usuários ou às demais pastas do sistema. Esta é justamente a configuração usada na maioria dos serviços de shared hosting onde o acesso é feito via FTP. O sistema não é nada seguro e de vez em quando algumas das senhas são roubadas, mas, como ele é fácil de implementar e poucos usuários tem dificuldades em acessar as contas, a tradição continua.</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizoliveira.org/linux/servidores/instalando-um-servidor-ftp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurando um servidor LAMP</title>
		<link>http://www.luizoliveira.org/linux/servidores/configurando-um-servidor-lamp/</link>
		<comments>http://www.luizoliveira.org/linux/servidores/configurando-um-servidor-lamp/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 18:00:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Servidores]]></category>

		<guid isPermaLink="false">http://www.luizoliveira.org/?p=111</guid>
		<description><![CDATA[Instalando o Apache
O Apache pode ser dividido em duas grandes famílias: 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, além de oferecer novos módulos e mais opções de segurança, mas sua adoção [...]]]></description>
			<content:encoded><![CDATA[<p>Instalando o Apache<br />
O Apache pode ser dividido em duas grandes famílias: 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, além de oferecer novos módulos e mais opções de segurança, mas sua adoção foi retardada nos primeiros anos por um detalhe muito simples: o fato de ele ser incompatível com os módulos compilados para o Apache 1.3. Como os módulos são a alma do servidor web, muitos administradores ficavam amarrados ao Apache 1.3 devido à falta de disponibilidade de alguns módulos específicos para o Apache 2.</p>
<p>Conforme o tempo foi passando, mais e mais módulos foram portados, sem falar de novos módulos desenvolvidos diretamente para uso em conjunto com o Apache 2. Hoje em dia, o Apache 1.3 ainda sobrevive em muitas instalações devido à inércia natural que temos dentro do ramo de servidores, mas não existe nenhum bom motivo para usá-lo em uma nova instalação. O Apache 2 é simplesmente melhor em todos os quesitos.</p>
<p>Apesar disso, ainda existem casos de distribuições que continuam oferecendo as duas versões, de forma a satisfazer os dois públicos. No Debian Etch, por exemplo, o Apache 1.3 é instalado através do pacote &#8220;apache&#8221;, enquanto o Apache 2 (a versão recomendada) é instalado através do &#8220;apache2&#8243;. Entretanto, no Debian Lenny já está disponível apenas o Apache 2, assim como no CentOS, no Fedora e em outras distribuições.</p>
<p>Ao instalar o Apache 2, o suporte a SSL é instalado automaticamente junto com o pacote principal (mas ainda é preciso ativá-lo na configuração, como veremos a seguir). Instale também o pacote apache2-utils, que contém diversos utilitários de gerenciamento que usaremos a seguir:</p>
<p># apt-get install apache2 apache2-utils</p>
<p>Se desejar ativar o suporte a páginas seguras, você vai precisar também do pacote &#8220;ssl-cert&#8221;, necessário para ativar o suporte a SSL e gerar os certificados. Ele não é instalado por padrão ao fazer uma instalação enxuta do Debian ou do Ubuntu:</p>
<p># apt-get install ssl-cert</p>
<p>Se você estiver utilizando o CentOS ou o Fedora, instale o pacote &#8220;httpd&#8221;, que contém o Apache 2 e os utilitários:</p>
<p># yum install httpd</p>
<p>Diferente do Debian, o serviço não será configurado para ser ativado no boot por padrão e nem mesmo inicializado automaticamente após a instalação. Para ativá-lo, é necessário ativar o serviço e, em seguida, criar os links para início automático usando o chkconfig</p>
<p># service httpd start<br />
# chkconfig httpd on</p>
<p>Seguindo os nomes dos pacotes, no Debian o serviço se chama &#8220;apache2&#8243;, enquanto no Fedora e no CentOS ele se chama &#8220;httpd&#8221;. Para reiniciar o servidor você usa, respectivamente, os comandos &#8220;/etc/init.d/apache2 restart&#8221; e &#8220;service httpd restart&#8221;.</p>
<p>Acessando o endereço &#8220;http://127.0.0.1&#8243;, você verá uma página de boas-vindas, que indica que o servidor está funcionando. Se não houver nenhum firewall no caminho, ele já estará acessível a partir de outros micros da rede local ou da internet:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Por enquanto, temos apenas uma versão básica do Apache, que simplesmente exibe arquivos html e executa scripts CGI. Por padrão, o diretório raiz do servidor Web é &#8220;<strong>/var/www</strong>&#8221; (no Debian) ou &#8220;<strong>/var/www/html</strong>&#8221; (no Fedora). Com isso, a página &#8220;http://seu.servidor/index.html&#8221; é, na verdade, o arquivo &#8220;/var/www/index.html&#8221; ou &#8220;/var/www/html/index.html&#8221;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Como de praxe, o diretório raiz é definido através de uma opção dentro do arquivo principal de configuração (a opção &#8220;DocumentRoot&#8221;) 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 instalação do Apache propriamente dita é bastante simples, o grande desafio é configurar e otimizar o servidor, como veremos ao longo do restante deste capítulo.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><strong>Instalação a partir do código fonte</strong>: Muitos administradores preferem instalar o Apache a partir dos fontes, o que oferece um controle maior sobre os recursos que ficarão ou não ativos.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">De uma forma geral, instalar a partir do código fonte só é uma boa idéia se você conhece muito bem o software e não está satisfeito com as opções de compilação usadas nos pacotes incluídos na distribuição. Além da instalação e da configuração inicial, você precisará também se preocupar com patches e atualizações de segurança, já que você não poderá contar com as atualizações disponibilizadas através do apt-get ou do yum. Ou seja, se você não está confiante de que vai ter o tempo e o conhecimento necessários para realizar um trabalho de manutenção melhor do que o realizado pelos mantenedores do Debian, Ubuntu, CentOS ou do Fedora, você estará melhor servido simplesmente usado os pacotes pré-compilados. <img src='http://www.luizoliveira.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">De qualquer forma, se você quer encarar o desafio, pode baixar o código fonte no: <a href="http://httpd.apache.org/">http://httpd.apache.org/</a>. Lembre-se de que para instalar qualquer aplicativo a partir dos fontes, você precisa ter instalados os compiladores e bibliotecas de desenvolvimento.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Os passos básicos são descompactar o pacote, acessar a pasta que será criada e executar o trio &#8220;./configure&#8221;, &#8220;make&#8221; e &#8220;make install&#8221;, este último como root. Isso resultará em uma instalação padrão, onde todos os arquivos são instalados no diretório &#8220;/usr/local/apache2&#8243;. Para personalizar as opções (que seria o principal motivo de instalar a partir dos fontes, afinal), você deve passar as opções desejadas ao executar o &#8220;./configure&#8221;, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">$ ./configure &#8211;prefix=/etc/apache2 &#8211;exec-prefix=/usr &#8211;bindir=/usr/bin \<br />
&#8211;sbindir=/usr/sbin &#8211;mandir=/usr/share/man &#8211;sysconfdir=/etc/apache2/conf \<br />
&#8211;includedir=/usr/include/httpd &#8211;libexecdir=/usr/lib/httpd/modules \<br />
&#8211;datadir=/var/www/ &#8211;with-mpm=prefork &#8211;enable-mods-shared=&#8221;rewrite&#8221;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Como pode ver, as opções incluem não apenas os diretórios de instalação, mas também os módulos que serão ativados e diversas outras opções de configuração. Ao instalar a partir do código fonte, a ativação e a desativação do servidor é feita usando o script &#8220;apachectl&#8221;, que substitui o &#8220;/etc/init.d/apache2&#8243; ou o &#8220;service httpd&#8221;, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># apachectl start</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">ou:<br />
<strong><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"># apachectl restart</span></strong></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Arial;">Nas distribuições derivadas do Debian, a arquitetura modular do Apache é extendida também aos arquivos de configuração. Tradicionalmente, a configuração do Apache é centralizada em um único arquivo, o &#8220;<strong>httpd.conf</strong>&#8220;, que pode opcionalmente incluir referências a arquivos externos (includes) que permitem segmentar e organizar a configuração. Aproveitando esta possibilidade, a equipe do Debian desenvolveu uma organização bastante prática, que é usada também no Ubuntu e em outras distribuições derivadas dele.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><strong>À primeira vista, a organização do Apache 2 nas distribuições derivadas do Debian parece muito mais complicada, mas, depois de entender, a coisa se revela bastante simples e lógica:</strong></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Todos os arquivos de configuração estão organizados dentro do diretório &#8220;/etc/apache2&#8243;. Dentro dele, temos as pastas &#8220;sites-available&#8221; e &#8220;sites-enabled&#8221;, que contêm a configuração dos sites hospedados; as pastas &#8220;mods-available&#8221; e &#8220;mods-enabled&#8221;, que armazenam a configuração dos módulos; o arquivo &#8220;ports.conf&#8221;, onde vai a configuração das portas TCP que o servidor vai escutar; o arquivo &#8220;apache2.conf&#8221;, que armazena configurações diversas relacionadas ao funcionamento do servidor e a pasta &#8220;conf.d&#8221;, que armazena arquivos com configurações adicionais.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O Apache é capaz de hospedar simultaneamente vários sites, cada um representado por um arquivo de configuração diferente. Imagine o caso de uma empresa de hosting que mantém 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 &#8220;sites-available&#8221; com as configurações necessárias e um link para ele na pasta &#8220;sites-enabled&#8221;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Como os nomes sugerem, a primeira pasta armazena a configuração de todos os sites (virtual hosts) hospedados no servidor, mas apenas os sites que estiverem presentes na pasta &#8220;sites-enabled&#8221; ficam disponíveis. Quando é necessário suspender temporariamente um site por falta de pagamento, por exemplo, você simplesmente remove o link na pasta &#8220;sites-enabled&#8221;, sem precisar mexer na configuração.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Ao invés de criar e remover os links manualmente, você pode usar os comandos &#8220;<strong>a2ensite</strong>&#8221; e &#8220;<strong>a2dissite</strong>&#8220;, que fazem isso para você. Para ativar e desativar um site configurado no arquivo &#8220;/etc/apache2/sites-available/gdhn&#8221;, por exemplo, os comandos seriam:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><strong><span style="font-family: Bitstream Vera Sans Mono;"># a2ensite gdhn</span></strong><br />
(ativa)</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><strong><span style="font-family: Bitstream Vera Sans Mono;"># a2dissite gdhn</span></strong><br />
(desativa)</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Quando o Apache é instalado, é criado por padrão o arquivo &#8220;/etc/apache2/sites-available/default&#8221;, que contém a configuração de um site &#8220;raiz&#8221;, que usa (por padrão) a pasta &#8220;/var/www&#8221; como diretório de páginas. Se o seu servidor web vai hospedar um único site, então essa configuração é suficiente, mas, caso você queira hospedar vários sites no mesmo servidor, é necessário criar uma pasta e um arquivo de configuração para cada site adicional.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Seu servidor pode, por exemplo, hospedar o &#8220;joao.com.br&#8221; e o &#8220;maria.com.br&#8221;. Um servidor DNS, mantido por você, é configurado para responder pelos dois domínios, em ambos os casos fornecendo o endereço IP do seu servidor web aos clientes. Na configuração do apache, criamos os arquivos &#8220;/etc/apache2/sites-available/joao&#8221; e &#8220;/etc/apache2/sites-available/maria&#8221;, cada um configurado para utilizar uma pasta diferente. De acordo com sua preferência, podem ser usadas pastas dentro do diretório home de cada usuário, como em &#8220;/home/joao/html&#8221; e &#8220;/home/maria/html&#8221;, ou subpastas dentro do diretório &#8220;/var/www&#8221;, como em &#8220;/var/www/joao&#8221; e &#8220;/var/www/maria&#8221;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Quando um visitante digita &#8220;http://joao.com.br&#8221;, o servidor do Registro.br (que responde pelos domínios .br) vai passar a requisição para seu servidor DNS, que responde com o endereço do seu servidor web. Ao acessar o servidor, o navegador solicita o site &#8220;joao.com.br&#8221; e o servidor responde enviando o arquivo &#8220;/var/www/joao/index.html&#8221; ou &#8220;index.php&#8221; ao cliente.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Esta configuração parece bem complicada à primeira vista, mas na prática é relativamente simples. Veremos mais detalhes sobre a configuração de servidores Apache com vários domínios mais adiante.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Continuando, a mesma idéia das duas pastas separadas se aplica aos módulos. A pasta &#8220;mods-available&#8221; contém a configuração e scripts de inicialização para todos os módulos disponíveis, mas apenas os módulos referenciados (através de um link) na pasta &#8220;mods-enabled&#8221; são realmente carregados.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Muita gente simplesmente cria e deleta os links manualmente, mas isso pode ser feito mais rapidamente usando os comandos &#8220;a2enmod&#8221; e &#8220;a2dismod&#8221;, que ativam e desativam módulos específicos. Para desativar o suporte a PHP, por exemplo, você usaria o comando:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># a2dismod php5</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para ativá-lo novamente, usaria:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># a2enmod php5</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Uma vez que um determinado módulo é ativado, ele fica automaticamente disponível para todos os sites hospedados no servidor.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para que a alteração entre em vigor, é necessário reiniciar o serviço, usando o comando &#8220;/etc/init.d/apache2 force-reload&#8221; ou o &#8220;/etc/init.d/apache2 restart&#8221; (no Debian os dois comandos fazem exatamente a mesma coisa):</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># /etc/init.d/apache2 force-reload</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Por outro lado, ao ativar ou desativar sites, ou ao fazer alterações simples na configuração, você pode utilizar o comando &#8220;/etc/init.d/apache2 reload&#8221; (sem o &#8220;force&#8221;), que apenas atualiza a configuração, sem reiniciar o serviço:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># /etc/init.d/apache2 reload</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">A vantagem de usar o reload em vez do force-reload é que ele não precisa finalizar os processos do Apache, o que evita que o servidor fique indisponível durante a reinicialização do serviço. 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 interrupção do serviço e perda de acessos, daí as duas opções. </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Outra configuração que foi desmembrada é a configuração de portas, que foi para o arquivo &#8220;<strong>ports.conf</strong>&#8220;. Originalmente o arquivo vem com uma única linha:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">Listen 80</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">É aqui que você altera a porta padrão do seu servidor ou adiciona novas portas, como faremos mais adiante ao ativar o SSL, por exemplo.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Você pode também usar portas diferentes caso precise manter mais de um servidor web ativo na mesma máquina (muitos administradores usam este truque para testar novas versões do Apache, ou para combiná-lo com um segundo servidor web, como o lighttpd, configurado para servir arquivos e páginas estáticas). Outro uso comum para a opção é (em casos em que você quer disponibilizar um servidor web doméstico) para burlar as restrições das operadoras de planos de acesso, que geralmente bloqueiam conexões na porta 80, de forma a dificultar o uso de servidores web nas conexões domésticas.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para fazer com que seu servidor escute também na porta 443 (a porta do HTTPS) e na porta 8080, por exemplo, você adicionaria duas novas linhas, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">Listen 80<br />
Listen 443<br />
Listen 8080</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Finalmente, chegamos ao arquivo &#8220;<strong>apache2.conf</strong>&#8220;, que agrupa o &#8220;resto&#8221; das configurações. É ele que você vai alterar quando, por exemplo, precisar ajustar o número de processos usados pelo Apache ou aumentar o número de conexões simultâneas permitidas pelo servidor, como veremos em detalhes mais adiante.</p>
<h1 class="western" style="page-break-before: always;">Instalando o suporte a PHP</h1>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
No início, existiam apenas páginas html estáticas, com links atualizados manualmente. Depois, surgiram os scripts CGI (geralmente escritos em Perl), que permitiram criar vários tipos de formulários e automatizar funções. Finalmente, surgiu o PHP, adotado rapidamente como a linguagem padrão para criação de todo tipo de página dinâmica, fórum ou gerenciador de conteúdo.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Além da linguagem ser bastante flexível, um script em PHP chega a ser mais de 100 vezes mais rápido que um script CGI equivalente, além de mais seguro. Em resumo, um script CGI é um executável, que precisa ser carregado na memória, executado e descarregado cada vez que é feita uma requisição. No caso do PHP, o interpretador fica carregado continuamente e simplesmente vai executando de forma contínua os comandos recebidos dos scripts incluídos nas páginas.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para quem programa em Perl, existe a possibilidade de utilizar o mod-perl, instalável através do pacote &#8220;apache-mod-perl&#8221; ou &#8220;libapache2-mod-perl2&#8243;. Assim como o PHP, o mod-perl é um módulo do Apache que fica continuamente carregado na memória, executando os scripts Perl de uma forma bem mais rápida e segura que os scripts CGI.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Voltando ao assunto principal, no <strong>Debian</strong> o suporte a PHP é instalado através do pacote &#8220;<strong>php5</strong>&#8221; (ou &#8220;php4&#8243;, de acordo com a versão escolhida). Para instalá-lo, basta usar o gerenciador de pacotes da distribuição em uso, como em:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-style: normal;"><span style="font-family: Bitstream Vera Sans Mono;"># <strong>apt-get install php5</strong></span></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-style: normal;">No caso do <strong>CentOS</strong> e do <strong>Fedora</strong>, é usado um pacote unificado, o &#8220;php&#8221;, que inclui a versão mais recente do interpretador, eliminando a confusão:</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># yum install php</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com o interpretador PHP instalado, falta instalar o módu<span>lo do Apache 2, q</span>ue no <strong>Debian</strong> está disponível através do pacote &#8220;libapache2-mod-php5&#8243; (ou &#8220;libapache2-mod-php4&#8243;, de acordo com a versão desejada):</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"># <strong><span style="font-family: Bitstream Vera Sans Mono;">apt-get install libapache2-mod-php5</span></strong></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O módulo &#8220;libapache2-mod-php5&#8243; é instalado dentro da pasta &#8220;<strong>/usr/lib/apache2/modules/</strong>&#8221; e é ativado de uma forma diferente que no Apache 1.3. Ao invés de adicionar as linhas que ativam o módulo e criam as associações de arquivos no final do arquivo httpd.conf, são criados dois arquivos dentro da pasta &#8220;/etc/apache2/mods-available/&#8221;, com, respectivamente, a ativação do módulo e as associações de arquivos. Os links são criados automaticamente ao instalar o pacote, mas você pode tirar qualquer dúvida usando o comando a2enmod:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># a2enmod php5</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Não esqueça de reiniciar o serviço para que o módulo seja carregado e a configuração entre em vigor:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># /etc/init.d/apache2 force-reload</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-style: normal;">ou:<br />
<strong><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"># service httpd restart</span></strong></span></p>
<p><span style="font-style: normal;"></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com o suporte a PHP ativado, o Apache continua exibindo diretamente páginas com extensão .htm ou .html, mas passa a entregar as páginas .php ou .phps ao interpretador php, que faz o processamento necessário e devolve uma página html simples ao Apache, que se encarrega de enviá-la ao cliente.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Estas páginas processadas são &#8220;descartáveis&#8221;: cada vez que um cliente acessa a página, ela é processada novamente, mesmo que as informações não tenham sido alteradas. Dependendo do número de funções usadas e da complexidade do código, as páginas em PHP podem ser bastante pesadas. Não é incomum que um site com 100.000 pageviews diários (o que corresponde a umas 5 a 8 requisições por segundo nos horários de pico) precise de um servidor dedicado, de configuração razoável.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Quase sempre, os sistemas desenvolvidos em PHP utilizam também um banco de dados MySQL ou Postgre SQL. Naturalmente, é perfeitamente possível que os scripts simplesmente salvem as informações em arquivos de texto dentro do diretório do site, mas isso resultaria em um desempenho muito ruim, sem falar em eventuais brechas de segurança. Utilizar um banco de dados permite armazenar um volume muito maior de informações, acessíveis de forma mais segura.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para que o interpretador PHP seja capaz de acessar o banco de dados, é necessário ter instalado (além do servidor MySQL propriamente dito) o módulo &#8220;php5-mysql&#8221; (ou &#8220;php4-mysql&#8221;), que faz a junção entre os dois componentes:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># apt-get install php5-mysql</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No caso do PostgreSQL, é utilizado o módulo &#8220;php5-pgsql&#8221;, que tem a mesma função:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># apt-get install php5-pgsql</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Não se esqueça de reiniciar o Apache, para que as alterações entrem em vigor:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># /etc/init.d/apache force-reload</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No caso do Fedora e do CentOS, muda apenas o nome do pacote, que passa a se chamar simplesmente &#8220;php-mysql&#8221;:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># yum install php-mysql</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para verificar se o suporte a PHP está realmente ativo, crie um arquivo de texto chamado &#8220;info.php&#8221; (ou outro nome qualquer, seguido da extensão .php) dentro da pasta do servidor web, contendo apenas a linha abaixo:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;?php phpinfo( ); ?&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Salve o arquivo e abra a página através do navegador. A função &#8220;phpinfo&#8221;, que usamos no arquivo, faz com que o servidor exiba uma página com detalhes da configuração do PHP e dos módulos ativos:</p>
<p></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Depois de verificar, remova o arquivo, pois não é interessante que essas informações fiquem disponíveis ao público.</p>
<h2 class="western" style="page-break-before: always;">Dicas de segurança</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
O interpretador php é configurado através do arquivo &#8220;<strong>php.ini</strong>&#8220;, um longo arquivo de configuração que permite ativar ou desativar opções diversas da linguagem como, por exemplo, a possibilidade de fazer upload de arquivos através de scripts colocados nas páginas.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A localização do arquivo pode variar de acordo com a distribuição, mas você pode encontrá-lo rapidamente usando o comando &#8220;locate&#8221;. No caso do CentOS, o arquivo é o &#8220;<strong>/etc/php.ini</strong>&#8220;, enquanto nas distribuições derivadas do Debian é usado o arquivo &#8220;<strong>/etc/php5/apache2/php.ini</strong>&#8220;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para melhorar a segurança, é recomendável desativar as funções &#8220;show_source&#8221;, &#8220;system&#8221;, &#8220;shell_exec&#8221;, &#8220;passthru&#8221;, &#8220;exec&#8221;, &#8220;popen&#8221;, &#8220;proc_open&#8221;, &#8220;symlink&#8221;, o que pode ser feito através da opção &#8220;disable_functions =&#8221;, disponível (no Debian Etch) na linha 224 do arquivo. Basta adicionar a lista das funções, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">disable_functions = show_source, system, shell_exec, passthru, exec, popen, proc_open, symlink</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Outras opções que é recomendável manter desativadas dentro do arquivo são:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify">expose_php = Off<br />
register_globals = Off<br />
allow_url_fopen = Off<br />
allow_url_include = Off</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A opção &#8220;allow_url_fopen&#8221; permite abrir ou processar uma página ou arquivo externo dentro do script php. Embora ela seja uma função ú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 serviços de hospedagem, como no caso do Dreamhost.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Ao tentar executar algum script em PHP que dependa da função, você receberá um erro similar a:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="left"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">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</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Nesse caso, você tem duas opções. Ou volta a ativar a opção dentro do arquivo, substituindo a linha &#8220;allow_url_fopen = Off&#8221; por &#8220;allow_url_fopen = On&#8221; (é necessário rein<span>iciar o serviço do Apache para que a alteração entre em vigor) ou reescreve o script usando a função &#8220;cURL&#8221;, para que o script baixe o arquivo antes de processá-lo. </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Outra dica é que além do pacote básico, existem diversos módulos e add-ons para o PHP, disponíveis através de pacotes complementares, como o &#8220;php5-gd&#8221; (usado por diversos scripts de CAPTCHA, os verificadores onde o usuário precisa digitar o texto contido na imagem) e o &#8220;php5-mcrypt&#8221; (uma biblioteca com funções de encriptação e desencriptação). Você pode começar com o pacote básico e ir instalando os pacotes adicionais conforme for precisando deles.</p>
<h1 class="western" style="page-break-before: always;">Instalando o MySQL</h1>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
O MySQL é um banco de dados extremamente versátil, usado para os mais diversos fins. Você pode acessar o banco de dados a partir de um script em PHP, através de um aplicativo desenvolvido em C ou C++, ou praticamente qualquer outra linguagem (até mesmo através de um shell script! <img src='http://www.luizoliveira.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Existem vários livros publicados sobre ele, por isso vou me limitar a falar sobre a instalação e a configuração necessária para utilizá-lo em um servidor LAMP, em conjunto com o Apache e o PHP.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O primeiro passo é instalar o servidor MySQL propriamente dito. Nas distribuições derivadas do Debian precisamos instalar apenas o pacote &#8220;mysql-server&#8221; usando o apt-get:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">#<strong> apt-get install mysql-server</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No CentOS ou Fedora, instalamos os pacotes &#8220;mysql&#8221; e &#8220;mysql-server&#8221;, usando o yum:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># yum install mysql mysql-server </strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Você pode instalar também os pacotes &#8220;mysql-client&#8221; (o cliente que permite acessar os dados e fazer modificações no banco de dados) e o &#8220;mysql-navigator&#8221; (uma interface gráfica para ele).</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para que o serviço seja configurado para ser carregado durante o boot, ative-o usando o chkconfig:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># chkconfig mysqld on</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Antes de iniciar o serviço, rode o comando &#8220;<span>mysql_install_db</span>&#8220;. Ele prepara o terreno, criando a base de dados &#8220;mysql&#8221; (usada para armazenar a configuração do servidor MySQL, incluindo informações sobre os usuários e sobre as demais bases de dados) e também uma base de dados chamada &#8220;test&#8221;, que pode ser usada para testar o servidor:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># mysql_install_db </strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O passo seguinte é ativar o servidor MySQL:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># /etc/init.d/mysql start</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span>No caso do Fedora e do CentOS</span>, o serviço se chama &#8220;mysqld&#8221;, ao invés de simplesmente &#8220;mysql&#8221;, como no caso do Debian:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># service mysqld start</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O MySQL possui um usuário padrão chamado &#8220;root&#8221;, que, assim como o root do sistema, tem acesso completo a todas as bases de dados e é usado para fazer a configuração inicial do sistema, assim como tarefas de manutenção. Esta conta inicialmente não tem senha, por isso você deve definir uma logo depois de iniciar o serviço, usando o comando &#8220;mysqladmin -u root password senha&#8221;, incluindo a senha desejada diretamente no comando, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># mysqladmin -u root password psUT7wq01</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Se você precisar trocar a senha posteriormente, é necessário acrescentar o parâmetro &#8220;-p&#8221; antes do &#8220;password&#8221; e, em seguida, especificar a nova senha, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># mysqladmin -u root -p password <span style="font-family: Bitstream Vera Sans Mono;">psUT7wq01</span></strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">Enter password: <strong>********</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Veja que nesse caso é necessário incluir a senha antiga ao executar o comando, antes de continuar, já que do contrário teríamos uma brecha óbvia de segurança.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Continuando, depois de definir a senha, o próximo passo é criar uma base de dados. Você pode instalar vários scripts diferentes (um fórum, um chat e um gestor de conteúdo, por exemplo) no mesmo servidor e, inclusive, várias cópias de cada um. Isso é cada vez mais utilizado, tanto dentro de sites que oferecem diversos serviços, quanto em servidores compartilhados, onde os responsáveis por cada site têm a liberdade de instalar os sistemas de sua preferência.</p>
<h2 class="western" style="page-break-before: always;">Administração básica do banco de dados</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
Existem muitas interfaces de administração para o MySQL, mas a forma mais elementar é usar o prompt de comando. Para acessá-lo, use o comando:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># mysql -u root -p &lt;enter&gt;</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">Enter password: &lt;senha&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">Welcome to the MySQL monitor. Commands end with ; or \g.<br />
Your MySQL connection id is 43 to server version: 4.0.15-log<br />
Type &#8216;help;&#8217; or &#8216;\h&#8217; for help. Type &#8216;\c&#8217; to clear the buffer.<br />
<strong>mysql&gt;</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Veja que o cabeçalho normal do bash foi substituído por um &#8220;mysql&gt;&#8221;, que lembra onde você está. Para sair, pressione &#8220;Ctrl+C&#8221; ou execute o comando &#8220;<span>quit</span>&#8220;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Dentro do prompt do MySQL, use o comando &#8220;CREATE DATABASE&#8221; (criar base de dados), seguido pelo nome desejado. Neste exemplo, estou criando uma base de dados para usar na instalação do phpBB, que veremos a seguir. Um detalhe importante é que todos os comandos dados dentro do prompt do MySQL devem terminar com ponto-e-vírgula:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">mysql&gt; <strong>CREATE DATABASE phpbb</strong>;<br />
Query OK, 1 row affected (0.04 sec)</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para confirmar, use o comando &#8220;SHOW DATABASES&#8221;, que lista as bases de dados criadas no servidor, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">mysql&gt; <strong>SHOW DATABASES;</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
<table style="page-break-inside: avoid;" border="0" cellspacing="0" cellpadding="0" width="100%">
<colgroup span="1">
<col span="1" width="256"></col>
</colgroup>
<tbody>
<tr>
<td width="100%" valign="top">
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />
| Database |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />
| information_schema |<br />
| mysql |<br />
| phpbb |<br />
| test |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+</span></td>
</tr>
</tbody>
</table>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Note que além da base &#8220;phpbb&#8221; que criamos, existem mais três bases de dados, criadas durante a instalação. As bases &#8220;mysql&#8221; e &#8220;information_schema&#8221; são para uso interno do MySQL, incluindo o armazenamento das configurações (sendo um banco de dados, o MySQL usa a si mesmo para armazenar suas configurações <img src='http://www.luizoliveira.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , enquanto a base &#8220;test&#8221; é uma DB vazia, que pode ser usada para fins de teste.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Temos em seguida a questão das permissões de acesso. Nada impede que você sempre utilize a conta &#8220;root&#8221; do MySQL e inclusive configure os scripts instalados para a utilizarem. Entretanto, isso é extremamente inseguro, principalmente se você pretende instalar vários scripts e aplicativos no mesmo servidor, ou se as bases de dados serão acessadas por vários usuários.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O ideal é que cada base de dados tenha um usuário próprio e seja acessível apenas por ele. Se você vai instalar o phpBB (fórum) e o WordPress (gerenciador de conteúdo), por exemplo, crie duas bases de dados (&#8220;phpbb&#8221; e &#8220;wordpress&#8221;, por exemplo) e dois usuários separados, cada um com permissão para acessar uma das duas bases.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Na configuração de cada um dos gestores, informe a base de dados que será usada e o usuário e senha correspondente. Isso evita que eventuais problemas de segurança em um coloquem em risco também os dados referentes ao outro.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Outra situação comum é ao configurar um servidor com vários 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 próprio, com acesso apenas às suas próprias bases de dados.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para criar um usuário &#8220;phpbb&#8221;, com senha &#8220;nDPIcqq9&#8243; e dar a ele acesso à base de dados &#8220;phpbb&#8221; que criamos, use (dentro do prompt do MySQL) o comando:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">mysql&gt; GRANT ALL ON <strong>phpbb.*</strong> TO <strong>phpbb</strong> IDENTIFIED BY &#8216;<strong>nDPIcqq9</strong>&#8216;;</span><br />
<span><span style="font-family: Bitstream Vera Sans, sans-serif;">(permita tudo na base phpbb para o usuário phpbb, identificado pela senha nDPIcqq9)</span></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">mysql&gt; </span>FLUSH PRIVILEGES;</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O comando &#8220;FLUSH PRIVILEGES&#8221; faz com que o servidor MySQL atualize as tabelas de permissões, fazendo com que a alteração entre em vigor automaticamente, ao invés de apenas na próxima vez que o servidor for reinicializado. Na verdade, ele não é necessário ao adicionar usuários usando o comando &#8220;GRANT&#8221; (como no nosso caso), mas é saudável se acostumar a utilizá-lo sempre que usar comandos que modifiquem as permissões de acesso. Você vai notar que a maioria dos tutoriais inclui o comando depois das operações relacionadas a alterações nas permissões de acesso.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Continuando, para trocar a senha posteriormente, use o comando:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">mysql&gt; SET PASSWORD FOR <strong>phpbb</strong> = PASSWORD(&#8216;<strong>JSAm950A</strong>&#8216;);</span><br />
(defina senha para o usuário phpbb, onde a senha é JSAm950A)</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Este mesmo comando pode ser usado para trocar a senha do root, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">mysql&gt; SET PASSWORD FOR <strong>root</strong> = PASSWORD(&#8216;<strong>V5LQSxqL</strong>&#8216;);</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Se mais tarde você precisar remover as permissões de acesso de um usuário anteriormente criado (em um site com vários webmasters, onde um se desligou da equipe, por exemplo) use o comando:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">mysql&gt; REVOKE ALL ON phpbb.* FROM phpbb;</span><br />
(remova todos os direitos para a base phpbb, para o usuário phpbb)</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">mysql&gt; FLUSH PRIVILEGES;</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com isso, o usuário 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 usuário, usamos o comando &#8220;DROP USER&#8221;, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">mysql&gt; DROP USER phpbb</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O comando &#8220;DROP USER&#8221; é suportado apenas pelas versões recentes do MySQL. Caso você esteja usando uma versão antiga, onde ele ainda não seja suportado, pode usar o comando &#8220;DELETE FROM mysql.user WHERE User=&#8221;, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify">mysql&gt; DELETE FROM mysql.user WHERE User=&#8217;phpbb&#8217;;</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para remover uma base de dados, use o comando &#8220;DROP DATABASE&#8221;, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">mysql&gt; DROP DATABASE phpbb;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Todos estes comandos devem ser dados dentro da base de dados &#8220;mysql&#8221;, 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:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify">mysql&gt; USE mysql;</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Veja que os comandos usados dentro do prompt do MySQL seguem uma linguagem literal, usando palavras do inglês. Quem tem uma boa familiaridade com a língua tem bem mais facilidade em dominar os comandos.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Outra observação é que os comandos não são case sensitive. Tanto faz escrever &#8220;CREATE DATABASE phpbb;&#8221; ou &#8220;create database phpbb;&#8221;. Escrever os comandos em maiúsculas é apenas uma forma de dar mais destaque a eles.</p>
<h2 class="western" style="page-break-before: always;">Instalando o phpMyAdmin</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
Depois dessa configuração inicial, você pode experimentar instalar um gerenciador gráfico para facilitar a manutenção do seu servidor MySQL. Uma boa opção neste caso é o <strong>phpMyAdmin</strong><span>. </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para instalá-lo, basta instalar o pacote &#8220;phpmyadmin&#8221;, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># apt-get install phpmyadmin</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-style: normal;"><span>ou:<br />
</span><strong><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"># </span></strong></span><strong><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">yum install phpmyadmin</span></strong></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O pacote para instalação em outras distribuições, que não incluam o pacote por padrão, pode ser encontrado no: <a href="http://www.phpmyadmin.net/">http://www.phpmyadmin.net/</a>.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O phpMyAdmin é um gestor de configuração escrito em PHP que trabalha em conjunto com o Apache. Ele permite que você crie bases de dados, ajuste as permissões de acesso dos usuários, faça backup, e diversas outras atividades administrativas de uma forma mais simples que através do prompt de comando.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Uma vez instalado, ele pode ser acessado através do endereço &#8220;<a href="http://127.0.0.1/phpmyadmin/">http://servidor/phpmyadmin/</a>&#8221; ou &#8220;<a href="https://servidor/phpmyadmin/">https://servidor/phpmyadmin/</a>&#8220;. Na tela inicial, você pode se logar usando qualquer uma das contas registradas no MySQL. Use o root para tarefas administrativas, quando for necessário ter acesso a todas as bases ou fazer backup de tudo, e uma das contas restritas para acessar uma base específica:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O acesso via HTTPS é preferível para acessos feitos via web, já que evita que as senhas de acesso e outras informações 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 é necessário também ativar o suporte a SSL na configuração do Apache, como veremos no tópico seguinte.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">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:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># dpkg-reconfigure phpmyadmin</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Selecione a opção &#8220;apache2&#8243; quando o script perguntar sobre o servidor web usado e responda &#8220;sim&#8221; quando ele perguntar se você deseja reiniciar o serviço:</p>
<p> </p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No CentOS e em diversas outras distribuições o phpMyAdmin vem configurado por padrão para permitir conexões apenas a partir da máquina local, uma precaução de segurança. Com isso, ao tentar acessar a interface remotamente, você recebe um &#8220;Forbidden. You don&#8217;t have permission to access /phpmyadmin/ on this server&#8221;. Para solucionar o problema, edite o arquivo &#8220;<strong>/etc/httpd/conf.d/phpmyadmin.conf</strong>&#8221; e comente a linha &#8220;Deny from All&#8221;, dentro da seção &#8220;&lt;Directory &#8220;/usr/share/phpmyadmin&#8221;&gt;&#8221;, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;Directory &#8220;/usr/share/phpmyadmin&#8221;&gt;<br />
Order Deny,Allow<br />
# Deny from all<br />
Allow from 127.0.0.1<br />
&lt;/Directory&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Uma observação importante é que ao ser usado em conjunto com o Apache, instalado no mesmo servidor que ele, o MySQL é acessado apenas localmente, através da interface de loopback. O Apache envia a requisição ao módulo PHP que faz o acesso ao banco de dados, tudo localmente. Nessa configuração, o servidor MySQL <strong>não</strong> deve ficar disponível para a Internet. Configure o firewall para bloquear a porta 3306 usada pelo servidor MySQL, além de todas as outras portas que não forem explicitamente necessárias.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Caso o servidor MySQL precise ficar acessível 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 endereços IP dos servidores que forem ter acesso. Como os servidores dedicados sempre utilizam endereços fixos (ao contrário dos servidores domésticos), esta configuração fica mais simples.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para administrar seu servidor MySQL remotamente, o ideal é que se conecte ao servidor via SSH e faça todo o trabalho através dele. Se precisar acessar diretamente alguma ferramenta de configuração, como o Webmin ou o phpMyAdmin, você pode criar um túnel (novamente usando o SSH) ligando a porta correspondente do servidor a uma porta da sua máquina e fazer o acesso através dela. Veremos em detalhes como usar o SSH e criar túneis encriptados no capítulo dedicado a ele.</p>
<h1 class="western" style="page-break-before: always;">Ativando o SSL</h1>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
O SSL (Secure Socket Layer) é o protocolo usado para criar páginas seguras, encriptando toda a transmissão entre o cliente e o servidor. Os dois usos mais comuns são em páginas de comércio eletrônico, onde é necessário oferecer um ambiente seguro para concluir a transação e transmitir dados confidenciais e também na criação de ambientes administrativos, como os usados pela maioria dos gestores de conteúdo, que permitem que você gerencie o conteúdo do site.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Na grande maioria das distribuições, o pacote com o mod_ssl é instalado juntamente com o pacote principal do Apache, ou é pelo menos disponibilizado como um pacote separado, instalável através do gerenciador de pacotes.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No caso das distribuições derivadas do Debian, você precisa apenas ativar o módulo usando o comando &#8220;a2enmod&#8221;. Reinicie o serviço para que a alteração entre em vigor:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># a2enmod ssl<br />
# /etc/init.d/apache2 force-reload</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No caso do CentOS, é necessário instalar o pacote &#8220;mod_ssl&#8221; usando o yum. O script de pós-instalação se encarrega de adicionar o script de carregamento na pasta &#8220;/etc/httpd/conf.d&#8221; automaticamente, concluindo a instalação. Não se esqueça de reiniciar o serviço para que a alteração entre em vigor:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># yum install mod_ssl<br />
# service httpd restart</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com o módulo carregado, fica faltando apenas o componente mais importante, que é o certificado SSL propriamente dito.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">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 página disponibilizada apenas para um grupo de amigos, por exemplo), você pode simplesmente gerar seu próprio certificado, o que é rápido, grátis e indolor. Se, por outro lado, você está ativando o SSL para uso em um site de comércio eletrônico, é necessário obter um certificado reconhecido através da Verisign ou outra entidade certificadora.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Os certificados caseiros são 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 encriptação usado é o mesmo, de forma que um certificado self-signed corretamente gerado oferece a mesma segurança que um certificado reconhecido. O grande problema é que os navegadores nos clientes não serão capazes de verificar a autenticidade do certificado, de forma que os visitantes receberão um aviso de &#8220;certificado não reconhecido&#8221; ao acessarem a página:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O propósito 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 não o site de um script kiddie qualquer. Certificados assinados por entidades certificadoras são automaticamente aceitos pelos navegadores (já que sua identidade já foi confirmada pela entidade certificadora), o que evita a exibição da mensagem.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Vamos então começar com a configuração de um certificado self-signed, e em seguida entender o que muda ao utilizar um certificado reconhecido.</p>
<p> </p>
<h2 class="western" style="page-break-before: always;">Usando um certificado self-signed</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
No <strong>Debian</strong> e derivados você pode gerar um certificado caseiro utilizando o script &#8220;make-ssl-cert&#8221;, instalado através do pacote &#8220;ssl-cert&#8221;:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># apt-get install ssl-cert</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">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 padrão para o servidor), como em:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><strong><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><span style="font-style: normal;"># mkdir /etc/apache2/ssl/<br />
# cd /etc/apache2/ssl/<br />
# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf apache.pem </span>-days 1095</span></strong></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A opção &#8220;-days&#8221; especifica a validade do certificado, que no exemplo será de 3 anos. O script solicitará as informações sobre a organização que serão incluídas no certificado, incluindo o código de país, estado, cidade e o nome da empresa. Estes são dados públicos, que serão exibidos aos clientes como parte das propriedades do certificado. O mais importante vem no final, quando o script pergunta:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">Common Name (eg, your name or your server&#8217;s hostname) []:</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Nesse ponto, você deve sempre fornecer a URL completa do servidor onde o certificado será usado, como em &#8220;www.gdhpress.com.br&#8221; ou &#8220;ssl.gdhn.com.br&#8221;. Se você especificar um domínio diferente, o cliente receberá um aviso adicional ao se conectar, avisando do problema. Isso afastará visitantes, já que muitos pensarão tratar-se de uma fraude.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com o certificado gerado, abra agora o arquivo &#8220;<strong>/etc/apache2/ports.conf</strong>&#8221; e adicione a linha &#8220;Listen 443&#8243; (a porta usada pelo https), como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><span>Port 80</span><strong><br />
Listen 443</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com isso, o Apache 2 já está configurado. Falta apenas ativar o uso do SSL dentro da configuração do(s) virtual host(s) onde ele for ser utilizado. Para testar, vamos ativá-lo na página padrão que usamos para testar o servidor.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Abra o arquivo &#8220;<strong>/etc/apache2/sites-available/default</strong>&#8220;. No início do arquivo, substitua a linha &#8220;NameVirtualHost *&#8221;, por:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">NameVirtualHost *:443<br />
NameVirtualHost *:80</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Isso explica que o Apache deve escutar tanto a porta 80 padrão, quanto a porta 443, usada pelo SSL. Logo em seguida, substitua a linha &#8220;&lt;VirtualHost *&gt;&#8221;, por:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;VirtualHost *:80&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Até aqui, dividimos a configuração em duas seções, uma para a porta 80, outra para a porta 443, usada pelo SSL. Falta agora adicionar a seção referente à configuração do SSL no final do arquivo:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;VirtualHost *:443&gt;<br />
DocumentRoot /var/www/<br />
ErrorLog /var/log/apache2/error.log<br />
CustomLog /var/log/apache2/access.log combined<br />
<strong>SSLEngine on<br />
SSLCertificateFile /etc/apache2/ssl/apache.pem</strong><br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Reinicie o servidor (/etc/init.d/apache2 restart) e acesse o endereço &#8220;<a href="https://127.0.0.1/">https://127.0.0.1</a>&#8221; para testar a configuração. Ao conectar, o navegador exibe um aviso &#8220;O certificado do servidor falhou no teste de autenticidade&#8221; ou similar, o que é normal ao usar um certificado caseiro.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O <strong>CentOS</strong> não inclui o make-ssl-cert, mas inclui um outro script bastante prático, disponível dentro da pasta &#8220;/etc/pki/tls/certs&#8221;:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># cd /etc/pki/tls/certs</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Uma vez dentro da pasta, use o comando &#8220;make&#8221; seguido pelo nome do arquivo que será gerado, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># make apache.pem</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Por default, a validade do certificado gerado pelo script será de 365 dias. Para usar outro valor, edite o arquivo &#8220;make-dummy-cert&#8221; dentro da pasta, substituindo o &#8220;-days 365&#8243; na quinta linha de baixo para cima pelo valor desejado antes de gerar o certificado.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Isso gerará o arquivo &#8220;<strong>/etc/pki/tls/certs/apache.pem</strong>&#8220;, contendo o certificado. Para que ele seja usado, abra o arquivo &#8220;<strong>/etc/httpd/conf.d/ssl.conf</strong>&#8221; e localize a linha:</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Descomente-a e indique a localização do arquivo gerado, como em:</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">SSLCACertificateFile <span>/etc/pki/tls/certs/apache.pem</span></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A partir daí, você pode reiniciar o serviço httpd e testar a configuração acessando o endereço &#8220;https://servidor&#8221;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Diferente do Debian, não é necessário adicionar a linha &#8220;Liste<span>n 443&#8243; na configuração do Apache, pois a linha faz parte do arquivo <span style="font-family: Bitstream Vera Sans, sans-serif;">&#8220;/etc/httpd/conf.d/ssl.conf&#8221;, que é criado automaticamente ao instalar o pacote mod_ssl. Dentro do arquivo, você encontra as linhas:</span></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"># When we also provide SSL we have to listen to the<br />
# the HTTPS port in addition.<br />
#<br />
Listen 443</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Em outras distribuições, você pode usar diretamente o openssl para gerar o certificado. Nesse caso, o comando é maior, já que precisamos especificar manualmente um volume maior de parâmetros. Scripts como o make-ssl-cert são desenvolvidos justamente para tornar a geração do certificado mais simples.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># openssl req -new -x509 -days 1095 -sha1 -newkey rsa:1024 -nodes \<br />
-keyout server.key -out meuservidor.csr</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Este comando gera dois arquivos separados, o &#8220;server.key&#8221;, que contém a chave criptográfica e o &#8220;meuservidor.csr&#8221;, que contém o certificado que será fornecido aos clientes. Estes dois arquivos tem a mesma função do arquivo &#8220;.pem&#8221; 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 configuração principal do Apache <span><span style="font-family: Bitstream Vera Sans, sans-serif;">(&#8220;/etc/apache2/httpd.conf&#8221; no caso do Debian ou &#8220;/etc/httpd/conf/httpd.conf&#8221;, no caso do CentOS)</span></span>, especificando as localizações dos dois arquivos:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">SSLCertificateFile /etc/apache2/ssl/meuservidor.csr<br />
SSLCertificateKeyFile /etc/apache2/ssl/server.key</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Não esqueça de ativar o mod_ssl e incluir a linha &#8220;Listen 443&#8243; na configuração do Apache, para que ele passe a escutar a porta do SSL. Certifique-se também de que a porta 443 está aberta na configuração do firewall.</span></p>
<h2 class="western" style="page-break-before: always;">Usando um certificado reconhecido</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
Finalmente, temos a configuração para um certificado reconhecido, que será assinado por uma entidade certificadora, que você utilizaria em um site de comércio eletrônico aberto ao público.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Uma das entidades certificadoras mais tradicionais é a Verisign (<a href="http://www.verisign.com/">http://www.verisign.com/</a>), que oferece uma série de garantias sobre os certificados emitidos. O grande problema com relação à Verisign é o preço: o certificado de validação mais simples custa nada menos de US$ 499 anuais, com opções de até US$ 1499. Com preços tão altos, não é de se estranhar que existam inúmeras outras entidades certificadoras, que oferecem preços mais competitivos.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Alguns exemplos são a Thawte (<a href="http://www.thawte.com/">http://www.thawte.com</a>) a GeoTrust (<a href="http://www.geotrust.com/">http://www.geotrust.com</a>), a NetworkSolutions (<a href="http://www.networksolutions.com/">http://www.networksolutions.com</a>), a Digicert (<a href="http://www.digicert.com/">http://www.digicert.com/</a>) e a Comodo (<a href="http://www.instantssl.com/">http://www.instantssl.com</a>), que possui opções a partir de US$ 79 anuais.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A Comodo é a mesma empresa que desenvolve o Comodo Firewall, distribuído gratuitamente como uma forma de divulgação dos serviços de certificação. No site está disponível também a opção de gerar um certificado de teste (válido 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:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Existem ainda casos de empresas que oferecem certificados de baixo custo, como a Godaddy (<a href="https://www.godaddy.com/">http://www.godaddy.com</a>, a mesma que faz registro de domínios), que oferece certificados a partir de US$ 29.90.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Em termos de segurança, não existe muita diferença entre um certificado emitido pela Godaddy ou pela Verisign, as principais diferenças são o nível de validação e as garantias oferecidas por cada uma em caso de fraude ou de quebra da chave criptográfica. Assim como em outras áreas, o principal fator na decisão acaba sendo a questão da confiança.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Muitos serviços de hospedagem oferecem a possibilidade de utilizar um certificado compartilhado, onde a empresa responsável &#8220;empresta&#8221; seu próprio certificado para uso dos clientes, em troca de uma taxa de manutenção anual. Esta opção pode parecer interessante devido ao baixo custo e à facilidade de implementação, mas não é o mesmo que obter seu próprio certificado, já que muito provavelmente você precisará hospedar seu site em um subdomínio e os clientes verão o nome da empresa de hospedagem e não o nome da sua empresa ao examinarem as propriedades do certificado.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Existe ainda a possibilidade de obter um certificado gratuito no <a href="http://www.cacert.org/">http://www.cacert.org/</a>. Ele é reconhecido pela CAcert, mas o certificado raiz deles não vem pré-instalado na maioria dos navegadores, o que faz com que os clientes continuem recebendo a mensagem de certificado não válido ao acessar o servidor, de forma similar ao que temos ao usar um certificado self-signed.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Ao contratar os serviços de uma entidade certificadora, sua parte no trabalho é a de gerar uma chave de encriptação e uma requisição de certificado, o que é novamente feito usando o openssl:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># openssl req -new -nodes -keyout gdhn.key -out gdhn.csr</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O &#8220;gdhn.key&#8221; e o &#8220;gdhn.csr&#8221; indicam os arquivos com a chave e com a requisição do certificado que serão gerados. Você precisará responder as mesmas perguntas sobre o país, estado, cidade, nome da empresa, etc., que precisam ser respondidas corretamente, já que as informações serão examinadas não apenas pela entidade certificadora, mas também pelos clientes:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">Country Name (2 letter code) [AU]: BR<br />
State or Province Name (full name) [Some-State]: Estado<br />
Locality Name (eg, city) []: Cidade<br />
Organization Name (eg, company) []: Minha Empresa LTDA<br />
Organizational Unit Name (eg, section) []: Vendas<br />
Common Name (eg, YOUR name) []: <strong>ssl.minhaempresa.com.br</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Como comentei anteriormente, o campo &#8220;Common Name&#8221; deve ser preenchido com o domínio onde o certificado será usado (incluindo o &#8220;www&#8221; ou o subdomínio usado), caso contrário os clientes receberão um aviso ao acessarem o site:</p>
<p>Em geral, as entidades certificadoras oferecem a opção de obter um certificado curinga (wildcard), que cobre automaticamente todos os subdomínios usados no site. Entretanto, como eles abrem a possibilidade de usar vários subdomínios 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:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No final do processo, o openssl oferece a opção de especificar uma senha (challenge password) para o certificado. É importante deixá-la em branco, caso contrário 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 diretório disponível 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.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Depois de gerar a requisição, o próximo 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 conteúdo pode ser copiado e colado em um formulário web. Depois de confirmada sua identidade e feito o pagamento, você receberá de volta o certificado assinado, que pode ser então usado na configuração do Apache.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A configuração consiste em adicionar as linhas &#8220;SSLCertificateFile&#8221; e &#8220;SSLCertificateKeyFile&#8221;, indicando a localização dos arquivos .crt e .key recebidos. Em muitos casos, você receberá também um terceiro arquivo, com extensão &#8220;ca-bundle&#8221; ou similar, que é usado em conjunto com uma terceira opção, a &#8220;SSLCertificateChainFile&#8221;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Este terceiro arquivo contém uma combinação 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 é também chamado de certificado intermediário (Intermediate Certificate). Temos aqui um exemplo de configuração com as três opções:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;VirtualHost *:443&gt;<br />
DocumentRoot /var/www/gdhn<br />
SSLEngine on<br />
SSLCertificateFile /etc/apache2/ssl/ssl_gdhn_com_br.crt<br />
SSLCertificateKeyFile /etc/apache2/ssl/gdhn_com_br.key<br />
SSLCertificateChainFile /etc/apache2/ssl/ssl_gdhn_com_br.ca-bundle<br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O processo de emissão do certificado inclui uma verificação de identidade, que é justamente um dos principais papéis da entidade certificadora, já que se qualquer um pudesse gerar certificados válidos 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 verificação de titularidade via e-mail, onde você deve confirmar um código enviado para uma conta administrativa, como &#8220;admin@meudominio&#8221; ou &#8220;hostmaster@meudominio&#8221;. Nos planos mais caros (onde a entidade certificadora realmente oferece garantias, inclusive financeiras sobre o certificado emitido), o processo é mais burocrático, incluindo o envio de documentos.</p>
<h2 class="western" style="page-break-before: always;">Usando o SSL para pastas específicas</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
Em geral, você vai desejar usar o SSL apenas para seções específicas do site, como no caso de páginas de cadastro e de vendas, por exemplo. Na maioria dos casos, o cliente navega livremente pelo site, usando o protocolo HTTP não 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 páginas em HTTPS é caro em termos de processamento, de forma que encriptar o acesso a todo o site acabaria gerando um grande desperdício de recursos.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Você tem então duas opções. Usar um domínio separado para a área protegida, como &#8220;ssl.minhaempresa.com&#8221;, de forma que ela fique completamente separada do restante do site, ou proteger apenas uma pasta específica do site, tornando mandatário o uso do HTTPS ao acessá-la.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para a primeira solução, você usaria uma configuração similar a essa dentro da configuração do Apache:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;VirtualHost *:80&gt;<br />
ServerName www.gdhn.com.br<br />
DocumentRoot /var/www/gdhn<br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;VirtualHost *:443&gt;<br />
ServerName ssl.gdhn.com.br<br />
DocumentRoot /var/www/gdhn-ssl<br />
SSLEngine on<br />
<font face="Bitstream Vera Sans Mono, sans-serif"><span>SSLCertificateFile /etc/apache2/ssl/ssl_gdhn_com_br.crt<br />
SSLCertificateKeyFile /etc/apache2/ssl/gdhn_com_br.key<br />
SSLCertificateChainFile /etc/apache2/ssl/ssl_gdhn_com_br.ca-bundle</span></font></span><br />
&lt;/VirtualHost&gt;</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Veja que, nesse caso, temos essencialmente dois sites separados, um acessível apenas via HTTP e outro apenas via HTTPS. Ao acessar o &#8220;http://www.gdhn.com.br&#8221; o visitante acessaria a pasta &#8220;/var/www/gdhn&#8221;, que conteria o conteúdo geral do site, enquanto ao acessar o &#8220;https://ssl.gdhn.com.br&#8221; ele acessaria as páginas da seção segura, armazenadas na pasta &#8220;/var/www/gdhn-ssl&#8221;. A interligação entre as duas partes seria então feita através de links, que levariam o visitante de uma seção à outra do site.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A segunda opção, usar uma pasta para o SSL, é um pouco mais elegante, mas demanda uma configuração um pouco mais cuidadosa. Imagine que a seção segura do site será armazenada dentro da pasta &#8220;/var/www/gdhn/loja&#8221;, que deverá ser acessada apenas via HTTPS.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Ao acessar o &#8220;<a href="https://www.gdhn.com.br/">http<strong>s</strong>://www.gdhn.com.br</a>&#8221; o visitante cairá direto na pasta segura e, ao tentar acessar o &#8220;<a href="http://www.gdhn.com.br/loja">http://www.gdhn.com.br/loja</a>&#8221; ele será automaticamente redirecionado ao &#8220;<a href="https://www.gdhn.com.br/">http<strong>s</strong>://www.gdhn.com.br</a>&#8220;. Nesse caso, você utilizaria uma configuração similar a essa:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;VirtualHost *:80&gt;<br />
ServerName www.gdhn.com.br<br />
DocumentRoot /var/www/gdhn<br />
<strong>&lt;Directory /var/www/gdhn/loja&gt;<br />
SSLRequireSSL<br />
&lt;/Directory&gt;<br />
Redirect /loja https://www.gdhn.com.br </strong><br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;VirtualHost *:443&gt;<br />
ServerName www.gdhn.com.br<br />
<strong>DocumentRoot /var/www/gdhn/loja</strong><br />
SSLEngine on<br />
<span>SSLCertificateFile /etc/apache2/ssl/ssl_gdhn_com_br.crt<br />
SSLCertificateKeyFile /etc/apache2/ssl/gdhn_com_br.key<br />
SSLCertificateChainFile /etc/apache2/ssl/ssl_gdhn_com_br.ca-bundle</span><br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Veja que agora, usamos o domínio &#8220;<a href="http://www.gdhn.com.br/">www.gdhn.com.br</a>&#8221; nas duas seções da configuração, tanto para HTTP quanto para HTTPS, entretanto, a seção com a configuração do HTTPS aponta para a pasta &#8220;/var/www/gdhn/loja&#8221;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Como a idéia é que os arquivos da pasta possam </span><span>ser acessados apenas usando o SSL, adicionamos uma diretiva para a pasta (&lt;Directory /var/www/gdhn/loja&gt;), dizendo que ela só pode ser acessada via HTTPS (SSLRequireSSL). </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;"><font face="Bitstream Vera Sans, sans-serif"><span>Para que os visitantes que tentarem acessar a pasta via HTTP sejam encaminhados para a área protegida, usamos uma regra de encaminhamento (Redirect /loja </span></font></span><a href="https://www.gdhn.com.br/"><span><span style="font-family: Bitstream Vera Sans, sans-serif;">https://www.gdhn.com.br</span></span></a><span><span style="font-family: Bitstream Vera Sans, sans-serif;">). </span>Esta regra utiliza o módulo &#8220;rewrite&#8221;, que precisa estar ativo na configuração do Apache. Caso necessário, ative-o usando o comando &#8220;a2enmod rewrite&#8221;.</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Finalmente, caso você queira que todo o conteúdo do site fique disponível via HTTPS e que os visitantes que tentarem acessar o <a href="http://www.gdhn.com.br/">http://www.gdhn.com.br</a>/ sejam encaminhados para o <a href="https://gdhn.com.br/">http<strong>s</strong>://www.gdhn.com.br</a>, a configuração seria similar a essa:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;VirtualHost *:80&gt;<br />
ServerName www.gdhn.com.br<br />
DocumentRoot /var/www/gdhn<br />
<strong>&lt;Directory /var/www/gdhn/&gt;<br />
SSLRequireSSL<br />
&lt;/Directory&gt;<br />
Redirect / https://www.gdhn.com.br</strong><br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;VirtualHost *:443&gt;<br />
ServerName www.gdhn.com.br<br />
<strong>DocumentRoot /var/www/gdhn/</strong><br />
SSLEngine on<br />
<span>SSLCertificateFile /etc/apache2/ssl/ssl_gdhn_com_br.crt<br />
SSLCertificateKeyFile /etc/apache2/ssl/gdhn_com_br.key<br />
SSLCertificateChainFile /etc/apache2/ssl/ssl_gdhn_com_br.ca-bundle</span><br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Como pode ver, a configuração é quase idêntica à do exemplo anterior. As únicas diferenças são que agora a seção com a configuração do HTTPS aponta para o diretório raiz do site e a regra de redirecionamento encaminha todos os acessos feitos feitos via HTTP para o <a href="https://gdhn.com.br/"><span>https://www.gdhn.com.br</span></a><span>, fazendo com que o acesso a qualquer página do site seja feito via SSL.</span></p>
<p><span></p>
<h1 class="western" style="page-break-before: always;">Ativando o uso de Virtual Hosts</h1>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
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 domínios ou subdomínios diferentes usando um único servidor e um único endereço IP. Os únicos limitantes com relação ao volume de sites que é possível hospedar são os recursos de hardware do servidor e a banda disponível.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Serviços de hospedagem compartilhada (os planos de shared hosting) utilizam este recurso de forma intensiva, de forma a espremer o maior número possível de clientes em cada servidor, sem falar nos serviços de hospedagem gratuita onde, em muitos casos, um único servidor pode hospedar dezenas de milhares de sites diferentes.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">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, memória, processamento e link) são divididos entre os sites hospedados, assim como vários programas abertos simultaneamente disputam os recursos da máquina. Isso faz muito sentido no caso de sites pequenos ou médios, que não possuem um número suficiente de visitas para saturarem, sozinhos, o servidor.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Em geral, o servidor é configurado de forma que os usuários tenham direito a uma determinada quota de espaço 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 instalação de gestores de conteúdo como o WordPress. Entretanto, eles não podem instalar novos pacotes nem alterar a configuração do servidor. Feitas as apresentações, vamos à configuração. <img src='http://www.luizoliveira.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Invariavelmente, ao hospedar vários domínios, você precisa configurar um servidor DNS para responder por todos os domínios hospedados no servidor, entregando o endereço IP do seu servidor Apache. O cliente acessa então o servidor, solicitando o site desejado, como em &#8220;joao.com.br&#8221;; o servidor web verifica a configuração e entrega os arquivos apropriados ao cliente.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A configuração do servidor DNS é pouco intuitiva, mas não chega a ser tão complicada quanto muitos dizem. Em resumo, você precisaria instalar o bind no servidor e editar a configuração, adicionando uma nova configuração de zona para cada domínio hospedado. Isso é feito em duas etapas. Na primeira, você edita o arquivo named.conf, adicionando uma entrada com esta, especificando o domínio e o arquivo com a configuração:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">zone &#8220;joao.com.br&#8221; IN {<br />
type master;<br />
file &#8220;/etc/bind/db.joao&#8221;;<br />
allow-transfer { 64.234.23.13; };<br />
};</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Dentro do arquivo &#8220;/etc/bind/db.joao&#8221;, especificado no arquivo, iria uma configuração similar a esta, especificando o domínio, o nome do servidor e o endereço IP usado por ele, assim como o nome e o endereço IP do servidor DNS secundário:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">@ IN SOA servidor.joao.com.br. hostmaster.joao.com.br. (<br />
2008061645 3H 15M 1W 1D )<br />
NS servidor.joao.com.br.<br />
NS ns2.joao.com.br.<br />
IN MX 10 servidor.joao.com.br.<br />
joao.com.br. A 64.234.23.12<br />
www A 64.234.23.12<br />
ns1 A 64.234.23.13</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Não é necessário que o DNS esteja instalado no mesmo servidor que o Apache, a função dele será unicamente responder às requisições dos clientes, fornecendo o IP correto. Vamos estudar a configuração do DNS em detalhes no próximo capítulo, dedicado unicamente ao assunto. Este foi apenas um exemplo rápido para que você tenha uma idéia geral sobre a configuração. Por enquanto, vamos nos concentrar na configuração do Apache propriamente dito.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para ativar o uso dos virtual hosts, o primeiro passo é criar uma pasta separada para cada site que será hospedado. Você pode usar a própria pasta &#8220;/var/www&#8221;, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># mkdir /var/www/joao<br />
# mkdir /var/www/maria</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Em seguida, é necessário adicionar uma nova seção dentro da configuração do Apache para cada um, logo depois da configuração do site default.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Nas distribuições derivadas do <strong>Debian</strong>, são usados arquivos de configuração separados para cada site, armazenados na pasta &#8220;/etc/apache2/sites-available&#8221;. Imagine que vamos hospedar os sites &#8220;www.joao.com.br&#8221; e &#8220;www.maria.com.br&#8221;, usando as duas pastas criadas anteriormente. Criaríamos, então, um arquivo para cada site, contendo o seguinte:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">- <strong>/etc/apache2/sites-available/joao:</strong></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;VirtualHost *:80&gt;<br />
ServerAdmin joao@joao.com.br<br />
ServerName www.joao.com.br<br />
ServerAlias joao.com.br www.joao.com.br<br />
DocumentRoot /var/www/joao<br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span>- </span><strong>/etc/apache2/sites-available/maria:</strong></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;VirtualHost *:80&gt;<br />
ServerAdmin maria@gmail.com<br />
ServerName www.maria.com.br<br />
ServerAlias maria.com.br www.maria.com.br<br />
DocumentRoot /var/www/maria<br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Note que adicionei uma nova diretiva, a &#8220;ServerAlias&#8221;, que permite que o site seja acessado tanto com, quanto sem o &#8220;www&#8221;. A linha &#8220;ServerAdmin&#8221; é, na verdade, opcional, contém apenas o e-mail de contato do administrador do site.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A mesma configuração é usada se você quiser hospedar os sites usando subdomínios, como em &#8220;joao.gdhn.com.br&#8221; e &#8220;maria.gdhn.com.br&#8221;. Nesse caso, não usamos o &#8220;www&#8221; e, por isso, não precisamos da linha &#8220;ServerAlias&#8221;:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;VirtualHost *:80&gt;<br />
ServerAdmin hostmaster@gdhn.com.br<br />
ServerName maria.gdhn.com.br<br />
DocumentRoot /var/www/maria<br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Depois de feita a configuração, ative ambos os sites usando o comando a2ensite, o que criará links para eles na pasta &#8220;/etc/apache2/sites-enabled&#8221;:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># a2ensite joao<br />
# a2ensite maria</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para que a configuração funcione, é necessário editar também o arquivo &#8220;<strong>/etc/apache2/sites-available/default</strong>&#8220;, substituindo as linhas:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">NameVirtualHost *<br />
&lt;VirtualHost *&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Por:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">NameVirtualHost *:80<br />
&lt;VirtualHost *:80&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Essa configuração é necessária para que você possa ativar o suporte a SSL para os virtual hosts. Sem ela, além do SSL não funcionar, você precisaria modificar a configuração de cada um, usando sempre &#8220;&lt;VirtualHost *&gt;&#8221; ao invés de &#8220;&lt;VirtualHost *:80&gt;&#8221;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Você pode adicionar quantos sites quiser usando esses mesmos passos. Sempre que alterar a configuração, é necessário atualizar a configuração do Apache. Nesse caso, o parâmetro &#8220;reload&#8221; é suficiente (o &#8220;force-reload&#8221; é necessário apenas ao ativar ou desativar módulos):</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># /etc/init.d/apache2 reload</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Além de configurar o servidor web, é preciso configurar também um servidor FTP ou SFTP, para que os usuários possam acessar os arquivos de suas respectivas pastas, a fim de atualizarem seus sites. <span>A forma mais simples de fazer isso é criar um usuário para cada um e dar acesso a eles via FTP (mais adiante veremos como configurar o servidor FTP com o Proftpd). Outra opção é utilizar o SFTP, que permite acesso seguro. Veremos mais detalhes sobre ele no capítulo sobre o SSH. </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Veja que as três coisas acabam se integrando: o Bind resolve os nomes de domínio, o Apache fornece as páginas e o FTP ou SFTP permite que os webmasters atualizem os sites.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span>Continuando, a</span>o utilizar o <strong>Fedora</strong>, <strong>CentOS</strong> ou outra distribuição derivada do Red Hat, a configuração de todos os virtual hosts é adicionada na seção final do arquivo &#8220;<strong>/etc/httpd/conf/httpd.conf</strong>&#8220;, depois do &#8220;# Section 3: Virtual Hosts&#8221;. <span>Procure pela seção &#8220;Virtual Hosts&#8221;, perto do final do arquivo, e descomente a linha:</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">NameVirtualHost *:80</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A partir daí, você pode adicionar cada um dos sites hospedados no servidor usando a mesma configuração que vimos anteriormente, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;VirtualHost *:80&gt;<br />
ServerName www.joao.com.br<br />
ServerAlias joao.com.br www.joao.com.br<br />
DocumentRoot /var/www/joao<br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;VirtualHost *:80&gt;<br />
ServerName www.maria.com.br<br />
ServerAlias maria.com.br www.maria.com.br<br />
DocumentRoot /var/www/maria<br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A principal diferença nesse caso é que para desativar um determinado site você precisa abrir novamente o arquivo de configuração e remover (ou comentar) a seção referente a ele, em vez de utilizar o &#8220;a2dissite&#8221;, como no Debian.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Depois de fazer alterações no arquivo, é necessário recarregar a configuração para que elas entrem em vigor:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># service httpd reload</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Fazendo dessa forma, os logs de acessos serão misturados no log principal do Apache, o &#8220;/var/log/apache2/access.log&#8221;. Isso não é problema se você está utilizando o Google Analytics ou outra ferramenta externa para auditar os acessos dos sites (ou se simplesmente você não está preocupado em medir os acessos), mas é um grande obstáculo se você pretende usar o webalizer para gerar os relatórios de acesso.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para que cada site tenha seus logs separados, você deve adicionar duas linhas adicionais, na configuração de cada virtual host, especificando a localização do arquivo que será usado. Você com certeza não gostaria que os logs ficassem disponíveis ao público, por isso é importante usar diretórios diferentes para os arquivos do site e para os logs, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;VirtualHost *:80&gt;<br />
ServerAdmin joao@joao.com.br<br />
ServerName www.joao.com.br<br />
ServerAlias joao.com.br www.joao.com.br<br />
DocumentRoot /var/www/joao/html<br />
<strong>ErrorLog /var/www/joao/logs/error.log<br />
CustomLog /var/www/joao/logs/access.log combined</strong><br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Você pode também salvar os logs na pasta de logs padrão do Apache, de forma a se beneficiar do rotacionamento automático de logs oferecido pelo logrotate. Nesse caso, você precisa apenas especificar um arquivo de log diferente para cada site, todos salvos dentro da pasta padrão, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;VirtualHost *:80&gt;<br />
ServerAdmin joao@joao.com.br<br />
ServerName www.joao.com.br<br />
ServerAlias joao.com.br www.joao.com.br<br />
DocumentRoot /var/www/joao/html<br />
<strong>ErrorLog /var/log/apache2/joao.error.log<br />
CustomLog /var/log/apache2/joao.access.log combined</strong><br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Note que, como todos os sites ficam hospedados no mesmo servidor, a única forma de chegar ao site desejado é fazendo o acesso através do domínio. Se você tentar acessar diretamente o IP do servidor, vai cair no site padrão (configurado através do arquivo<span> &#8220;/etc/apache2/sites-available/default&#8221;), que, por padrão, usa o raiz da pasta &#8220;/var/www&#8221;. Esta página default pode ser usada para mostrar alguma publicidade da empresa responsável pelo servidor, ou uma lista dos sites hospedados, por exemplo. </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Concluindo, caso queira ativar o suporte a SSL para algum dos virtual hosts, adicione a sessão referente ao SSL dentro da configuração 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 &#8220;https://&#8221;, ou utilizar uma pasta separada, onde está a parte de comércio eletrônico do site, por exemplo, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;VirtualHost *:443&gt;<br />
ServerName www.joao.com.br<br />
DocumentRoot /var/www/joao/ssl<br />
<strong>SSLEngine on<br />
SSLCertificateFile /etc/apache2/ssl/apache.pem</strong><br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Neste caso, ao acessar o &#8220;<a href="http://joao.com.br/">http://www.joao.com.br</a>&#8220;, o visitante visualizará o conteúdo da pasta &#8220;/var/www/joao/html&#8221;, enquanto ao acessar o &#8220;<a href="https://joao.com.br/">http<strong>s</strong>://www.joao.com.br</a>&#8220;, visualizará a &#8220;/var/www/joao/ssl&#8221;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Como vimos no tópico anterior, certificados SSL são válidos apenas para um domínio específico. Se você deseja oferecer suporte a SSL para vários subdomínios hospedados no servidor, a melhor opção é adquirir um certificado wildcard, que é valido para qualquer subdomínio dentro do domínio principal da sua empresa. Isso permite que você crie diversos virtual hosts, como &#8220;loja1.minhaempresa.com&#8221; e &#8220;loja2.minhaempresa.com&#8221;, utilizando o mesmo certificado.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Essa configuração manual funciona para pequenos servidores, que hospedam algumas dezenas ou centenas de páginas. Grandes serviços de hospedagem geralmente acabam desenvolvendo algum tipo de sistema para automatizar a tarefa. Nos serviços de hospedagem gratuita, por exemplo, onde o número de clientes é assustadoramente grande, as alterações são feitas de forma automática quando o visitante faz seu cadastro, geralmente através de um sistema escrito em PHP ou Java.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Conforme o número de usuários cresce e o espaço em disco no servidor começa a ficar escasso, você começará a sentir falta de um sistema de quotas, que limite o espaço que cada usuário pode usar. Para isso, consulte o tópico sobre quotas de disco, mais adiante.</p>
<p> </p>
<p></span></p>
<p> </p>
<h1 class="western" style="page-break-before: always;">Gerando estatísticas</h1>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
O Webalizer é um gerador de estatísticas de acesso para o servidor web. O Apache, por si só, loga todos os acessos feitos ao servidor, incluindo as páginas acessadas, o tráfego gerado, os navegadores e os sistemas operacionais usados pelos clientes, entre outras informações úteis para entender os hábitos e interesses de seus visitantes.</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-style: normal;">Com o Apache funcionando, é simples instalar o Webalizer: procure pelo pacote &#8220;webalizer&#8221; dentro do gerenciador de pacotes. Ele é incluído em todas as principais distribuições. Nas derivadas do Debian, você pode instalá-lo via apt-get: <strong></strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># apt-get install webalizer</strong> </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Ao contrário do Apache, o Webalizer não é um serviço que fica residente, mas sim um executável que precisa ser chamado cada vez que quiser ver a página de estatísticas atualizada (assim como o Sarg, que vimos no capítulo sobre o Squid). Basta chamá-lo como root:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"># <strong>webalizer</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Por padrão, a página de estatísticas é armazenada na pasta &#8220;webalizer/&#8221;, dentro do seu servidor web. Se o Apache estiver configurado para armazenar as páginas dentro do diretório &#8220;/var/www&#8221;, então as estatísticas vão para a pasta &#8220;/var/www/webalizer&#8221;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O arquivo de configuração do Webalizer é o &#8220;<strong>/etc/webalizer.conf</strong>&#8220;. É importante que você revise o arquivo de configuração, indicando pelo menos a localização correta do arquivo de log do Apache e alterando a pasta onde as estatísticas ficarão armazenadas, caso não queira que elas fiquem disponíveis ao público. Você pode armazená-las em uma pasta isolada no servidor web, como, por exemplo, &#8220;/var/webalizer&#8221;, de forma que elas fiquem disponíveis apenas localmente ou através de um script. As duas opções &#8220;essenciais&#8221; dentro do arquivo são:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">LogFile /var/log/apache/access.log<br />
OutputDir /var/www/webalizer</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para não precisar executar o comando &#8220;<span>webalizer</span>&#8221; manualmente sempre que precisar atualizar as estatísticas, 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 &#8220;<strong>/etc/cron.daily/</strong>&#8221; ou &#8220;<strong>/etc/cron.hourly/</strong>&#8220;, contendo o comando &#8220;<strong>webalizer</strong>&#8220;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Todos os scripts colocados dentro dessas pastas são, respectivamente, executados todos os dias de manhã, ou uma vez por hora. Para que funcione, é importante verificar se o serviço &#8220;<strong>cron</strong>&#8221; ou &#8220;<strong>crond</strong>&#8221; está ativo. No caso do Debian, o script para execução do webalizer através do cron é criado automaticamente e configurado para ser executado uma vez por dia.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Em um servidor Apache com vários virtual hosts, é possível fazer com que o Webalizer gere estatísticas separadas para cada um, com uma configuração 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:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">&lt;VirtualHost *:80&gt;<br />
ServerAdmin joao@joao.com.br<br />
ServerName www.joao.com.br<br />
ServerAlias joao.com.br<br />
DocumentRoot /var/www/joao/html<br />
<strong>ErrorLog /var/www/joao/logs/error.log<br />
CustomLog /var/www/joao/logs/access.log combined</strong><br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Configurando dessa forma, os logs do site &#8220;joao.com.br&#8221; ficarão armazenados no arquivo &#8220;/var/www/joao/logs/access.log&#8221;, os do &#8220;maria.com.br&#8221; no &#8220;/var/www/maria/logs/access.log&#8221; e assim por diante, sempre separados dos arquivos disponíveis ao público, que vão na pasta &#8220;html&#8221;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O próximo passo é criar um arquivo de configuração do Webalizer separado para cada um. Para manter as coisas organizadas, crie o diretório &#8220;<strong>/etc/webalizer</strong>&#8221; e crie uma cópia do arquivo webalizer.conf original para cada site, dentro da pasta, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># mkdir /etc/webalizer<br />
# cd /etc/webalizer<br />
# cp webalizer.conf joao.conf<br />
# cp webalizer.conf maria.conf</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Precisamos agora editar cada um dos arquivos, informando o arquivo de log, domínio e diretório onde ficarão armazenados os relatórios de cada site. No arquivo &#8220;/etc/webalizer/joao.conf&#8221;, por exemplo, você teria (além das outras linhas do arquivo padrão) as linhas:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">LogFile /var/www/joao/logs/access.log<br />
OutputDir /var/www/joao/html/webalizer<br />
HostName joao.com.br</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Depois de gerar os arquivos de configuração para todos os sites, falta fazer com que o Webalizer processe todos automaticamente. Uma forma rápida de fazer isso (dica do próprio FAQ do webalizer) é usar o comando:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># for i in /etc/webalizer/*.conf; do webalizer -c $i -q; done</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Esse é, na verdade, um mini-script, que vai executar o Webalizer uma vez para cada arquivo &#8220;.conf&#8221; encontrado no diretório &#8220;/etc/webalizer&#8221;, gerando todas as estatísticas em uma tacada só. Para que o comando seja executado todos os dias automaticamente, coloque-o dentro de um script no diretório &#8220;<strong>/etc/cron.daily</strong>&#8220;.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No <strong>Debian</strong>, temos o script &#8220;<strong>/etc/cron.daily/webalizer</strong>&#8220;, que é criado automaticamente durante a instalação do pacote e se encarrega de gerar as estatísticas diariamente, lendo o arquivo &#8220;/etc/webalizer.conf&#8221;. Podemos modificá-lo para que ele leia também os arquivos dentro do diretório &#8220;/etc/webalizer&#8221;. Para isso, edite o arquivo e substitua as linhas:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><span style="font-size: x-small;"># Run webalizer quietly<br />
${WEBALIZER_BIN} -c ${WEBALIZER_CONF} -q<br />
${WEBALIZER_BIN} -c ${WEBALIZER_CONF} -q ${nonrotatedlog}</span></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Por:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><span style="font-size: x-small;"># Run webalizer quietly<br />
${WEBALIZER_BIN} -c ${WEBALIZER_CONF} -q<br />
${WEBALIZER_BIN} -c ${WEBALIZER_CONF} -q ${nonrotatedlog}</span></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><span style="font-size: x-small;"><strong>for i in /etc/webalizer/*.conf; do ${WEBALIZER_BIN} -c $i -q; done<br />
for i in /etc/webalizer/*.conf; do ${WEBALIZER_BIN} -c $i -q ${nonrotatedlog}; done</strong></span></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Um problema comum é como restringir o acesso às estatísticas, afinal, na maioria dos casos, elas não devem ficar disponíveis ao público. A solução mais simples nesse caso é usar um arquivo <strong>.htaccess</strong>, que permite restringir o acesso ao diretório, exigindo login e senha.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O primeiro passo é criar um arquivo de senhas, usando o comando &#8220;<strong>htpasswd</strong>&#8220;, que faz parte do pacote &#8220;apache2-utils&#8221; (o mesmo que utilizamos para gerar as senhas do Squid). O arquivo de senhas deve, preferencialmente, ser armazenado em uma pasta fora do diretório com os arquivos do site. Se possível, use um arquivo separado para cada site hospedado. Vou usar como exemplo a pasta &#8220;/etc/apache2/auth&#8221;:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong># mkdir /etc/apache2/auth<br />
# cd /etc/apache2/auth<br />
# touch joao.auth<br />
# htpasswd joao.auth joao</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">New password:<br />
Re-type new password:</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Aqui, criamos o arquivo &#8220;/etc/apache2/auth/joao.auth&#8221;, contendo o usuário &#8220;joao&#8221; e a senha digitada, armazenada de forma encriptada. Você pode armazenar vários logins no mesmo arquivo, executando o comando uma vez para cada usuário.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com o arquivo de senhas criado, crie um arquivo de texto chamando &#8220;<strong>.htaccess</strong>&#8221; no raiz do diretório das estatísticas, contendo o seguinte:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">AuthName &#8220;Acesso Restrito&#8221;<br />
AuthType Basic<br />
AuthUserFile /etc/apache2/auth/joao.auth<br />
require valid-user</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A linha &#8220;AuthName&#8221; contém o texto que será mostrado na tela de login exibida para o cliente, enquanto o &#8220;AuthUserFile&#8221; contém o arquivo de senhas gerado.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Concluindo, embora o webalizer ofereça bons recursos, o uso de relatórios de estatísticas locais está saindo um pouco de moda devido à popularização do Google Analytics, o serviço de geração de estatísticas oferecido pelo Google, que permite gerar estatísticas muito mais detalhadas e pode ser integrado ao AdSense e ao AdWords: <a href="http://www.google.com/analytics/">http://www.google.com/analytics/</a>.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Enquanto o Webalizer trabalha gerando os relatórios a partir das estatísticas do Apache, o Analytics os gera a partir de um pequeno javascript que é incluído nas páginas e executado diretamente pelos clientes. Isso faz com que os relatórios do Analytics acabem oferecendo números mais próximos da realidade, já que excluem o tráfego gerado pelos crawlers dos mecanismos de busca e outros tipos de tráfego automatizado, que acabam inflando bastante as estatísticas do Webalizer.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Um ponto negativo do Analytics é que ele não computa acessos de visitantes que bloqueiam a execução de javascript no navegador (como os visitantes usando a extensão NoScript do Firefox) ou que acessam o site usando navegadores primitivos, sem suporte a javascript, como no caso de muitos navegadores móveis.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com isso, os números 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.</p>
<h1 class="western" style="page-break-before: always;">Gestores de conteúdo e add-ons</h1>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
Agora que já estudamos sobre a instalação do servidor LAMP e sobre a configuração dos virtual hosts, vamos a alguns exemplos de instalação de gestores de conteúdo que você pode instalar no servidor.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com o MySQL instalado e o suporte a PHP ativo, você tem pronta a estrutura necessária para instalar os diversos scripts de fórum, chat, gestores de conteúdo 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 página de configuração através do navegador) para incluir as informações sobre o servidor (base de dados a ser usada, login e senha, etc.) e concluir a configuração.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Note que, embora o Apache e o MySQL sejam bastante seguros, nada garante que os scripts desenvolvidos por terceiros também serão. De nada adianta ter um servidor web extremamente seguro, se o script de gerenciamento de conteúdo que você instalou tem um buffer overflow no campo de login que permite executar comandos arbitrários, obter a senha do servidor MySQL (que o script usa para fazer seu trabalho) ou fazer alterações no conteúdo do site.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O ponto fraco na segurança de qualquer site ou fórum é quase sempre a segurança do script usado. Não escolha qual usar pensando apenas na facilidade de uso. Investigue o histórico de segurança e, uma vez escolhido qual usar, fique de olho nas atualizações de segurança.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para os exemplos, escolhi o phpBB, o WordPress e o Ruby on Rails. O phpBB é um sistema de fórum open-source que além de muito usado é surpreendentemente robusto e expansível; o WordPress é uma solução bastante flexível de gestor de conteúdo, que além 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 páginas dinâmicas e aplicativos web em geral.</p>
<h2 class="western" style="page-break-before: always;">Solucionando problemas com o charset</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
Um problema muito comum ao utilizar o Apache 2 sobre uma distribuição Linux recente é os caracteres acentuados das páginas hospedadas aparecerem trocados por interrogações, quadrados ou vírgulas em alguns navegadores, como nesse screenshot:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Isso acontece em situações onde os arquivos das páginas hospedadas no servidor foram salvos usando o charset ISO-8859-1 (ou outro dos charsets pré-unicode) e o servidor Apache está configurado para usar UTF-8, que é o default no Ubuntu e na maioria das distribuições atuais.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para solucionar o impasse, você tem basicamente três opções. A primeira é especificar o charset correto no header de cada página do site, o que é feito adicionando uma tag &#8220;meta&#8221; dentro da seção &#8220;head&#8221; da página, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=UTF-8&#8243; /&gt;<br />
ou:<br />
</span>&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=ISO-8859-1&#8243; /&gt;</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Algumas versões antigas do Internet Explorer entendem apenas a tag &#8220;http-equiv&#8230;&#8221;. Você pode adicioná-la também, de forma a manter compatibilidade com elas, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify">&lt;http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=utf-8&#8243;&gt;</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Continuando, a segunda opção é mudar a configuração do Apache para que ele passe a utilizar o ISO-8859-1 como charset padrão, em vez do UTF-8. Nas distribuições derivadas do Debian, isso é definido no arquivo &#8220;<strong>/etc/apache2/conf.d/charset</strong>&#8220;. Edite o arquivo, substituindo a linha:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">AddDefaultCharset UTF-8</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">por:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">AddDefaultCharset ISO-8859-1</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Se, por acaso, o a<span>rquivo &#8220;/etc/apache2/conf.d/charset&#8221; não estiver disponível (ou a configuração não surtir efeito), edite o arquivo &#8220;</span><strong>/etc/apache2/apache2.conf</strong>&#8220;, descomentando (ou adicionando) a mesma linha.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">No Fedora/CentOS a opção é incluída diretamente no arquivo &#8220;<strong>/etc/httpd/conf/httpd.conf</strong>&#8221; (perto do final do arquivo), basta substituir a linha &#8220;AddDefaultCharset UTF-8&#8243; por &#8220;AddDefaultCharset ISO-8859-1&#8243;, assim como no Debian.</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Se o servidor hospeda páginas escritas em português, é recomendável editar também a linha:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><span style="font-size: x-small;">LanguagePriority en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv tw</span></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">&#8230; no &#8220;/etc/apache2/apache2.conf&#8221;, mudando a ordem das linguagens, de forma que o pt-br e o pt fiquem no início:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><span style="font-size: x-small;"><span>LanguagePriority </span><strong>pt-br pt</strong><span> en da nl et fr de el it ja ko no pl ltz ca es sv tw</span></span></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para que a configuração entre em vigor, é preciso fazer com que o Apache 2 recarregue a configuração:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># /etc/init.d/apache2 reload</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">ou:<br />
</span><strong># service httpd reload</strong></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O charset padrão do servidor é aplicado a todas as páginas onde o charset não é diretamente especificado na seção &lt;head&gt;, ajudando em casos em que você tem um grande volume de páginas antigas, onde o charset não é especificado.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Uma terceira opção, mais radical, seria mudar o charset de todas as páginas hospedadas (se você usa um gestor de conteúdo, muitas vezes esta opção estará disponível nas configurações) de &#8220;ISO-8859-1&#8243; para &#8220;UTF-8&#8243;. Diversos editores de texto, incluindo o kwrite e o gedit, permitem trocar o charset usado, basta especificar qual quer usar nas configurações.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">É possível também converter os arquivos diretamente, usando o comando &#8220;<strong>recode</strong>&#8220;, que está disponível nos repositórios de praticamente todas as distribuições que adotaram o uso do UTF8. Comece instalando o pacote, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># apt-get install recode</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">ou:<br />
<strong><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"># yum install recode</span></strong></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para converter um arquivo, use o comando &#8220;recode -d ISO-8859-1..UTF-8&#8243; seguido pelo arquivo a ser convertido, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong>$ recode -d ISO-8859-1..UTF-8 arquivo.txt</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Você pode também converter de uma vez diversos arquivos, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong>$ recode -d ISO-8859-1..UTF-8 *.html</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">ou:<br />
<strong><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">$ recode -d ISO-8859-1..UTF-8 *.php</span></strong></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O recode não salva cópias dos arquivos originais, por isso é importante que você sempre execute o comando sobre uma cópia dos arquivos, substituindo os arquivos originais só depois de verificar e testar. Concluindo, é possível também fazer o caminho inverso, convertendo arquivos de UTF-8 para ISO-8859-1, invertendo a sintaxe do comando, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong>$ recode -d UTF-8..ISO-8859-1 *.html</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A principal observação nesse caso é que o recode só consegue converter caracteres UTF-8 que possuem um correspondente dentro da codificação ISO-8859-1, por isso não deve ser usado em textos que incluam caracteres de línguas asiáticas, por exemplo.</p>
<h1 class="western" style="page-break-before: always;">Otimizando a configuração do Apache</h1>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
Ao colocar um site no ar, seu objetivo é quase sempre fazer com que ele seja acessado pelo maior volume possível de visitantes. Entretanto, o sucesso tem um preço: o maior volume de requisições faz com que seu servidor web seja mais exigido e ele passe a consumir mais recursos da máquina. A partir de um certo ponto, o servidor passará a ficar saturado nos horários de maior acesso, tornando o acesso ao site lento e fazendo com que o site comece a perder visitantes.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Uma das soluções seria simplesmente atualizar o hardware do servidor, resolvendo o problema na base da força bruta. A segunda seria otimizar a configuração do Apache, fazendo com que ele trabalhe de forma mais eficiente. Não existe uma &#8220;configuração perfeita&#8221; para o Apache, já que a configuração ideal varia de acordo com o tipo de tráfego do site, mas aqui vão algumas dicas que podem ajudar.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Uma das configurações mais diretamente relacionadas à performance do servidor e ao consumo de memória é o número de instâncias do servidor httpd. O Apache é capaz de responder a um número indefinido de acessos simultâneos, de acordo com a velocidade do link e dos recursos da máquina. Para cada requisição simultânea, é necessário que exista uma instância do Apache carregada na memória.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Quando o cliente acessa uma página, ele monopoliza uma dessas instâncias abertas até que a requisição seja concluída, ou seja, até que a página seja carregada ou o arquivo baixado. Em horários de alta demanda, são abertas mais instâncias do servidor Apache, que vão sendo fechadas (para economizar memória) conforme os acessos diminuem.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Nos momentos de pico, o Apache precisa manter mais processos ativos, o que aumenta o consumo de memória no servidor. O uso de processamento, por sua vez, varia bastante de acordo com o tipo de páginas servidas. Páginas em PHP com código não otimizado, scripts em CGI ou servlets Java, por exemplo, podem consumir bastante processamento, fazendo com que o processador se torne um gargalo muito antes da memória RAM, enquanto páginas estáticas ou arquivos disponibilizados para download consomem pouco processamento, fazendo com que a memória RAM e a otimização do servidor sejam as principais prioridades.</p>
<h2 class="western" style="page-break-before: always;">Ajustando o número de processos</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
O primeiro passo é verificar se está sendo usado o módulo mpm-prefork (usado por default na maioria das distribuições) ou o módulo mpm-worker, já que ambos são configurados em seções diferentes do arquivo.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No caso das distribuições derivadas do Debian, as duas versões são disponibilizadas através de pacotes separados, de forma que você precisa apenas verificar qual dois dois está instalado, usando o comando &#8220;dpkg -l | grep apache&#8221;. Ele retornará uma lista como:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># dpkg -l | grep apache</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><span style="font-size: x-small;">ii apache2 2.2.3-4+etch4 Next generation, scalable, extendable web se<br />
ii <strong>apache2-mpm-prefork</strong> 2.2.3-4+etch4 Traditional model for Apache HTTPD 2.1<br />
ii apache2-utils 2.2.3-4+etch4 utility programs for webservers<br />
ii apache2.2-common 2.2.3-4+etch4 Next generation, scalable, exten<br />
ii libapache2-mod-fcgid 1.10-2 an alternative module compat with mod_fastcg<br />
ii libapache2-mod-php5 5.2.0-8+etch11 server-side, HTML-embedded scri</span></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No exemplo, podemos ver que está sendo usado o pacote &#8220;apache2-mpm-prefork&#8221;, que é justamente a versão usada por padrão.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O mpm-prefork é a versão tradicional do Apache, onde cada instância inicia um único thread e atende a uma única requisição por vez, isolando o processamento de cada página servida. Isso torna a operação do servidor mais estável e menos vulnerável a módulos ou páginas mal escritas, mas, em compensação, consome um pouco mais de memória RAM que o mpm-worker, onde cada instância do Apache pode abrir vários threads, de acordo com a necessidade.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para pequenos servidores, onde você não precise necessariamente extrair cada gota de desempenho do servidor, o mpm-prefork é a escolha mais segura, mas em casos em que o servidor precise operar no limite, você pode realizar testes com o mpm-worker de forma a avaliar se a redução no consumo de memória é significativa.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Voltando à configuração, o número de instâncias abertas (ao usar o mpm-prefork) é determinada pela seção abaixo dentro do arquivo &#8220;<strong>/etc/apache2/apache2.conf</strong>&#8220;:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"># prefork MPM<br />
&lt;IfModule mpm_prefork_module&gt;<br />
StartServers 5<br />
MinSpareServers 5<br />
MaxSpareServers 10<br />
MaxClients 150<br />
MaxRequestsPerChild 0<br />
&lt;/IfModule&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A opção &#8220;StartServers&#8221; determina o número padrão de instâncias do Apache que ficarão carregadas na memória, respondendo a requisições. Cada instância ocupa cerca de 7 MB de memória (variando de acordo com as opções de compilação usadas ao gerar o pacote e os módulos carregados), de forma que 5 instâncias consomem cerca de 35 MB de memória do servidor.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Além das instâncias principais, temos instâncias &#8220;reservas&#8221; (spares), que ficam disponíveis para absorver rapidamente picos de acesso, sem que o Apache tenha que perder tempo carregando mais instâncias para só depois começar a responder às requisições. As opções &#8220;MinSpareServers&#8221; e &#8220;MaxSpareServers&#8221; determinam o número mínimo e máximo de &#8220;reservas&#8221;, sendo que o número real flutua entre os dois parâmetros, de acordo com a demanda.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A opção &#8220;MaxClients&#8221; é a parede de concreto, o número máximo de conexões simultâneas que o Apache aceita manter abertas, independentemente da demanda. Quando esse número é atingido, o acesso ao site fica cada vez mais lento, pois cada novo visitante &#8220;entra na fila&#8221; e precisa esperar que uma das instâncias do Apache fique livre, antes de conseguir carregar cada página.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;">Essa configuração default do Apache é adequada a um site de baixa demanda, onde o servidor passa a maior parte do tempo atendendo a um pequeno volume de requisições simultâneas, mas recebe picos de tráfego esporadicamente. Por padrão, o servidor carregará apenas 5 processos, manterá mais 5 a 10 spares ativos e poderá carregar mais instâncias conforme necessário, até o limite máximo de 150 instâncias permitidas.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para um servidor dedicado, que hospede um site com muitas visitas, é interessante ajustar estes valores de acordo com a demanda. Uma forma fácil de verificar o status do servidor é ativar a diretiva &#8220;server-status&#8221; dentro do arquivo &#8220;/etc/apache2/apache2.conf&#8221;. Adicione as linhas abaixo no final do arquivo:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;Location /server-status&gt;<br />
SetHandler server-status<br />
Order deny,allow<br />
Deny from all<br />
Allow from 200.234.23.233<br />
# (onde o 200.234.23.233 é o IP de onde o relatório será acessado)<br />
&lt;/Location&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Ative a configuração usando o comando &#8220;/etc/init.d/apache2 reload&#8221;. A partir daí, você pode ver um instantâneo do status do servidor acessando a pasta &#8220;server-status&#8221;, como em &#8220;<a href="http://kurumin.com.br/server-status">http://www.gdhn.com.br/server-status</a>&#8220;, a partir do navegador.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A oitava linha indica o número de instâncias abertas, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">8 requests currently being processed, 5 idle workers</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Nesse exemplo temos 8 conexões abertas e 5 instâncias reservas do Apache abertas, prontas para receber novas conexões. A velocidade do acesso ao site está normal. Mas, o que acontece no caso de um pico de acesso, com mais do que 150 acessos simultâneos? Na configuração padrão você teria:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">150 requests currently being processed, 0 idle workers</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Ou seja, o Apache responde às primeiras 150 conexões e coloca as demais na fila, fazendo com que os visitantes precisem esperar até que algum dos processos abertos termine de atender o visitante anterior antes de servirem a requisição. Nesse ponto o acesso ao site começa a ficar lento, com as páginas demorando mais e mais para começarem a ser carregadas. Em casos mais extremos, o tempo de espera poderia ser tamanho que o site ficaria virtualmente fora do ar. É o que muitas vezes acontece com links publicados em sites muito acessados, como o slashdot.org.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Isso pode ser minimizado de duas formas. A primeira é aumentando o número de instâncias ativas do Apache (de forma que o servidor tenha instâncias suficientes para atender a todas as requisições sem precisar abrir novos processos) e aumentando o valor configurado na opção &#8220;MaxClients&#8221;, de forma que o servidor possa atender a um volume maior de requisições nos horários de pico.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Os valores ideais variam de acordo com o volume de memória disponível no servidor e a quantidade de memória usada por cada processo do Apache. Comece usando o comando &#8220;ps -ylC apache2 &#8211;sort:rss&#8221; (no Debian/Ubuntu) ou &#8220;ps -ylC httpd &#8211;sort:rss&#8221; (no Fedora/CentOS) para verificar o volume de memória usado por cada instância do Apache:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># ps -ylC apache2 &#8211;sort:rss</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O comando exibe uma linha para cada processo do Apache ativo, de forma que a lista pode ser longa. O volume de memória gasto por cada um (em kbytes) é mostrado na oitava coluna. Descartando as primeiras e as últimas linhas, você tem uma boa aproximação dos valores médios, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">S 33 17530 16102 0 78 0 <strong>6008</strong> 5038 341548 ? 00:00:00 apache2<br />
S 33 17491 16102 0 75 0 <strong>6036</strong> 5036 354540 ? 00:00:00 apache2<br />
S 33 17529 16102 0 75 0 <strong>6036</strong> 5038 357283 ? 00:00:00 apache2<br />
S 33 17472 16102 0 75 0 <strong>6044</strong> 5038 359161 ? 00:00:00 apache2<br />
S 33 17438 16102 0 75 0 <strong>6056</strong> 5036 351130 ? 00:00:00 apache2</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Veja que no exemplo cada processo consome aproximadamente 6 MB de memória RAM. Estes valores não devem ser levados ao pé da letra, pois o ps não leva em conta as áreas de memória compartilhadas entre os processos (como vimos no capítulo 1), de forma que na prática o consumo total é sempre um pouco mais baixo. De qualquer forma, estes são os melhores números que temos.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O próximo passo é verificar quanto os demais serviços ativos no servidor (MySQL, servidor de e-mails, etc.) consomem, de forma a ter uma estimativa de quanta memória está disponível para uso do Apache. Uma forma simples de fazer isso é desativar temporariamente o Apache (/etc/init.d/apache2 stop) e usar o comando &#8220;free&#8221; para ver a memória disponível, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># free</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">total used free shared buffers cached<br />
Mem: 127132 124640 2492 0 40732 45236<br />
-/+ buffers/cache: <span>35804</span> <strong>91328</strong><br />
Swap: 409616 48 409568</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A linha &#8220;Mem&#8221; mostra o total de memória usada, incluindo o cache de disco. Ela sempre mostra que quase toda a memória está ocupada, pois é normal que o sistema utilize a memória disponível para fazer cache de disco. O que realmente nos interessa é a segunda linha (-/+ buffers/cache), que no exemplo mostra que o servidor possui cerca de 90 MB de memória disponível (nesse exemplo estou usando um VPS com apenas 128 MB de memória, que serve como exemplo de servidor com poucos recursos).</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Se cada processo do Apache ocupa cerca de 6 MB de memória, significa que o servidor poderia manter de 15 a 18 instâncias carregadas na memória (levando em conta que o consumo real é sempre um pouco inferior ao mostrado pelo ps) antes de começar a usar um volume significativo de memória swap. Uma boa configuração nesse caso seria:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"># prefork MPM<br />
&lt;IfModule mpm_prefork_module&gt;<br />
StartServers 5<br />
MinSpareServers 5<br />
MaxSpareServers 10<br />
MaxClients 18<br />
MaxRequestsPerChild 0<br />
&lt;/IfModule&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Permitir que o Apache abra mais instâncias acabaria sendo contra produtivo, pois o uso de muita memória swap derrubaria o desempenho do servidor, fazendo com que cada instância demorasse mais para processar cada página. Com isso, o número total de páginas servidas acabaria sendo menor do que usando apenas 18 processos.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No caso de um servidor com 1 GB de memória RAM, por outro lado, provavelmente teríamos 900 MB ou mais de memória disponível para o Apache, de forma que uma configuração mais adequada seria:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"># prefork MPM<br />
&lt;IfModule mpm_prefork_module&gt;<br />
StartServers 25<br />
MinSpareServers 25<br />
MaxSpareServers 50<br />
MaxClients 200<br />
MaxRequestsPerChild 0<br />
&lt;/IfModule&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com isso, teríamos 25 processos &#8220;fixos&#8221; do Apache, complementados por mais 25 a 50 spares, número que pode crescer até um máximo de 200 processos simultâneos nos horários de pico. A partir daí, você poderia monitorar o volume de memória livre no servidor (através do comando &#8220;free&#8221;) e o volume de acessos através da página de estatísticas e ajustar as opções &#8220;StartServers&#8221; e &#8220;MinSpareServers&#8221; de acordo com o número médio de acessos simultâneos, de forma que o número de processos do Apache e de spares disponíveis seja sempre um pouco maior do que o número médio de conexões ao servidor:</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<h2 class="western" style="page-break-before: always;">Outras opções</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
A opção &#8220;MaxRequestsPerChild&#8221;, incluída logo depois no arquivo, limita o número de requisições que cada processo do Apache pode responder antes de ser encerrado e substituído por outro. Ela não tem um efeito direto sobre o desempenho, servindo apenas como uma proteção contra eventuais vazamentos de memória, que pudessem fazer o processo crescer até ocupar toda a memória do servidor. Uma boa configuração é o valor &#8220;1000&#8243;, que evita que os processos sejam fechados muito freqüentemente (o que prejudicaria o desempenho), mas ao mesmo tempo faz com que a opção atenda a seu propósito:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">MaxRequestsPerChild 1000</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Como de praxe, a solução definitiva para melhorar o desempenho do servidor, permitindo que ele atenda a mais requisições simultâneas, é instalar mais memória RAM, de forma que ele possa manter mais instâncias do Apache carregadas na memória e possa fazer mais cache de disco (reduzindo o volume de operações de leitura no HD). É importante monitorar constantemente o uso de memória do servidor e atualizar o servidor conforme necessário.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Outra opção que afeta negativamente o desempenho é a &#8220;HostNameLookups&#8221;, que faz com que o Apache verifique a origem de cada acesso, fazendo uma busca de domínio. Ativar essa opção permite criar estatísticas de acesso mais detalhadas, incluindo os países e provedores de acesso usados pelos visitantes, mas tem um impacto negativo muito grande na performance de um servidor congestionado. No Apache 2 ela já vem desativada por padrão, mas em versões antigas era necessário desativá-la manualmente:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;">HostNameLookups Off</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Se você faz questão de gerar estatísticas de acesso detalhadas, pode obter o mesmo resultado usando o &#8220;logresolve&#8221;, um aplicativo que realiza as operações de resolução de nomes diretamente nos arquivos de log. Você pode criar um script para fazer com que ele seja executado uma vez por dia, por exemplo. A sintaxe do comando é a seguinte:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># logresolve -s access.stats -c &lt; access.log &gt; access_log.new</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No exemplo, o &#8220;access.log&#8221; é o arquivo original de log, o &#8220;access_log.new&#8221; é o arquivo modificado que será gerado e o &#8220;access.stats&#8221; é o arquivo onde serão salvas as estatísticas.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Continuando, se o seu servidor já está operando no limite, recebendo mais requisições do que consegue atender nos horários de pico, uma foma simples de reduzir o carregamento do servidor é ajustar a opção &#8220;KeepAliveTimeout&#8221;, que determina o tempo que os processos do Apache devem aguardar por novas requisições do mesmo cliente antes de serem finalizadas.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A idéia por trás dessa opção é permitir que a mesma conexão TCP seja usada para enviar diversos arquivos, se possível toda a página que está sendo carregada, incluindo as imagens. Com isso, o tempo de carregamento é reduzido (já que não é mais necessário abrir uma nova conexão para cada elemento da página a ser carregado) e os processos do Apache ficam logo livres para responder a outras requisições.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O default são 15 segundos, o que é um valor seguro, já que mesmo as conexões mais lentas não chegam a ter um tempo de latência tão alto. O problema é que o tempo de espera faz com que os processos fiquem ativos na memória por até 15 segundos a mais do que realmente precisariam, consumindo memória e reduzindo o número de clientes simultâneos que o servidor pode atender.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Você pode aumentar de forma considerável o volume de requisições atendidas pelo servidor reduzindo o valor de 15 para 3 segundos. Um exemplo de configuração completa é:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">KeepAlive On<br />
MaxKeepAliveRequests 180<br />
KeepAliveTimeout 3</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A opção &#8220;KeepAlive On&#8221; deve estar presente, já que é ela a responsável por ativar o recurso. A opção &#8220;MaxKeepAliveRequests&#8221; determina o número máximo de conexões que devem ser mantidas ativas. Ela deve ser setada com um valor um pouco mais baixo que o da opção &#8220;MaxClients&#8221;, que vimos anteriormente.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Concluindo, você pode simular tráfego no seu servidor, verificando como ele se comporta com níveis variados de tráfego usando o comando &#8220;ab&#8221;, que faz parte do pacote &#8220;apache2-utils&#8221;. Chame-o indicando o número de requisições simultâneas e a página que será carregada, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono;"><strong>$ ab -n 1000 -c 20 http://www.meusite.com/teste.php</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"> </p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Nesse exemplo, estamos fazendo 1000 acessos à página, mantendo 20 requisições simultâneas. Se possível, lance o teste a partir de outro servidor com link rápido, ou peça para vários amigos rodarem o comando simultaneamente, cada um usando sua própria conexão. Isso transformará o teste em algo mais parecido com uma situação normal, onde o servidor receba um pico de acessos.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Uma opção que não tem a ver com o desempenho, mas que ajuda a reduzir o volume de ataques casuais contra o seu servidor é a opção &#8220;ServerTokens&#8221;. Na maioria das distribuições, ela vem configurada com o valor &#8220;Full&#8221;, que faz com que seu servidor disponibilize informações detalhadas sobre a versão do apache e os módulos utilizados, como &#8220;Apache/2.2.3 Debian PHP/5.2.0-8etch11&#8243;, o que facilita bastante o trabalho dos atacantes. Você pode evitar isso configurando a opção com o valor &#8220;Prod&#8221;, que faz com que o servidor responda apenas &#8220;Apache&#8221;, sem nenhum detalhe adicional (caso a linha não esteja presente, basta adicioná-la no final do arquivo):</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">ServerTokens Prod</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Outra configuração importante é bloquear o acesso a includes e arquivos de configuração em geral colocados dentro dos diretórios de dados do site. Isso evitará que arquivos .inc, .tpl, .sql e de outras extensões tipicamente usadas em arquivos de configuração e em includes usados na montagem das páginas possam ser acessados diretamente pelos visitantes. Para isso, inclua na configuração uma seção &#8220;filesmatch&#8221;, especificando as extensões cuja exibição deve ser bloqueada, como em:</p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;filesmatch &#8220;\.(inc|tpl|h|ihtml|sql|ini|conf|bin|spd|sh|theme|module)$&#8221;&gt;<br />
Deny from all<br />
&lt;/filesmatch&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Depois de terminar a edição do arquivo<span> &#8220;/etc/apache2/apache2.conf&#8221;, não se esqueça de aplicar as alterações usando o comando:</span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># /etc/init.d/apache2 reload</strong></span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm;"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><font face="Bitstream Vera Sans Mono, sans-serif"><span style="font-style: normal;">ou:<br />
</span></font></span><strong># service httpd reload</strong></p>
<h1 class="western" style="page-break-before: always;">Módulos do Apache e add-ons</h1>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
Como comentei no início do capítulo, o principal ponto forte do Apache é o grande volume de módulos disponíveis para ele. Sempre que você precisa de algum recurso em especial, o primeiro passo é fazer uma pesquisa na web por algum módulo que desempenhe a função desejada. Se o recurso que precisa for uma necessidade comum, muito provavelmente você encontrará um módulo já pronto que se propõe a resolver o problema.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Como tanto o servidor Apache quanto a maior parte dos módulos disponíveis são open-source, existe também a possibilidade de modificar módulos já existentes, adicionando novas funções ou adaptando-os ao que precisa, ou mesmo desenvolver novos módulos do zero. Aqui vão alguns exemplos de módulos comumente usados, que você provavelmente vai querer manter ativos no servidor:</p>
<p> </p>
<h2 class="western" style="page-break-before: always;">mod_rewrite</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
O mod_rewrite tem a função de reescrever URLs a partir de um conjunto de parâmetros especificado por você. O uso mais simples para ele é quando você muda o domínio de acesso do site e quer que todos os links sejam redirecionados para o novo endereço.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Imagine, por exemplo, que você migrou do <a href="http://dominio.provedor.com/">http://dominio.provedor.com.br</a> para <a href="http://dominio.com/">http://www.dominio.com.br</a>. Você poderia simplesmente criar um arquivo &#8220;index.php&#8221; no diretório raiz do antigo endereço com o seguinte conteúdo:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;?php<br />
header(&#8220;HTTP/1.1 301 Moved Permanently&#8221;);<br />
header(&#8220;location:</span><a href="http://www.gdhpress.com.br/"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">http://www.dominio.com.br</span></a><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&#8220;);<br />
exit;<br />
?&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Este é um modelo simples de redirecionamento, que faz com que o servidor passe a encaminhar os acessos para o endereço especificado, usando o código 301, que indica que a página mudou permanentemente de endereço.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O problema é que fazendo isso o redirecionamento funcionaria apenas para os visitantes que acessassem a página principal do site. Um visitante que tentasse acessar o &#8220;<a href="http://dominio.provedor.com/produtos/index.php?id=312">http://dominio.provedor.com.br/produtos/index.php?id=312</a>&#8220;, por exemplo, receberia um erro 404.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Usando o mod_rewrite, você poderia solucionar isso de forma muito simples. O primeiro passo é verificar se o módulo está carregado na configuração do Apache 2. No caso das distribuições derivadas do Debian, você pode ativá-lo usando o comando a2enmod:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># a2enmod rewrite</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Muito provavelmente você receberá um &#8220;This module is already enabled!&#8221; como resposta, já que ele vem ativo por padrão na maioria das instalações. No caso do Fedora, CentOS e outras distribuições derivadas do Red Hat, verifique o arquivo <span>&#8220;</span><strong>/etc/httpd/conf/httpd.conf</strong><span>&#8221; e, caso necessário, descomente as linhas:</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">LoadModule rewrite_module modules/mod_rewrite.so<br />
AddModule mod_rewrite.c</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Depois de checar a ativação do módulo, falta apenas a configuração, que é feita através do arquivo &#8220;<strong>.htaccess</strong>&#8220;, criado no diretório raiz do site antigo (ou seja, na pasta de arquivos do &#8220;http://dominio.provedor.com.br&#8221;). Embora o .htaccess seja geralmente associado com o uso de senhas, ele na verdade tem diversos outros usos, incluindo a configuração do mod_rewrite.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para que o mod_rewrite passe a encaminhar todas as requisições automaticamente, o conteúdo do arquivo &#8220;.htaccess&#8221; seria:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine On<br />
RewriteRule (.*) http://www.dominio.com.br/$1 [R=301,L]<br />
&lt;/IfModule&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A linha &#8220;RewriteEngine On&#8221; é a responsável por encaminhar as requisições ao mod_rewrite, enquanto a linha <span style="font-family: Bitstream Vera Sans, sans-serif;">&#8220;RewriteRule (.*) http://www.dominio.com.br/$1 [R=301,L]&#8221; explica o que deve ser feito. </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Apesar de parecer estranha à primeira vista, ela segue na verdade uma lógica bastante simples. O &#8220;(.*)&#8221; cria uma regra de encaminhamento, que será aplicada a qualquer URL dentro do domínio. A página especificada pelo visitante ao acessar o site vira uma variável ($1), que é então usada no parâmetro seguinte, o &#8220;<font face="Bitstream Vera Sans, sans-serif"><a href="http://dominio.org/$1">http://www.dominio.com.br/$1</a></font></span><a href="http://dominio.org/$1"></a>&#8221; onde é indicado o novo domínio do site.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Com isso, se o visitante tentar acessar o &#8220;</span><a href="http://dominio.provedor.org/produtos/index.php?id=312">http://dominio.provedor.com.br/produtos/index.php?id=312</a>&#8221; do exemplo anterior, a variável &#8220;$1&#8243; será carregada com o valor &#8220;produtos/index.php?id=312&#8243; e ele será encaminhado ao &#8220;<a href="http://dominio.org/produtos/index.php?id=312">http://www.dominio.com.br/produtos/index.php?id=312</a>&#8220;. O mesmo se aplica a qualquer outra URL que ele vier a tentar acessar.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Concluindo, o &#8220;[R=301,L]&#8221; é o código de retorno que será enviado ao cliente. No caso estamos usando o código 301, que é o código de redirecionamento permanente. Além de encaminhar os visitantes, ele faz com que o Google indexe a nova página e transfira o pagerank da página antiga para ela. Normalmente, a atualização do pagerank demora cerca de 3 meses, mas depois de feita a atualização o novo endereço deverá receber o mesmo pagerank do antigo.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Outro uso comum para o mod_rewrite é a simplificação dos links, transformando URLs de páginas dinâmicas, como, por exemplo, &#8220;</span><a href="http://dominio.org/produtos/index.php?id=312">http://www.dominio.com.br/produtos/index.php?id=312</a>&#8221; em URLs mais simples, como &#8220;<a href="http://dominio.org/produtos/312">http://www.dominio.com.br/produtos/312/</a>&#8221; ou &#8220;<a href="http://dominio.org/produtos/index.php?id=312">http://www.dominio.com.br/312.htm</a>&#8220;</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Nesse caso, criamos regras do rewrite que o orientam a detectar acessos à URL simplificada e encaminhar as requisições para a URL &#8220;real&#8221; de forma transparente, novamente através do uso de variáveis.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para converter as URLs do formato &#8220;<a href="http://dominio.org/index.php?id=numero">http://www.dominio.com.br/index.php?id=numero</a>&#8221; para &#8220;<a href="http://dominio.org/numero">http://www.dominio.com.br/numero</a>/&#8221;, você usaria o seguinte modelo de arquivo .htaccess:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine on<br />
RewriteRule (.*)/$ /index.php?id=$1<br />
&lt;/IfModule&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com isso, ao acessar o &#8220;<a href="http://dominio.org/512/">http://www.dominio.com.br/512/</a>&#8220;, por exemplo, o visitante veria a página &#8220;<a href="http://dominio.org/index.php?id=512">http://www.dominio.com.br/index.php?id=512</a>&#8220;, o que mascara a complexidade da URL. Se você preferir que os links abreviados tenham a aparência de páginas com extensão .htm, em vez de pastas, o arquivo .htaccess ficaria:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine on<br />
RewriteRule (.*)\.htm$ /index.php?id=$1<br />
&lt;/IfModule&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A mesma regra pode ser aplicada também a pastas específicas. Se você quiser que ela se aplique apenas à pasta &#8220;produtos&#8221;, sem ser aplicada a outras pastas do servidor, por exemplo, você poderia usar uma regra como:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine on<br />
RewriteRule /produtos/(.*)\.htm$ /produtos/index.php?id=$1<br />
&lt;/IfModule&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">É possível também usar diversos parâmetros simultaneamente, facilitando o acesso a URLs que incluam um grande volume de argumentos, como em &#8220;<a href="http://dominio.org/index.php?cat=produtos&amp;cat=info&amp;id=23">http://www.dominio.com.br/index.php?cat=produtos&amp;cat=info&amp;id=23</a>&#8220;, desde que você consiga bolar um formato de URL que permita incluir todos os parâmetros necessários, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine on<br />
RewriteRule (.*)/(.*)/(.*)/$ /index.php?cat=$1&amp;cat=$2&amp;id=$3<br />
&lt;/IfModule&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com isso, os três parâmetros que precisam ser incluídos na URL são digitados pelo usuário na forma de uma sequência de subpastas, como em &#8220;<a href="http://dominio.org/produtos/info/23/">http://www.dominio.com.br/produtos/info/23/</a>&#8221; e o mod_rewrite converte automaticamente as URLs ao formato usado pelo servidor.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">À primeira vista, pode parecer uma mera mudança cosmética, mas o uso das URLs amigáveis facilita bastante a navegação do visitante e pode ajudar até mesmo na indexação por parte dos mecanismos de busca.</p>
<h2 class="western" style="page-break-before: always;">mod_deflate</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
O mod_deflate permite comprimir de forma automática as páginas html (e também outros tipos de arquivos) enviados aos clientes, de forma a economizar banda e a reduzir o tempo de carregamento das páginas. Se os sites hospedados no servidor utilizam páginas com grandes volumes de texto, a redução pode ser bastante significativa.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O uso de compressão é negociado entre o servidor e o cliente no momento em que ele requisita a página, de forma que você não precisa se preocupar em excluir navegadores móveis ou clientes com browsers antigos. Ao perceber que o cliente não suporta o recurso, o servidor simplesmente envia a página sem compressão.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O uso do deflate aumenta sutilmente o uso de processamento no servidor, já que ele terá o trabalho de comprimir cada página solicitada antes de enviá-la ao cliente, mas isso é compensado pelo fato de o cliente demorar menos tempo para carregar cada página, o que permite que o servidor mantenha um número menor de instâncias do Apache carregadas na memória.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Do ponto de vista do cliente, o deflate é bastante benéfico, pois o texto das páginas carrega mais rápido. Uma página html comprimida pelo deflate fica com, tipicamente, um quarto do tamanho original. Com isso, uma página de 100 KB, que demoraria até 15 segundos para ser carregada por um cliente acessando via modem, passaria a ser carregada em apenas 3 ou 4 segundos. Depois disso, ainda teríamos o tempo de carregamento das imagens e de outros elementos da página, como de praxe, mas com o html carregado o cliente pode já ir adiantando a leitura.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Note que, as &#8220;páginas em html&#8221; que citei no parágrafo anterior, incluem também páginas dinâmicas em php e em outras linguagens, pois, de qualquer forma, depois de serem processadas pelo servidor, elas são enviadas ao cliente como uma página html.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Nas distribuições derivadas do Debian, o módulo é ativado usando o a2enmod:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># a2enmod deflate</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Nas distribuições derivadas do Red Hat, verifique se a linha <span>a seguir está presente dentro da seção &#8220;Dynamic Shared Object (DSO) Support&#8221; do arquivo &#8220;</span><strong>/etc/httpd/conf/httpd.conf</strong><span>&#8220;. Adicione-a manualmente caso necessário (n<span style="font-family: Bitstream Vera Sans, sans-serif;">ão se esqueça de reiniciar o Apache para que a configuração entre em vigor</span>): </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">LoadModule deflate_module modules/mod_deflate.so</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Esta linha tem exatamente a mesma função desta outra, usada em algumas distribuições. A única diferença é que neste segundo exemplo é especificado o caminho completo até o arquivo:</span> <span style="font-family: Bitstream Vera Sans Mono, sans-serif;">LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so</span> <span style="font-family: Bitstream Vera Sans, sans-serif;">Em seguida, vem a configuração do módulo. No Debian, a configuração vai no arquivo &#8220;<strong>/etc/apache2/mods-available/deflate.conf</strong>&#8220;, enquanto do CentOS e no Fedora é usado o arquivo &#8220;<strong>/etc/httpd/conf.d/httpd-deflate.conf</strong>&#8220;.</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Uma configuração simples, e bastante usada, é fazer com que o deflate comprima apenas arquivos em html, texto puro ou xml, sem tentar comprimir outros tipos de arquivos (como imagens ou a</span>rquivos diversos disponibilizados para download, que via de regra já estarão compactados). Esta configuração exige uma única linha e é a configuração padrão no Debian:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;IfModule mod_deflate.c&gt;<br />
AddOutputFilterByType DEFLATE text/html text/plain text/xml<br />
&lt;/IfModule&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Outra abordagem é orientar o deflate a comprimir todos os tipos de arquivos, com exceção das imagens em .gif, .png e .jpg. Isso pode ser interessante se, além das páginas html, você disponibiliza arquivos em formatos com baixos índices de compressão, como arquivos do MS Office, por exemplo. Nesse caso, a configuração ficaria:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;IfModule mod_deflate.c&gt;<br />
# Comprime tudo, com exceção de arquivos .gif, .jpg e .png:<br />
SetOutputFilter DEFLATE<br />
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary<br />
&lt;/IfModule&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Note que esta configuração deve ser usada apenas em casos específicos, pois ela faz com que o servidor tente comprimir todo tipo de arquivos, incluindo arquivos em formatos já compactados, o que resultará em um grande aumento no uso de processamento, sem que haja uma redução tangível no tamanho dos arquivos.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Concluindo, uma recomendação geral é incluir exceções para versões antigas do Netscape 4 e do IE 3 que não são capazes de negociar a compressão de páginas com o servidor corretamente. Estes navegadores são extremamente raros hoje em dia, por isso mesmo os sites movimentados não recebem mais do que um punhado de visitas diárias de clientes utilizando um deles, mas não custa deixar o servidor preparado para atender a esses casos específicos. Para isso, são incluídas três linhas adicionais na configuração:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;IfModule mod_deflate.c&gt;<br />
AddOutputFilterByType DEFLATE text/html text/plain text/xml<br />
<strong>BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html</strong><br />
</span>&lt;/IfModule&gt;</p>
<h2 class="western" style="page-break-before: always;">mod_cband</h2>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">
O mod_cband permite limitar o uso de banda ou o número de requisições simultâneas atendidas pelos sites hospedados no Apache. Como você pode imaginar, ele é extremamente popular em serviços de shared hosting, já que permite limitar o volume de banda utilizado por cada site (ou por cada usuário que acessa o servidor) e estabelecer quotas de tráfego.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Nas distribuições derivadas do <strong>Debian</strong>, ele pode ser instalado através do pacote &#8220;libapache2-mod-cband&#8221;, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># apt-get install libapache2-mod-cband</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Com o módulo instalado, use o comando a2enmod para ativá-lo:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># a2enmod cband</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No <strong>CentOS</strong>, é necessário instalar o pacote a partir do código fonte. Comece instalando o pacote &#8220;httpd-devel&#8221; usando o yum:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># yum install httpd-devel </strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Em seguida, baixe a versão mais recente do pacote no: <a href="http://sourceforge.net/projects/cband/">http://sourceforge.net/projects/cband/</a></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para instalar, descompacte o arquivo, acesse o diretório que será criado e rode os comandos &#8220;./configure&#8221;, &#8220;make&#8221; e &#8220;make install&#8221;, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># tar -zxvf mod-cband-0.9.6.1.tgz<br />
# cd mod-cband-0.9.6.1<br />
# ./configure<br />
# make<br />
# make install</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O script de instalação se encarrega de instalar o módulo na pasta &#8220;/usr/lib/httpd/modules/&#8221; e adicionar uma linha similar à linha a seguir no arquivo &#8220;/etc/httpd/conf/httpd.conf&#8221;, de forma que ele seja carregado:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">LoadModule cband_module /usr/lib/httpd/modules/mod_cband.so</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Falta agora apenas editar a configuração de cada virtual host, definindo os limites desejados, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;VirtualHost *:80&gt;<br />
ServerAdmin joao@joao.com.br<br />
ServerName www.joao.com.br<br />
ServerAlias joao.com.br<br />
DocumentRoot /var/www/joao<br />
<strong>CBandSpeed 1024kbps 10 20<br />
CBandRemoteSpeed 512kbps 5 3</strong><br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A opção &#8220;CBandSpeed&#8221; determina os limites para o tráfego total do site, especificando o volume máximo de banda que pode ser usado, o número máximo de requisições de páginas e/ou arquivos por segundo e o número máximo de instâncias do Apache que podem ser utilizadas. No exemplo, limitei o tráfego do site a 1024 kbps, com um máximo de 10 requisições por segundo e um máximo de 20 conexões simultâneas.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Em seguida, temos a opção &#8220;CBandremoteSpeed&#8221;, que permite definir limites individuais para os visitantes, impedindo que um único usuário monopolize toda a banda disponível (pense no caso de um site que disponibiliza arquivos para download, por exemplo). No exemplo, cada usuário ficará limitado a um máximo de 256 kbps, com até 3 requisições por segundo e um máximo de três conexões simultâneas.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Como acabamos de ativar o módulo, é necessário reiniciar o Apache para que as alterações entrem em vigor, mas, quando você for apenas alterar os limites posteriormente, pode usar o &#8220;reload&#8221; para atualizar a configuração sem derrubar o servidor.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># /etc/init.d/apache2 force-reload</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A partir daí, você pode verificar a aplicação dos limites simplesmente baixando um arquivo disponível no site. A taxa de transferência vai variar ao longo do download, ficando um pouco acima ou um pouco abaixo do estabelecido, mas na média a transferência não ultrapassa a quota estabelecida:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Nesse primeiro exemplo, estabelecemos apenas um limite de uso de banda e um número máximo de requisições simultâneas, mas não estabelecemos nenhum limite de tráfego, de forma que o webmaster do site poderia utilizar quanta banda quisesse, ficando restrito apenas ao limite total de 1024 kbps, de forma similar a uma conexão doméstica.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Os 1024 kbps estabelecidos podem parecer pouco, mas se eles forem utilizados 24 horas por dia, 7 dias por semana (pense no caso de um site de downloads), o site consumirá no final do mês um tráfego total de pouco mais de 300 GB. Se o mesmo limite for aplicado a todos os sites hospedados, teremos uma situação onde o acesso por parte dos visitantes será relativamente lento (apenas 512 kbps por visitante) e que não impedirá que os sites que hospedem predominantemente arquivos consumam um volume considerável de banda.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Outra questão importante é que limitando as taxas de download de cada usuário, os downloads demorarão mais tempo, o que fará com que cada instância do Apache fique mais tempo atendendo ao mesmo cliente, aumentando o consumo de memória do servidor.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Devido a essas desvantagens, a restrição com base no uso de banda tem se tornado menos comum, dando lugar a quotas de tráfego. No novo modelo, o site pode consumir quanta banda precisar, desde que não ultrapasse uma determinada quota de tráfego mensal.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Para definir a quota de tráfego, o primeiro passo é criar uma pasta onde o cband armazenará informações sobre o tráfego usado por cada host. Você pode tanto criar uma pasta dentro do diretório do site e restringir o acesso a ela quanto criar uma pasta em outro diretório do sistema. O mais importante é que você ajuste as permissões de acesso, de forma que o dono seja o usuário usado pelo Apache (&#8220;www-data&#8221; no Debian, ou &#8220;apache&#8221; no CentOS), como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># mkdir /var/www/scoreboard<br />
# chown www-data:www-data /var/www/scoreboard/</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">ou:<br />
</span><strong># mkdir -p /var/spool/cband/scoreboard<br />
# chown apache:apache /var/spool/cband/scoreboard </strong></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Dentro desse diretório, criamos um arquivo vazio para cada site onde formos ativar o cband, novamente dando a posse para o usuário usado pelo Apache, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># touch /var/www/scoreboard/joao<br />
# chown www-data:www-data /var/www/scoreboard/joao</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Em seguida, precisamos alterar a configuração dos sites (dentro da pasta &#8220;/etc/apache2/sites-available&#8221; ou dentro do arquivo &#8220;/etc/httpd/conf/httpd.conf&#8221;), especificando a nova configuração, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;VirtualHost *:80&gt;<br />
ServerAdmin joao@joao.com.br<br />
ServerName www.joao.com.br<br />
ServerAlias joao.com.br<br />
DocumentRoot /var/www/joao<br />
<strong>CBandLimit 100G<br />
CBandPeriod 4W<br />
CBandScoreboard /var/www/scoreboard/joao<br />
CBandExceededURL http://provedor.com/quota_excedida.htm</strong><br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Como você pode imaginar, a opção &#8220;CBandLimit&#8221; especifica a quota de tráfego do site, que no exemplo foi definida como 100 GB (além do &#8220;G&#8221; você pode especificar o volume em &#8220;M&#8221;, de megabytes ou &#8220;K&#8221;, de kbytes).</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">A linha seguinte, &#8220;CBandPeriod&#8221;, determina o período de aplicação da quota, depois do qual a contagem é zerada. No exemplo usei &#8220;4W&#8221;, que especifica um período de 4 semanas, ou seja, 28 dias. Você poderia usar outros valores, como por exemplo &#8220;30D&#8221; (30 dias) ou &#8220;24H&#8221; (24 horas).</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Em seguida, temos a opção &#8220;CBandScoreboard&#8221;, que indica o arquivo onde serão armazenadas as informações sobre o uso de banda do site (que criamos no passo anterior) e a CBandExceededURL, que permite especificar uma página de erro, que será exibida aos visitantes dos sites que ultrapassarem a quota de tráfego. Esta página continua sendo exibida (deixando o site essencialmente fora do ar) até o início do próximo período, quando a contagem é zerada.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">O uso da página de err<span style="font-family: Bitstream Vera Sans, sans-serif;">o não é muito bem visto entre os webmasters, pois faz com que o site fique fora do ar, fazendo com que visitas sejam perdidas e que as páginas percam posições nos mecanismos de busca. Em vez de tirar as páginas do ar, você pode simplesmente re<span>duzir a velocidade de acesso, substituindo a opção &#8220;CBandExceededURL&#8221;</span> pela &#8220;CBandExceededSpeed&#8221;, como em:</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;VirtualHost *:80&gt;<br />
ServerAdmin joao@joao.com.br<br />
ServerName www.joao.com.br<br />
ServerAlias joao.com.br<br />
DocumentRoot /var/www/joao<br />
<span>CBandLimit 100G<br />
CBandPeriod 4W<br />
CBandScoreboard /var/www/scoreboard/joao </span><strong><br />
<span style="font-family: Bitstream Vera Sans, sans-serif;">CBandExceededSpeed 256kbps 3 5</span></strong><br />
&lt;/VirtualHost&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Nesse caso, ao ultrapassar a quota o site ficará limitado a 256 kbits, com direito a três requisições por segundo e um máximo de cinco requisições simultâneas. Ou seja, continuará no ar, mas o acesso ficará bastante lento (você pode ajustar os limites de acordo com a situação). Em um serviço comercial, o ideal seria combinar a aplicação da quota com o envio de um e-mail de aviso, explicando que a quota foi excedida e oferecendo a possibilidade de migrar para um plano com uma quota maior. </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">É possível também combinar o uso da limitação de banda e de conexões simultâneas com o uso da quota mensal, evitando assim que os sites consumam a quota muito rapidamente, prejudicando o desempenho dos outros sites hospedados no servidor. Nesse caso, combina<span>mos as opções que acabamos de ver com as opções CBandSpeed e CBandRemoteSpeed, como em:</span></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">CBandLimit 100G<br />
CBandPeriod 4W<br />
CBandScoreboard /var/www/scoreboard/joao<br />
CBandExceededSpeed 256kbps 3 5</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong>CBandSpeed 1024kbps 10 20<br />
CBandRemoteSpeed 512kbps 5 3</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Depois de definidas as quotas, você pode concluir a configuração ativando o relatório de tráfego oferecido pelo cband. O relatório é atualizado em tempo real, mostrando detalhes sobre o uso de banda e o percentual da quota já consumido, permitindo que o próprio webmaster do site acompanhe e administre o tráfego do site e não seja pego de surpresa quando a quota for ultrapassada.</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">O cband oferece dois painéis de administração separados, um feito para ser acessado pelos usuários (o cband-status-me) e outro para uso do administrador (cband-status), que permite ver o tráfego de todos os sites e resetar os contadores de tráfego manualmente. </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Para disponibilizar o painel de usuário, você adicionaria a entrada a seguir dentro da configuração do virtual host, logo depois das demais linhas de configuração do cband, que inserimos anteriormente:</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">&lt;Location /cband-status-me&gt;<br />
SetHandler cband-status-me<br />
&lt;/Location&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Isso fará com que o painel fique disponível dentro da pasta &#8220;cband-status-me&#8221;, dentro da URL do site. Se quiser usar<span> outra pasta, basta especificá-la na primeira linha, alterando o &#8220;Location /cband-status-me&#8221;</span>:</span></p>
<p> </p>
<p> </p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Para ativar o painel de acesso administrativo, adicione as linhas a seguir no arquivo principal de configuração do Apache (o apache2.conf ou httpd.conf). Isso faz com que ele fique disponível dentro da pasta &#8220;cband-status&#8221; de cada site, sem que você precise repetir a configuração dentro da seção referente a cada um. Note que, diferente da configuração anterior, criamos uma restrição de acesso, que permite o acesso apenas a partir do seu próprio endereço IP (de forma que apenas você tenha acesso). Se você usa uma conexão com IP dinâmico, vai precisar lembrar de alterar a configuração antes de cada acesso:</span></p>
<p class="western" style="margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><span style="font-style: normal;">&lt;Location /cband-status&gt;<br />
SetHandler cband-status<br />
Order deny,allow<br />
Deny from all<br />
allow from </span><strong>201.86.208.237</strong><span style="font-style: normal;"><br />
&lt;/Location&gt;</span></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Assim como no exemplo anterior, o relatório pode ser acessado via navegador, acessando a pasta &#8220;cband-status&#8221; de qualquer um dos sites hospedados no servidor. </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Uma observação importante é que, no Debian Etch, os painéis de acesso são ativados, por padrão, através da configuração incluída no arquivo &#8220;<strong>/etc/apache2/mods-available/cband.conf</strong>&#8220;:</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">&lt;IfModule mod_cband.c&gt;<br />
&lt;Location /cband-status&gt;<br />
SetHandler cband-status<br />
&lt;/Location&gt;<br />
&lt;Location /cband-stats&gt;<br />
SetHandler cband-status-me<br />
&lt;/Location&gt;<br />
&lt;/IfModule&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Essa configuração essencialmente desativa a aplicação das quotas, pois permite que qualquer um acesse o relatório administrativo através do &#8220;http://site.com/cband-status&#8221; e resete o contador na hora em que quiser. </span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">A menos que você queira virar motivo de piada entre os usuários, é necessário editar o arquivo, limitando o acesso à pasta cband-status apenas para seu próprio endereço IP, como em:</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">&lt;IfModule mod_cband.c&gt;<br />
&lt;Location /cband-status&gt;<br />
SetHandler cband-status<br />
<strong><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">Order deny,allow<br />
Deny from all<br />
allow from 201.86.208.237</span></strong><br />
&lt;/Location&gt;<br />
&lt;Location /cband-stats&gt;<br />
SetHandler cband-status-me<br />
&lt;/Location&gt;<br />
&lt;/IfModule&gt;</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans, sans-serif;">Depois de cada alteração, não se esqueça de atualizar a configuração do Apache para que ela entre em vigor:</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"><strong># /etc/init.d/apache2 reload</strong></span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">Concluindo, se o objetivo for apenas proteger o servidor contra usuários armados com programas aceleradores de download (que abrem um número muito grande de conexões simultâneas, com o objetivo de tornar a transferência de arquivos mais rápida) ou com programas que tentam baixar todo o site para leitura offline, sem estabelecer quotas ou limites de tráfego, você pode usar uma configuração mais simples, usando apenas a opção &#8220;CBandremoteSpeed&#8221;. Ela pode ser incluída diretamente no arquivo principal de configuração do Apache, o que faz com que ela seja aplicada automaticamente para todos os sites hospedados.</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No caso do Debian, você poderia incluí-la no final do arquivo &#8220;/etc/apache2/apache2.conf&#8221;, antes da linha &#8220;Include /etc/apache2/sites-enabled/&#8221;, que carrega a configuração dos virtual-hosts, como em:</p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;">CBandRemoteSpeed 1024kbps 3 2</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm; margin-left: 1.25cm;" align="justify"><span style="font-family: Bitstream Vera Sans Mono, sans-serif;"># Include the virtual host configurations:<br />
Include /etc/apache2/sites-enabled/</span></p>
<p class="western" style="font-style: normal; margin-top: 0.4cm; margin-bottom: 0cm;" align="justify">No exemplo, limitei os clientes a um máximo de três requisições por segundo e duas conexões simultâneas, uma configuração que é similar à usada em muitos sites de download.</p>
<p> </p>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizoliveira.org/linux/servidores/configurando-um-servidor-lamp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
