Servidores Linux, Guia Prático

Embed Size (px)

Citation preview

Servidores Linux, Guia PrticoIntroduoDurante as dcadas de 1960 e 1970, predominaram os mainframes, computadores de grande porte, que eram acessados atravs de terminais burros. A idia veio de uma necessidade simples: os computadores da poca eram caros e o volume de processamento e de memria oferecido por eles era pequeno, de forma que cada empresa ou universidade normalmente possua apenas um ou alguns poucos mainframes, que eram compartilhados entre todos os usurios.

Siegler ADM-3A: Um terminal burro bastante usado durante a dcada de 1970 A partir do incio da dcada de 1980, os computadores de mesa passaram a roubar a cena, substituindo os mainframes. Dois sintomas dessa poca foram a quase falncia da IBM, at ento uma empresa especializada em mainframes e o crescimento da Microsoft, que passou a ganhar muito dinheiro vendendo o MS-DOS e, em seguida, o Windows e o Office, usados em micros desktop. Com a popularizao das redes e da Internet, o cenrio novamente mudou. Passamos a depender da conexo com a Internet at mesmo para as tarefas mais bsicas e a armazenar cada vez mais informaes em servidores remotos. Com isso, a importncia do PC comeou a decair. Aplicativos como o Office e o Outlook deram lugar a servios online, como o Gmail e o Google Docs, e at mesmo os programas de mensagem instantnea passaram a ser usados via web, como no caso do Meebo. O fato de estarem disponveis via web permite o acesso a partir de qualquer computador, ou at mesmo de smartphones e outros dispositivos que ofeream um navegador. Embora eles no concorram diretamente em recursos com os aplicativos tradicionais, a questo da praticidade fez com que o uso crescesse rapidamente.

Os grandes mainframes de duas dcadas atrs deram lugar a servidores de baixo custo, montados usando componentes similares aos usados nos desktops, hospedados em datacenters e administrados remotamente. Os links de fibra ptica tambm caram brutalmente de preo, tornando viveis sites que disponibilizam vdeos (como no caso do YouTube) e outros tipos de mdia. Esse conjunto de mudanas abriu diversos campos de trabalho, tanto na rea de desenvolvimento, quanto na rea de infra-estrutura. Um sintoma interessante deste crescimento que (no apenas no Brasil, mas tambm em outros pases) a demanda por profissionais qualificados dentro da rea de tecnologia, sobretudo administradores de sistema e programadores experientes, passou a ser bem maior do que a oferta. Ou seja, diferente de outras reas, existem mais postos de trabalho do que vagas, sem falar nas oportunidades de abrir seu prprio negcio. Naturalmente, todas estas oportunidades esto abertas apenas para profissionais altamente qualificados, da a necessidade de estudar e dominar novas reas de conhecimento. Ser um administrador de redes exige um grande volume de conhecimento. Como existe muita coisa para estudar e a documentao nem sempre clara, muitas vezes voc fica sem saber por onde comear, da a idia de escrever este livro.

Servidores de InternetEm seguida, entramos no mundo dos servidores de Internet, dominado pelos servidores dedicados e pelos datacenters. A Internet formada por uma malha de cabos de fibra ptica, que interligam praticamente todos os pases. Mesmo em locais mais remotos, possvel se conectar via modem, via celular (ou algum tipo de rede sem fio de longa distncia) ou mesmo via satlite. A pea central so os roteadores, que interligam diferentes segmentos da rede, formando uma coisa s. Cada roteador conhece os vizinhos, sabe quais redes esto conectadas a eles e sabe escolher o caminho mais curto para cada pacote de dados:

Naturalmente, os dados transmitidos precisam sair de algum lugar. Entram em cena, ento, os datacenters, que hospedam a grande maioria dos servidores responsveis por manter a Internet funcionando. Os datacenters so ambientes protegidos, que contam com links redundantes, instalaes eltricas de grande porte (com nobreaks e geradores, destinados a manterem os servidores funcionando mesmo em caso de interrupo no fornecimento eltrico), salas refrigeradas, equipes de manuteno disponveis 24 horas por dia e outros recursos. Em resumo, um datacenter oferece um ambiente controlado, onde os servidores podem operar de forma confivel:

Antigamente, ter um servidor dedicado era um luxo reservado para poucos. Alm da mquina em si, voc precisava de um link dedicado, que custava um brao e duas pernas (por ms ;). A soluo para colocar seu site no ar era pagar por um plano de shared hosting (hospedagem compartilhada), onde um mesmo servidor compartilhado por milhares de sites diferentes e voc fica restrito a uma quota de trfego e espao em disco, sem poder mexer na configurao do servidor. Hoje em dia, tudo est muito mais acessvel, graas ao barateamento tanto dos links quanto dos servidores propriamente ditos. Voc pode ter seu prprio servidor, hospedado em um datacenter dos

EUA (ou mesmo no Brasil), hospedando o site da sua empresa ou de seus clientes, armazenando backups, entre inmeras outras funes. A principal vantagem de alugar um servidor dedicado, hospedado em um datacenter, ao invs de montar seu prprio servidor e lig-lo na conexo via ADSL ou cabo que voc j tem, a questo da conectividade. Uma conexo via ADSL funciona bem para acessar a web como cliente e fazer downloads, mas no uma boa idia para hospedar servidores, pois o link de upload muito estreito (em geral apenas 256 ou 500 kbits, de acordo com o plano), sem falar na questo da confiabilidade. As grandes empresas de hospedagem trabalham com links absurdamente rpidos, sempre ligados simultaneamente a vrios dos principais backbones. Isso garante uma boa velocidade de acesso a partir de qualquer lugar do mundo. A confiabilidade tambm melhor, pois os datacenters so ambientes fechados, com geradores prprios, segurana fsica, links redundantes, etc. Os servidores dedicados mais baratos chegam a custar menos de US$ 100 mensais, sempre com um link de 10 ou 100 megabits (correspondente velocidade da porta do switch) e uma quota de trfego de um ou dois terabytes mensais, variando de acordo com o plano:

Existe tambm a opo de usar um VPS, um servidor virtual obtido atravs do uso do VMware Server, Xen ou outro sistema de virtualizao. Usando um VPS, voc tem acesso completo ao sistema, da mesma forma que ao usar um servidor real. A quantidade de memria RAM e de espao em disco menor e o processamento compartilhado entre os vrios servidores virtuais hospedados na mesma mquina, mas, em compensao, os preos so muito mais baixos. No final do captulo 1 voc encontra dicas de planos de baixo custo, onde voc pode locar um VPS por menos de US$ 10 mensais. Isso permite que voc tenha um servidor disponvel para estudar e testar tudo o que aprenderemos ao longo do livro, sem precisar arcar com o custo de um servidor dedicado:

O primeiro passo com relao administrao de um servidor dedicado ter uma boa familiaridade com o uso da linha de comando e com a edio dos arquivos de configurao. O captulo 1 contm um resumo dos comandos bsicos e do uso dos editores de texto, alm de um conjunto de dicas sobre a administrao do sistema, que serve como um bom ponto de partida. O uso do terminal acaba sendo uma necessidade, pois, quase sempre, a administrao do servidor feita via SSH, usando ferramentas em modo texto. Existem diversos utilitrios para automatizar a administrao do servidor (como o ISPConfig, que veremos no captulo 9), mas ao longo do livro voc ver que fazer a configurao manualmente oferece um controle muito maior sobre o servidor. Existem clientes SSH para todas as principais plataformas, incluindo clientes Windows e tambm clientes para diversas famlias de celulares e smartphones, o que permite executar tarefas rpidas de administrao at mesmo enquanto estiver preso no trnsito. :)

Para quem vem do Windows, administrar um servidor via linha de comando parece uma coisa extica, mas, com o tempo, voc percebe que realmente a forma mais rpida de fazer muitas coisas. A maior parte da configurao do servidor consiste em instalar pacotes e editar arquivos de configurao em texto, o que pode ser feito via linha de comando sem maiores problemas. Existem ainda ferramentas como o Webmin, phpMyadmin e outras, que so acessadas via navegador. Elas so bastante prticas, pois voc no precisa instalar o ambiente grfico no servidor para us-las, o que desejvel do ponto de vista da performance e at mesmo segurana.

Alm de permitir executar comandos e rodar aplicativos remotamente, o SSH permite transferir arquivos e executar diversas outras funes, como veremos em detalhes no captulo 10. Alm do bom conjunto de recursos, o SSH prima pela segurana, oferecendo respostas para praticamente todo tipo de ataque conhecido. Isso faz com que ele seja de longe a ferramenta de administrao mais usada no mundo Linux. Depois de ganhar acesso ao servidor, o prximo passo configurar o servidor web, que ser provavelmente o responsvel pela maior parte dos servios oferecidos pelo servidor. No captulo 6, veremos detalhes sobre como configurar um servidor LAMP, combinando o uso do servidor Linux com o Apache, o interpretador PHP e o banco de dados MySQL. Esta , justamente, a soluo de hospedagem mais usada atualmente, que permite rodar diversos tipos de gestores de contedo, fruns e outros tipos de aplicativos web, tais como o WordPress e o phpBB. Examinando os recursos de administrao disponveis, fcil entender porque eles se tornaram to populares. Eles automatizam toda a gerao das pginas, atualizao dos links, comentrios e assim por diante, permitindo que os autores do site ou blog se preocupem apenas com o contedo:

Para disponibilizar arquivos de forma pblica, voc poderia usar o prprio servidor web, ou instalar um servidor FTP (sobre o qual tambm estudaremos no captulo 6). Para acesso seguro ao servidor, voc pode usar o SFTP ou o RSSH, que permitem transferir arquivos de forma segura utilizando o SSH. Em casos em que outras pessoas tenham acesso limitado ao seu servidor (como ao hospedar vrios sites, onde cada webmaster tem acesso apenas a seus prprios arquivos), til incluir um sistema de quotas, de forma que cada um tenha sua parcela justa de espao, afastando assim o risco de algum entupir o HD do servidor sozinho. Ao hospedar sites, voc vai precisar tambm configurar o servidor DNS para responder pelos domnios registrados. Voc pode hospedar diversos sites no mesmo servidor, cada um deles com um domnio ou sub-domnio prprio, combinando a configurao do servidor DNS com a configurao dos virtual-hosts no Apache. No captulo 7 veremos detalhes sobre a configurao do Bind, que o servidor DNS mais tradicional, e tambm o mais usado. Temos tambm a questo dos e-mails, que pode ser resolvida rodando um servidor Postfix ou utilizando o Google Apps for you Domain, como veremos em detalhes no captulo 8. Com a evoluo dos processadores, aumento na capacidade dos HDs e o barateamento dos mdulos de memria, mesmo os servidores de configurao mais bsica acabam sendo subutilizados na

maioria das situaes. Uma boa forma de aproveitar os recursos ociosos e agregar mais funes ao servidor utilizar um sistema de virtualizao, que permite rodar vrias mquinas virtuais em um nico servidor, cada uma se comportando como se fosse um servidor completo. Dessa forma, voc pode ter vrios servidores pelo preo de um:

As mquinas virtuais podem ser usadas tambm como "caixas de areia", rodando servios potencialmente vulnerveis, de forma a no expor o servidor principal a riscos desnecessrios, ou at mesmo serem sub-locadas, um negcio que pode ser bastante rentvel. Veremos mais detalhes sobre o tema no captulo 12, reservado configurao do VMware Server. Outra tarefa essencial so os backups, que funcionam como um seguro contra imprevistos. Afinal, em um servidor que armazena dados importantes, voc no pode contar apenas com a sorte. Os backups podem ser automatizados atravs de scripts simples (como veremos em detalhes no captulo 13), que podem, inclusive, serem executados de forma automtica, fazendo backups dirios, semanais ou at mesmo backups rotativos, sem que voc precise se preocupar em logar diariamente no servidor apenas para execut-los. Alm da configurao e da manuteno do servidor, temos outra tarefa importante, que a escolha dos componentes a utilizar, de forma a dimensionar corretamente os recursos do servidor e eliminar gargalos. Apesar da maioria dos servidores serem montados usando processadores e placas de baixo custo, muitas vezes utilizando gabinetes tipo torre e placas-me para micros desktop, existe toda uma classe de componentes e tecnologias destinadas ao uso em servidores, como veremos em detalhes no captulo 14. Tudo isso pode parecer complicado de incio, mas, ao longo do livro, voc vai descobrir que bem mais simples do que parece. Assim como nos outros livros da srie, o principal objetivo explicar os temas de forma abrangente, porm em linguagem simples. Aperte os cintos e vamos l. :)

Captulo 2: Compartilhamento, DHCP e ProxyUm dos usos mais comuns e mais simples para um servidor Linux de rede local simplesmente compartilhar a conexo. A vantagem de usar um servidor dedicado ao invs de simplesmente compartilhar usando o prprio modem ADSL que voc pode incluir outros servios, como um

cache de pginas (Squid), filtro de contedo (SquidGuard ou DansGuardian), firewall, servidor Samba (compartilhando arquivos com a rede interna), servidor de impresso e assim por diante. Em uma rede pequena ou mdia, com de 10 a 50 micros, possvel usar um nico servidor de configurao razovel para todas estas funes. Em redes maiores, com 100 micros ou mais, isso passa a depender muito do nvel de utilizao do servidor. Por exemplo, um simples Pentium 100, com 32 MB de RAM pode compartilhar a conexo com um link de at 8 megabits para um nmero indefinido de clientes. O mesmo servidor pode compartilhar uma impressora e compartilhar arquivos (servios mais pesados que simplesmente compartilhar a conexo), desde que estes servios no sejam utilizados de forma intensiva. Porm, uma configurao modesta como esta j no adequada para rodar um servidor proxy para uma rede de 50 micros, por exemplo. Uma mquina mais atual, como um Pentium E ou um Athlon X2, com 512 MB de RAM e um HD de 7200 RPM, j pode rodar o mesmo proxy para 100 ou 200 micros com folga, incluindo servios adicionais (como uma VPN, por exemplo). Adicione 2 GB de RAM e ele poder rodar tambm um servidor de arquivos para os mesmos 200 micros. Mquinas mais parrudas podem desempenhar funes mais pesadas. Voc pode, por exemplo, usar o VMware Server (que veremos em detalhes mais adiante) para rodar diversas mquinas virtuais, cada uma com um sistema operacional diferente, de forma a atender diversos usurios da rede. Dessa forma, voc pode concentrar aplicativos Windows em uma mquina virtual com o Windows 2003 e o Terminal Services, oferecer aplicativos para usurios remotos usando um servidor com o Fedora e o NX Server (que veremos em detalhes no captulo sobre acesso remoto) e assim por diante. Voc pode at mesmo manter algumas mquinas virtuais com sistemas antigos, como o Windows 98, para rodar aplicativos de legado que rodam apenas sobre ele. Mas, cada coisa a seu tempo :)

Compartilhando a conexoDo ponto de vista da segurana e at mesmo da facilidade de configurao, sempre recomendvel usar um servidor com duas placas de rede, separando o trfego proveniente da internet do trfego da rede local. Com duas placas separadas, fica mais fcil criar as regras de firewall adequadas para bloquear acessos provenientes da internet e, ao mesmo tempo, permitir o trfego vindo da rede local. Se voc acessa via ADSL, recomendvel manter o modem configurado como bridge ao invs de configur-lo como roteador. Dessa forma, o servidor recebe todas as portas de entrada, permitindo que voc acesse o servidor remotamente via SSH (muito til para prestar suporte remoto em servidores instalados por voc) ou disponibilize um servidor web ou FTP. Embora acabe sendo mais trabalhoso, nada impede que voc configure o modem como roteador e use o servidor para novamente compartilhar a conexo recebida do modem, acrescentando os demais servios. Nesses casos, voc vai precisar configurar o modem para encaminhar ao servidor as portas que devem ficar abertas, como a porta 22, usada pelo SSH (caso voc pretenda administrar o servidor remotamente), por exemplo. Isso feito atravs da interface de administrao do modem, atravs da opo "Port Forwarding", ou similar:

Encaminhamento de portas dentro da configurao de um D-Link 500G As opes de configurao variam bastante de acordo com o modelo do modem, mas (com exceo de um punhado de modelos realmente muito antigos) deve estar disponvel pelo menos a opo de criar regras estticas de encaminhamento, onde voc pode encaminhar um conjunto de portas, incluindo uma regra para cada uma. Na maioria dos casos, a interface de configurao do modem permite tambm encaminhar faixas de portas, ou criar uma DMZ (o que faz com que todas as portas sejam encaminhadas para o servidor, como se ele estivesse diretamente conectado Internet). No final, sua rede ficaria com uma topologia similar a essa, com o servidor colocado entre a rede local e o modem. Uma das interfaces do servidor receberia um endereo de rede local, de forma a receber os acessos provenientes dos clientes da rede e a segunda seria configurada para acessar a Internet atravs do modem:

Ao usar uma conexo via cabo, o layout da rede continua o mesmo, a nica diferena que no acesso via cabo a configurao da conexo mais simples, j que preciso apenas obter a configurao da rede via DHCP e no necessrio configurar o roteamento de portas, j que o cable modem funciona como um bridge. Depois de montar o cabeamento da rede, comece configurando a rede local usando uma das faixas de endereos IP reservadas como, por exemplo, a 192.168.1.x, onde o servidor fica com o IP 192.168.1.1 (ou 192.168.1.254, caso prefira) e os micros da rede interna recebem endereos dentro da mesma faixa. O endereo IP de rede local do servidor (192.168.1.1 no exemplo) passa a ser o gateway da rede, j que a ele que os clientes iro contactar quando precisarem acessar qualquer endereo externo:

No caso do servidor, o gateway padro definido apenas ao configurar a conexo com a Internet, no ao configurar a rede local. Caso voc utilize um utilitrio de configurao para configurar as interfaces de rede no servidor, configure primeiro a interface de rede local, mantendo os campos do default gateway e dos servidores DNS em branco, deixando para configurar a interface da Internet por ltimo. Isso evita alguns erros comuns. Por exemplo, se voc configurar a conexo com a web e depois configurar a rede local, colocando um endereo qualquer no campo "default gateway", o gateway informado na configurao da rede local vai substituir o gateway do provedor (definido ao conectar na internet), fazendo com que a conexo deixe de funcionar. Aqui temos um exemplo de configurao manual da rede para distribuies derivadas do Debian, onde a interface eth0 usada como interface de rede local e a eth1 usada como placa de internet, configurada via DHCP: # /etc/network/interfaces auto lo eth0 eth1 iface lo inet loopback iface eth0 inet static address 192.168.1.1 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 iface eth1 inet dhcp Depois de configurada a rede, verifique se consegue pingar os PCs da rede interna (ex: ping 192.168.1.61) a partir do servidor. Se estiver usando Linux nas estaes, experimente ativar o servidor SSH em uma das estaes e tentar se conectar a ela a partir do servidor. Da primeira vez que configurar a rede, use endereos IP estticos para todas as estaes, pois assim mais fcil detectar problemas diversos. Depois de tudo funcionando, mude para configurao via DHCP, como veremos a seguir. Se alguma das estaes estiver inacessvel, verifique se no existe um firewall ativo, verifique o cabo de rede e experimente trocar a porta usada no switch. Ao utilizar o Debian Sarge, Etch ou Lenny (ou outra distribuio diretamente derivada deles), importante fixar os devices das interfaces depois de configurar a rede. Isso evita um problema recorrente, onde as interfaces mudam de posio a cada reset em servidores com duas ou mais interfaces de rede. A placa eth0 passa ento a ser a eth1 e assim por diante, o que logo se torna uma grande dor de cabea ao configurar um servidor para compartilhar a conexo, j que se as duas interfaces mudam de posio, nada funciona.

O problema solucionado atravs do uso de um pequeno utilitrio chamado "ifrename", que permite fixar os devices utilizados para as placas. Utiliz-lo bem simples. Comece instalando o pacote via apt-get: # apt-get install ifrename Com as duas placas de rede configuradas, da forma como sero usadas, cheque os endereos MAC das interfaces usando o comando "ifconfig -a" e crie o arquivo "/etc/iftab", relacionando o device de cada interface com o endereo MAC correspondente, seguindo o modelo abaixo: #/etc/iftab eth0 mac 00:16:36:D1:89:1D eth1 mac 00:02:44:95:1D:88 Uma vez criado, o arquivo verificado a cada boot e a configurao se torna persistente, resolvendo o problema. Esta dica no se aplica s verses recentes do Ubuntu/Kubuntu, onde o problema foi solucionado atravs do uso de regras do udev. No CentOS, Fedora e outras distribuies derivadas do Red Hat, usado um arquivo de configurao independente para cada interface, salvo dentro da pasta "/etc/sysconfig/networkscripts/", de forma que a configurao do exemplo anterior ficaria: # /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR= 00:16:36:D1:89:1D BOOTPROTO=static ONBOOT=yes NETMASK=255.255.255.0 IPADDR=192.168.1.1 NETWORK=192.168.1.0 #/etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 HWADDR=00:02:44:95:1D:88 BOOTPROTO=dhcp USERCTL=no As linhas "HWADDR" so configuradas com os endereos MAC das interfaces de rede. Elas no so obrigatrias, apenas servem como uma garantia adicional de que os devices das interfaces no sero alterados caso voc instale outras placas de rede no futuro. Note que ao conectar via ADSL com o modem configurado em modo bridge (onde voc usa o "pppoeconf" ou o comando "adsl-start" para conectar), ou outra modalidade de acesso discado, a interface eth0 ou eth1 substituda pela interface virtual ppp0. Ao usar uma placa wireless, a interface pode receber vrios nomes, como "wlan0", "ath0" ou "ra0", de acordo com o chipset e o driver utilizado. importante tomar nota dos devices utilizados por cada interface, j que precisaremos especific-los nos passos seguintes. Em caso de dvidas, cheque a configurao da rede usando o comando "ifconfig".

Ativando o compartilhamentoDepois de tudo preparado, ativar o compartilhamento propriamente dito bastante simples. No Linux, o compartilhamento feito usando o Iptables, o firewall integrado ao Kernel. Na verdade, o

Iptables expandido atravs de mdulos, por isso suas funes vo muito alm das de um firewall tradicional, incluindo funes avanadas de roteamento. Para ativar o compartilhamento, so necessrios apenas trs comandos: # modprobe iptable_nat # echo 1 > /proc/sys/net/ipv4/ip_forward # iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE Substitua o "eth1" pela placa da Internet. Este comando simplesmente compartilha a conexo proveniente da placa da internet com todas as demais placas de rede espetadas no servidor, por isso no necessrio especificar a placa de rede local. O primeiro comando ativa o "iptable_nat", o mdulo do Iptables responsvel por oferecer suporte ao roteamento de pacotes via NAT. O segundo ativa o "ip_forward", o mdulo responsvel pelo encaminhamento de pacotes, utilizado pelo mdulo iptable_nat. Finalmente, o terceiro cria uma regra de roteamento, que orienta o servidor a direcionar para a internet todos os pacotes (recebidos dos clientes) que se destinarem a endereos que no faam parte da rede local (ou seja, qualquer coisa fora da faixa 192.168.1.x). A partir da, o servidor passa a ser o gateway da rede. A maioria das distribuies instalam o executvel do Iptables por padro, mas sempre existem excees. No Mandriva, por exemplo, ele instalado ao marcar a categoria "firewall" durante a instalao. Para instal-lo posteriormente, use o comando "urpmi iptables". Em muitas distribuies com o Kernel 2.6, necessrio usar um quarto comando ao compartilhar uma conexo ADSL. Este comando ajusta os tamanhos dos pacotes recebidos do modem ao MTU usado na rede local. Note que, apesar da diagramao do livro tornar necessrio quebrar o comando em duas linhas, trata-se de um nico comando: # iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -m \ tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu A barra invertida ("\") faz com que o shell no interprete o caractere seguinte (no caso, a quebra de linha), permitindo quebrar o comando em duas linhas, sem causar um erro. Esse um truque que permite incluir comandos longos demais para caberem na pgina, divididos em duas linhas ou mais. Na verdade, o comando forma uma nica linha. Como de praxe, importante proteger o servidor de ataques provenientes da Internet usando um firewall. Podemos ativar um firewall simples de bloqueio usando mais alguns comandos do Iptables, complementando os trs comandos anteriores: iptables -A INPUT -p icmp --icmp-type echo-request -j DROP echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter iptables -A INPUT -m state --state INVALID -j DROP iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i eth0 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP O primeiro comando faz com que o seu servidor deixe de responder a pings, o que evita muitos ataques casuais. Os dois comandos seguintes protegem contra IP spoofing (uma tcnica usada em diversos tipos de ataques, onde o atacante envia pacotes usando um endereo IP falseado como remetente, tentando assim obter acesso a PCs da rede interna) e contra pacotes invlidos, que so comumente utilizados em ataques DoS e ataques de buffer overflow. As duas linhas seguintes autorizam pacotes provenientes da interface de loopback (lo), juntamente

com pacotes provenientes da rede local. Como pode ver, a sintaxe das regras do Iptables segue um padro lgico, onde voc especifica uma determinada condio e diz o que o firewall deve fazer com os pacotes que se enquadrarem nela. No caso da regra que autoriza os pacotes da rede local (iptables -A INPUT -i eth0 -j ACCEPT) usamos os parmetros "-A INPUT" (pacotes de entrada) e "-i eth0" (recebidos na interface eth0), seguidos da regra "-j ACCEPT", que diz que os pacotes devem ser aceitos sem checagem adicional. No se esquea de substituir o "eth0" pela interface de rede local correta, caso diferente. Continuando, a linha "iptables -A INPUT -p tcp --dport 22 -j ACCEPT" abre a porta 22, usada pelo SSH para conexes externas, permitindo que voc possa administrar o servidor remotamente. Voc pode abrir mais portas simplesmente adicionando mais linhas, com as portas desejadas. Concluindo, temos a linha "iptables -A INPUT -p tcp --syn -j DROP", que faz o trabalho pesado, bloqueando tentativas de conexo provenientes da Internet. Depois de testar o compartilhamento, falta fazer com que os comandos sejam executados durante o boot, tornando a configurao permanente. A forma mais simples de fazer isso colocar os comandos no arquivo "/etc/rc.local", um script prprio para a tarefa, que est disponvel tanto em distribuies derivadas do Debian quanto em distribuies da linhagem do Red Hat. Um exemplo de arquivo completo, incluindo os comandos para ativar o firewall seria: #!/bin/sh # /etc/rc.local modprobe iptable_nat echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE iptables -A INPUT -p icmp --icmp-type echo-request -j DROP echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter iptables -A INPUT -m state --state INVALID -j DROP iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i eth0 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP Esta receita genrica, deve funcionar em qualquer distribuio. Lembre-se de substituir "eth1" pela interface de internet e o "eth0" pela interface de rede local, caso diferentes. Uma segunda opo, mais elegante, porm mais complicada, criar um servio de sistema, que pode ser ativado e desativado. Neste caso, crie o arquivo de texto "/etc/init.d/compartilhar". Dentro dele vo as linhas a seguir: #!/bin/bash # Interface da Internet: ifinternet="eth1" # Interface da rede local iflocal="eth0" iniciar(){ modprobe iptable_nat echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o $ifinternet -j MASQUERADE iptables -A INPUT -p icmp --icmp-type echo-request -j DROP echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter iptables -A INPUT -m state --state INVALID -j DROP iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i $iflocal -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP } parar(){ iptables -F iptables -F -t nat } case "$1" in "start") iniciar ;; "stop") parar ;; "restart") parar; iniciar ;; *) echo "Use os parmetros start ou stop" esac Este um shell script que aceita trs funes: start, stop e restart, executando dentro de cada uma os comandos que compartilham e param o compartilhamento da conexo. Esta estrutura similar usada nos demais scripts de inicializao do sistema, como os do Apache, Samba, Squid e outros servios. Veja que em vez de especificar as interfaces de internet e de rede local dentro dos comandos, passei a usar duas variveis no incio do script, que facilitam a configurao e tornam o script mais elegante. Quando precisar usar o script em outra mquina, onde as interfaces sejam diferentes, voc precisa apenas se lembrar de alterar as duas variveis. Note tambm que os comandos a partir do "iptables -A INPUT -p icmp --icmp-type echo-request -j DROP" correspondem s protees e ao firewall e podem ser removidos caso desejado. Para usar o script, transforme-o em um arquivo executvel, usando o comando: # chmod +x /etc/init.d/compartilhar A partir da, voc pode iniciar e parar o compartilhamento usando os comandos: # /etc/init.d/compartilhar start # /etc/init.d/compartilhar stop Para que o script seja executado durante o boot, voc pode adicionar o comando "/etc/init.d/compartilhar start" no arquivo "/etc/rc.local", em vez de colocar os comandos diretamente, como fizemos no exemplo anterior. Outra opo (mais elegante) criar um link para ele dentro da pasta "/etc/rc5.d", o que tambm faz com que ele seja executado durante o boot: # cd /etc/rc5.d # ln -s ../init.d/compartilhar S21compartilhar Como vimos no primeiro captulo, o "S" indica que o script deve ser executado com o parmetro "start" e o "21" indica a ordem em que deve ser executado durante o boot, em relao aos outros servios. A ordem de execuo dos servios muda de distribuio para distribuio, mas nessa posio garantimos que ele ser executado depois da ativao das interfaces de rede e de outros servios essenciais. Se voc um administrador paranico, verifique a configurao dos servios na distribuio em uso e altere a ordem de inicializao do script de firewall, de forma que ele seja carregado antes de qualquer outro servio que aceite conexes, como o Samba ou o Apache. Com isso voc garante que o firewall ser carregado primeiro e no fica com seu servidor vulnervel nem mesmo por um curto espao de tempo durante o boot. Isso nos leva a uma terceira opo para salvar a configurao, utilizando os prprios arquivos de

inicializao do sistema. Ela a mais "correta" do ponto de vista tcnico, embora menos flexvel. Nesse caso, a configurao seria feita em trs passos: A primeira parada seria o arquivo "/etc/modules", onde so listados os mdulos carregados pelo sistema durante o boot. Nele seria adicionada a linha "iptables_nat", ativando o carregamento do mdulo. Em seguida, voc adicionaria (ou descomentaria) a linha "net.ipv4.conf.default.forwarding=1" no arquivo "/etc/sysctl.conf", para ativar o roteamento de pacotes, tornando permanente o comando "echo 1 > /proc/sys/net/ipv4/ip_forward". Finalmente, depois de executar o comando "iptables -t nat -A POSTROUTING -o $placa -j MASQUERADE", que efetivamente ativa o compartilhamento, voc usaria o comando "/etc/init.d/iptables save active" (nas derivadas do Debian) ou "service iptables save" (nas derivadas do Red Hat) para salvar regra e fazer com que ela passe a ser reativada durante o boot.

Compartilhar usando uma nica placa de redeSe voc est usando um notebook ou um barebone, com uma placa onboard e sem slots de expanso, existe a possibilidade de compartilhar a conexo usando uma nica placa de rede, criando um alias (apelido) para a placa principal. Normalmente, a topologia para compartilhar a conexo ligar o modem ADSL (ou cable modem) na placa eth0 do servidor, conectar a placa eth1 do mesmo servidor ao switch da rede, juntamente com as demais estaes. Ao compartilhar usando uma nica placa, todo mundo passa a ser conectado diretamente ao switch, inclusive o modem. O servidor configurado para ter duas placas de rede "lgicas", uma para se conectar na internet e outra para a rede local:

Uma dica que os modems ADSL geralmente utilizam um cabo de rede cross-over, j que so feitos para serem conectados diretamente a um PC e no ao hub. Nesses casos, voc precisa ligar o modem na porta up-link do hub. Note que isso no necessrio ao usar um switch ou hub-switch, pois eles so capazes de detectar o cabo cruzado e corrigir o sinal via software. Para ativar o compartilhamento, o primeiro passo se conectar normalmente internet no servidor, utilizando as configuraes de praxe. A partir do momento em que ele estiver acessando, crie o alias para a placa de rede "lgica" que o conectar aos micros da rede local, usando o comando: # ifconfig eth0:1 192.168.1.1/24 Isso far com que o servidor passe a se comportar como se tivesse duas placas de rede, uma ligada ao modem ADSL e outra ligada rede local, respondendo no endereo 192.168.1.1 (substitua por um endereo dentro da faixa usada na sua rede local). O "/24" indica a configurao da mscara de sub-rede no padro CIDR, equivale a digitar "255.255.255.0". Compartilhe a conexo da forma usual, configure os clientes da rede e eles j sero capazes de navegar. Lembre-se de que um alias para a placa de rede no o mesmo que uma placa de rede fsica espetada na placa-me. Por isso, o utilitrio para compartilhar a conexo includo na sua

distribuio pode ter problemas para trabalhar desta forma. Se por acaso ele falhar, use os quatro comandos para compartilhar diretamente atravs do Iptables que j vimos. Compartilhar a conexo usando uma nica placa de rede tambm relaxa bastante a segurana da rede. Embora o modem ADSL fique conectado diretamente ao switch da rede, ningum na internet ser capaz de enxergar os micros da rede local, pois eles utilizaro uma faixa de IPs invlida, como 192.168.1.x ou 10.0.0.x. Voc ainda pode adicionar um firewall "fecha tudo" no servidor, para que ele no responda a pings, feche todas as portas, etc. O problema que com o modem ADSL ligado diretamente ao hub, algum que consiga obter acesso configurao do modem poderia ganhar acesso aos micros da rede local atravs dele. Os modems ADSL no so apenas dispositivos burros que fazem a converso analgico/digital, eles possuem vrios recursos para rotear pacotes, criar vrios tipos de filtros e, em muitos casos, at mesmo tneis VPN. Por terem tantos recursos, sempre existe a possibilidade de surgirem bugs diversos de segurana. Pense no modem ADSL como um PC vulnervel, que nunca recebe atualizaes de segurana. Usando duas placas de rede ainda seria preciso passar pelo servidor de compartilhamento, que pode ser protegido com um bom firewall. Ao conectar o modem diretamente ao hub, esta linha de proteo perdida.

Configurando um servidor DHCPHoje em dia, quase todas as redes utilizam algum tipo de servidor DHCP. Em geral, eles so ativados automaticamente ao compartilhar a conexo ou junto com algum outro servio, de forma que voc acaba no aprendendo muita coisa sobre a sua configurao. De um modo geral, o trabalho de um servidor DHCP bastante simples. Ele responde aos pacotes de broadcast das estaes, enviando um pacote com um dos endereos IP disponveis e os demais dados da rede. Os pacotes de broadcast so endereados ao endereo "255.255.255.255" e so retransmitidos pelo switch da rede para todas as portas, diferente dos pacotes endereados a um endereo especfico, que so transmitidos apenas na porta relacionada a ele. Periodicamente o servidor DHCP verifica se as estaes ainda esto l, exigindo uma renovao do "aluguel" do endereo IP (opo "lease time"). Isso permite que os endereos IP sejam gastos apenas com quem realmente estiver online, evitando que os endereos disponveis se esgotem. O servidor DHCP mais usado no Linux o ISC DHCP, desenvolvido pela Internet Systems Consortium, uma organizao sem fins lucrativos dedicada a desenvolver servios de infra-estrutura usados na Internet, incluindo o Bind e o NTPD. Caso esteja curioso, a pgina com o cdigo fonte a: http://www.isc.org/sw/dhcp/. Nas distribuies derivadas do Debian, o pacote correspondente ao servidor DHCP se chama "dhcp3-server" e pode ser instalado via apt-get: # apt-get install dhcp3-server Com o pacote instalado, voc pode ativar e desativar o servio usando os comandos: # /etc/init.d/dhcp3-server start # /etc/init.d/dhcp3-server stop Como voc pode imaginar, o "3" corresponde verso do software. Eventualmente ele ser substitudo pelo "dhcp4-server", o que resultar tambm na mudana do nome da pasta onde fica o arquivo e do script de inicializao referente ao servio. No Fedora e no CentOS, o pacote se chama simplesmente "dhcp" e pode ser instalado usando o yum: # yum install dhcp

Embora o pacote se chame apenas "dhcp", o script referente ao servio se chama "dhcpd", de forma que os comandos para iniciar e parar o servio so: # service dhcpd start # service dhcpd stop Diferente do Debian, o servio no ser configurado para ser inicializado durante o boot depois de instalado. Voc precisa ativ-lo manualmente usando o comando "chkconfig": # chkconfig dhcpd on O arquivo de configurao o "dhcpd.conf". Nas distribuies derivadas do Debian, o caminho completo para ele "/etc/dhcp3/dhcpd.conf", enquanto no Fedora e no CentOS apenas "/etc/dhcpd.conf", ou seja, um diretrio acima. Apesar dessas diferenas estticas, o que interessa mesmo a configurao do arquivo e esta sim igual, independentemente da distribuio. Este um exemplo de arquivo de configurao bsico: # /etc/dhcp3/dhcpd.conf ddns-update-style none; default-lease-time 600; max-lease-time 7200; authoritative; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.199; option routers 192.168.1.1; option domain-name-servers 208.67.222.222,208.67.220.220; option broadcast-address 192.168.1.255; } A opo " default-lease-time" controla o tempo de renovao dos endereos IP. O "600" indica que o servidor verifica a cada dez minutos se as estaes ainda esto ativas. Se voc tiver mais endereos IP do que mquinas, os endereos IP das estaes raramente vo precisar mudar. Mas, no caso de uma rede congestionada, o "max-lease-time" determina o tempo mximo que uma estao pode usar um determinado endereo IP. Isso foi planejado para ambientes onde haja escassez de endereos IP, como, por exemplo, em um provedor de acesso, onde sempre existem mais clientes do que endereos IP disponveis e se trabalha contando que nem todos vo ficar conectados simultaneamente. Em condies normais, essas duas opes no so muito importantes. O que interessa mesmo o bloco que vai logo abaixo, onde ficam as configuraes da rede. A opo "range" determina a faixa de endereos IP que ser usada pelo servidor. Se voc utiliza a faixa de endereos 192.168.1.1 at 192.168.1.254, por exemplo, pode reservar os endereos de 192.168.1.1 a 192.168.1.100 para estaes configuradas com IP fixo e usar os demais para o DHCP, ou ento reservar uma faixa especfica para ele, de 192.168.1.101 a 192.168.1.201, por exemplo. O importante usar faixas separadas para o DHCP e os micros configurados com IP fixo. Na "option routers" vai o endereo do default gateway da rede, ou seja, o endereo do servidor que est compartilhando a conexo. No necessrio que o mesmo micro que est compartilhando a conexo rode tambm o servidor DHCP. Pode ser, por exemplo, que na sua rede o gateway seja o prprio modem ADSL que est compartilhando a conexo e o DHCP seja um dos PCs. A opo "option domain-name-servers" contm os servidores DNS que sero usados pelas estaes. Ao usar dois ou mais endereos, eles devem ser separados por vrgula, sem espaos. Em geral, voc vai usar os prprios endereos DNS do provedor, a menos que voc configure um servidor DNS interno na sua rede (que pode ser instalado no prprio micro que est compartilhando a conexo e rodando o DHCP). Estes servios consomem poucos recursos da mquina.

O servidor DNS mais usado no Linux o Bind. Nas distribuies derivadas do Debian voc pode instal-lo com um "apt-get install bind". O servidor DNS pode ser configurado para implementar um sistema de domnios e subdomnios na sua rede, mas o uso mais comum simplesmente fazer um "cache", onde o servidor DNS simplesmente repassa as requisies para um dos 13 root servers da internet e vai armazenando os endereos que j foram acessados. Mais adiante teremos um captulo inteiro dedicado a ele. Voc pode substituir o arquivo de configurao padro por este modelo, ou edit-lo conforme a necessidade. Ao fazer qualquer alterao no arquivo, voc deve reiniciar o servidor DHCP usando o comando: # /etc/init.d/dhcp3-server restart ou: # service dhcpd restart Com o servidor DHCP configurado, voc pode testar a configurao em um dos clientes Linux, configurando a rede usando o "dhclient", seguido da interface a ser configurada. Ele mostra toda a negociao entre o servidor e o cliente, o que permite que voc verifique se o servidor est usando a configurao definida por voc: # dhclient eth0 Internet Systems Consortium DHCP Client V3.0.4 Copyright 2004-2006 Internet Systems Consortium. All rights reserved. For info, please visit http://www.isc.org/sw/dhcp/ Listening on LPF/eth1/00:15:00:4b:68:db Sending on LPF/eth1/00:15:00:4b:68:db Sending on Socket/fallback DHCPREQUEST on eth1 to 255.255.255.255 port 67 DHCPACK from 192.168.1.1 bound to 192.168.1.199 -- renewal in 245 seconds. Como voc pode ver, o cliente deve receber a resposta a partir do endereo IP do servidor rodando o servidor DHCP e ser configurado com um endereo dentro da faixa definida por voc. Uma observao importante que sempre que configurar um servidor com duas placas de rede, voc deve configurar o servidor DHCP para escutar apenas na placa da rede local. No Debian, esta configurao vai no arquivo "/etc/default/dhcp3-server". Procure pela linha: INTERFACES="" ... e adicione a placa que o servidor DHCP deve escutar, como em: INTERFACES="eth0" Para que a configurao entre em vigor, basta reiniciar o servio novamente.

DHCP com IP fixoMais uma opo interessante no servidor DHCP a possibilidade de relacionar um determinado endereo IP com o endereo MAC de certo micro da rede. Isso faz com que ele sempre obtenha o mesmo endereo a partir do servidor DHCP, como se tivesse sido configurado para usar IP fixo. Esse recurso usado em redes de terminais leves, para que o servidor "reconhea" os terminais e possa enviar a configurao adequada a cada um, mas pode ser usado tambm em outras situaes, como em uma pequena rede, onde alguns micros compartilham impressoras e arquivos e por isso

no podem ficar mudando de endereo IP a cada reboot. Configurar o servidor DHCP para dar a eles sempre o mesmo IP pode ser mais prtico que configur-los para usar IP fixo manualmente, pois eles continuaro recebendo o mesmo IP mesmo que voc reinstale o sistema (pois, apesar da mudana de sistema operacional, a placa de rede continuar a mesma). Veja o caso de quem usa distribuies Linux live-CD, por exemplo. Para usar este recurso, adicione uma seo como esta para cada host no final do arquivo dhcpd.conf, depois de todas as linhas de configurao, mas antes de fechar a chave (}): host m5 { hardware ethernet 00:0F:B0:55:EA:13; fixed-address 192.168.1.211; } Veja que a seo comea com o nome da mquina, "m5" no exemplo. Em seguida vo, entre chaves, o endereo MAC da placa de rede (que voc pode verificar atravs do comando "ifconfig") e o endereo IP que a estao deve usar. Um exemplo de arquivo completo, incluindo a configurao de IP fixo para duas mquinas seria: ddns-update-style none; default-lease-time 600; max-lease-time 7200; authoritative; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.199; option routers 192.168.1.1; option domain-name-servers 208.67.222.222,208.67.220.220; option broadcast-address 192.168.1.255; host m5 { hardware ethernet 00:0F:B0:55:EA:13; fixed-address 192.168.1.211; } host semprao { hardware ethernet 00:0F:B0:45:BC:17; fixed-address 192.168.1.212; } } No se esquea de reiniciar o servidor DHCP depois de configurar o arquivo para que a nova configurao seja aplicada: # /etc/init.d/dhcp3-server restart Uma pergunta recorrente sobre o uso de servidores DHCP sobre a possibilidade de manter mais de um servidor DHCP ativo. Em situaes normais, voc nunca deve manter mais de um servidor DHCP ativo ao mesmo tempo, principalmente se ambos estiverem configurados para fornecer endereos dentro da mesma faixa. Caso contrrio, comeam a surgir problemas com micros configurados com o mesmo IP (cada um dado por um DHCP diferente) e assim por diante. Entretanto, em algumas situaes, uma configurao com dois servidores DHCP pode funcionar, naturalmente depois de bem testada. O dhcp3-server usado no Linux bastante rpido, por isso (desde que a configurao no seja muito complexa) costuma responder antes dos servidores DHCP usados nos servidores Windows e na maioria dos modems ADSL, o que pode ser usado a seu favor. Imagine um caso comum: uma rede de 10 ou 20 micros, com um ADSL de 1 megabit,

compartilhado pelo prprio modem. Para melhorar o desempenho da rede, voc resolve implantar um servidor com o Squid configurado para trabalhar como um proxy transparente, alm de um servidor DNS prprio e DHCP. Como este "servidor" o seu prprio micro, que precisa ser desligado de vez em quando, voc decide manter a rede da forma que est, com o modem compartilhando a conexo e o seu micro funcionando como um segundo gateway, dentro da rede local. Voc quer que a rede continue funcionando mesmo quando seu micro precisar ser desligado por um certo tempo, por isso mantm o servidor DHCP do modem ativo, junto com o servidor DHCP instalado no seu micro, configurados para fornecerem faixas diferentes de endereos, de forma a minimizar conflitos. No seu caso, o dhcp3-server mais rpido que o DHCP do modem. Por isso, enquanto ele est ligado, os micros da rede local so configurados para acessar atravs dele, passando pelo proxy transparente. Quando ele desligado, o modem ADSL passa a responder as chamadas e os micros passam a ser configurados para acessar diretamente atravs dele ( preciso reconfigurar os clientes via DHCP para que eles obtenham a configurao a partir do modem e passem a utiliz-lo como gateway). A rede continua funcionando mesmo que seu micro seja desconectado definitivamente. Note que isso tecnicamente errado e s funciona em redes pequenas, onde todos os micros so ligados ao mesmo hub ou switch. Quanto maior a rede, mais imprevisvel se torna o comportamento dos servidores DHCP e mais importante torna-se manter apenas um ativo.

IPV6Se voc est chegando agora, o IPV6 a verso atualizada do protocolo IP, que utiliza endereos de 128 bits. Ele surgiu para solucionar o problema da escassez de endereos IP, que vem se tornando um problema cada vez mais grave. No IPV4 so usados endereos de apenas 32 bits, o que permitem apenas 4 bilhes de combinaes de endereos. Pode parecer bastante, mas a m distribuio dos endereos e peculiaridades do protocolo, como a necessidade de reservar o primeiro e o ltimo endereo de cada faixa, fazem com que o volume de endereos realmente disponveis seja muito menor. Com o crescimento no volume de servidores e de dispositivos conectados web, apenas questo de tempo at que os endereos IPv4 se esgotem definitivamente. Pode demorar, mas uma migrao em massa para o IPV6 vai acontecer mais cedo ou mais tarde. No IPV6 os endereos so escritos usando caracteres em hexa, conjunto que alm dos nmeros de 0 a 9, inclui tambm as letras A, B, C, D, E e F, totalizando 16 caracteres, cada um usado para representar um grupo de 4 bits. Como so utilizados endereos de 128 bits, so necessrios nada menos do que oito quartetos de caracteres em hexa, separados por ":", como em: 2001:bce4:5641:3412:341:45ae:fe32:65. Um atenuante que os endereos IPV6 podem ser abreviados de diversas formas. Em primeiro lugar, todos os zeros esquerda dentro dos quartetos podem ser omitidos. Por exemplo, em vez de escrever "0341", voc pode escrever apenas "341"; em vez de "0001" apenas "1" e, em vez de "0000" apenas "0", sem que o significado seja alterado. por isso que muitos quartetos dentro dos endereos IPV6 podem ter apenas 3, 2 ou mesmo um nico dgito. Os demais so zeros esquerda, que foram omitidos. muito comum que os endereos IPV6 incluam seqncias de nmeros 0, j que atualmente poucos endereos so usados, de forma que os donos preferem simplificar as coisas. Graas a isso, o endereo "2001:bce4:0:0:0:0:0:1" pode ser abreviado para apenas "2001:bce4::1", onde omitimos todo o trecho central "0:0:0:0:0". Assim como no IPV4, os endereos IPV6 so divididos em dois blocos. Os primeiros 64 bits (os 4 primeiros quartetos) identificam a rede, enquanto os ltimos 64 bits identificam o host. No endereo "2001:bce4:0:0:0:0:0:1", por exemplo, temos a rede "2001:bce4:0:0" e o host "0:0:0:0:1" dentro

dela. No existem mais mscaras de tamanho varivel como no IPV4. Para simplificar a configurao, a parte do endereo referente ao host definida automaticamente a partir do endereo MAC da placa de rede. Como os endereos MAC possuem apenas 12 dgitos (enquanto no IPV6 a parte do host contm 16 dgitos), so adicionados os dgitos "ffff" entre o sexto e stimo dgito do endereo. O endereo "00:16:F2:FE:34:E1", por exemplo, viraria ento "0016:f2ff:fffe:34e1". A atribuio de endereos em uma rede IPV6 segue um processo diferente (e at mais simples) do que em uma rede IPV4, onde os endereos so atribudos automaticamente, sem necessidade de utilizar um servidor DHCP especializado. Os roteadores IPV6 enviam constantemente pacotes especiais, chamados "RAs" (router advertisements). Como o nome sugere, estes pacotes divulgam a existncia do roteador e o endereo de rede utilizado por ele (os 64 bits iniciais do endereo). Ao receberem estes pacotes, os clientes geram seus endereos IPV6 automaticamente, combinando os 64 bits do endereo fornecidos pelo roteador com os 64 bits "pessoais", gerados a partir do endereo MAC da placa de rede. Como o endereo MAC s muda quando voc substituiu a placa de rede, o cliente continuar utilizando o mesmo endereo, reboot aps reboot. No Linux, o servio responsvel por enviar os router advertisements o radvd (router-advertising daemon). A configurao bastante simples; comece instalando o pacote, como em: # apt-get install radvd ou: # yum install radvd Em seguida, crie o arquivo "/etc/radvd.conf" especificando a interface de rede local e o prefixo, ou seja, a parte do endereo referente rede, como em: interface eth0 { AdvSendAdvert on; prefix fee::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; }; }; Nesse exemplo, estou utilizando o "fee::" como prefixo, que uma faixa de endereos fcil de lembrar. Naturalmente, voc deve utilizar um endereo IPV6 iniciado com o prefixo na configurao do servidor. Para especificar um endereo manualmente, use o comando "ifconfig interface add endereo", como em: # ifconfig eth0 add fee::0015:f2ff:ffa1:d9cc Para tornar a configurao definitiva, adicione as linhas abaixo no arquivo "/etc/network/interfaces", especificando a interface e o endereo IPV6 utilizado: iface eth0 inet6 static address fee::0015:f2ff:ffa1:d9c netmask 64 Terminada a configurao, reinicie o servio "radvd" e o servidor passar a divulgar o prefixo da rede, permitindo que os clientes configurem seus endereos IPV6 automaticamente, combinando o prefixo da rede com os 16 dgitos gerados a partir do endereo MAC da placa de rede:

# /etc/init.d/radvd restart Quase todas as distribuies Linux atuais e tambm o Windows Vista trazem o protocolo IPV6 ativado por padro, de forma que um roteador configurado para enviar os pacotes RA uma boa adio para a sua rede local. O radvd no conflita com dhcp3-server e os hosts da rede podem utilizar endereos IPV4 e IPV6 simultaneamente (sem problema algum), de forma que voc pode simplesmente adicionar o IPV6 sua rede IPV4 j configurada, sem contra-indicaes. Dessa forma, voc pode tanto continuar acessando os outros micros da rede utilizando os endereos IPV4 tradicionais quanto atravs dos endereos IPV6.

Configurando um servidor proxy com o SquidO Squid permite compartilhar a conexo entre vrios micros, servindo como um intermedirio entre eles e a internet. Usar um proxy diferente de simplesmente compartilhar a conexo diretamente, via NAT. Ao compartilhar via NAT, os micros da rede acessam a internet diretamente, sem restries. O servidor apenas repassa as requisies recebidas, como um garoto de recados. O proxy como um burocrata que no se limita a repassar as requisies: ele analisa todo o trfego de dados, separando o que pode ou no pode passar e guardando informaes para uso posterior. Compartilhar a conexo via NAT mais simples do que usar um proxy como o Squid sob vrios aspectos. Voc compartilha a conexo no servidor, configura os clientes para o utilizarem como gateway e pronto. Ao usar um proxy, alm da configurao da rede, necessrio configurar o navegador e cada outro programa que for acessar a Internet (em cada um dos clientes da rede) para usar o proxy. Esta uma tarefa tediosa e que acaba aumentando bastante seu volume de trabalho, pois toda vez que um micro novo for colocado na rede ou for preciso reinstalar o sistema, ser preciso fazer a configurao novamente. A configurao do proxy muda de navegador para navegador. No Firefox, por exemplo, voc a encontra em "Editar > Preferncias > Avanado > Rede > Configuraes". No IE, a configurao est em "Opes da Internet > Opes > Configuraes da Lan > Usar um servidor Proxy": Alm do navegador, outros programas podem ser configurados para trabalhar atravs do proxy: clientes de MSN, VoIP e at mesmo programas P2P. As vantagens de usar um proxy so basicamente trs: 1- possvel impor restries de acesso com base no horrio, login, endereo IP da mquina e outras informaes, alm de bloquear pginas com contedo indesejado. por isso que quase todos os softwares de filtro de contedo envolvem o uso de algum tipo de proxy, muitas vezes o prprio Squid (j que, como o software aberto, voc pode inclu-lo dentro de outros aplicativos, desde que respeitando os termos da GPL). Mais adiante estudaremos sobre a configurao do SquidGuard e do DansGuardian. 2- O proxy funciona como um cache de pginas e arquivos, armazenando informaes j acessadas. Quando algum acessa uma pgina que j foi carregada, o proxy envia os dados que guardou no cache, sem precisar acessar a mesma pgina repetidamente. Isso acaba economizando bastante banda, tornando o acesso mais rpido. Hoje em dia, os sites costumam usar pginas dinmicas, onde o contedo muda a cada visita, mas, mesmo nesses casos, o proxy d uma boa ajuda, pois embora o html seja diferente a cada visita e realmente precise ser baixado de novo, muitos componentes da pgina, como ilustraes, banners e animaes em flash, podem ser aproveitados do cache, diminuindo o tempo total de carregamento. Dependendo da configurao, o proxy pode apenas acelerar o acesso s pginas ou servir como um verdadeiro cache de arquivos, armazenando atualizaes do Windows Update, downloads diversos

e pacotes instalados atravs do apt-get, por exemplo. Em vez de ter que baixar o ltimo Service Pack do Windows ou a ltima atualizao do Firefox nos 10 micros da rede, voc vai precisar baixar apenas no primeiro, pois os outros 9 vo baixar a partir do cache do Squid. 3- Uma terceira vantagem de usar um proxy que ele loga todos os acessos realizados atravs dele. Voc pode visualizar os acessos posteriormente usando o Sarg, um gerador de relatrios que transforma as longas listas de acessos dos logs em arquivos html bem organizados. Mesmo assim, voc pode estar achando que as vantagens no vo compensar o trabalho de sair configurando micro por micro, programa por programa para usar o proxy, e que mais fcil simplesmente compartilhar via NAT. Entretanto, existe a possibilidade de juntar as vantagens das duas formas de compartilhamento, configurando um proxy transparente como veremos adiante. Ao usar um proxy transparente, voc tem basicamente uma conexo compartilhada via NAT, com a mesma configurao bsica nos clientes. O proxy entra na histria como um adicional. Uma regra de firewall envia as requisies recebidas na porta 80 do servidor para o proxy, que se encarrega de responder aos clientes. Toda a navegao passa a ser feita automaticamente atravs do proxy (incluindo o cache dos arquivos do Windows update, downloads diversos e os pacotes instalados atravs do apt-get), sem que voc precise fazer nenhuma configurao adicional nos clientes.

Instalando o SquidO Squid composto de um nico pacote, por isso a instalao simples. Instale o pacote "squid" usando o apt-get, yum ou urpmi, como em: # apt-get install squid Toda a configurao do Squid feita em um nico arquivo, o "/etc/squid/squid.conf". Caso voc esteja usando uma verso antiga do Squid, como a includa no Debian Woody, por exemplo, o arquivo pode ser o "/etc/squid.conf". Apesar da mudana na localizao do arquivo de configurao, as opes descritas aqui vo funcionar sem maiores problemas. O arquivo original, instalado junto com o pacote, realmente enorme, contm comentrios e exemplos para quase todas as opes disponveis. Ele pode ser uma leitura interessante se voc j tem uma boa familiaridade com o Squid e quer aprender mais sobre cada opo, mas, de incio, melhor comear com um arquivo de configurao mais simples, apenas com as opes mais usadas.

Em geral, cada distribuio inclui uma ferramenta diferente para a configurao do proxy. Uma das mais usadas o Webmin, disponvel em vrias distribuies. A funo dessas ferramentas disponibilizar as opes atravs de uma interface grfica e gerar o arquivo de configurao com base nas opes escolhidas. Em alguns casos, essas ferramentas ajudam bastante, mas, como elas mudam de distribuio para distribuio, acaba sendo mais produtivo aprender a trabalhar direto no arquivo de configurao, que, afinal, no to complicado assim. Assim como em outros tpicos do livro, vamos aprender a configurar o Squid "no muque", sem depender de utilitrios de configurao. Comece renomeando o arquivo padro, de forma a conserv-lo para fins de pesquisa: # mv /etc/squid/squid.conf /etc/squid/squid.conf.orig Em seguida, crie um novo arquivo "/etc/squid/squid.conf", contendo apenas as quatro linhas abaixo: http_port 3128 visible_hostname gdh acl all src 0.0.0.0/0.0.0.0 http_access allow all Estas linhas so o suficiente para que o Squid "funcione". Como viu, aquele arquivo de configurao gigante tem mais uma funo informativa, citando e explicando as centenas de opes disponveis. Apenas um punhado das opes so realmente necessrias, pois, ao omit-las, o Squid simplesmente utiliza os valores default. por isso que acaba sendo mais simples comear com um arquivo vazio e ir inserindo apenas as opes que voc conhece e deseja alterar. As quatro linhas dizem o seguinte: http_port 3128: A porta onde o servidor Squid vai ficar disponvel. A porta 3128 o default, mas muitos administradores preferem utilizar a porta 8080, que soa mais familiar a muitos usurios. visible_hostname gdh: O nome do servidor, o mesmo que foi definido na configurao da rede. Ao usar os modelos desse captulo, no se esquea de substituir o "gdh" pelo nome correto do seu servidor, como informado pelo comando "hostname". acl all src 0.0.0.0/0.0.0.0 e http_access allow all: Estas duas linhas criam uma acl (uma poltica de acesso) chamada "all" (todos), incluindo todos os endereos IP possveis. Ela permite que qualquer um dentro desta lista use o proxy, ou seja, permite que qualquer um use o proxy, sem limitaes. Para testar a configurao, reinicie o servidor Squid com o comando: # /etc/init.d/squid restart Se estiver no CentOS, Fedora ou Mandriva, pode utilizar o comando "service", que economiza alguns toques no teclado: # service squid restart No Slackware, o comando ser "/etc/rc.d/rc.squid restart", seguindo a lgica do sistema em colocar os scripts referentes aos servios na pasta /etc/rc.d/ e inicializ-los automaticamente durante o boot, desde que marcada a permisso de execuo. Para testar o proxy, configure um navegador (no prprio servidor) para usar o proxy, atravs do endereo 127.0.0.1 (o localhost), porta 3128. Se no houver nenhum firewall pelo caminho, voc conseguir acessar o proxy tambm atravs dos outros micros da rede local, basta configurar os navegadores para usarem o proxy, fornecendo o endereo do servidor na rede local. Caso necessrio, abra a porta 3128 na configurao do firewall, para que o Squid possa receber as conexes. Um exemplo de regra manual do Iptables para abrir a porta do Squid apenas para a rede local (a interface eth0 no exemplo) :

iptables -A INPUT -i eth0 -p tcp --dport 3128 -j ACCEPT

Criando uma configurao bsicaO problema com o modelo de configurao minimalista que acabamos de ver que com apenas estas quatro linhas o proxy ficar muito aberto. Se voc deixar o servidor proxy ativo no prprio servidor que compartilha a conexo e no houver nenhum firewall ativo, qualquer um na internet poderia usar o seu proxy, o que naturalmente no desejado. O proxy deve ficar ativo apenas para a rede local. Vamos gerar, ento, um arquivo mais completo, permitindo que apenas os micros da rede local possam usar o proxy e definindo mais algumas polticas de segurana. Neste segundo exemplo j aproveitei algumas linhas do arquivo original, criando regras que permitem o acesso a apenas algumas portas especficas e no mais a qualquer coisa, como na configurao anterior: http_port 3128 visible_hostname gdh acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 901 # swat acl Safe_ports port 1025-65535 # portas altas acl purge method PURGE acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !Safe_ports http_access deny CONNECT !SSL_ports acl redelocal src 192.168.1.0/24 http_access allow localhost http_access allow redelocal http_access deny all As acl's "SSL_ports" e a "Safe_ports" so as responsveis por limitar as portas que podem ser usadas atravs do proxy. Neste exemplo, usei a configurao-modelo indicada na documentao do Squid, que prev o uso de diversos protocolos conhecidos e tambm o uso de portas altas, acima da 1024. Ela to extensa porque cada porta especificada em uma linha diferente. Podemos simplificar isso agrupando as portas na mesma linha, o que resulta em um arquivo de configurao muito menor, mas que faz exatamente a mesma coisa: http_port 3128

visible_hostname gdh acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535 acl purge method PURGE acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !Safe_ports http_access deny CONNECT !SSL_ports acl redelocal src 192.168.1.0/24 http_access allow localhost http_access allow redelocal http_access deny all Veja que em ambos os exemplos adicionei duas novas acl's. A acl "localhost" contm o endereo 127.0.0.1, que voc utiliza ao usar o proxy localmente (ao navegar usando o prprio servidor), e a acl "rede local", que inclui os demais micros da rede local. Substitua o "192.168.1.0/24" pela faixa de endereos IP e a mscara de sub-rede usada na sua rede local (o 24 equivale mascara 255.255.255.0). Depois de criadas as duas polticas de acesso, vo duas linhas no final do arquivo que especificam que os micros que se enquadrarem nelas podero usar o proxy: http_access allow localhost http_access allow redelocal Lembra-se da acl "all", que contm todo mundo? Vamos us-la para especificar que os clientes que no se enquadrarem nas duas regras acima (ou seja, clientes no-autorizados, vindos da Internet) no podero usar o proxy: http_access deny all Esta linha deve ir no final do arquivo, depois das outras duas. A ordem importante, pois o Squid interpreta as regras na ordem em que so colocadas no arquivo. Se voc permite que o micro X acesse o proxy, ele acessa, mesmo que uma regra mais abaixo diga que no. Se voc adicionasse algo como: acl redelocal src 192.168.1.0/24 http_access allow redelocal http_access deny redelocal ... os micros da rede local continuariam acessando, pois a regra que permite vem antes da que probe. Existem alguns casos de sites que no funcionam bem quando acessados atravs de proxies, um exemplo comum o "Conectividade Social", da Caixa. Normalmente nesses casos o problema est em algum recurso fora do padro usado pelo sistema do site e no no servidor proxy propriamente dito, mas, de qualquer forma, voc pode solucionar o problema de forma muito simples orientando o servidor proxy a repassar as requisies destinadas ao site diretamente. Para isso, adicionamos uma ACL na configurao, especificando a URL do site e usando a opo

"always_direct": acl site dstdomain siteproblematico.com always_direct allow site Esta regra deve vir antes da regra que libera os acessos provenientes da rede local, como em: acl site dstdomain siteproblematico.com always_direct allow site acl redelocal src 192.168.1.0/24 http_access allow localhost http_access allow redelocal http_access deny all Depois de configurar o arquivo, no se esquea de reiniciar o servio para que a configurao entre em vigor: # /etc/init.d/squid restart Nesse ponto o seu proxy j est completamente funcional. Voc pode comear a configurar os navegadores nos PCs da rede local para utiliz-lo e acompanhar o desempenho da rede. Agora que j vimos o arroz com feijo, vamos aos detalhes mais avanados da configurao:

Configurando o cache de pginas e arquivosUma das configuraes mais importantes com relao ao desempenho do proxy e otimizao do trfego da rede a configurao dos caches, onde o Squid guarda as pginas e arquivos j acessados de forma a fornec-los rapidamente quando solicitados novamente. O Squid trabalha com dois tipos de cache: 1- Cache rpido, feito usando parte da memria RAM do servidor; 2- Cache um pouco mais lento porm maior, feito no HD. O cache na memria RAM ideal para armazenar arquivos pequenos, como pginas html e imagens, que sero entregues instantaneamente para os clientes. O cache no HD usado para armazenar arquivos maiores, como downloads, arquivos do Windows Update e pacotes baixados via apt-get. O cache na memria RAM sempre relativamente pequeno, j que o volume de memria RAM no servidor sempre muito menor do que o espao em disco. O cache no HD pode ser mais generoso, afinal a idia que ele guarde todo tipo de arquivos, principalmente os downloads grandes, que demoram para serem baixados. A configurao do cache feita adicionando mais algumas linhas no arquivo de configurao: 1- A configurao da quantidade de memria RAM dedicada ao cache feita adicionando a opo "cache_mem", que contm a quantidade de memria que ser dedicada ao cache. Para reservar 64 MB, por exemplo, a linha ficaria: cache_mem 64 MB Como regra geral, voc pode reservar 32 ou 64 MB para o cache em um servidor no dedicado, que atende a apenas alguns micros (como o servidor de uma pequena rede local) e at 1/3 da memria RAM total em um servidor proxy dedicado, que atende a um volume maior de usurios (veja mais detalhes a seguir). Em um servidor com 1 GB de RAM, por exemplo, voc poderia reservar at 350 MB para o cache na memria. 2- Logo depois vai a opo "maximum_object_size_in_memory", que determina o tamanho mximo dos arquivos que sero guardados no cache feito na memria RAM (o resto vai para o cache feito no HD). O cache na memria muito mais rpido, mas como a quantidade de RAM

muito limitada, melhor deix-la disponvel para pginas web, figuras e arquivos pequenos em geral. Para que o cache na memria armazene arquivos de at 64 KB, por exemplo, adicione a linha: maximum_object_size_in_memory 64 KB 3- Em seguida vem a configurao do cache em disco, que armazenar o grosso dos arquivos. Por default, o mximo so downloads de at 16 MB e o mnimo zero, o que faz com que mesmo imagens e arquivos pequenos sejam armazenados no cache. Quase sempre mais rpido ler a partir do cache do que baixar de novo da web, mesmo que o arquivo seja pequeno. Se voc faz download de arquivos grandes com freqncia e deseja que eles fiquem armazenados no cache, aumente o valor da opo "maximum_object_size". Isso especialmente til para quem precisa baixar muitos arquivos atravs do apt-get ou Windows Update em muitos micros da rede. Se voc quiser que o cache armazene arquivos de at 512 MB, por exemplo, as linhas ficariam: maximum_object_size 512 MB minimum_object_size 0 KB Voc pode definir ainda a percentagem de uso do cache que far o Squid comear a descartar os arquivos mais antigos. Por padro, sempre que o cache atingir 95% de uso, sero descartados arquivos antigos at que a percentagem volte para um nmero abaixo de 90%: cache_swap_low 90 cache_swap_high 95 4- Depois vem a opo "cache_dir", que composta por quatro valores. O primeiro, (/var/spool/squid) indica a pasta onde o Squid armazena os arquivos do cache, enquanto o segundo (2048) indica a quantidade de espao no HD (em MB) que ser usada para o cache. Aumente o valor se voc tem muito espao no HD do servidor e quer que o Squid guarde os downloads por muito tempo. Continuando, os nmeros 16 e 256 indicam a quantidade de subpastas que sero criadas dentro do diretrio. Por padro, temos 16 pastas com 256 subpastas cada uma. O nmero "ideal" de pastas e subpastas para um melhor desempenho varia de acordo com o sistema de arquivos usado, mas esta configurao padro adequada para a maioria das situaes. Combinando as quatro opes, a linha ficaria: cache_dir ufs /var/spool/squid 2048 16 256 Assim como na maioria das opes do Squid, se a linha "cache_dir" for omitida, usada a configurao default para a opo, que usar o diretrio "/var/spool/squid" e fazer um cache em disco de 100 MB. 5- Voc pode definir ainda o arquivo onde so guardados os logs de acesso do Squid. Por padro, o Squid guarda o log de acesso no arquivo "/var/log/squid/access.log". Este arquivo usado pelo Sarg para gerar as pginas com as estatsticas de acesso: cache_access_log /var/log/squid/access.log Mais uma configurao que voc pode querer alterar o padro de atualizao do cache. Estas trs linhas precisam sempre ser usadas em conjunto, ou seja, voc pode alter-las, mas sempre as trs precisam estar presentes no arquivo. Eliminando uma, o Squid ignora as outras duas e usa o default. Os nmeros indicam o intervalo (em minutos) que o Squid ir aguardar antes de verificar se um item do cache (uma pgina, por exemplo) foi atualizado, para cada um dos trs protocolos. O primeiro nmero (o 15) indica que o Squid verificar (a cada acesso) se as pginas e arquivos com mais de 15 minutos foram atualizados. Ele faz uma verificao rpida, checando o tamanho do arquivo e, se o arquivo no mudou, ele continua fornecendo aos clientes o arquivo que est no cache, economizando banda da conexo O terceiro nmero (o 2280, equivalente a dois dias) indica o tempo mximo, depois do qual o objeto

sempre verificado. Alm do http e ftp, o Squid suporta o protocolo gopher, que era muito usado nos primrdios da internet para localizar documentos de texto, mas perdeu a relevncia hoje em dia: refresh_pattern ^ftp: 15 20% 2280 refresh_pattern ^gopher: 15 0% 2280 refresh_pattern . 15 20% 2280 Depois de adicionar todas estas configuraes, o nosso arquivo de configurao j ficar bem maior: http_port 3128 visible_hostname gdh cache_mem 64 MB maximum_object_size_in_memory 64 KB maximum_object_size 512 MB minimum_object_size 0 KB cache_swap_low 90 cache_swap_high 95 cache_dir ufs /var/spool/squid 2048 16 256 cache_access_log /var/log/squid/access.log refresh_pattern ^ftp: 15 20% 2280 refresh_pattern ^gopher: 15 0% 2280 refresh_pattern . 15 20% 2280 acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535 acl purge method PURGE acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !Safe_ports http_access deny CONNECT !SSL_ports acl redelocal src 192.168.1.0/24 http_access allow localhost http_access allow redelocal http_access deny all Aqui j temos uma configurao mais completa, incluindo um conjunto de regras de segurana (para que o proxy seja usado apenas a partir da rede local) e a configurao do cache. Esta uma configurao adequada para uso em uma rede domstica ou em um pequeno escritrio. A acl "Safe_ports", alimentada com um conjunto de portas (80, 21 e outras) usada para restringir as portas de sada do servidor proxy, evitando, por exemplo, que ele seja usado para enviar e-mails (porta 25). Isso evita um conjunto de abusos comuns e uma configurao importante em qualquer servidor que precise ser configurado de forma minimamente segura. Naturalmente, voc pode adicionar outras portas lista, conforme necessrio. Em uma rede maior, voc provavelmente iria querer adicionar algumas limitaes de acesso, limitando o acesso a algumas pginas, criando um sistema de autenticao ou limitando o uso com base no horrio, entre outras possibilidades. Vamos a elas.

Adicionando restries de acessoEm um ambiente de trabalho, a idia que os funcionrios usem a internet para comunicao, pesquisa e outras funes relacionadas ao que esto fazendo. Muitas empresas permitem que sejam acessados os e-mails pessoais e coisas do gnero, mas sempre at um certo limite. Seu chefe no vai gostar se comearem a passar a maior parte do tempo no Orkut, por exemplo. Chegamos ento s regras para restrio de acesso, que so uma necessidade em muitas redes.

Bloqueando por domnios ou palavrasO Squid permite bloquear sites indesejados de forma bastante simples usando o parmetro "dstdomain". Ele permite que voc crie acl's contendo endereos de sites que devem ser bloqueados (ou permitidos). Isso feito em duas etapas. Primeiro voc cria a acl, especificando os endereos e, em seguida, usa o parmetro "http_access" para bloquear ou liberar o acesso a eles. Veja um exemplo: acl bloqueados dstdomain orkut.com playboy.abril.com.br http_access deny bloqueados Aqui eu criei uma acl chamada "bloqueados", que contm os endereos "orkut.com" e "playboy.abril.com.br" e em seguida usei o parmetro "http_access deny" para bloquear o acesso a eles. Voc pode incluir diversas acls diferentes dentro da configurao do Squid, desde que use um nome diferente para cada uma. De certa forma, elas so similares s variveis, que usamos ao programar em qualquer linguagem. Ao aplicar a regra, o Squid faz a resoluo do domnio e passa a bloquear todas sub-pginas que estiverem hospedadas dentro dele. Existe uma ressalva: muitos sites podem ser acessados tanto com o "www" quanto sem. Se os dois estiverem hospedados em servidores diferentes, o Squid considerar que tratam-se de dois sites diferentes, de forma que ao bloquear apenas o "www.orkut.com" os usurios ainda conseguiro acessar o site atravs do "orkut.com" e vice-versa. Nesses casos, para bloquear ambos, preciso incluir as duas possibilidades dentro da regra, como em: acl bloqueados dstdomain orkut.com www.orkut.com playboy.abril.com.br http_access deny bloqueados Voc pode incluir quantos domnios quiser dentro da acl, basta separ-los por espao e deixar tudo na mesma linha. Se a regra comear a ficar muito grande, voc tem a opo de transferir as entradas para um arquivo. Nesse caso, crie um arquivo de texto simples, com todos os domnios desejados (um por linha), como em: orkut.com www.orkut.com playboy.abril.com.br www.myspace.com ... e use a regra abaixo na configurao do Squid para que ele seja processado e os domnios sejam includos na acl. No exemplo, estou usando o arquivo "/etc/squid/bloqueados": acl bloqueados url_regex -i "/etc/squid/bloqueados" http_access deny bloqueados

Naturalmente, no seria vivel tentar bloquear manualmente todos os sites pornogrficos, chats, comunidades online, e todos os outros tipos de sites que no so teis em um ambiente de trabalho. A idia seria logar os acessos (com a ajuda do Sarg, que veremos mais adiante) e bloquear os sites mais acessados, conforme tomar conhecimento deles. sempre uma corrida de gato e rato, mas, em se tratando de pessoas adultas, no h nada que uma boa conversa com o chefe no possa resolver. ;) De qualquer forma, em alguns ambientes pode ser mais fcil bloquear inicialmente o acesso a todos os sites e ir abrindo o acesso a apenas alguns sites especficos, conforme a necessidade. Neste caso, invertemos a lgica da regra. Criamos um arquivo com sites permitidos, adicionamos a regra que permite o acesso a eles e em seguida bloqueamos o acesso a todos os demais, como neste exemplo: acl permitidos url_regex -i "/etc/squid/permitidos" http_access allow permitidos http_access deny all Nas verses recentes do Squid, ao bloquear um domnio automaticamente bloqueado tambm o endereo IP do servidor correspondente. Isso evita que os usurios da rede consigam burlar o proxy, acessando os sites diretamente pelo IP. De qualquer forma, voc pode criar diretamente regras que bloqueiem determinados endereos IP, o que til em casos de servidores sem domnio registrado, ou que respondam por vrios domnios. Nesse caso, a regra ficaria: acl ips-bloqueados dst 200.234.21.23 200.212.15.45 http_access deny ips-bloqueados Voc pode descobrir rapidamente o endereo IP de um determinado domnio usando o comando "host", como em: $ host google.com google.com A 72.14.207.99 google.com A 64.233.187.99 google.com A 64.233.167.99 Depois de adicionar as novas regras, nosso arquivo de configurao ficaria assim: http_port 3128 visible_hostname gdh error_directory /usr/share/squid/errors/Portuguese/ cache_mem 64 MB maximum_object_size_in_memory 64 KB maximum_object_size 512 MB minimum_object_size 0 KB cache_swap_low 90 cache_swap_high 95 cache_dir ufs /var/spool/squid 2048 16 256 cache_access_log /var/log/squid/access.log refresh_pattern ^ftp: 15 20% 2280 refresh_pattern ^gopher: 15 0% 2280 refresh_pattern . 15 20% 2280 acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535 acl purge method PURGE acl CONNECT method CONNECT

http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !Safe_ports http_access deny CONNECT !SSL_ports acl bloqueados url_regex -i "/etc/squid/bloqueados" http_access deny bloqueados acl redelocal src 192.168.1.0/24 http_access allow localhost http_access allow redelocal http_access deny all Veja que coloquei as duas regras antes do "http_access allow redelocal", que abre tudo para a rede local. Como o Squid processa as regras seqencialmente, as pginas que forem bloqueadas pela acl "bloqueados" no chegam a passar pela regra que autoriza os acessos provenientes da rede local. Uma segunda possibilidade usar o parmetro "dstdom_regex", que permite bloquear sites de uma forma mais geral, com base em palavras includas na URL de acesso. Voc pode bloquear todas as pginas cujo endereo inclua a palavra "sexo" ou "orkut", por exemplo. Note que, ao usar esta regra, o Squid verifica a existncia das palavras apenas na URL do site e no no contedo da pgina. Para criar filtros baseados no contedo, voc pode utilizar o DansGuardian, que veremos mais adiante. Crie mais um arquivo de texto, contendo as palavras que devem ser bloqueadas, uma por linha, como em: orkut xxx sexo teens warez ... e adicione a regra abaixo, contendo a localizao do arquivo: acl palavrasproibidas dstdom_regex "/etc/squid/palavrasproibidas" http_access deny palavrasproibidas O uso desta regra um pouco mais problemtico, pois bloquear todas pginas que contenham qualquer uma das palavras listadas na URL. Esta opo sempre levar a alguns falsos positivos e por isso deve ser usada com mais cuidado. Uma vantagem que ela permite bloquear facilmente pginas dinmicas, onde a palavra passada como parmetro da URL. Um exemplo o Orkut, onde, depois da transferncia para o Google, os domnios principais passaram a encaminhar para URLs dinmicas dentro do domnio do Google, como em: https://www.google.com/accounts/ServiceLogin?service=orkut&continue=http%3A%2F %2Fwww.orkut.com %2FRedirLogin.aspx%3Fmsg%3D0%26page%3Dhttp%253A%252F%252F www.orkut.com%252FHome.aspx&hl=pt-BR&rm=false&passive=true Voc no poderia simplesmente bloquear o domnio "google.com" usando uma regra url_regex, mas poderia muito bem usar o dstdom_regex para bloquear a palavra "orkut" e assim bloquear o acesso ao site sem bloquear o acesso a outros servios do Google. No existe problema em combinar o bloqueio de domnios e de palavras dentro da URL, voc pode lanar mo de uma combinao das duas coisas, de acordo com a situao. Para isso, basta usar as

duas regras simultaneamente, como em: acl bloqueados url_regex -i "/etc/squid/bloqueados" http_access deny bloqueados acl palavrasproibidas dstdom_regex "/etc/squid/palavrasproibidas" http_access deny palavrasproibidas acl redelocal src 192.168.1.0/24 http_access allow localhost http_access allow redelocal http_access deny all Includas as regras, os clientes passam a ver uma mensagem de erro ao tentar acessar pginas que se enquadrem nos bloqueios:

Por padro, as mensagens de erro aparecerem em ingls. No nosso caso elas esto aparecendo em portugus devido linha "error_directory /usr/share/squid/errors/Portuguese/" que inclu no modelo de configurao anterior. Voc pode personalizar as pginas de erro editando os arquivos dentro da pasta "/usr/share/squid/errors/Portuguese" ou "/usr/share/squid/errors/English" (de acordo com a lngua definida na configurao). A pasta contm vrias pginas html, uma para cada tipo de erro indicado.

Bloqueando por horrioAs regras a seguir fazem com que o proxy aceite ou recuse conexes feitas dentro de determinados horrios. Voc pode definir regras para perodos especficos e combin-las para bloquear todos os horrios em que voc no quer que o proxy seja usado ou vice-versa. Para que o proxy bloqueie acessos feitos entre meia-noite e 6:00 da manh e no horrio de almoo, por exemplo, voc usaria as regras: acl madrugada time 00:00-06:00 http_access deny madrugada acl almoco time 12:00-14:00 http_access deny almoco Estas regras iriam, novamente, antes da regra "http_access allow redelocal" no arquivo de configurao. Agora, imagine que voc quer fazer diferente. Ao invs de bloquear o acesso na hora de almoo, voc quer deixar o proxy aberto, para que aqueles que queiram acessar o Orkut ou acessar os e-

mails possam fazer isso fora do horrio de trabalho. Neste caso, voc usaria uma regra como: acl almoco time 12:00-14:00 http_access allow almoco Esta regra entraria no arquivo de configurao antes das regras "http_access deny bloqueados" e outras restries. Assim, os acessos que forem aceitos pela regra do almoo no passaro pelas regras que fazem o bloqueio, como em: acl almoco time 12:00-14:00 http_access allow almoco acl bloqueados url_regex -i "/etc/squid/bloqueados" http_access deny bloqueados acl extban url_regex -i "/etc/squid/extban" http_access deny extban acl redelocal src 192.168.1.0/24 http_access allow localhost http_access allow redelocal http_access deny all Voc pode tambm combinar o bloqueio de palavras ou domnio com as regras de bloqueio por horrio, permitindo que os usurios acessem um determinado site apenas no horrio de almoo, por exemplo. Neste caso, a regra seria: acl almoco time 12:00-14:00 acl orkut dstdomain orkut.com www.orkut.com http_access allow orkut almoco http_access deny orkut Fazendo isso, o Squid entende que os endereos includos dentro da acl "orkut" devem ser permitidos, mas apenas dentro do horrio especificado na acl "almoco". Em seguida includa mais uma regra, que bloqueia o acesso ao site em outros horrios.

Gerenciando o uso da bandaO Squid oferece uma forma simples de limitar o uso da banda disponvel e definir o quanto cada usurio pode usar (mantendo parte do link livre para os demais), utilizando um recurso chamado "delay pools". Imagine, por exemplo, que voc tem um link de 1 megabit para uma rede com 20 usurios. Se cada um puder ficar baixando o que quiser, provvel que a rede fique saturada em determinados horrios, deixando a navegao lenta para todo mundo. Voc pode evitar isso limitando a banda que cada usurio pode usar e a banda total, que todos os usurios somados podero usar simultaneamente. recomendvel, neste caso, que o servidor proxy (que combina todos os acessos via http) consuma um pouco menos que o total de banda disponvel, de forma a sempre deixar um pouco reservado para outros protocolos. Um link de 1 megabit (1024 kbits) corresponde a 131.072 bytes por segundo. Nas regras do Squid, sempre usamos bytes, por isso lembre-se de fazer a converso, dividindo o valor em kbits por 8 e multiplicando por 1024 para ter o valor em bytes. Podemos, por exemplo, limitar a banda total usada pelo Squid a 114.688 bytes por segundo, deixando 128 kbits do link livres para outros protocolos e limitar cada usurio a no mximo 16.384 bytes por segundo, que correspondem a 128 kbits. Nem todos os usurios vo ficar baixando arquivos a todo momento, por isso o valor ideal reservado a cada usurio vai variar muito de acordo com a rede. Voc pode acompanhar o uso do link e ir ajustando o valor conforme a utilizao.

Neste caso, a parte final do arquivo de configurao ficaria: acl redelocal src 192.168.1.0/24 delay_pools 1 delay_class 1 2 delay_parameters 1 114688/114688 16384/16348 delay_access 1 allow redelocal http_access allow localhost http_access allow redelocal http_access deny all A acl "redelocal" est agora condicionada a trs novas regras, que aplicam o uso do limite de banda. O acesso continua sendo permitido, mas agora dentro das condies especificadas na linha "delay_parameters 1 114688/114688 16384/16384", onde vo (respectivamente) os valores com a banda total disponvel para o Squid e a banda disponvel para cada usurio. Veja que nessa regra limitamos a banda apenas para a acl "redelocal" e no para o "localhost". Isso significa que voc continua conseguindo fazer downloads na velocidade mxima permitida pelo link ao acessar a partir do prprio servidor; a regra se aplica apenas s estaes. possvel tambm criar regras de exceo para endereos IP especficos, que podero fazer downloads sem passar pelo filtro. Nesse caso, criamos uma acl contendo o endereo IP da estao que deve ter o acesso liberado usando o parmetro "src" e a colocamos antes da regra que limita a velocidade, como em: acl chefe src 192.168.1.2 http_access allow chefe acl redelocal src 192.168.1.0/24 delay_pools 1 delay_class 1 2 delay_parameters 1 114688/114688 16384/16348 delay_access 1 allow redelocal http_access allow localhost http_access allow redelocal http_access deny all Esta regra de exceo pode der usada tambm em conjunto com as demais regras de restrio de acesso que vimos anteriormente. Basta que a acl com o IP liberado seja colocada antes das acls com as restries de acesso, como em: acl chefe src 192.168.1.2 http_access allow chefe acl bloqueados url_regex -i "/etc/squid/bloqueados" http_access deny bloqueados acl palavrasproibidas dstdom_regex "/etc/squid/palavrasproibidas" http_access deny palavrasproibidas acl redelocal src 192.168.1.0/24 http_access allow localhost http_access allow redelocal http_access deny all Concluindo, mais um tipo de bloqueio til em muitas situaes com relao a formatos de arquivos. Voc pode querer bloquear o download de arquivos .exe ou .sh para dificultar a instalao de programas nas estaes, ou bloquear arquivos .avi ou .wmv para economizar banda da rede, por exemplo.

Neste caso, voc pode usar a regra a seguir, especificando as extenses de arquivo desejadas. Ela utiliza o parmetro "url_regex" (o mesmo que utilizamos para criar o bloqueio de domnios), dessa vez procurando pelas extenses de arquivos especificadas: acl extban url_regex -i \.avi \.exe \.mp3 \.torrent http_access deny extban Esta regra aceita tambm o uso de um arquivo externo, de forma que se a lista comear a ficar muito grande, voc pode migr-la para dentro de um arquivo de texto e especificar sua localizao dentro da acl, como em: acl extban url_regex -i "/etc/squid/extban" http_access deny extban Dentro do arquivo, voc inclui as extenses desejadas (sem esquecer da barra invertida antes do ponto), uma por linha, como em: \.avi \.exe \.mp