Você está na página 1de 95

Instalao e Configurao de Servidores FreeBSD

Instalao e Configurao do Sistema Operacional


Instalao do Sistema Operacional Configuraes Iniciais Configuraes Bsicas de Rede Configuraes Bsicas de Segurana

Tarefas Administrativas
Atualizao do Sistema Tarefas com Usurios e Grupos Recompilao e Instalao do Kernel Manuteno de Data/Hora Rotao de Arquivos de Log Inicializao e Finalizao de Daemons Download, Descompactao e Extrao de Arquivos

Instalao e Configurao de Servios


Servio de Acesso Remoto
SSH (Secure Shell) - OpenSSH Gerenciamento via Web - Webmin

Servios de Correio Eletrnico


MTA (Mail Transfer Agent) - Postfix POP3 (Post Office Protocol version 3) - Qpopper Webmail - OpenWebmail Proteo contra Vrus - AMaViS + ClamAV Gerenciador de Listas - Mailman

Servios Web
Servidor Web - Apache HTTP Server Estatsticas de Uso do Servidor Web - Webalizer

Servios de Autenticao e Compartilhamento de Arquivos


FTP (File Transfer Protocol) - ProFTPD Estatsticas de Uso do Servidor FTP - Webalizer Compartilhamento de Arquivos para clientes Unix - NFS (Network File System) Autenticao para clientes Unix - NIS (Network Information Services) Autenticao e Compartilhamento de Arquivos para clientes Windows - Samba Controle de Uso de Disco - Quota Antivrus - ClamAV Backup - rsync Autenticao RADIUS - FreeRADIUS

Servio de Rede, Controle e Segurana


DNS - ISC BIND9 DHCP (Dynamic Host Configuration Protocol) - ISC DHCP Server Firewall - IPFW2 Controle de Trfego - IPFW2 + Dummynet NAT (Network Address Translation) - IPFW2 + NATD Proxy e Cache HTTP - Squid Relatrio de Uso do Squid - Sarg (Squid Analysis Report Generator) Grfico de Consumo de Banda - MRTG (Multi Router Traffic Grapher)

Artigos Diversos
Adio de Espao de Swap em Arquivo

Introduo
O presente material tem por objetivo estabelecer um conhecimento bsico para a instalao e configurao de um servidor de rede com o sistema operacional FreeBSD, da forma mais prtica e simples possvel, mas mantendo determinado nvel de robustez e segurana. Visa tambm estender o conhecimento sobre a plataforma Unix em geral, de forma a propiciar o desenvolvimento de uma cultura de aprendizado e de busca de solues. Outro ponto-chave a construo de uma estrutura de servios de rede sem custos de software, utilizando apenas software livre. Pretendo atualizar e complementar este material com o tempo. Quaisquer dvidas, sugestes, correes ou crticas favor entrar em contato pelo endereo heini@infsr.unijui.tche.br.

1 - Instalao e Configurao do Sistema Operacional


1.1 - Instalao do Sistema Operacional
A maneira mais fcil de fazer a instalao do FreeBSD a partir do CD 1. Utilizaremos como exemplo o FreeBSD 4.9, que a verso estvel atual. Primeiramente, deve-se baixar a imagem (.ISO) do CD, a partir do site oficial do FreeBSD e/ou dos mirrors. A lista dos mirrors disponveis pode ser encontrada em http://www.freebsd.org/doc/en_US.ISO88591/books/handbook/mirrors-ftp.html. Para efetuar o download da imagem a partir de outra mquina com FreeBSD ou Linux, utilize o prprio cliente ftp ou um programa como o Wget. Se for utilizada uma mquina com Windows para fazer o download, recomendado que se utilize um gerenciador de download do tipo Getright. Aps o download necessrio verificar o MD5 Checksum da imagem, para saber se a mesma est perfeita. Isso feito obtendo-se a seqncia MD5 a partir do arquivo CHECKSUM.MD5 que se encontra no mesmo diretrio das imagens, no servidor FTP. Esta seqncia dever ser comparada quela obtida atravs da utilizao do programa md5sum.exe contra a imagem recm-baixada. Exemplo: Arquivo CHECKSUM.MD5: MD5 (4.9-i386-disc1.iso) = 9195be15a4c8c54a6a6a23272ddacaae MD5 (4.9-i386-disc2.iso) = 51d28c35308cc916b9a9bfcacb3146b8 MD5 (4.9-i386-mini.iso) = 2635f02aebce8e1c2b83d1acdbbcb2ea Verificao do MD5: C:\>md5sum 4.9-i386-disc1.iso 9195be15a4c8c54a6a6a23272ddacaae *4.9-i386-disc1.iso Isso significa que a imagem foi obtida com sucesso, visto que a seqncia MD5 igual. No FreeBSD ou Linux pode-se utilizar o programa "md5". Essa imagem pode agora ser gravada em um CD, que ser utilizado para a instalao. Inicializamos a mquina atravs do CD (boot pelo CD) e seguimos com a instalao normalmente. Na primeira questo, sobre a configurao do kernel, selecionar a primeira opo (Skip), j que podemos configurar o kernel posteriormente. Aps isso selecionar a opo Standard. Como pretendemos instalar um servidor, ser ocupado todo o disco com o FreeBSD, ento no FDISK, apagar qualquer partio que houver, pressionar A (Use Entire Disk) e ento Q (Finish). Na seleo de Boot Manager selecionar a segunda opo, para que no seja instalado o gerenciador de boot, visto que esta mquina ter apenas um sistema operacional. Aps isso, chegamos ao Disklabel Editor, uma das partes mais importantes da instalao. a que definimos qual ser o layout dos filesystems que teremos. Algumas consideraes sobre os filesystems mais comuns: / -> a que fica o diretrio home do root e qualquer outro arquivo ou diretrio que no estiver em nenhum outro filesystem. /var -> geralmente ficam no /var arquivos de log (que em determinados casos ocuparo muito espao), caixas postais de servidores de e-mail (geralmente a inbox, o que tambm ir ocupar muito espao caso a mquina seja servidor de email). /tmp -> arquivos temporrios /usr -> geralmente guarda quase todos os programas da mquina, fontes, bibliotecas, etc. swap -> destinada swap, deve ser dimensionada de acordo com a memria RAM. natural que se crie outros filesystems, de acordo com as necessidades de cada servidor. Por exemplo, um servidor proxy Squid poder ter criado o filesystem /squid, com o tamanho adequado ao cache que se deseja ter. Um servidor de arquivos pode ter um /home, onde ficaro os diretrios home dos usurios. Um servidor de e-mail dever ter bem dimensionada a partio /var, para as caixas de entrada das contas de e-mail. Por

exemplo, no caso de 500 contas, com um limite de 5 MB para cada inbox, teremos 2500 MB. Somando-se espao extra para os arquivos de log e demais, devemos criar uma partio com no mnimo 3500 MB. A partio swap geralmente criada com o dobro do tamanho da memria RAM. Tendo 256 MB de RAM, criamos a swap com 512 MB, e assim por diante. Em mquinas com mais de 1 GB de RAM no convm criar tanta swap, que deve ser ento melhor calculada. Se tivermos mais de um disco, interessante dividir a swap entre estes discos, devido a melhoria na performance. A ordem de criao dos filesystems tradicionalmente segue a ordem em que so criados pela opo Auto Defaults, que pode ser testada pressionando A. Por exemplo, para uma mquina com disco de 20GB, que ser o nosso servidor de testes, iremos criar os seguintes filesystems: / -> 256 MB swap -> 512 MB /squid -> 2048 MB /home -> 4096 MB /var -> 2048 MB /tmp -> 512 MB /usr -> resto (9620 MB) Quando estivermos satisfeitos com o layout pressionamos Q (Finish) para prosseguir com a instalao. A prxima etapa selecionar qual "distribuio" instalar, ou seja, qual perfil de instalao queremos. Tendo em mente que pretendemos montar um servidor, selecionamos a opo Developer, para que sejam instalados os cdigos-fonte, os binrios e documentaes, mas sem jogos e sem X Window System. Aps isso, na prxima tela, selecionamos Yes, para instalar a coleo de ports. Voltamos automaticamente tela anterior, ento pressionamos Enter sobre a opo Exit. Como estamos instalando a partir do CD, na tela Choose Installation Media selecionamos a primeira opo. Aps confirmar a instalao, em Yes, o sistema comea a ser instalado. Aps a mensagem de "Congratulations!", h o questionamento sobre configurar algum dispositivo Ethernet agora. Selecionar Yes. Como temos atualmente apenas uma placa de rede, selecionamos o dispositivo relativo placa de rede, geralmente o primeiro da lista. Sobre a configurao IPv6, selecione No. DHCP tambm No. Host: insira o nome (hostname) da mquina Domain: domnio DNS IPv4 Gateway: endereo IP do gateway ou roteador Name server: servidor DNS IPv4 Address: endereo IP da mquina Netmask: mscara da rede Aps isso, o sistema nos pede se queremos "levantar" a interface de rede agora. Selecione Yes. Network Gateway, selecione No. Configure inetd, No. Anonymous FTP, No. NFS Server, No. NFS Client, No. Security Profile, No. Ok. Customize System Console Settings, Yes. Keymap: no caso de teclado ABNT2, selecione Brazil CP850. Saver: selecione o seu preferido. Aps terminado, selecione Exit. Configure machine time zone, Yes. UTC Clock, No. America, Brazil, S & SE Brazil. BRST, Yes. Linux binary compatibility, selecione Yes, isso ir possibilitar que aplicativos do Linux rodem sem problemas no FreeBSD. Ser instalado o respectivo pacote. Sobre configurar mouse ou no, tanto faz, no ser utilizado mesmo. FreeBSD package collection, selecione Yes, para instalar j agora um pacote: o shell Bash. V at shells e selecione o bash, d Ok e ento Install e Ok novamente. O sistema nos pede se queremos adicionar alguma conta de usurio, selecione No, no precisamos disto agora.

Na prxima tela Ok, e ento defina a senha do root. Visitar novamente o menu, No. De volta tela incial do sysinstall, selecione Exit Install e ento Yes. Remova o CD do drive. O sistema ir reiniciar. Estamos prontos com a instalao do FreeBSD.

1.2 - Configuraes Iniciais


Acesse o console, atravs do usurio e senha do root e digite o seguinte comando: # uname -a A sada do comando indicar exatamente qual a verso do sistema e qual o kernel est utilizando. Podemos ver a indicao do kernel GENERIC, que o "padro de fbrica", e a verso 4.9-RELEASE. Atravs do comando # df -h podemos ver, de maneira simplificada, o espao utilizado em cada filesystem que foi criado na instalao. Se desejar, mude o shell padro do usurio root de csh para bash. Para isso, digite: # vipw Edite, no final da linha do root, o caminho /bin/csh troque por /usr/local/bin/bash. Dessa forma, no prximo login abriremos com o shell bash. Pode-se utilizar tambm o comando "chsh -s /usr/local/bin/bash" para trocar o shell para o Bash. Como no instalamos o ambiente grfico, X, devemos fazer alguns ajustes nas variveis PATH e MANPATH. Edite o arquivo /root/.profile e na linha iniciada por PATH, remova a seguinte string: ":/usr/X11R6/bin". Edite tambm o arquivo /etc/manpath.config e comente as seguintes linhas: OPTIONAL_MANPATH /usr/X11R6/man e MANPATH_MAP /usr/X11R6/bin /usr/X11R6/man Crie o arquivo /root/.bash_logout, com o seguinte contedo: clear Isso far com que a tela seja limpa cada vez que o root efetuar logout. importante ter em mente a utilidade do comando man, que exibe as "manual pages", ou seja, os manuais de todos os comandos. Em caso de dvidas quanto a algum comando, devemos inicialmente tentar encontrar a resposta no seu manual, digitando por exemplo man uname Isso ir exibir o manual do comando "uname". Em caso de dvidas sobre as prprias "man pages", digite "man man", ser exibido o manual do comando "man".

1.3 - Configuraes Bsicas de Rede


* Interfaces de Rede Podemos ver a configurao atual de rede atravs do comando ifconfig. O ifconfig mostra outras interfaces alm da placa de rede, como ppp0, etc, que podero ser desabilitadas posteriormente, na configurao do kernel. Para efetuar a configurao de qualquer placa de rede, por exemplo quando se instala uma nova, veja primeiramente se o FreeBSD a reconheceu, atravs do comando: # dmesg Verifique se consta a descrio da placa de rede nesta relao, e caso positivo, qual a identificao dela no sistema (no comeo da linha, por exemplo xl0). Com esta identificao podemos configurar a interface. Edite o arquivo /etc/rc.conf e insira a seguinte linha: ifconfig_xl0="inet 192.168.0.1 netmask 255.255.0.0"

Dessa forma, no momento da inicializao ser atribudo o endereo IP 192.168.0.1 e a mscara de rede 255.255.0.0 a esta interface. Esta atribuio tambm pode ser feita via linha de comando: # ifconfig xl0 192.168.0.1 netmask 255.255.0.0

* Host Database
Edite o arquivo /etc/hosts e veja a seguinte linha: 127.0.0.1 localhost localhost.my.domain Altere "my.domain" para o seu domnio DNS, por exemplo: 127.0.0.1 localhost localhost.exemplo.org Adicione ainda uma linha no seguinte formato: endereo_IP hostname FQDN FQDN significa Fully Qualified Domain Name, o nome completo da mquina (seu hostname mais o domnio DNS). Exemplo: 192.168.0.1 servteste servteste.exemplo.org

* Resoluo DNS
O arquivo /etc/resolv.conf guarda a configurao do "resolver", que um conjunto de rotinas utilizadas para consultas DNS. Edite o arquivo e insira uma ou mais linhas especificando o(s) servidor(es) DNS que sero utilizados pela mquina: nameserver servidor_DNS Por exemplo: nameserver 192.168.0.5 nameserver 192.168.0.6 Podem ser inseridos mais de uma linha, e isso inclusive recomendado na montagem de um servidor. Os servidores DNS sero procurados na ordem em que esto no arquivo.

1.4 - Configuraes Bsicas de Segurana


Tendo em mente manter um certo nvel de segurana em nosso sistema, mas sem prejudicar a funcionalidade, podemos fazer alguns pequenos ajustes que auxiliam em muito a evitar problemas.

* Usurio toor
O usurio toor vem por padro na instalao do FreeBSD como uma conta alternativa ao root mas com os mesmos poderes, pois possui UID 0. Seu principal objetivo ser usado com um interpretador de comandos fora do padro, que seja instalado em um filesystem diferente do raiz - caso do bash, que fica em /usr/local/bin/bash. Ento pode-se usar o toor com este shell e manter o root com um shell padro, como por exemplo /bin/sh. No caso de algum problema, em que no puder ser montado o filesystem /usr, ficaramos sem shell, e conseqentemente sem acesso ao sistema. Contudo, ao entrar em modo single, o sistema nos pede o caminho completo de algum shell. Se houver interesse em manter essa conta toor como um "backup" ao root, deve-se alterar a sua senha atravs do comando passwd. Caso no houver interesse, ou houver alguma chance de essa conta cair no esquecimento, recomendado que seja removida, visto o perigo que representa caso for utilizada indevidamente.

* Senha no console
Quanto estamos incializando o FreeBSD, podemos pressionar qualquer tecla (diferente de enter) durante a contagem regressiva para que esta seja parada. Se entrarmos o parmetro "boot -s" e dermos enter, o sistema ser inicializado em modo single (monousurio), da mesma forma que quando digitamos no shell o comando "shutdown now", mas com a diferena que no primeiro modo no ser montado automaticamente nenhum filesystem alm do raiz. Por padro, quando entramos no modo single o sistema no nos pede uma senha, e fornece acesso a nvel de root, ou seja, a tudo. Isto pode representar um grande risco caso algum mal intencionado consiga acesso fsico ao servidor, ento poder entrar no modo single e at mesmo alterar a senha do root. Para evitar isto, podemos instruir o sistema para que pea senha (do root) mesmo no modo single. No arquivo /etc/ttys, altere a linha console none unknown off secure para console none unknown off insecure

* Filesystems
importante atribuir flags que proibem determinados filesystems de possuir arquivos SUID, quando no forem necessrios. Os arquivos SUID (setuid e setgid) so determinados por um bit que indica que devem ser executados como se estivessem sendo executados pelo dono. Para uma boa configurao, sem exageros, pode ser utilizado o exemplo abaixo, editando o arquivo /etc/fstab e alterando as linhas /dev/ad0s1b /dev/ad0s1a /dev/ad0s1f /dev/ad0s1e /dev/ad0s1h /dev/ad0s1d /dev/ad0s1g /dev/acd0c proc para /dev/ad0s1b /dev/ad0s1a /dev/ad0s1f /dev/ad0s1e /dev/ad0s1h /dev/ad0s1d /dev/ad0s1g /dev/acd0c proc none / /home /squid /tmp /usr /var /cdrom /proc swap ufs ufs ufs ufs ufs ufs cd9660 procfs sw rw rw,nosuid rw,nosuid rw,nosuid rw rw,nosuid ro,noauto rw 0 1 2 2 2 2 2 0 0 0 1 2 2 2 2 2 0 0 none / /home /squid /tmp /usr /var /cdrom /proc swap ufs ufs ufs ufs ufs ufs cd9660 procfs sw rw rw rw rw rw rw ro,noauto rw 0 1 2 2 2 2 2 0 0 0 1 2 2 2 2 2 0 0

Note que os devices (/dev/ad0s1a, etc) podem ser outros no seu sistema, assim como os filesystems, caso em que devese adaptar o exemplo a cada situao. No deve ser usada a flag nosuid nos filesystem raiz e /usr. As alteraes tero efeito aps a reinicializao do sistema.

* Diretrio Temporrio
Para que o diretrio /tmp seja limpado a cada vez que a mquina for reiniciada, insira a seguinte linha no arquivo /etc/rc.conf: clear_tmp_enable="YES"

* Syslogd
O syslogd o daemon responsvel pela maioria dos logs do sistema, e pode tambm enviar ou receber logs de outras mquinas via rede. Para isso, ele ouve a porta UDP 514. Como no vamos utilizar tal funo, podemos instru-lo para trabalhar apenas localmente, sem abrir a porta mencionada. Para isso, edite o arquivo /etc/rc.conf e insira a seguinte linha: syslogd_flags="-ss" Aps isso, reinicie a mquina.

* Portmap
O portmap utilizado para RPC - Remote Procedure Call. Se no for necessrio usar RPC devemos desabilit-lo, inserindo a seguinte linha no arquivo /etc/rc.conf: portmap_enable="NO" Caso for usar NFS (Network File System) ou algo que utilize RPC devemos habilitar o portmap novamente, alterando o NO para YES.

* Inetd
O inetd o chamado "Internet super-server". Funciona ouvindo determinados sockets e quando recebe uma conexo analisa qual programa corresponde quele socket, invocando ento tal programa para servir o pedido. Isto permite que rodando apenas um daemon (o inetd) pode-se invocar vrios outros, sob demanda, reduzindo em certos casos a carga do sistema. Devemos prestar muita ateno ao arquivo de configurao do Inetd, que fica em /etc/inetd.conf, e ver se est habilitado apenas o que realmente iremos usar. Verifique se as linhas descomentadas (no iniciadas por #) indicam servios que esto sendo realmente utilizados, e caso contrrio, comente-as. Isto ir garantir que no sejam abertas portas desnecessrias e por vezes perigosas, como telnet e rlogin.

Caso o Inetd no seja usado para nada, deve ser desativado, inserindo a seguinte linha no arquivo /etc/rc.conf: inetd_enable="NO"

* Crontab
O Cron o daemon responsvel por executar comandos agendados, e os arquivos que contm as tabelas que instruem o Cron so os crontabs. Os crontabs em geral ficam no diretrio /var/cron/tabs, mas h um arquivo que agenda os comandos do root, e fica em /etc/crontab. Deve-se evitar que usurios leiam este arquivo, desta forma aplicamos a permisso 640 ao mesmo: # chmod 640 /etc/crontab

* Diretrio /root
O diretrio home do root vem por padro com a permisso 755, o que permite que outros usurios vejam e executem o seu contedo. interessante alterar essa permisso para 700: # chmod 700 /root

* Processos
Por padro, o FreeBSD permite que qualquer usurio veja todos os processos em execuo, inclusive os de outros usurios. Para que isto no ocorra, insira a seguinte linha no arquivo /etc/sysctl.conf: kern.ps_showallprocs=0 Para efeito imediato, execute a linha de comando abaixo: # sysctl kern.ps_showallprocs=0

* Conexes em portas fechadas


Caso seja de interesse identificar tentativas de conexes a portas que no esto habilitadas, podemos fazer com que o sistema gere um log disso. Sero identificados dessa forma scanners de portas e softwares ou usurios mal intencionados. Basta adicionar as seguintes linhas ao arquivo /etc/sysctl.conf: net.inet.tcp.log_in_vain=1 net.inet.udp.log_in_vain=1 As tentativas de conexes sero logadas no arquivo /var/log/messages. Note que isto pode abrir precedente para um ataque DoS, se algum tentar abrir um nmero muito grande de conexes a muitas portas simultaneamente, o sistema poder ficar sobrecarregado fazendo esse log.

* Securelevel
O Securelevel o nvel de segurana do kernel, e varia de -1 (menos seguro) a 3 (mais seguro). recomendvel manter o nvel em no mnimo 1. Quanto menor o nvel mais inseguro, mas devemos manter um equilbrio entre segurana e funcionalidade. Uma explicao detalhada de todos nos nveis encontrada no manual do Init, atravs do comando "man init". Verifique qual o nvel atual atravs do seguinte comando: # sysctl -a | grep securelevel Para alterar o nvel padro para 1, insira as seguintes linhas no arquivo /etc/rc.conf: kern_securelevel_enable="YES" kern_securelevel=1

* Opes do kernel
H opes simples que podemos colocar na configurao do kernel para reforar em alguns aspectos a segurana da nossa mquina. Adicione a seguinte linha na configurao do kernel: options SC_DISABLE_REBOOT Isto far com que a mquina no reinicie ao ser pressionado Ctrl+Alt+Del. Aps modificada a configurao do kernel, o mesmo deve ser compilado e reinstalado.

* Atualizao do sistema
Provavelmente uma das partes mais importantes para garantir a segurana do sistema seja mant-lo atualizado. Deve-se manter tanto o sistema operacional quanto os programas que forem instalados.

* Manuteno de Data/Hora

importante manter a hora certa, para que no evento de uma auditoria ou inspeo dos logs e do sistema, em caso de problemas ou ataques, possamos confiar nos horrios ou timestamps dos logs.

2 - Tarefas Administrativas
2.1 - Atualizao do Sistema Operacional
Uma das formas mais prticas de atualizar o sistema utilizar-se do CVSup, que na verdade um pacote de software utilizado para distribuir e atualizar colees de arquivos atravs da rede, de forma muito rpida. Atravs do CVSup, baixamos e atualizamos todos os fontes do sistema. Aps isso, devem ser compilados e instalados, assim como o kernel. Aps um reboot o sistema estar atualizado. Para instalar o CVSup atravs do ports, v at /usr/ports/net/cvsup-without-gui e digite # make install O pacote do CVSup ser baixado e instalado no seu sistema, assim como alguns outros pacotes dos quais ele depende. Aps isso, precisamos configurar o CVSup, para que saiba como e o que deve ser baixado para a atualizao do FreeBSD. Copie o arquivo /usr/share/examples/cvsup/stable-supfile para /etc/supfile. Agora edite este arquivo (/etc/supfile) e faa as seguintes modificaes: Mudar a linha *default host=CHANGE_THIS.FreeBSD.org para *default host=cvsup2.FreeBSD.org Adicionar a linha ports-all tag=. no final do arquivo. Ateno ao ponto no final da linha. Caso queira usar outro mirror, no h problema algum, confira os disponveis em http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html. Leia com ateno os comentrios do arquivo supfile, para entender os parmetros. O arquivo que criamos ir baixar os fontes do ltimo estvel da srie 4 (4STABLE). Agora basta executar o CVSup, fazemos isso atravs do seguinte comando: # cvsup -g -L 2 /etc/supfile Se for necessrio deixar o comando rodando em background e/ou executar logoff da sua sesso, execute a seguinte linha: # nohup cvsup -g -L 2 /etc/supfile & Dessa forma, pode ser executado logoff da sesso e o processo ir continuar rodando. Confira o arquivo nohup.out para saber a situao do CVSup. Quando tiver terminado com sucesso, ser indicado pela ltima linha, que apresenta a seguinte mensagem: Finished successfully Aps finalizado o CVSup, vamos para a compilao dos fontes baixados. Esse processo pode ser feito com a mquina em produo. V at o diretrio /usr/src e execute o seguinte comando: # make buildworld Se preferir executar atravs do nohup, pelos motivos indicados anteriormente, deve ser feito da seguinte forma: # nohup make buildworld > /root/buildworld.log 2> /root/buildworld.err & Essa linha ir fazer o make buildworld rodar atravs do nohup, mas jogando a sada padro para o arquivo /root/buildworld.log e a sada de erro para o arquivo /root/buildworld.err. Confira estes arquivos para saber a situao do procedimento. Em seguida deve-se compilar o kernel. Caso o mesmo ainda no tenha sido personalizado, est sendo utilizado o padro (generic), ento fazemos esta compilao atravs da seguinte linha de comando: # make buildkernel KERNCONF=GENERIC Caso o kernel tenha outro nome (personalizado) dever ser especificado no lugar de GENERIC. Esta compilao (como

qualquer outro comando) tambm pode ser feita atravs do nohup, na mesma sintaxe mostrada anteriormente, apenas mudando os arquivos destino das sadas padro e de erro. Aps o trmino da compilao, devemos instalar todos os arquivos nos seus devidos lugares. Primeiramente, caso o seu sistema esteja rodando em um securelevel maior que 0, edite o arquivo /etc/rc.conf e altere a configurao para kern_securelevel=-1 Reinicie ento a mquina, que estar rodando agora com o securelevel no nvel "-1". O prximo passo entrar no modo single, ou seja, monousurio, sem ningum mais usando a mquina. Isso ir tirar a mquina de produo, ela no ir responder requisies de servios de rede, ento deve-se escolher um horrio em que a mquina no necessita "estar no ar". importante ressaltar que devemos estar operando no console, e no via rede. Para entrar no modo single usamos o seguinte comando: # shutdown now Com a mquina no modo single, vamos at o diretrio /usr/src e digitamos os seguintes comandos: # make installworld # make installkernel KERNCONF=GENERIC Novamente, caso o kernel tenha outro nome dever ser especificado no lugar de GENERIC. Com isso, teremos instalado o sistema atualizado. Falta apenas um passo, o "mergemaster", que serve para atualizar alguns arquivos de configurao. Deve-se ter muita ateno neste procedimento, pois pode-se acidentalmente sobrescrever arquivos importantes. recomendvel que se faa um backup de todo o diretrio /etc previamente. Uma forma bem simples de se obter isso atravs da seguinte linha de comando: # cp -Rpv /etc /etc.bak Ser feita uma cpia do /etc em /etc.bak. O parmetro "-R" indica recursividade, ou seja copiar todos os diretrios. O "p", ou "-p", indica que quer-se manter as permisses e propriedade do arquivo. O "v", ou "-v", indica verbose, que ir mostrar na tela os nomes dos arquivos na medida em que vo sendo copiados. Aps isso, vamos ao mergemaster, para isso execute, a partir do diretrio /usr/src, o comando # mergemaster O programa copiar os arquivos novos (atualizados) em uma pasta temporria, em /usr/src/etc. Ento ir exibir as diferenas (diff) entre cada arquivo que pretende atualizar e o respectivo arquivo antigo, e pedir o que deve ser feito. As opes so: d -> Deletar o temporrio (deixar como est) i -> Instalar o temporrio (atualizar) m -> Fazer um "merge", ou seja, uma unio dos dois arquivos (antigo e novo) v -> Visualizar novamente o "diff" Deve-se ter ateno em cada arquivo, pois dependendo do que temos rodando no servidor ir mudar os arquivos importantes que devem ser mantidos. Por exemplo, a seqncia do mergemaster poder ser a seguinte: /etc/defaults/rc.conf -> i /etc/defaults/make.conf -> i /etc/gnats/freefall -> i /etc/mail/freebsd.cf -> i /etc/mail/freebsd.submit.mc -> i /etc/mail/freebsd.submit.cf -> i /etc/mail/sendmail.cf -> i /etc/mail/submit.cf -> i /etc/mtree/BSD.local.dist -> i /etc/mtree/BSD.usr.dist -> i /etc/hosts -> i /etc/motd -> i /etc/rc.network -> i /etc/rc.sendmail -> i /etc/services -> i /etc/ttys -> i /etc/manpath.config -> i Como pode ser visto, atualizamos todos os arquivos oferecidos pelo mergemaster neste momento. No foi mexido em arquivos como /etc/master.passwd, /etc/group e outros, porque eles j estavam na ltima verso, ou seja, no h neste momento atualizao para eles. No ser necessrio nenhum comando adicional porque no atualizamos arquivos como

aliases ou similares. Feito isso, podemos voltar a configurao do securelevel para o nvel anterior (caso seja utilizado) e dar um reboot. A mquina ser inicializada com o sistema atualizado. Ao dar o comando "uname -a" podemos ver a verso 4.9-STABLE.

2.2 - Tarefas com Usurios e Grupos


* Comando PW Para criar usurios e grupos utilizamos o comando "pw", cuja funo bsica trabalhar nos arquivos /etc/passwd, /etc/master.passwd e /etc/group, criando, removendo, modificando ou exibindo usurios e grupos do sistema. Segue abaixo uma explanao geral de como utilizar tal comando, mas importante lembrar que muitas opes foram omitidas devido a grande quantidade, sendo por isso importante a leitura do manual, atravs de "man pw". Qualquer operao efetuada atravs do comando pw ser registrada em um arquivo de log, localizado em /var/log/userlog. Para trabalhar com grupos, utilizamos o comando "pw group", seguido de "add", "del", "mod", "show" ou "next". Segue uma explicao sobre essas opes: add -> adicionar um novo grupo del -> remover um grupo mod -> modificar algum dado do grupo show -> exibir os dados de um grupo next -> mostra o prximo GID livre O comando "pw group add" permite ainda outros parmetros, listaremos os mais importantes: -n "nome"-> nome do grupo (o -n pode ser omitido) -g 2000 -> GID (Group ID) do grupo O comando "pw group mod" permite alm dos j citados, o seguinte parmetro: -l "nome"-> novo nome do grupo, caso queiramos alterar o nome Parmetros do "pw group show": -P -> sada em formato mais legvel -a -> lista todos os grupos Exemplos: Simplesmente adicionar o grupo1: # pw group add grupo1 Adicionar o grupo2, com gid=1500: # pw group add -n "grupo2" -g 1500 Exibir os dados do grupo2: # pw group show grupo2 -P Remover o grupo1: # pw group del grupo1 Para trabalhar no contexto de usurios, utilizamos "pw user", seguido de "add", "del", "mod", "show", "next", "lock" ou "unlock", e seguido de outros parmetros, quando for necessrio. add -> adicionar um novo usurio del -> remover um usurio mod -> modificar algum dado do usurio show -> exibir os dados de um usurio next -> mostra os prximos UID e GID livres lock -> bloquear a conta do usurio unlock -> desbloquear a conta do usurio Os comandos "pw user add" (para adicionar um usurio) e "pw user mod" (para modificar os dados de um usurio) permitem os seguintes parmetros (esto listados apenas os essenciais): -n "username" -> nome (username) do usurio (o -n pode ser omitido) -c "comentrio" -> comentrio, que tradicionalmente contm quatro campos separados por vrgulas: nome completo, localizao, fone comercial e fone residencial. Essa sintaxe no precisa ser desta forma, sendo a seu critrio.

-u 1500 -> UID (User ID) do usurio -g "grupo" -> grupo ao qual o usurio ir pertencer, pode ser especificado o nome do grupo ou o GID. -d "/home/fulano" -> diretrio home do usurio -m -> cria o diretrio home do usurio automaticamente -s "/usr/local/bin/bash" -> define o shell do usurio Os parmetros do comando "pw user del" so: -n "username"-> nome (username) do usurio (o -n pode ser omitido) -u 1500 -> UID do usurio -r -> Remove tambm o diretrio home do usurio e o seu contedo Os principais parmetros adicionais do "pw user show" so: -P -> sada em formato mais legvel -a -> lista todos os usurios O comando "pw user lock" funciona adicionando a string *LOCKED* na frente da senha do usurio, no arquivo master.passwd. Desta forma, o usurio no conseguir autenticar-se e nem efetuar qualquer operao. Para desbloquear, basta usar o comando "pw user unlock", especificando o username ou o UID do usurio. Exemplos: Simplesmente adicionar um usurio com username fulano1: # pw user add fulano1 Adicionar um usurio com username fulano2, comentrio "Fulano 2", UID 1500, GID 2000, diretrio home "/home/fulano2" e shell "/bin/sh": # pw user add -n "fulano2" -c "Fulano 2" -u 1500 -g 2000 -d "/home/fulano2"-m -s "/bin/sh" Modificar o shell do usurio fulano2 para "/usr/local/bin/bash": # pw user mod fulano2 -s "/usr/local/bin/bash" Exibir uma listagem de todos os usurios: # pw user show -P -a Bloquear a conta do usurio fulano2: # pw user lock fulano2 Remover o usurio fulano1, juntamente com seu diretrio home: # pw user del fulano1 -r Para efetuar a troca de senha de qualquer usurio, via linha de comando, deve ser utilizado o comando passwd. O usurio root pode trocar a senha de qualquer usurio, j os usurios comuns podem apenas trocar a prpria senha. A sintaxe do comando "passwd fulano".

2.3 - Recompilao e Instalao do Kernel


Existem determinadas tarefas que exigem que o kernel seja configurado com opes diferentes do padro (GENERIC), para ento ser recompilado e instalado no lugar do kernel antigo. Siga as etapas abaixo. Verifique se existe o diretrio /usr/src/sys. Caso no exista, ento voc no instalou os fontes do kernel, e precisar fazer isso. Basta executar /stand/sysinstall, escolher Configure, Distributions, src e ento sys. Isso ir instalar os fontes. Agora, v para o diretrio /usr/src/sys/i386/conf. a que fica o arquivo de configurao do kernel. Copie o GENERIC para o nome de sua preferncia (geralmente o hostname da mquina). Edite o arquivo de configurao que voc acabou de copiar (no o GENERIC) e insira ou altere as opes que desejar. Podem ser removidas as referncias a dispositivos de hardware que voc no possui, e tambm interfaces ou opes que voc no ir utilizar. Isto ir inclusive melhorar a performance do sistema, j que ir trabalhar com um kernel mais "leve" e sem drivers desnecessrios. Para maiores informaes consulte o arquivo LINT, no diretrio /usr/src/sys/i386/conf. Aps isso, altere a configurao do Securelevel para -1, reinicie a mquina e ento execute: # cd /usr/src # make buildkernel KERNCONF=SEUKERNEL # make installkernel KERNCONF=SEUKERNEL Com isso, o novo kernel ser criado e copiado ao diretrio raiz como /kernel, e o kernel antigo ser movido para

/kernel.old. Para terminar, reinicie a mquina para carregar seu novo kernel. Caso a sua mquina no bootar com o novo kernel, no se preocupe. Basta pressionar qualquer tecla (exceto enter) durante a contagem regressiva, na inicializao. Ento digite os seguintes comandos: unload boot kernel.old Isso far com que seja inicializado o seu kernel antigo. Pode tambm ser entrado o comando "boot kernel.GENERIC", para incializar o kernel "padro de fbrica". Aps tudo estar funcionando, dever ser alterado o Securelevel para o nvel desejado (caso seja utilizado) e reiniciar novamente. Maiores informaes no Handbook do FreeBSD, seo de configurao do kernel

2.4 - Manuteno de Data/Hora


muito importante a manuteno da hora certa no sistema por diversos motivos, desde o funcionamento de alguns aplicativos at a auditoria de arquivos de log. Para a manuteno da hora devem ser observados dois pontos. O primeiro utilizar o fuso horrio correto, que deve ter sido selecionado j na instalao do sistema. Caso tenha que mudar o mesmo faa-o atravs do utilitrio "tzsetup". O segundo ponto importante acertar a hora em si, o que faremos atravs do protocolo NTP - Network Time Protocol, que utiliza a porta TCP/UDP 123. O comando utilizado "ntpdate", seguido do nome de um servidor NTP. Por exemplo: # ntpdate ntp.cert-rs.tche.br Isso ir acertar a hora do sistema com uma preciso muito boa. O ideal acert-la periodicamente, por exemplo uma vez por dia. Isso pode ser feito atravs do Cron, mas iremos primeiramente criar um script para executar o comando, por motivos de organizao. Crie o diretrio /usr/local/script, com permisso 700, para armazenar os scripts que sero criados. Ento crie o arquivo /usr/local/script/acerta_hora.sh, com a permisso 700 e o seguinte contedo: -------------------- Arquivo acerta_hora.sh -------------------#!/bin/sh /usr/sbin/ntpdate ntp.cert-rs.tche.br >> /var/log/acerta_hora.log 2>&1 --------------- Fim do arquivo acerta_hora.sh -------------------A hora ser acertada e as sadas padro (stdout) e de erro (stderr) do comando sero jogadas no arquivo /var/log/acerta_hora.log, que ser o arquivo de log deste script. Para maiores informaes sobre o redirecionamento de sadas de comandos, h um resumo na pgina http://www.seekingfire.com/bitesized/redirection.html. Para rodar esse script todo dia s 2h (obviamente pode ser escolhido outro horrio), edite o arquivo /etc/crontab e insira a seguinte linha: 0 2 * * * root /usr/local/script/acerta_hora.sh O formato das entradas no arquivo /etc/crontab o seguinte: minuto hora dia_do_mes ms dia_da_semana quem comando Segue abaixo uma lista de alguns servidores NTP que podem ser utilizados: ntp.cert-rs.tche.br -> Centro de Emergncia em Segurana da Rede Tch 200.20.186.75 -> Observatrio Nacional ntp.cais.rnp.br -> Centro de Atendimento a Incidentes de Segurana da RNP ntp.pop-rs.rnp.br -> Ponto de Presena da RNP no RS ntp.nasa.gov -> NASA

2.5 - Rotao de Arquivos de Log


Para que no tenhamos arquivos de log muito grandes, geralmente se implementa alguma forma de rotacionar estes arquivos. Isto feito normalmente atravs do newsyslog ou atravs de scripts. Iremos geralmente optar pelos scripts, devido flexibilidade que proporciona. Segue abaixo um exemplo de script. Crie o arquivo /usr/local/script/rotate_log_programa.sh, com a permisso 700 e o seguinte contedo: -------------------- Arquivo rotate_log_programa.sh -------------------#!/bin/sh # finaliza o Programa /comando/para/finalizar/o/programa # Define o nome para arquivamento

OLD_LOG=/caminho/para/o/arquivamento/programa.log.`date +%y%m%d-%H%M%S` # move o arquivo para o diretorio de arquivamento mv /arquivo/de/log/programa.log `echo $OLD_LOG` # inicializa o Programa /comando/para/inicializar/o/programa # compacta o arquivado /usr/bin/gzip $OLD_LOG # apaga os logs com mais de um ano find /caminho/para/o/arquivamento -mtime +365 -exec rm -f {} \; -------------------- Fim do arquivo rotate_log_programa.sh -------------------Edite o arquivo /etc/crontab e adicione uma linha para executar o script na hora desejada, como por exemplo: 0 0 1 * * root /usr/local/script/rotate_log_programa.sh Isto far com que o script de rotao do log seja acionado meia-noite do primeiro dia do ms, separando os logs de cada ms em arquivos diferentes. Cada arquivo guardado ter data e hora anexado ao nome. O comando find opcional e pode ser configurado com outro perodo de tempo. Pode-se tambm utilizar um script mais elaborado, como o que segue abaixo. O que ir determinar isso a preferncia do administrador, que tem a liberdade de criar e personalizar os scripts como desejar. -------------------- Arquivo rotate_exemplo.sh -------------------#!/bin/sh # Script para fazer o rotate de logs. # Comando para finalizar o servico. # Deve ser especificado entre '...' # Caso nao for necessario, deixar em branco. COMFIN='' # Comando para inicializar o servico. # Deve ser especificado entre '...' # Caso nao for necessario, deixar em branco. COMINI='' # Diretorio para o arquivamento dos logs antigos. DIRARQ=/diretorio/para/arquivamento # Diretorio onde fica o arquivo de log atual. DIRLOG=/diretorio/do/log/atual # Nome do arquivo de log. NOMELOG=nome_do_arquivo_de_log.log # Dono do arquivo de log. USULOG=root # Grupo do arquivo de log. GRPLOG=wheel # Modo de permissao do arquivo de log. PERLOG=600 # Compactar o arquivado (S/N). COMPACTAR=S # Apagar arquivos antigos (S/N). APAGA_ANTIGOS=N # Tempo em dias que os antigos deverao ser mantidos. # Qualquer arquivo no diretorio dos antigos com idade # superior ao especificado sera apagado. TEMPO_ANTIGOS=180 ##################################################### $COMFIN > /dev/null LOGARQ=$DIRARQ/$NOMELOG.`date +%y%m%d-%H%M%S` LOGATU=$DIRLOG/$NOMELOG

mv $LOGATU $LOGARQ touch $LOGATU chown $USULOG $LOGATU chgrp $GRPLOG $LOGATU chmod $PERLOG $LOGATU $COMINI > /dev/null if [ $COMPACTAR = S ] ; then /usr/bin/gzip $LOGARQ fi if [ $APAGA_ANTIGOS = S ] ; then find $DIRARQ -mtime +$TEMPO_ANTIGOS -exec rm -f {} \; fi -------------------- Fim do arquivo rotate_exemplo.sh --------------------

2.6 - Inicializao e Finalizao de Daemons Para inicializar e finalizar os daemons, nos momentos de boot e shutdown, respectivamente, o procedimento mais
recomendado colocar scripts no diretrio /usr/local/etc/rc.d. Esses scripts devem possuir a extenso .sh (apenas .sh), devem ser executveis (permisso 700) e precisam aceitar dois argumentos: start e stop. Quem gerencia estes procedimentos no boot e no shutdown o RC, interessante sabermos como funciona, para isso pode ser consultado o seu manual, com o comando "man rc". Deste manual foi retirado e adaptado o exemplo de script abaixo, que deve ser copiado e customizado para cada novo servio que for instalado. Crie um arquivo /usr/local/etc/rc.d/exemplo.sh.sample com o contedo abaixo, desta forma o teremos sempre disponvel: -------------------- Arquivo exemplo.sh.sample -------------------#!/bin/sh # # Script de Inicializacao e Shutdown # Nome_do_Programa case "$1" in start) /comando/para/iniciar/o/programa && echo -n ' Nome_do_Programa' ;; stop) /comando/para/parar/o/programa && echo -n ' Nome_do_Programa' ;; *) echo "Opcao desconhecida: $1 - deve ser 'start' ou 'stop'" >&2 ;; esac -------------------- Fim do arquivo exemplo.sh.sample -------------------O comando para inicializar o programa pode conter parmetros, se necessrio. Pode ser algo como /usr/local/sbin/proftpd ou /usr/sbin/postfix start O comando para terminar o programa tambm pode conter parmetros, e pode ser um comando especfico do daemon, um kill ou at mesmo um killall. Exemplos: /usr/sbin/postfix stop kill `cat /usr/local/var/proftpd.pid` killall proftpd Mantenha este arquivo de exemplo com a permisso 600 e a extenso .sample, desta forma ele no ser executado acidentalmente e nem na inicializao ou shutdown do sistema. A seqncia de execuo dos scripts segue a ordem alfabtica. Desta forma, se for necessrio que algum script seja executado antes do outro, podemos colocar nmeros na frente dos nomes, estabelecendo a ordem.

2.7 - Download, Descompactao e Extrao de Arquivos


No objetivo deste material abranger tpicos bsicos como download, descompactao e extrao de arquivos, mas como importante termos facilidade com estas tarefas para agilizar os processos de instalao de software, entre outros.

Vou abordar de forma concisa e prtica os principais pontos. Para facilitar a organizao, crie um diretrio como por exemplo /usr/originais onde sero guardados todos os arquivos baixados, antes de qualquer descompactao. Assim, teremos sempre uma cpia do que for instalado, o que pode ser til posteriormente. Crie tambm uma rea para descompactar, extrair, configurar e compilar os programas, pode ser algo como /usr/instala ou ento no prprio /tmp. No esquea de apagar o que foi colocado no /tmp, aps a instalao do programa. Em caso de dvidas ou para aprender mais sobre qualquer dos utilitrios apresentados consulte a respectiva "man page", como por exemplo "man fetch". * Download O download de arquivos como aplicativos, cdigos-fonte (sources) e outros pode ser feito de vrias formas no FreeBSD. Caso o arquivo esteja em um servidor HTTP, podemos usar o programa Fetch. Se o arquivo estiver em um servidor FTP, podemos usar o cliente FTP ou tambm o Fetch. Qualquer deles pode ainda ser associado ao nohup, caso o download seja demorado e desejamos efetuar logoff da seo deixando o processo rodar em background. Seguem abaixo alguns exemplos: Efetuar o download de arquivo via HTTP: # fetch http://apache.usp.br/httpd/httpd-2.0.48.tar.gz # nohup fetch http://apache.usp.br/httpd/httpd-2.0.48.tar.gz & O nohup ir deixar o comando rodando em background, mesmo que se efetue logoff da sesso. Dever ser verificado posteriormente o arquivo nohup.out, que ir conter qualquer sada (stdout) do comando. Efetuar o download de arquivo via FTP: # fetch ftp://ftp.matrix.com.br/pub/postfix/official/postfix-2.0.16.tar.gz # ftp ftp.matrix.com.br # ftp -ai ftp://ftp.matrix.com.br/pub/postfix/official/postfix-2.0.16.tar.gz O parmetro -a indica que deseja-se fazer login annimo, e o -i indica que deseja-se uma sesso no interativa. # nohup ftp -ai ftp://ftp.matrix.com.br/pub/postfix/official/postfix2.0.16.tar.gz & * Descompactao Para efetuar a descompactao de um arquivo, devemos avaliar qual o formato de compactao do mesmo, atravs da extenso. Veja as mais comuns: Extenso .gz .Z .zip .bz .bz2 Exemplos: # gunzip postfix-2.0.16.tar.gz # unzip httpd-2.0.48-win32-src.zip # bunzip2 proftpd-1.2.9.tar.bz2 Caso algum dos utilitrios no esteja presente no seu sistema, pode ser facilmente instalado atravs do Ports, encontram-se no diretrio /usr/ports/archivers. * Extrao Neste tpico iremos nos ater a arquivos "empacotados" com o formato Tar, que foi criado originalmente para trabalhar com arquivos em fitas magnticas, da o seu nome, Tape ARchiver. Para criar ou extrair arquivos com a extenso .tar o utilizado o programa tar, que vem instalado por padro no FreeBSD. Arquivos com a extenso .tgz so arquivos Tar que foram compactados, assim como .tar.gz, e tambm so chamados "tarball". Seguem abaixo alguns exemplos comuns: Extrair arquivo .tar: # tar xvf postfix-2.0.16.tar Compactador gzip compress zip bzip bzip2 Descompactador gunzip uncompress unzip bunzip bunzip2

Parmetros usados neste caso: x -> extract (extrai) v -> verbose (lista os arquivos extrados) f -> file (indica qual o arquivo a ser processado) O comando tar trabalha com recursividade, ento neste caso ser criado o diretrio postfix-2.0.16 contendo os arquivos extrados. Descompactar e extrair arquivo .tar.gz: # tar xvzf postfix-2.0.16.tar.gz O parmetro adicional usado foi o "z", que indica que o arquivo deve ser primeiramente descompactado, e aps isso extrado ou "desempacotado". Descompactar e extrair no diretrio /tmp um arquivo que se encontra em /usr/originais: # cd /tmp # tar xvzf /usr/originais/postfix-2.0.16.tar.gz Neste caso, o tar ir ler o arquivo que se encontra em /usr/originais, mas extrair o seu contedo no /tmp.

3 - Instalao e Configurao de Servios


3.1 - Servio de Acesso Remoto
3.1.1 - SSH (Secure Shell) * OpenSSH O ssh serve para acessar mquinas remotas, e um substituto seguro para o rlogin, rsh, rcp e telnet. O sshd o daemon do OpenSSH, e espera as conexes de clientes ssh, normalmente na porta 22. Ele "forka" um novo daemon para cada conexo. O daemon trabalha com troca de chaves, encriptao, autenticao, execuo de comandos e troca de dados. No ser preciso instalarmos o OpenSSH, j que o mesmo vem por padro na instalao do FreeBSD. Tambm no ser preciso criar um script de inicializao, pois pode ser inicializado a partir do arquivo /etc/rc.conf. Para que o sshd seja iniciado no momento do boot ele dever conter a seguinte linha: sshd_enable="YES" Caso no possua, insira a linha e reinicie a mquina. No recomendvel acessar a mquina remotamente com a conta root, por precauo de segurana. Deve-se criar uma conta comum de usurio para este fim: # pw user add fulano -c "Fulano" -d "/home/fulano" -g 0 -s "/usr/local/bin/bash" # passwd fulano A conta foi criada com o GID 0 (grupo wheel) para que possa dar um "su" e acessar como root. Dessa forma, pode-se entrar com essa conta via SSH e ento dar um # su para trabalhar normalmente como root. Adicione a seguinte linha no arquivo /etc/ssh/sshd_config: AllowUsers fulano Aps isso, digite # killall -HUP sshd Desta forma reiniciamos o processo sshd, fazendo com que ele leia novamente o arquivo de configurao, que foi modificado. Com essa configurao, o usurio fulano poder acessar a mquina remotamente, atravs do protocolo SSH. Um bom cliente para o Windows o Putty. Para acessar a partir de outra mquina FreeBSD ou Linux deve ser usado o comando "ssh", no formato # ssh fulano@192.168.0.10 ou ento # ssh -l fulano 192.168.0.10 Para uma configurao mais elaborada, seguem abaixo alguns parmetros que podem ser utilizados no arquivo /etc/ssh/sshd_config:

AllowGroups grupo1 grupo2 Permite que apenas os usurios que pertenam a algum dos grupos especificados efetuem o login. Deve ser usado o nome do grupo, no o GID. AllowUsers usuario1 usuario2 Permite que apenas os usurios especificados efetuem o login. Deve ser usado o username, no o UID. Banner /etc/mensagem Mostra a mensagem contida no arquivo especificado antes do usurio efetuar o login. DenyGroups grupo3 grupo4 No permite que os usurios que pertenam a algum dos grupos especificados efetuem o login. Deve ser usado o nome do grupo, no o GID. DenyUsers usuario3 usuario4 No permite que os usurios especificados efetuem o login. Deve ser usado o username, no o UID. HostKey /etc/ssh/ssh_host_key Especifica o arquivo que contm a chave privada do host. possvel haver mais de uma chave privada. Chaves "rsa1" so usadas para a verso 1 e chaves "dsa" ou "rsa" so usadas para a verso 2 do protocolo SSH. Os arquivos que contm as chaves privadas devem ter permisso de leitura e escrita apenas para o dono (root). IgnoreRhosts yes Se setado para yes, no le os arquivos ~/.rhosts e ~/.shosts. O padro yes. KeepAlive yes Se setado para yes, envia mensagens keepalive para o cliente. Assim, caso o cliente cair isso ser notado e a sesso ssh no ficar pendurada no servidor. KerberosAuthentication yes Especifica se a autenticao Kerberos ser permitida. KeyRegenerationInterval 3600 Especifica o intervalo em segundos para a recriao da chave. ListenAddress 192.168.0.1 Endereo IP em que o daemon deve esperar as conexes, caso a mquina possuir mais de um endereo. Se no for especificado, o daemon permite a conexo por qualquer endereo da mquina. LoginGraceTime 120 Tempo para o usurio logar-se. Se aps esse tempo de conexo o cliente no tiver efetuado o login, ser desconectado. LogLevel INFO Especifica o nvel de log que deve ser usado. Os valores so: QUIET, FATAL, ERROR, INFO, VERBOSE e DEBUG. O nvel DEBUG viola a privacidade dos usurios e no recomendado. MaxStartups 10:30:60 Aps 10 conexes no autenticadas, recusa 30% das novas, e no permite mais que 60 conexes no autenticadas. PermitRootLogin no Permite ou no que o root efetue login via SSH. Port 22 Especifica a porta em que o daemon deve esperar as conexes. Esse parmetro pode ser usado mais de uma vez, caso sejam necessrias mais portas. PrintMotd yes Especifica se deve ser exibido o arquivo /etc/motd quando o usurio efetuar o login. Protocol 2,1 Especifica as verses do protocolo ssh que o daemon deve suportar. Deve ser "1", "2" ou "2,1". ServerKeyBits 768 Nmero de bits da chave do protocolo 1. O mnimo 512, o padro 768. StrictModes yes Se setado para yes, as permisses e dono dos arquivos do usurio so checados antes de aceitar o login. Isso evita por exemplo que algum acidentalmente deixe seus arquivos com permisso de escrita para todos. Alguns dos arquivos utilizados pelo sshd: /etc/ssh/sshd_config - Arquivo de configurao do sshd, como visto acima. Deve ter permisso de escrita apenas para o root.

/etc/ssh/ssh_host_key, /etc/ssh/ssh_host_dsa_key, /etc/ssh/ssh_host_rsa_key - Estes trs arquivos contm as partes privadas das chaves do host. O dono destes arquivos deve ser o root, e apenas o root deve ter permisso para leitura. O sshd no inicializa se estes arquivos estiverem com as permisses erradas. /etc/ssh/ssh_host_key.pub, /etc/ssh/ssh_host_dsa_key.pub, /etc/ssh/ssh_host_rsa_key.pub - Estes trs arquivos contm as partes pblicas das chaves do host. Devem ter permisso de leitura para todos, mas escrita apenas para o root. /etc/ssh/primes - Contm os grupos Diffie-Hellman usados para o "Diffie-Hellman Group Exchange". /var/run/sshd.pid - Contm o PID do sshd.

3.1.2 - Gerenciamento via Web


* Webmin O Webmin uma interface Web, acessada a partir de um navegador, utilizada para administrao de ambientes Unix. Possui um servidor web embutido e vrios programas CGI que trabalham diretamente nos arquivos do sistema. escrito em Perl, e sua pgina www.webmin.com. Para poder acessar o Webmin atravs de HTTPS (HTTP seguro, com encriptao) dever ser instalado o mdulo Net::SSLeay do Perl. Faa o download do arquivo http://search.cpan.org/CPAN/authors/id/S/SA/SAMPO/Net_SSLeay.pm-1.25.tar.gz, descompacte-o, acesse o diretrio criado e execute os seguintes comandos: # perl Makefile.PL # make # make install Faa agora o download do source do Webmin a partir do seu site. A verso atual 1.121, e o arquivo chama-se webmin-1.121.tar.gz. Descompacte e extraia o arquivo no /tmp, e acesse o diretrio criado. Execute o comando abaixo: # ./setup.sh /usr/local/webmin Responda as questes conforme abaixo: Config file directory [/etc/webmin]: /usr/local/etc/webmin Log file directory [/var/webmin]: /var/log/webmin Full path to perl (default /usr/bin/perl): Web server port (default 10000): Caso queira utilizar outra porta insira aqui. Login name (default admin): Caso queira usar outro login para administrao insira aqui. Login password: Insira uma senha. Password again: Insira novamente a senha. Use SSL (y/n): y Start Webmin at boot time (y/n): n Aps isso, o Webmin ser instalado com as configuraes efetuadas. Acesse-o atravs do endereo http://servidor:11000. Crie um script de inicializao com os seguintes comandos para inicializao e shutdown, respectivamente: /usr/local/etc/webmin/start > /dev/null 2>&1 e /usr/local/etc/webmin/stop > /dev/null 2>&1

3.2 - Servios de Correio Eletrnico


3.2.1 - MTA (Mail Transfer Agent)
* Postfix Primeiramente devemos desativar o Sendmail, MTA que vem por padro rodando no FreeBSD. Para isso, edite o arquivo /etc/rc.conf e adicione/substitua as seguintes linhas:

sendmail_enable="NONE" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO" Aps isso, reinicie a mquina ou ento termine os processos do sendmail atravs do comando "killall sendmail". O Postfix um MTA criado por Wietse Venema, com o intuito de ser rpido, fcil de administrar e seguro, mantendo tambm a compatibilidade com o Sendmail. Sua pgina www.postfix.org. Efetue o download do cdigo fonte do Postfix, atravs de algum dos mirrors disponveis na pgina. A vero atual 2.0 Patchlevel 16 (2.0.16). O download pode ser feito a partir de um mirror brasileiro, ftp://ftp.matrix.com.br/pub/postfix/official/postfix-2.0.16.tar.gz. Efetue o download e extraia o arquivo no diretrio /tmp, ser criado o diretrio postfix-2.0.16 contendo os arquivos extrados. Aps isso, entre no diretrio que foi criado. Digite o comando "make", para compilar a distribuio. Aps compilado o Postfix, vamos instalar. Primeiramente, iremos "desativar" e tambm manter backup dos arquivos antigos do sendmail, atravs dos seguintes comandos: # mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF # mv /usr/bin/newaliases /usr/bin/newaliases.OFF # mv /usr/bin/mailq /usr/bin/mailq.OFF Devem ser criados usurio, grupos e alias (de e-mail) para utilizao do Postfix. O usurio e os grupos adicionamos com os seguintes comandos: # pw group add postfix -g 100 # pw group add postdrop -g 110 # pw user add postfix -c "Postfix" -d "/nonexistent" -s "/sbin/nologin" -u 100 -g 100 O alias deve ser criado adicionando a seguinte linha ao arquivo /etc/mail/aliases: postfix: root Aps isso, podemos proceder com a instalao. V at o diretrio /tmp/postfix-2.0.16 e execute o comando "make install". Surgiro algumas questes, que devero ser avaliadas e respondidas: install_root: deixe padro, apenas d enter tempdir: padro config_directory: padro daemon_directory: padro command_directory: padro queue_directory: padro sendmail_path: padro newaliases_path: padro mailq_path: padro mail_owner: padro setgid_group: padro manpage_directory: padro sample_directory: /etc/postfix/sample readme_directory: padro Com isso, o Postfix est instalado. Falta agora fazer algumas configuraes bsicas para que possa funcionar. Edite o arquivo /etc/postfix/main.cf e adicione os seguintes parmetros(nos locais apropriados, para facilitar a organizao do arquivo): myorigin = servteste.exemplo.org mydestination = servteste.exemplo.org, 192.168.0.10, localhost.exemplo.org mynetworks = 192.168.0.0/16, 127.0.0.0/8 Substitua os hostnames e os endereos de exemplo acima para os valores apropriados ao seu servidor. Execute o comando "postfix start", o Postfix dever ser inicializado e ficar rodando, sem nenhum erro. Faa o seguinte teste: # echo Teste | mail root@servteste.exemplo.org Agora verifique a sua caixa de entrada, digitando "mail". Dever aparecer uma nova mensagem, recebida h pouco. Digite o n de ndice da mensagem (aparece antes do remetente) e enter para visualiz-la. O texto da mensagem dever ser Teste. Digite q e enter para sair. Tente tambm enviar uma mensagem para um usurio comum, como o fulano que

foi criado anteriormente, ento acesse com essa conta de usurio e verifique a caixa de entrada. Faa o teste tambm enviando uma mensagem para outro servidor, da forma como foi mostrada, com os comandos "echo" e "mail". Verifique o arquivo /var/log/maillog, este o arquivo de log do MTA. Ao nos depararmos com qualquer problema no sistema de e-mail a primeira coisa a fazer verificar com cuidado as entradas deste arquivo. Se tudo estiver funcionando normalmente, faa uma cpia de backup do arquivo main.cf e copie os arquivos abaixo para /etc/postfix. Estes arquivos implementam uma configurao melhor e esto comentados, ficando mais fcil adaptlos a sua configurao. No esquea de alterar alguns valores como os hostnames e endereos IP para os apropriados ao seu servidor.

-------------------- Arquivo main.cf -------------------# main.cf ### PATHS # Diretorio para a fila do Posfix. queue_directory = /var/spool/postfix # Diretorio dos executaveis do Postfix. command_directory = /usr/sbin # Diretorio dos daemons do Postfix. daemon_directory = /usr/libexec/postfix ### USUARIO # Usuario sob o qual roda a maioria dos daemons. Tambem eh o dono da fila. mail_owner = postfix ### NOMES DE HOST E DOMINIO # Hostname do servidor. myhostname = servteste.exemplo.org # Dominio. mydomain = exemplo.org ### ENVIO # Dominio das mensagens enviadas. myorigin = $myhostname ### RECEBIMENTO # Interface(s) de rede que recebe(m) e-mails. inet_interfaces = all # Dominios de recebimento de e-mails. mydestination = servteste.exemplo.org, 192.168.0.10, localhost.exemplo.org ### USUARIOS DESCONHECIDOS # Codigo de erro retornado quando eh recebida um e-mail com destinatario desconhecido. # 450 = tente novamente mais tarde. # 550 = rejeitado. unknown_local_recipient_reject_code = 550 ### RELAY # Redes que podem fazer relay atraves deste servidor. mynetworks = 192.168.0.0/16, 127.0.0.0/8

### TAXA DE ENTRADA # Pausa antes de aceitar uma nova mensagem quando a taxa de entrada # excede a taxa de entrega. # Para desabilitar especifique 0. Os valores validos sao 0 a 10. # O padrao eh 1s. #in_flow_delay = 1s ### ALIASES # Arquivo(s) de aliases (apelidos, redirecionamento local). # Quando o arquivo for modificado deve-se executar "newaliases". alias_maps = hash:/etc/aliases # Arquivo(s) de aliases no qual o programa newaliases trabalha. alias_database = hash:/etc/aliases ### DIVERSOS # Contatar ou nao servidor Biff (que envia notificacoes de msg nova). biff = no # Banner exibido quando se conexta ao servidor. # $myhostname deve constar. smtpd_banner = $myhostname ESMTP ### MAILBOX # Parametro opcional que especifica o nome, relativo ao home do # usuario, de um arquivo Mailbox. O padrao eh /var/mail/usuario. #home_mailbox = Mailbox # Diretorio onde ficam as caixas de entrada. #mail_spool_directory = /var/mail # Programa externo opcional para fazer a entrega local. # Caso se queira usar o Procmail. #mailbox_command = /local/do/procmail # Tamanho maximo em bytes para as caixas de entrada. # Deve ser maior que o message_size_limit. # O padrao eh 50MB. #mailbox_size_limit = 51200000 ### LIMITES DE TAMANHO # Quantia em bytes da mensagem original que eh retornada quando da # notificacao de erro na entrega. # O padrao eh 50000. #bounce_size_limit = 50000 # Tamanho maximo em bytes para o cabecalho das mensagens. A # quantidade excedente sera descartada. # O padrao eh 102400. #header_size_limit = 102400 # Tamanho maximo total de um e-mail, em bytes. # O padrao eh 10240000. #message_size_limit = 10240000 ### CONTROLES ANTI-SPAM # Limite de destinatarios por mensagem. # O padrao eh 1000. #smtpd_recipient_limit = 1000

# Controla se sera obrigatorio que os campos MAIL FROM e RCPT TO venham # dentro de <> e nao contenham comentarios no estilo da RFC822. # O padrao eh no, que nao faz a verificacao. strict_rfc821_envelopes = yes # Restringe a conexao de determinados IPs. # Para maiores detalhes ver arquivo sample-smtpd.cf smtpd_client_restrictions = reject_rbl_client relays.ordb.org, reject_rbl_client sbl-xbl.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rhsbl_client blackhole.securitysage.com, permit # Restringe o envio por determinados remetentes. # Para maiores detalhes ver arquivo sample-smtpd.cf smtpd_sender_restrictions = reject_unknown_sender_domain, reject_rhsbl_sender blackhole.securitysage.com, permit # Restringe o envio para determinados destinatarios. # Para maiores detalhes ver arquivo sample-smtpd.cf smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, permit ### CONFIGURACOES DE INSTALACAO # Caminho completo do comando "sendmail" do Postfix, para compatibilidade. sendmail_path = /usr/sbin/sendmail # Caminho completo do comando "newaliases" do Postfix. # Usado para compatibilidade com o Sendmail. newaliases_path = /usr/bin/newaliases # Caminho completo do comando "mailq" do Postfix. # Para compatibilidade com o Sendmail. mailq_path = /usr/bin/mailq # Grupo usado para submissao de e-mail e gerenciamento de filas. setgid_group = postdrop # Diretorio das man pages. manpage_directory = /usr/local/man # Diretorio dos exemplos de configuracao. sample_directory = /etc/postfix/sample # Diretorio dos arquivos README. readme_directory = no -------------------- Fim do arquivo main.cf -------------------Para que o Postfix seja inicializado no boot e terminado no shutdown de forma correta, devemos criar o script /usr/local/etc/rc.d/postfix.sh, conforme explicado anteriormente. O comando para inicializar dever ser: /usr/sbin/postfix start > /dev/null 2>&1 O comando para finalizar dever ser: /usr/sbin/postfix stop > /dev/null 2>&1 A rotao do arquivo de log do Postfix por padro feita pelo Newsyslog, j que o Postfix joga seus logs no arquivo /var/log/maillog. Caso deseje alterar, edite o arquivo /etc/newsyslog.conf e comente a linha que especifica o arquivo maillog. Crie ento um script para rotacionar este log, e insira uma linha no /etc/crontab para fazer a rotao na freqncia desejada.

3.2.2 - POP3 (Post Office Protocol version 3)


* Qpopper
O protocolo POP3 usado para permitir que um usurio faa o download de e-mails que esto em um servidor, sendo aps deletados do servidor ou no. O servidor ouve a porta TCP 110. Este protocolo definido atravs da RFC1939. O servidor que iremos instalar o Qpopper, fornecido pela Qualcomm. Seu site http://www.eudora.com/qpopper. Dever ser feito o download de sua ltima verso, que atualmente a 4.0.5 e encontra-se em ftp://ftp.qualcomm.com/eudora/servers/unix/popper/qpopper4.0.5.tar.gz. Descompacte o arquivo qpopper4.0.5.tar.gz no diretrio /tmp. Ser criada a pasta /tmp/qpopper4.0.5, acesse-a. Nesta pasta est o arquivo GUIDE.PDF, trata-se do Qpopper Administrator's Guide, interessante t-lo como referncia. Execute os seguintes comandos: # ./configure # make # make install Aps isso a pasta /tmp/qpopper4.0.5 pode ser apagada. O Qpopper instalado com o nome popper, em /usr/local/sbin/popper. Seu manual pode ser acessado atravs do comando "man popper". Para rodar o Qpopper atravs do Inetd, abra o arquivo /etc/inetd.conf e adicione a seguinte linha: pop3 stream tcp nowait root /usr/local/sbin/popper qpopper -s -R Aps isso, reinicie o servio inetd, atravs do comando "killall -HUP inetd". O log do Qpopper feito por padro no arquivo /var/log/messages. Pode-se agora testar o servidor, para isso utilize um cliente como por exemplo MS Outlook, Eudora, etc. Configure como servidor POP3 o endereo IP do seu servidor e faa alguns testes recebendo e-mails atravs de POP3. Verifique o arquivo de log, suas entradas possuem o seguinte formato: fulano 0 0 1 8748 192.168.0.30 192.168.0.30 Username: fulano Mensagens deletadas: 0 Bytes deletados: 0 Mensagens deixadas no servidor: 1 Bytes deixados no servidor: 8748 Hostname / IP do cliente: 192.168.0.30 IP do cliente: 192.168.0.30

3.2.3 - MUA (Mail User Agent)


* OpenWebmail Um Webmail um Mail User Agent, conhecido popularmente como "cliente de e-mail", com interface Web, o que possibilita que os usurios trabalhem com seus e-mails atravs de um navegador. O OpenWebmail foi desenvolvido na linguagem Perl, a partir o Neomail em sua verso 1.14. Sua principal caracterstica trabalhar com pastas de e-mails grandes com uma utilizao eficiente de memria. Alm disso, possui funcionalidades como Disco Web, Calendrio com agenda de compromissos etc. Sua pgina www.openwebmail.com. Para instalar o OpenWebmail necessrio que tenhamos um Servidor Web Apache com suporte a CGI e o Perl na verso 5.005 ou acima. Alm disso, sero necessrios vrios outros pacotes. O OpenWebmail necessita que o programa suidperl tenha o bit setuid habilitado, ento para evitar futuros problemas descomente a seguinte linha no arquivo /etc/defaults/make.conf: ENABLE_SUIDPERL= true Procedemos agora a instalao do Perl, atravs do Ports. V at o diretrio /usr/ports/lang/perl5 e digite "make install". Aps instalada esta verso do Perl, precisamos dizer ao sistema que queremos us-la ao invs da verso que vem instalada por padro (que neste caso a 5.005_03). Para isso, digite o seguinte comando: # /usr/local/bin/use.perl port Faa agora o download dos seguintes pacotes: http://search.cpan.org/CPAN/authors/id/L/LD/LDS/CGI.pm-3.03.tar.gz http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/MIME-Base64-3.00.tar.gz http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/libnet-1.17.tar.gz http://search.cpan.org/CPAN/authors/id/M/MP/MPIOTR/Text-Iconv-1.2.tar.gz

http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/Compress-Zlib-1.32.tar.gz Coloque-os no diretrio /usr/originais, ento execute os passos abaixo para instalar os mesmos: Instalao do CGI.pm-3.03: # # # # # # cd /tmp tar xzvf /usr/originais/CGI.pm-3.03.tar.gz cd CGI.pm-3.03/ perl Makefile.PL make make install

Instalao do MIME-Base64: # # # # # # cd /tmp tar xzvf /usr/originais/MIME-Base64-3.00.tar.gz cd MIME-Base64-3.00/ perl Makefile.PL make make install

Instalao do libnet: # cd /tmp # tar xzvf /usr/originais/libnet-1.17.tar.gz # cd libnet-1.17/ # perl Makefile.PL Nesta etapa, responda no quando questionado sobre atualizar (update). # make # make install Instalao do Text-Iconv-1.2: # cd /tmp # tar xzvf /usr/originais/Text-Iconv-1.2.tar.gz # cd Text-Iconv-1.2/ Edite o arquivo Makefile.PL e edite as linhas 'LIBS' => [''], # e.g., '-lm' e 'INC' => '', # e.g., '-I/usr/include/other' para ficarem como as seguintes: 'LIBS' => ['-L/usr/local/lib -liconv'], # e.g., '-lm' e 'INC' => '-I/usr/local/include', # e.g., '-I/usr/include/other' Aps isso, seguimos a seqncia de comandos: # perl Makefile.PL # make # make install Instalao do Compress-Zlib-1.32: # # # # # # cd /tmp tar xzvf /usr/originais/Compress-Zlib-1.32.tar.gz cd Compress-Zlib-1.32/ perl Makefile.PL make make install

Deve ser instalado tambm o "ispell", programa para correo ortogrfica. Faa a instalao do mesmo via Ports:

# # # # # # # #

cd /usr/ports/portuguese/ispell-pt_BR make install cd /usr/local/share/ispell mv br.aff Portugues.aff mv br.hash Portugues.hash mv english.aff Ingles.aff mv english.dict Ingles.dict mv english.hash Ingles.hash

Deve ser instalado ainda o "Zip", programa compactador. Instale tambm via Ports: # cd /usr/ports/archivers/zip # make install Terminada a instalao dos pacotes, delete os diretrios criados no /tmp durante as etapas anteriores. Ento faa o download da ltima verso do OpenWebmail. Atualmente a 2.30, e pode ser encontrada em http://openwebmail.com/openwebmail/download/openwebmail-2.30.tgz. Aps isso, execute os seguintes comandos: # cd /usr/local/apache2 # tar xvzBpf /usr/originais/openwebmail-2.30.tgz # mv data/openwebmail htdocs/ Preste ateno nas barras, importante neste comando. # rmdir data # chmod 600 htdocs/openwebmail/openwebmail.html Agora o OpenWebmail est instalado, o prximo passo configur-lo. O arquivo de configurao fica no diretrio /usr/local/apache2/cgi-bin/openwebmail/etc e chama-se openwebmail.conf. Este arquivo deve conter apenas as configuraes que forem diferentes das contidas em openwebmail.conf.default, que como o prprio nome diz o padro. interessante ler e ter como referncia o arquivo openwebmail.conf.help, o mesmo possui a descrio de cada opo. Segue abaixo o arquivo modelo para a configurao, copie-o no diretrio mencionado acima e altere o que for necessrio. Dever ser criado o diretrio /var/log/openwebmail: -------------------- Arquivo openwebmail.conf -------------------# openwebmail.conf name Webmail Exemplo domainnames servteste.exemplo.org ow_cgidir /usr/local/apache2/cgi-bin/openwebmail ow_htmldir /usr/local/apache2/htdocs/openwebmail logfile /var/log/openwebmail/openwebmail.log global_filterbook none g2b_map none b2g_map none lunar_map none spellcheck_dictionaries Portugues, Ingles enable_domainselectmenu no enable_changepwd no enable_about no xmailer_has_version no enable_loadfrombook no enable_editfrombook no enable_stationery no enable_sshterm no disallowed_pop3servers servteste, servteste.exemplo.org maxbooksize 128 webdisk_lshidden no webdisk_allow_symlinkcreate no webdisk_allow_symlinkout no webdisk_allow_thumbnail no

<page_footer> </page_footer> default_language pt_BR default_autoreplysubject Essa uma resposta automtica...[Re: $SUBJECT] <default_autoreplytext> Ol, Eu no estou lendo meus e-mails por enquanto. Seu e-mail sobre '$SUBJECT' ser lido quando eu voltar. </default_autoreplytext> <default_signature> </default_signature> default_iconset Cool3D default_bgurl %ow_htmlurl%/images/backgrounds/Envelope.gif default_dateformat dd/mm/yyyy default_msgsperpage 20 default_useminisearchicon no default_defaultdestination mail-trash default_smartdestination no default_usesmileicon no default_sendbuttonposition both default_replywithorigmsg at_end default_newmailsound None default_newmailwindowtime 0 default_dictionary Portugues default_abook_width 500 default_abook_height 400 default_calendar_starthour 0700 default_calendar_endhour 2300 default_calendar_reminderdays 2 default_webdisk_dirnumitems 20 -------------------- Fim do arquivo openwebmail.conf -------------------Aps salvar o arquivo de configurao execute o seguinte comando: # /usr/local/apache2/cgi-bin/openwebmail/openwebmail-tool.pl --init Teste o Webmail, acessando o endereo http://servidor/cgi-bin/openwebmail/openwebmail.pl, dever funcionar normalmente. Para que seja efetuada a busca de mensagens POP3 e a filtragem de mensagens (caso o usurio tenha habilitado algum destes recursos) e tambm a verificao dos ndices das pastas periodicamente, mesmo sem o usurio logar, adicionamos a seguinte linha ao arquivo /etc/crontab: 0 3 * * * root /usr/local/apache2/cgi-bin/openwebmail/openwebmail-tool.pl -q -a -p -i Isto far com que as tarefas sejam executadas todos os dias s 3 horas. Para que o servio de notificao via e-mail do calendrio funcione corretamente, adicione ainda a seguinte linha ao /etc/crontab: 0 */2 * * * root /usr/local/apache2/cgi-bin/openwebmail/openwebmail-tool.pl -q -a -n Normalmente se usa um endereo amigvel para o Webmail, como por exemplo http://servidor/mail. Para isso, crie o diretrio /usr/local/apache2/htdocs/mail e dentro dele um arquivo index.html, com o seguinte contedo: -------------------- Arquivo index.html -------------------<html> <head> <meta http-equiv="Refresh" content="0;URL=http://servidor/cgibin/openwebmail/openwebmail.pl">

</head> <body onload="window.open('http://servidor/cgibin/openwebmail/openwebmail.pl','_top')"> </body> </html> -------------------- Fim do arquivo index.html -------------------Crie ainda um script para fazer a rotao do log do OpenWebmail, que fica em /var/log/openwebmail/openwebmail.log. Dever ser criado o diretrio /var/log/openwebmail/oldlog. O script pode ficar em /usr/local/script/: -------------------- Arquivo rotate_log_openwebmail.sh -------------------#!/bin/sh # Define o nome para arquivamento OLD_LOG=/var/log/openwebmail/oldlog/openwebmail.log.`date +%y%m%d-%H%M%S` # move o arquivo para o diretorio de arquivamento mv /var/log/openwebmail/openwebmail.log `echo $OLD_LOG` # compacta o arquivado /usr/bin/gzip $OLD_LOG # apaga os logs com mais de um ano find /var/log/openwebmail/oldlog -mtime +365 -exec rm -f {} \; -------------------- Fim do arquivo rotate_log_openwebmail.sh -------------------Edite o arquivo /etc/crontab e adicione as seguinte linha, para executar o script a cada ms: 0 0 1 * * root /usr/local/script/rotate_log_openwebmail.sh

3.2.4 - Proteo contra Vrus no Postfix


* AMaViS (A Mail Virus Scanner) + ClamAV (Clam AntiVirus)
O AMaViS uma ferramenta utilizada para fazer a integrao entre o MTA e o Antivrus. O AMaViS por si s no um antivrus, ele faz esta interface, chamando o antivrus, previamente configurado, para fazer a varredura dos e-mails que chegam ao servidor. Outro recurso que pode ser utilizado o bloqueio de mensagens com arquivos anexos de extenso .exe, .com etc. A verso que iremos instalar o amavisd-new, que desenvolvido em Perl. Seu site http://www.ijs.si/software/amavisd. O antivrus que ser utilizado o ClamAV - Clam AntiVirus. escrito na linguagem C, e possui licensa GPL. O ClamAV no limpa os arquivos infectados, apenas detecta. Seu site www.clamav.net. * Instalao do ClamAV Iremos instalar primeiramente o ClamAV. Para isso, adicione um grupo e um usurio chamados clamav, da seguintes forma: # pw group add clamav -g 130 # pw user add clamav -c "Clam AntiVirus" -d "/nonexistent" -s "/sbin/nologin" -u 130 -g 130 Efetue o download da ltima verso estvel a partir de seu site. Atualmente a 0.65, disponvel em http://unc.dl.sourceforge.net/sourceforge/clamav/clamav-0.65.tar.gz. Descompacte este arquivo no diretrio /tmp, ser criado o diretrio clamav-0.65, acesse-o. Digite os seguintes comandos: # ./configure # make # make install Os executveis sero instalados em /usr/local/bin e /usr/local/sbin, e o arquivo de configurao fica em /usr/local/etc/clamav.conf. Crie ainda o diretrio /var/clamav, com dono clamav e permisso 700, e tambm o diretrio /var/log/clamav. Copie o arquivo de configurao abaixo para /usr/local/etc/clamav.conf. Para maiores detalhes, consulte "man clamav.conf". -------------------- Arquivo clamav.conf -------------------# clamav.conf # Arquivo de log. LogFile /var/log/clamav/clamd.log # Para permitir multiplas instancias com o mesmo arquivo de log

# descomente a linha abaixo. #LogFileUnlock # Tamanho maximo em bytes do arquivo de log. O valor 0 eh ilimitado. LogFileMaxSize 0 # Coloca data e hora em cada linha do log. LogTime # Usar o Syslog. #LogSyslog # Aumenta o detalhamento do log. #LogVerbose # Caso desejado salvar o PID em arquivo. #PidFile /var/run/clamd.pid # Diretorio contendo arquivos .db. DataDirectory /usr/local/share/clamav # Caminho para o socket local. LocalSocket /var/clamav/clamd # Remove sockets travados. FixStaleSocket # Porta TCP. #TCPSocket 3310 # Endereco IP. A linha abaixo fornece alguma protecao, ja # que iremos trabalhar apenas localmente. TCPAddr 127.0.0.1 # Tamanho maximo da fila de conexoes pendentes. #MaxConnectionQueueLength 30 # Stream de entrada sera salvo no disco antes de ser scanneado. #StreamSaveToDisk # Limite de tamanho do STREAM. Se excedido fecha a conexao. #StreamMaxLength 10M # Numero maximo de threads simultaneas. O padrao eh 5. MaxThreads 20 # Tempo maximo em segs para cada thread. O padrao eh 180. #ThreadTimeout 500 # Profundidade maxima de varredura de diretorios. MaxDirectoryRecursion 50 # Segue links simbolicos de diretorios. #FollowDirectorySymlinks # Segue links simbolicos de arquivos. #FollowFileSymlinks # Intervalo em segs entre cada verificacao da integridade interna. # O padrao eh 3600. #SelfCheck 600 # Comando executado quando um virus eh encontrado. # Nao deve ser usado para deletar ou mover arquivos. # %v = nome do virus / %f = nome do arquivo #VirusEvent /usr/local/bin/send_sms 123456789 "VIRUS ALERT: %f: %v" # Usuario sob o qual ira rodar. User clamav # Habilita grupos adicionais se o usuario clamav participar de algum. #AllowSupplementaryGroups # Nao roda em background. Util para debug.

#Foreground # Habilita mensagens de debug. #Debug # Descomentar a linha abaixo se for varrer arquivos de e-mail. #ScanMail # Comentar a linha abaixo para desabilitar a varredura de arquivos. ScanArchive # Suporte a arquivos compactados RAR. #ScanRAR # Tamanho maximo de arquivo scanneado. O valor 0 eh ilimitado. ArchiveMaxFileSize 50M # Recursao maxima em arquivos compactados (um dentro do outro). ArchiveMaxRecursion 10 # Numero maximo de arquivos dentro de algum compactado. ArchiveMaxFiles 1000 # Limita a memoria para descompressao bzip2. #ArchiveLimitMemoryUsage -------------------- Fim do arquivo clamav.conf -------------------Aps isso, teste o ClamAV atravs do scanner de linha de comando, executando o seguinte: # clamascan -r /usr/originais/clamav-0.65.tar.gz Dever aparecer a seguinte linha: /usr/originais/clamav-0.65.tar.gz: ClamAV-Test-Signature FOUND Aps isso, devemos configurar o sistema de atualizao automtica. Prepare o arquivo de log da atualizao, atravs dos seguintes comandos: # touch /var/log/clamav/clam-update.log # chown clamav /var/log/clamav/clam-update.log # chmod 600 /var/log/clamav/clam-update.log Adicione a seguinte linha ao arquivo /etc/crontab: 0 */4 * * * root /usr/local/bin/freshclam --quiet -l /var/log/clamav/clamupdate.log Isto far com que o ClamAV seja atualizado a cada quatro horas, de acordo com a documentao do mesmo este o perodo mnimo sugerido. * Instalao do AMaViS Passamos agora instalao do AMaViS. A maneira mais fcil de fazer essa instalao atravs do Ports, j que o AMaVIS exige muitos outros pacotes, como por exemplo Archive::Tar, Archive::Zip, Compress::Zlib, Convert::TNEF, Convert::UUlib, MIME::Base64, MIME::Parser, Mail::Internet, Net::Server, Net::SMTP, Digest::MD5, IO::Stringy, Time::HiRes, Unix::Syslog, file, compress, gzip, bzip2, nomarch, arc, lha, unarj, arj, rar, unrar, zoo, cpio, lzop e freeze. Adicione o usurio e grupo vscan, de acordo com o abaixo: # pw group add vscan -g 140 # pw user add vscan -c "AMaViS" -d "/var/amavis" -s "/bin/sh" -u 140 -g 140 V at o diretrio /usr/ports/security/amavisd-new e digite "make install". Todos os pacotes necessrios sero baixados e instalados. V at o diretrio /usr/local/etc e mova o arquivo amavisd.conf-dist para amavisd.conf, e aplique a permisso 600. Edite este arquivo, observe atentamente os comentrios, e faa as alteraes indicadas abaixo: Edite a linha $mydomain = 'example.com'; e substitua "example.org" pelo hostname do seu servidor, como $mydomain = 'servteste.exemplo.org';

Descomente as seguintes linhas: ['Clam Antivirus-clamd', \&ask_daemon, ["CONTSCAN {}\n", '/var/amavis/clamd'], qr/\bOK$/, qr/\bFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ], $warnvirussender = 1; $warnbannedsender = 1; qr'.\.(ade|adp|bas|bat|chm|cmd|com|cpl|crt|exe|hlp|hta|inf|ins|isp|js| jse|lnk|mdb|mde|msc|msi|msp|mst|pcd|pif|reg|scr|sct|shs|shb|vb| vbe|vbs|wsc|wsf|wsh)$'ix, Comente as seguintes linhas: $DO_SYSLOG = 1; $X_HEADER_TAG = 'X-Virus-Scanned'; Insira a seguinte linha, no local apropriado: $hdrfrom_notify_sender = 'AntiVirus <virusalert@servteste.exemplo.org>'; * Ajustes Agora deve-se fazer novamente uma configurao no ClamAV. Edite o arquivo /usr/local/etc/clamav.conf e troque as seguintes linhas, nos seus respectivos locais: LocalSocket /var/clamav/clamd User clamav para LocalSocket /var/amavis/clamd User vscan O usurio e o grupo clamav podem ser removidos agora, se desejado, assim como o diretrio /var/clamav. Crie um alias no arquivo /etc/aliases para o e-mail virusalert, direcionando-o para onde quiser. Neste endereo viro os avisos de mensagens com vrus ou anexos no permitidos que o servidor bloqueou: virusalert: root Para que a integrao com o MTA seja feita, edite o arquivo /etc/postfix/master.cf e adicione as seguintes linhas: smtp-amavis unix - - y - 2 smtp -o smtp_data_done_timeout=1200s -o smtp_never_send_ehlo=yes -o disable_dns_lookups=yes 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o smtpd_helo_restrictions= -o smtpd_client_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 Salve o arquivo e ento edite o main.cf e adicione a seguinte linha: content_filter = smtp-amavis:[127.0.0.1]:10024 Aps isso, inicialize os daemons do ClamAV e do AMaViS e reinicialize o Postfix: # /usr/local/sbin/clamd # /usr/local/sbin/amavisd # postfix reload A seqncia de inicializao dever ser preferencialmente esta, visto que o Postfix depender do AMaViS, e este do

ClamAV, para fazer a verredura dos e-mails. Verifique os arquivos de log, para ver se todos os daemons esto funcionando corretamente. O arquivo de log do AMaViS fica em /var/amavis/amavisd.log. Teste o envio de e-mails normais e tambm veja se esto sendo barrados e-mails infectados, enviando como anexo o arquivo eicar.com (http://www.eicar.org/download/eicar.com) que um padro para testes de antivrus. Teste tambm enviando este arquivo compactado etc. Os seguintes arquivos so instalados por padro e no sero necessrios, podem ser removidos: /usr/local/etc/rc.subr /usr/local/etc/rc.d/amavis-milter.sh /usr/local/etc/rc.d/amavisd.sh /usr/local/etc/rc.d/spamd.sh-dist Crie um script de inicializao e shutdown do ClamAV, em /usr/local/etc/rc.d/10.clamd.sh. Os comandos para inicializao e shutdown devem ser, respectivamente: /usr/local/sbin/clamd e killall clamd Crie tambm um script de inicializao para o AMaViS, com o nome 20.amavisd.sh e com os seguintes comandos, para inicializao e shutdown respectivamente: /usr/local/sbin/amavisd start e /usr/local/sbin/amavisd stop Os nomes iniciando em 10 e 20 iro garantir que a inicializao do ClamAV seja feita antes da inicializao do AMaViS, evitando problemas. Segue abaixo um script para rotacionar os logs do ClamAV, coloque-o em /usr/local/script/rotate_log_clamav.sh. Crie tambm o diretrio /var/log/clamav/oldlog: -------------------- Arquivo rotate_log_clamav.sh -------------------#!/bin/sh # finaliza o clamd killall clamd # Define os nomes para arquivamento OLD_CLAMD_LOG=/var/log/clamav/oldlog/clamd.log.`date +%y%m%d-%H%M%S` OLD_UPDATE_LOG=/var/log/clamav/oldlog/clam-update.log.`date +%y%m%d-%H%M%S` # move os arquivos para o diretorio de arquivamento mv /var/log/clamav/clamd.log `echo $OLD_CLAMD_LOG` mv /var/log/clamav/clam-update.log `echo $OLD_UPDATE_LOG` # cria novamente o arquivo de log do update touch /var/log/clamav/clam-update.log chown clamav /var/log/clamav/clam-update.log chmod 600 /var/log/clamav/clam-update.log # inicializa o clamd /usr/local/sbin/clamd # compacta os arquivados /usr/bin/gzip $OLD_CLAMD_LOG /usr/bin/gzip $OLD_UPDATE_LOG # apaga os logs com mais de um ano find /var/log/clamav/oldlog -mtime +365 -exec rm -f {} \; -------------------- Fim do arquivo rotate_log_clamav.sh -------------------Edite o arquivo /etc/crontab e adicione a seguinte linha: 20 0 1 * * root /usr/local/script/rotate_log_clamav.sh Isto far com que os logs sejam rotacionados 0h20min do primeiro dia de cada ms.

Crie ainda um script para fazer o rotate do log do AMaViS: -------------------- Arquivo rotate_log_amavis.sh -------------------#!/bin/sh # finaliza o postfix e o amavis /usr/sbin/postfix stop /usr/local/sbin/amavisd stop # Define o nome para arquivamento OLD_LOG=/var/amavis/oldlog/amavis.log.`date +%y%m%d-%H%M%S` # move o arquivo para o diretorio de arquivamento mv /var/amavis/amavis.log `echo $OLD_LOG` # inicializa o amavis e o postfix /usr/local/sbin/amavisd start /usr/sbin/postfix start # compacta o arquivado /usr/bin/gzip $OLD_LOG # apaga os logs com mais de um ano find /var/amavis/oldlog -mtime +365 -exec rm -f {} \; -------------------- Fim do arquivo rotate_log_amavis.sh -------------------No esquea de criar o diretrio /var/amavis/oldlog. Por fim, edite o arquivo /etc/crontab e adicione a seguinte linha: 20 0 1 * * root /usr/local/script/rotate_log_amavis.sh

3.2.5 - Gerenciador de Listas


* Mailman
O Mailman um gerenciador de listas de discusso ou distribuio de e-mail. desenvolvido na sua maior parte em Python. Uma das suas principais caractersticas a interface Web, que facilita a administrao das listas e a utilizao por parte dos usurios. Seu site www.list.org. Entre alguns dos seus muitos usurios esto Apple Computer, Dell Computers, The XFree86 Project, SourceForge.net, Massachusetts Institute of Technology, RedHat, Samba, KDE Project, Python.Org, Zope.org e GNOME.Org - uma lista mais completa se encontra em http://www.list.org/inthenews.html. Antes do Mailman, iremos instalar o Python. Efetue o download da ltima verso estvel, ou "production version", a partir do site do Python (www.python.org). A verso atual 2.3.3, e se encontra em http://www.python.org/ftp/python/2.3.3/Python-2.3.3.tgz. Descompacte e extraia o arquivo em /tmp e acesse o diretrio que ser criado - Python-2.3.3. Digite os comandos abaixo: # ./configure # make # make install Faa o download da ltima verso do Mailman a partir do seu site ou algum mirror, ou a partir de http://ftp.gnu.org/gnu/mailman. A verso atual 2.1.4, e o arquivo chama-se mailman-2.1.4.tgz. Crie o usurio e o grupo mailman, da seguinte forma: # pw group add mailman -g 150 # pw user add mailman -c "Mailman" -d "/usr/local/mailman" -s "/bin/sh" -u 150 -g 150 O Mailman exige que se crie antecipadamente o diretrio no qual ir instalar seus arquivos. Para isso, execute os seguintes comandos: # mkdir /usr/local/mailman # chgrp mailman /usr/local/mailman # chmod 2775 /usr/local/mailman V at o diretrio /tmp e copie para l o arquivo mailman-2.1.4.tgz. A instalao ser feita pelo usurio mailman, para isso execute os seguintes comandos: # $ $ $ su mailman cd /tmp tar xvzf mailman-2.1.4.tgz cd mailman-2.1.4

$ ./configure $ make $ make install Aps a instalao, continue com o usurio mailman. V at o diretrio /usr/local/mailman e rode o comando abaixo, que ir ajustar as permisses que estiverem incorretas: $ bin/check_perms -f Aps isso, rode novamente o comando sem o parmetro "-f", para verificar se as permisses esto certas. Como o Mailman possui uma interface Web, necessrio que seja feita uma integrao com o servidor Web, que o Apache. Para isso, volte ao usurio root (digitando exit), edite o arquivo de configurao do Apache (/usr/local/apache2/conf/httpd.conf) e adicione as seguintes linhas, nos locais apropriados: ScriptAlias /mailman/ "/usr/local/mailman/cgi-bin/" Alias /pipermail/ "/usr/local/mailman/archives/public/" Aps estas modificaes, reinicie o Apache, atravs do comando "/usr/local/apache2/bin/apachectl restart". Devem ser ainda copiados os cones e logotipos do Mailman para o diretrio do Apache que guarda este tipo de arquivo: # cp /usr/local/mailman/icons/* /usr/local/apache2/icons/ Alm do Apache, deve-se configurar tambm o Postfix. Edite o arquivo /etc/postfix/main.cf e adicione as linhas abaixo: owner_request_special = no recipient_delimiter = + No mesmo arquivo, troque a linha alias_maps = hash:/etc/aliases por alias_maps = hash:/etc/aliases, hash:/usr/local/mailman/data/aliases Feito isso, reinicie o Postfix, atravs do comando "/usr/sbin/postfix reload". Precisamos ainda que o Mailman saiba qual MTA estamos usando. Para isso, edite o arquivo /usr/local/mailman/Mailman/mm_cfg.py e adicione, no final, a seguinte linha: MTA = 'Postfix' Para que os arquivos de aliases do Mailman sejam inicializados e seus donos corrigidos, execute os seguintes comandos: # cd /usr/local/mailman # bin/genaliases # chown mailman:mailman data/aliases* Dever ser adicionada e configurada uma lista inicial, para tarefas administrativas do Mailman. Para isso, v at o diretrio /usr/local/mailman e execute os seguintes comandos: # su mailman $ bin/newlist mailman Surgiro as seguintes questes: Enter the email of the person running the list: entre o seu endereo de e-mail, ou algum utilizado para administrao do servidor. Initial mailman password: insira uma senha para administrao da lista. $ bin/config_list -i data/sitelist.cfg mailman Este comando far com que seja atribuda a esta lista uma configurao inicial padro (para este tipo de lista, e esta provavelmente ser a nica deste tipo). Neste ponto, a interface de gerenciamento via web do Mailman dever estar funcionando. Precisamos adicionar um usurio lista de nome mailman recm criada. Acesse o endereo http://servidor/mailman/admin/mailman, e entre com a senha configurada anteriormente. Clique em "Membership Management" e ento em "Mass Subscription". Na caixa de texto aps a frase "Enter one address per line below..." insira o endereo de e-mail que foi configurado anteriormente, no momento de criao da lista. Para finalizar, clique no boto "Submit Your Changes". O Mailman necessita que vrios processos sejam agendados no Cron. Para isso, execute os seguintes comandos: # su mailman $ cd /usr/local/mailman/cron $ crontab crontab.in

Isto far com que seja criado o arquivo /var/cron/tabs/mailman, que a tabela de cron do Mailman. Agora pode-se inicializar o daemon do Mailman, execute os comandos abaixo: # su mailman $ cd /usr/local/mailman $ bin/mailmanctl start Deve ser criada a senha geral de administrao do Mailman. Ela ser usada para adicionar listas e outras tarefas, e tambm pode ser usada no lugar das senhas individuais das listas. Execute o comando abaixo e insira a senha quando solicitado: # /usr/local/mailman/bin/mmsitepass No ser preciso criar um script de inicializao para o Mailman, apenas copie o arquivo /usr/local/mailman/scripts/mailman para /usr/local/etc/rc.d/mailman.sh, e altere sua permisso para 700. Com isso, o Mailman est instalado, configurado e funcionando. Navegue pela interface web, mude o idioma das listas para Portugus e faa vrios testes para conhecer bem o sistema antes de colocar alguma lista em produo.

3.3 - Servios Web


3.3.1 - Servidor Web
* Apache HTTP Server O Apache HTTP Server um projeto da Apache Software Foundation (www.apache.org). Dispensa maiores apresentaes, visto que o servidor Web mais utilizado na Internet desde abril de 1996. Em outubro de 2003 mais de 64% dos servidores Web da Internet utilizavam o Apache. Faa o download da ltima verso estvel disponvel, atualmente a 2.0.48. O download pode ser feito a partir da pgina http://httpd.apache.org/download.cgi ou diretamente a partir de um mirror como http://apache.usp.br/httpd. Descompacte o arquivo httpd-2.0.48.tar.gz em /tmp e acesse o diretrio que ser criado, /tmp/httpd-2.0.48. Digite os seguintes comandos: # ./configure # make # make install O servidor ser instalado em /usr/local/apache2. O arquivo de configurao fica em /usr/local/apache2/conf/httpd.conf. Na instalao do Apache j instalado um arquivo padro, bastante comentado, sendo por isso recomendada a sua leitura. Podemos testar o servidor com este arquivo, para isso inicialize o Apache, com o seguinte comando: # /usr/local/apache2/bin/apachectl start A partir de um browser acesse o endereo http://ip_do_servidor. Dever aparecer uma pgina teste, indicando que a instalao ocorreu com sucesso. Mesmo assim, o arquivo httpd.conf deve sofrer algumas modificaes. Segue abaixo um modelo do arquivo, que pode ser tomado como base para a configurao. Neste arquivo foram omitidas algumas configuraes, como por exemplo de VirtualHosts e SSL. Este arquivo deve ser colocado no diretrio /usr/local/apache2/conf: -------------------- Arquivo httpd.conf -------------------# httpd.conf ### Secao 1: Contexto Global # # Diretorio sob o qual esta instalado o servidor # ServerRoot "/usr/local/apache2" # PidFile: arquivo no qual o servidor guarda o seu PID quando inicializado # PidFile logs/httpd.pid # # Timeout: tempo maximo em segundos para receives e sends # Timeout 300 #

# KeepAlive: permitir ou nao conexoes persistentes (mais de uma requisicao por conexao) # KeepAlive On # # MaxKeepAliveRequests: numero maximo de requisicoes durante uma conexao persistente # MaxKeepAliveRequests 100 # # KeepAliveTimeout: tempo de espera por uma nova requisicao da mesma conexao # KeepAliveTimeout 15 ## ## Ajuste de Tamanho do Server-Pool ## # prefork MPM # StartServers: numero de processos servidores inicializados # MinSpareServers: minimo de processos servidores separados # MaxSpareServers: maximo de processos servidores separados # MaxClients: numero maximo de processos servidores permitidos (maximo de clientes) # MaxRequestsPerChild: numero maximo de requisicoes que um processo servidor atende #(0=ilimitado) <IfModule prefork.c> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> # # Listen: endereo IP e porta na qual o servidor deve esperar requisicoes # Caso um IP nao seja especificado ira ouvir em todas as interfaces # #Listen 12.34.56.78:80 Listen 80 ### Section 2: Configuracao do servidor 'principal' # # The directives in this section set up the values used by the 'main' # server, which responds to any requests that aren't handled by a # <VirtualHost> definition. These values also provide defaults for # any <VirtualHost> containers you may define later in the file. # # All of these directives may appear inside <VirtualHost> containers, # in which case these default settings will be overridden for the # virtual host being defined. # # # Usuario e grupo sob os quais o servidor ira rodar # #User nobody #Group #-1 User www Group www # # ServerAdmin: endereco de e-mail do administrador do servidor # Aparece em alguns documentos gerados pelo servidor, como paginas de erro #

#ServerAdmin you@example.com ServerAdmin webmaster@servteste.exemplo.org # # ServerName: endereco e porta que identificam o servidor # Caso nao houver um nome valido no DNS, deve-se especificar o IP # #ServerName www.example.com:80 ServerName 192.168.0.10:80 # # UseCanonicalName: determina como o Apache se auto-referencia # Se setado em Off, ser utilizado o hostname e porta fornecido pelo cliente # Se setado em On, ser utilizado o valor da diretiva ServerName # UseCanonicalName Off # # DocumentRoot: diretrio raiz dos documentos publicados # DocumentRoot "/usr/local/apache2/htdocs" # # Cada diretorio ao qual o Apache tem acesso pode ser configurado em relacao # a quais servicos e caracteristicas sao permitidos ou proibidos neste # diretorio (e seus subdiretorios) # # Primeiramente, sera configurado o "default", bem restrito # <Directory /> Options FollowSymLinks AllowOverride None </Directory> # # Deste ponto em diante serao habilitadas caracteristicas especificas a cada contexto # # # Ajustar de acordo com o DocumentRoot # <Directory "/usr/local/apache2/htdocs"> # Os valores possiveis para a diretiva Options sao "None", "All", # ou qualquer combinacao de: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # A opcao "MultiViews" nao esta inclusa em "All" # # Maiores informacoes em http://httpd.apache.org/docs2.0/mod/core.html#options # Options Indexes FollowSymLinks # AllowOverride controla que diretivas podem ser colocadas em arquivos .htaccess # Pode ser "All", "None", ou qualquer combinacao de: # Options FileInfo AuthConfig Limit # AllowOverride AuthConfig # # Controla quem poder acessar. # Order allow,deny # #

Allow from all </Directory> # # UserDir: nome do diretorio que sera procurado (dentro do diretorio # home) no caso de uma requisicao /~user # UserDir public_html # # Controle de acesso para diretorios UserDir. # <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS PROPFIND> Order deny,allow Deny from all </LimitExcept> </Directory> # # DirectoryIndex: define qual arquivo sera oferecido quando for requisitado # um diretorio # DirectoryIndex index.html index.html.var index.htm # # AccessFileName: arquivo que sera verificado em cada diretorio em busca # de diretivas de configuracao adicionais (permitidas pelo AllowOverride) # AccessFileName .htaccess # # As seguintes linhas proibem os arquivos .htaccess e .htpasswd de serem # visualizados # <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> # # TypesConfig: define onde fica o arquivo mime.types # TypesConfig conf/mime.types # # DefaultType: tipo MIME default utilizado # DefaultType text/plain # # Onde fica o arquivo magic # <IfModule mod_mime_magic.c> MIMEMagicFile conf/magic </IfModule> # # HostnameLookups: logar os hostnames dos clientes (On) # ou apenas os enderecos IP (Off) #

HostnameLookups Off # # ErrorLog: onde fica o arquivo de log de erros # ErrorLog logs/error_log # # LogLevel: controla o nivel do log de erro. Os valores podem ser: # debug, info, notice, warn, error, crit, alert, emerg. # LogLevel warn # # As diretivas abaixo definem alguns formatos de log # LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent # # Arquivo de log unico, com access, agent e referer # (Combined Logfile Format) # CustomLog logs/access_log combined # # ServerTokens: configura qual o nivel de informacoes sobre o servidor # eh passado no cabecalho 'Server HTTP response' # Valores possiveis: Full | OS | Minor | Minimal | Major | Prod # Full (default) apresenta mais informacoes, e Prod menos # ServerTokens Prod # # ServerSignature: apresenta ou nao informacoes sobre a versao do servidor # em documentos gerados dinamicamente, como paginas de erro. As opcoes sao # On (informa a versao), Off (nao informa) e EMail (informa a versao e um # link para o endereco de e-mail do ServerAdmin) # ServerSignature Off # # Aliases: adicionar aqui quantos aliases for necessario. O formato eh # Alias atalho caminhoreal # Alias /icons/ "/usr/local/apache2/icons/" # # Configuracoes do diretorio icons # <Directory "/usr/local/apache2/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> # # Alias para o manual do Apache (pode ser removido se documentacao nao # for necessaria) # AliasMatch ^/manual(?:/(?:de|en|fr|ja|ko|ru))?(/.*)?$ "/usr/local/apache2/manual$1" #

# Configuracoes do diretorio do manual # <Directory "/usr/local/apache2/manual"> Options Indexes AllowOverride None Order allow,deny Allow from all <Files *.html> SetHandler type-map </Files> SetEnvIf Request_URI ^/manual/de/ prefer-language=de SetEnvIf Request_URI ^/manual/en/ prefer-language=en SetEnvIf Request_URI ^/manual/fr/ prefer-language=fr SetEnvIf Request_URI ^/manual/ja/ prefer-language=ja SetEnvIf Request_URI ^/manual/ko/ prefer-language=ko SetEnvIf Request_URI ^/manual/ru/ prefer-language=ru RedirectMatch 301 ^/manual(?:/(de|en|fr|ja|ko|ru)){2,}(/.*)?$ /manual/$1$2 </Directory> # # ScriptAlias: controla quais diretorios contem scripts server-side # ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" # # Configuracoes do diretorio cgi-bin # <Directory "/usr/local/apache2/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> # # # # # # Redirect: permite indicar aos clientes o novo endereco de documentos que nao estao mais neste servidor Exemplo: Redirect permanent /foo http://www.example.com/bar

# # IndexOptions: controla a aparencia das listagens de diretorios geradas pelo # servidor # IndexOptions FancyIndexing VersionSort # # AddIcon*: estas diretivas informam os icones adequados a cada tipo de arquivo # So funcionam com a opcao FancyIndexing ativada # AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip AddIconByType AddIconByType AddIconByType AddIconByType AddIcon AddIcon AddIcon AddIcon AddIcon AddIcon AddIcon AddIcon (TXT,/icons/text.gif) text/* (IMG,/icons/image2.gif) image/* (SND,/icons/sound2.gif) audio/* (VID,/icons/movie.gif) video/*

/icons/binary.gif .bin .exe /icons/binhex.gif .hqx /icons/tar.gif .tar /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv /icons/compressed.gif .Z .z .tgz .gz .zip /icons/a.gif .ps .ai .eps /icons/layout.gif .html .shtml .htm .pdf /icons/text.gif .txt

AddIcon AddIcon AddIcon AddIcon AddIcon AddIcon AddIcon AddIcon AddIcon AddIcon AddIcon AddIcon

/icons/c.gif .c /icons/p.gif .pl .py /icons/f.gif .for /icons/dvi.gif .dvi /icons/uuencoded.gif .uu /icons/script.gif .conf .sh .shar .csh .ksh .tcl /icons/tex.gif .tex /icons/bomb.gif core /icons/back.gif .. /icons/hand.right.gif README /icons/folder.gif ^^DIRECTORY^^ /icons/blank.gif ^^BLANKICON^^

# # DefaultIcon: icone padrao para arquivos desconhecidos nas listagens # DefaultIcon /icons/unknown.gif # # AddDescription: permite que seja colocada uma descricao para os tipos # de arquivos nas listagens # Exemplos: # #AddDescription "GZIP compressed document" .gz #AddDescription "tar archive" .tar #AddDescription "GZIP compressed tar archive" .tgz # # ReadmeName: arquivos README padrao, que sera colocado apos a listagem # HeaderName: arquivo HEADER padrao, que sera colocado antes da listagem # ReadmeName README.html HeaderName HEADER.html # # IndexIgnore: conjunto de arquivos que nao devem ser incluidos nas listagens # IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t # # AddLanguage: relacao entre os idiomas usados nas negociacoes de conteudo e as # extensoes # AddLanguage ca .ca AddLanguage cs .cz .cs AddLanguage da .dk AddLanguage de .de AddLanguage el .el AddLanguage en .en AddLanguage eo .eo AddLanguage es .es AddLanguage et .et AddLanguage fr .fr AddLanguage he .he AddLanguage hr .hr AddLanguage it .it AddLanguage ja .ja AddLanguage ko .ko AddLanguage ltz .ltz AddLanguage nl .nl AddLanguage nn .nn AddLanguage no .no AddLanguage pl .po AddLanguage pt .pt AddLanguage pt-BR .pt-br AddLanguage ru .ru

AddLanguage sv .sv AddLanguage zh-CN .zh-cn AddLanguage zh-TW .zh-tw # # LanguagePriority: prioridade de idioma caso ocorra algum problema # na negociacao de conteudo # LanguagePriority pt-BR en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt ru sv zh-CN zh-TW # # ForceLanguagePriority: prioridade na negociacao de conteudo caso # nao haja o conteudo adequado # ForceLanguagePriority Prefer Fallback # # AddDefaultCharset: charset padro para as paginas servidas # #AddDefaultCharset ISO-8859-1 AddDefaultCharset off # # AddCharset: relacao entre extensoes de arquivo e charsets # AddCharset ISO-8859-1 .iso8859-1 .latin1 AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen AddCharset ISO-8859-3 .iso8859-3 .latin3 AddCharset ISO-8859-4 .iso8859-4 .latin4 AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk AddCharset ISO-2022-JP .iso2022-jp .jis AddCharset ISO-2022-KR .iso2022-kr .kis AddCharset ISO-2022-CN .iso2022-cn .cis AddCharset Big5 .Big5 .big5 # Para russo, mais de um charset eh utilizado: AddCharset WINDOWS-1251 .cp-1251 .win-1251 AddCharset CP866 .cp866 AddCharset KOI8-r .koi8-r .koi8-ru AddCharset KOI8-ru .koi8-uk .ua AddCharset ISO-10646-UCS-2 .ucs2 AddCharset ISO-10646-UCS-4 .ucs4 AddCharset UTF-8 .utf8 # AddCharset GB2312 .gb2312 .gb AddCharset utf-7 .utf7 AddCharset utf-8 .utf8 AddCharset big5 .big5 .b5 AddCharset EUC-TW .euc-tw AddCharset EUC-JP .euc-jp AddCharset EUC-KR .euc-kr AddCharset shift_jis .sjis # # AddType: permite adicionar tipos MIME akem do arquivo mime.types # #AddType application/x-tar .tgz # # AddEncoding: permite que certos browsers descompactem arquivos # 'on the fly' # #AddEncoding x-compress .Z

#AddEncoding x-gzip .gz .tgz # # Se as diretivas AddEncoding acima estiverem comentadas, devem # ser indicados os tipos de arquivos: # AddType application/x-compress .Z AddType application/x-gzip .gz .tgz # # Para 'type maps' (negociacoes de conteudo): # AddHandler type-map var # # Mensagens de erro podem ser personalizadas de tres formas: # 1) texto 2) redirecionamento local 3) redirecionamento externo # # Exemplos: #ErrorDocument 500 "Ocorreu um problema com o servidor." #ErrorDocument 404 /missing.html #ErrorDocument 404 "/cgi-bin/missing_handler.pl" #ErrorDocument 402 http://www.example.com/subscription_info.html # # # Diretivas para modificar as respostas HTTP normais devido a erros # conhecidos em alguns browsers # BrowserMatch "Mozilla/2" nokeepalive BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 BrowserMatch "RealPlayer 4\.0" force-response-1.0 BrowserMatch "Java/1\.0" force-response-1.0 BrowserMatch "JDK/1\.0" force-response-1.0 # # As diretivas a seguir desativam redirecionamentos em requisicoes nao-GET # para um diretorio que nao contenha a barra final, para contornar # erros em alguns clientes # BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirectcarefully BrowserMatch "^WebDrive" redirect-carefully BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully BrowserMatch "^gnome-vfs" redirect-carefully # # Permite relatorios de status do servidor # Deve-se configurar o dominio em .example.com # Acessar http://servidor/server-status # #<Location /server-status> # SetHandler server-status # Order deny,allow # Deny from all # Allow from example.com #</Location> -------------------- Fim do arquivo httpd.conf -------------------Feito isso, salve o arquivo httpd.conf e reinicie o Apache, atravs do seguinte comando: # /usr/local/apache2/bin/apachectl restart Dever funcionar normalmente. Junto com a instalao do servidor, temos a documentao, que pode ser acessada no endereo http://ip_do_servidor/manual. bom t-la como referncia para qualquer dvida ou problema. Os arquivos que vm por padro no diretrio /usr/local/apache2/htdocs podem ser removidos, e deve ser colocado neste diretrio o contedo a ser publicado no raiz do servidor, ou seja, acessvel atravs de http://servidor. Os usurios tambm podem publicar suas pginas, criando a pasta public_html em seus diretrios home e dando permisso de leitura e execuo

para todos. Faa agora o script de incializao do Apache, em /usr/local/etc/rc.d/httpd.sh. Os comandos para inicializar e finalizar so, respectivamente: /usr/local/apache2/bin/apachectl start e /usr/local/apache2/bin/apachectl stop O arquivo de log de acessos ao servidor fica em /usr/local/apache2/logs/access_log. O arquivo de log de erros /usr/local/apache2/error_log, verifique-o para saber se est ocorrendo algum problema. H uma caracterstica til no servidor Web que a restrio de acesso, via senha, a determinadas pginas. Uma forma de fazer isso criar no diretrio a ser protegido um arquivo chamado .htaccess, como no exemplo abaixo: --------------- Arquivo .htaccess -------------------AuthType Basic AuthName "Acesso Restrito" AuthUserFile /home/fulano/public_html/restrito/.htpasswd Require user fulano --------------- Fim do arquivo .htaccess -------------------Aps isso, criamos um arquivo com as senhas, chamado .htpasswd, no mesmo diretrio. Isto dever ser feito atravs do utilitrio /usr/local/apache2/bin/htpasswd, da seguinte maneira: # /usr/local/apache2/bin/htpasswd -c /home/fulano/public_html/restrito/.htpasswd fulano Dessa forma, quando for acessada a pgina http://servidor/~fulano/restrito, ser necessrio o login fulano e a senha que foi configurada atravs do htpasswd. Dever ser atribudo a estes arquivos (.htaccess e .htpasswd) o grupo www e a permisso 640, para que o Apache, que roda sob o grupo www, possa ler. Recomendo a leitura do HowTo "Authentication, Authorization and Access Control", encontrado em http://servidor/manual/howto/auth.html.

3.3.2 - Estatsticas de Uso do Servidor Web


* Webalizer
O Webalizer um programa escrito em C, utilizado para gerar pginas HTML com estatsticas e grficos de utilizao do Servidor Web, a partir da anlise de seu arquivo de log. O Webalizer tambm pode analisar arquivos de log de servidores FTP. Seu site www.mrunix.net/webalizer. Iremos instalar o Webalizer atravs do Ports. V at o diretrio /usr/ports/portuguese/webalizer-pt_BR e execute o comando "make install". Ser instalado o Webalizer e tambm alguns outros programas dos quais ele depende para funcionar. Aps a instalao, teremos a documentao em /usr/local/share/doc/pt_BR-webalizer e um exemplo de configurao em /usr/local/share/examples/pt_BR-webalizer, que tambm copiado para /usr/local/etc/pt_BRwebalizer.conf-dist. O executvel ficar em /usr/local/bin/pt_BR-webalizer. Mova o arquivo /usr/local/etc/pt_BR-webalizer.conf-dist para /usr/local/etc/pt_BR-webalizer.conf, e aplique a permisso 600. O arquivo bastante comentado e descreve todas as opes contidas. Para maiores informaes sobre os parmetros de configurao leia o manual, atravs do comando "man pt_BR-webalizer". Adicione as seguintes linhas (nos devidos lugares, para manter a organizao): LogFile /usr/local/apache2/logs/access_log.webalizer OutputDir /usr/local/apache2/htdocs/webalizer-http ReportTitle Estatisticas de Uso para HostName servteste.exemplo.org DNSCache dns_cache.db DNSChildren 5 Crie o diretrio /usr/local/apache2/htdocs/webalizer-http, que onde sero guardadas as anlises, acessvel atravs do endereo http://servidor/webalizer-http. Falta ainda agendarmos no Cron para que o Webalizer seja rodado periodicamente, e para que os arquivos de log do Apache sejam rotacionados. Esta periodicidade ser mensal, meia-noite entre um ms e outro. Crie o diretrio /usr/local/apache2/logs/oldlog e tambm crie o arquivo /usr/local/script/rotate_log_apache.sh, com a permisso 700 e o seguinte contedo: -------------------- Arquivo rotate_log_apache.sh -------------------#!/bin/sh # finaliza o Apache

/usr/local/apache2/bin/apachectl stop # Define os nomes para arquivamento OLD_ACCESS_LOG=/usr/local/apache2/logs/oldlog/access_log.`date +%y%m%d-%H%M%S` OLD_ERROR_LOG=/usr/local/apache2/logs/oldlog/error_log.`date +%y%m%d-%H%M%S` # faz uma cpia para ser analisada cp /usr/local/apache2/logs/access_log /usr/local/apache2/logs/access_log.webalizer # move os arquivos para o diretorio de arquivamento mv /usr/local/apache2/logs/access_log `echo $OLD_ACCESS_LOG` mv /usr/local/apache2/logs/error_log `echo $OLD_ERROR_LOG` # inicializa o Apache /usr/local/apache2/bin/apachectl start # compacta os arquivados /usr/bin/gzip $OLD_ACCESS_LOG /usr/bin/gzip $OLD_ERROR_LOG # apaga os logs com mais de um ano find /usr/local/apache2/logs/oldlog -mtime +365 -exec rm -f {} \; -------------------- Fim do arquivo rotate_log_apache.sh -------------------Edite o arquivo /etc/crontab e adicione as seguintes linhas: # Rotaciona os logs do Apache e roda o Webalizer 0 0 1 * * root /usr/local/script/rotate_log_apache.sh 30 0 1 * * root /usr/local/bin/pt_BR-webalizer -Q Isto far com que o script de rotao dos logs seja acionado meia-noite do primeiro dia do ms, separando os logs de cada ms em arquivos diferentes. Aps 30 minutos, ser acionado o Webalizer, que ir fazer a anlise e ir gerar as pginas com as estatsticas. Este tempo de 30 minutos dado porque pode ocorrer de o servidor possuir mais tarefas importantes para a a meia-noite, ento o Webalizer no ir prejudic-las.

3.4 -Servios de Autenticao e Compartilhamento de Arquivos


3.4.1 - FTP (File Transfer Protocol)
* ProFTPD O ProFTP nasceu do desejo de seus criadores de um servidor FTP seguro e altamente configurvel. Possui um bom desempenho e utilizado em sites de grande trfego, como ftp.kernel.org, ftp.samba.org e SourceForge. Sua pgina www.proftpd.org. Efetue o download do source da ltima verso do ProFTPD. Atualmente, a 1.2.9, faremos o download do arquivo ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.9.tar.gz. Descompacte e extraia no diretrio /tmp, ser criado o diretrio /tmp/proftpd-1.2.9 com os arquivos extrados. Crie um grupo chamado ftp com gid 120, e um usurio ftp com uid e gid 120: # pw group add ftp -g 120 # pw user add ftp -c "ProFTPD" -d "/nonexistent" -s "/sbin/nologin" -u 120 -g 120 Dever ser definido e criado o diretrio que ir abrigar os arquivos e diretrios do nosso FTP annimo, no nosso caso criamos o diretrio /usr/ftp. Deve-se atribuir o dono ftp e grupo ftp a este diretrio, assim como a todos os arquivos que forem publicados abaixo dele posteriormente: # mkdir /usr/ftp # chown ftp:ftp /usr/ftp V at o diretrio /tmp/proftpd-1.2.9. Leia os arquivos README e INSTALL. Execute a seguinte seqncia de comandos: # ./configure # make # make install Isto ir configurar os fontes para a compilao de acordo com o ambiente, compilar e ento instalar. O ProFTPD possui apenas um arquivo de configurao, que fica em /usr/local/etc/proftpd.conf. No momento da instalao, instalada neste local uma cpia do basic.conf, que um dos exemplos de configuraes. Mesmo para um

funcionamento bsico, temos que fazer algumas modificaes. Altere os parmetros <Anonymous ~ftp> User nobody Group nogroup para <Anonymous /usr/ftp> User ftp Group ftp Alm disso, logo abaixo, insira a seguinte linha: RequireValidShell off Feitas essas alteraes, o servidor FTP j pode ser inicializado e testado. Inicie-o digitando /usr/local/sbin/proftpd, e verifique se est rodando atravs do comando # ps aux | grep proftpd Teste o servio, logando tanto com um usurio e senha comuns quanto anonimamente, atravs do login ftp ou anonymous. Dever estar funcionando normalmente, mas ainda temos algumas configuraes a fazer. Uma boa documentao acerca da configurao do ProFTPD pode ser encontrada no seu site. Uma pgina muito til a descrio de todas as diretivas possveis no arquivo proftpd.conf, e pode ser encontrada em http://www.proftpd.org/docs/directives/linked/by-name.html. Para que o ProFTPD leia novamente seu arquivo de configurao, caso este seja modificado, necessrio enviar o sinal HUP, com o comando # killall -HUP proftpd Segue abaixo um arquivo de configurao comentado que pode ser utilizado como base para a sua configurao. ------------------- Arquivo proftpd.conf -------------------# proftpd.conf # Arquivo exibido no momento da conexao DisplayConnect /usr/local/etc/proftpd.banner # Nao exibe informacoes sobre que tipo de servidor esta rodando ServerIdent off # Modo no qual o servidor ira rodar (standalone ou inetd) ServerType standalone # Como nao temos VirtualHosts, este servidor (principal) sera o padrao DefaultServer on # Porta para o socket de controle Port 21 # Umask padrao para arquivos uploaded Umask 022 # Maximo de processos filho (cada conexao utiliza um processo) MaxInstances 30 # Maximo de usuarios autenticados (incluindo anonimos) e mensagem MaxClients 20 "Desculpe, o numero maximo de clientes foi atingido" # Maximo de usuarios autenticados (incluindo anonimos) por IP MaxClientsPerHost 4 "Desculpe, maximo de 4 conexoes por cliente" # Usuario sob o qual o servidor ira rodar User ftp # Grupo sob o qual o servidor ira rodar Group ftp # Os usuarios nao poderao sair de seu diretorio home (chrooted) DefaultRoot ~ # Nao permite o login do usuario root

RootLogin off # Nao requer que os usuarios tenham um shell valido (definido # em /etc/shells) RequireValidShell off # Nao bloqueia usuarios baseando-se no arquivo /etc/ftpusers UseFtpUsers off # Tempo maximo em segundos para login TimeoutLogin 120 # Tempo maximo em segundos conectado mas sem qualquer comando ou # troca de dados TimeoutIdle 600 # Tempo maximo em segundos sem transferencia de dados (arquivos, # listagens de diretorios) TimeoutNoTransfer 900 # Tempo maximo em segundos com uma transferencia parada, travada TimeoutStalled 900 # Numero maximo de tentativas de login MaxLoginAttempts 3 # Nao tenta descobrir o hostname do cliente UseReverseDNS off # Nao tenta efetuar consulta do username remoto (ident - RFC1413) IdentLookups off # Arquivo de log geral SystemLog /var/log/proftpd/system.log # Arquivo de log das transferencias TransferLog /var/log/proftpd/transfer.log # Especifica o modo de transferencia padrao (ascii ou binary) DefaultTransferMode binary # Permite que arquivos sejam sobrescritos (caso seja feito upload # de um arquivo ja existente) AllowOverwrite on # Abre o contexto de usuarios anonimos, especificando a raiz do # FTP anonimo <Anonymous /usr/ftp> # Usuario sob o qual cada instancia de FTP anonimo deve rodar User ftp # Grupo sob o qual cada instancia de FTP anonimo deve rodar Group ftp # Define o login anonymous como sinonimo (alias) do login ftp UserAlias anonymous ftp # Numero maximo de usuarios anonimos MaxClients 10 # Limita qualquer gravacao neste contexto (por exemplo upload # de arquivo) <Limit WRITE> DenyAll </Limit> # Fecha o contexto de usuarios anonimos </Anonymous> ------------------- Fim do arquivo proftpd.conf -------------------O contedo do arquivo proftpd.banner fica a seu critrio, pode ser utilizada uma simples identificao como "Servidor FTP Exemplo". Crie o diretrio /var/log/proftpd, para que sejam armazenados a os arquivos de log.

Teste essa nova configurao, dever funcionar normalmente. Verifique tambm regularmente os arquivos de log do ProFTPD, principalmente em caso de qualquer problema. Temos ainda alguns utilitrios que permitem verificar o que anda acontecendo com o servidor FTP, em tempo real. So eles: ftpcount -> mostra o nmero atual de conexes ao servidor FTP ftpwho -> mostra quais usurios esto conectados atualmente ftptop -> mostra informaes sobre as conexes num estilo parecido ao do comando top ftpshut -> tira o servidor FTP do ar, sem encerrar seu processo. Para retornar, deve-se executar "ftpshut -R" Os comandos ftpcount, ftpwho e ftptop utilizam um arquivo chamado Scoreboard, que registra informaes sobre as sesses atuais de FTP. Este arquivo fica por padro em /usr/local/var/proftpd/proftpd.scoreboard. Caso este arquivo seja mudado de lugar (via proftpd.conf) dever ser especificado na linha de comando dos utilitrios qual o caminho do arquivo Scoreboard. H ainda um arquivo que guarda o PID do processo principal, e fica por padro em /usr/local/var/proftpd.pid. Para que o ProFTPD seja inicializado no boot e terminado no shutdown corretamente, crie um script de inicializao e shutdown em /usr/local/etc/rc.d/proftpd.sh, conforme explicado anteriormente. O comando para inicializar dever ser: /usr/local/sbin/proftpd O comando para finalizar dever ser: kill `cat /usr/local/var/proftpd.pid`

3.4.2 - Estatsticas de Uso do Servidor FTP


* Webalizer Caso ainda no tenha instalado e configurado o Webalizer, consulte a seo "Estatsticas de Uso do Servidor Web" para faz-lo. Com o Webalizer instalado e configurado, vamos alterar apenas a linha de comando usada. Crie o diretrio /usr/local/apache2/webalizer-ftp, que onde sero guardadas as anlises, acessvel atravs do endereo http://servidor/webalizer-ftp. O que deve ser feito agora agendar no Cron para que o Webalizer seja rodado periodicamente, com alguns parmetros especiais para o FTP, e para que os arquivos de log do ProFTPD sejam rotacionados. Crie o diretrio /var/log/proftpd/oldlog e tambm crie o arquivo /usr/local/script/rotate_log_proftpd.sh, com a permisso 700 e o seguinte contedo: -------------------- Arquivo rotate_log_proftpd.sh -------------------#!/bin/sh # finaliza o ProFTPD kill `cat /usr/local/var/proftpd.pid` # Define os nomes para arquivamento OLD_TRANSFER_LOG=/var/log/proftpd/oldlog/transfer.log.`date +%y%m%d-%H%M%S` OLD_SYSTEM_LOG=/var/log/proftpd/oldlog/system.log.`date +%y%m%d-%H%M%S` # faz uma cpia para ser analisada cp /var/log/proftpd/transfer.log /var/log/proftpd/transfer.log.webalizer # move os arquivos para o diretorio de arquivamento mv /var/log/proftpd/transfer.log `echo $OLD_TRANSFER_LOG` mv /var/log/proftpd/system.log `echo $OLD_SYSTEM_LOG` # inicializa o ProFTPD /usr/local/sbin/proftpd # compacta os arquivados /usr/bin/gzip $OLD_TRANSFER_LOG /usr/bin/gzip $OLD_SYSTEM_LOG # apaga os logs com mais de um ano find /var/log/proftpd/oldlog -mtime +365 -exec rm -f {} \; -------------------- Fim do arquivo rotate_log_proftpd.sh -------------------Edite o arquivo /etc/crontab e adicione as duas linhas abaixo: 0 0 1 * * root /usr/local/script/rotate_log_proftpd.sh 0 1 1 * * root /usr/local/bin/pt_BR-webalizer -Q -o

/usr/local/apache2/htdocs/webalizer-ftp -Ff /var/log/proftpd/transfer.log.webalizer Isto far com que o script de rotao dos logs seja acionado meia-noite do primeiro dia do ms, separando os logs de cada ms em arquivos diferentes. Aps uma hora, ou seja, 1h do primeiro dia de cada ms, ser acionado o Webalizer.

3.4.3 - Compartilhamento de Arquivos para clientes Unix


* NFS (Network File System)
O NFS ou Network File System - sistema de arquivos em rede - permite que clientes acessem arquivos compartilhados em um servidor como se fossem arquivos locais. Com isso, podemos por exemplo guardar arquivos de instalao de programas em um servidor e acess-los pela rede, facilitando a operao e economizando espao em disco nos clientes. Outra aplicao prtica guardar os diretrios home dos usurios em um nico servidor, e em qualquer mquina que o usurio logar-se ter os mesmos arquivos. Tambm pode-se compartilhar drives de CDROM ou qualquer outro dispositivo de armazenamento. O NFS foi originalmente criado pela Sun Microsystems nos anos 80, e definido pela RFC1094. Daemons usados pelo NFS: nfsd - Processa os pedidos dos clientes NFS. mountd - Faz a entrega dos pedidos que o nfsd passa a ele. portmap - o daemon portmapper, que permite que os clientes descubram que porta o servidor NFS est usando. Para que tais daemons sejam inicializados no servidor, necessrio inserir as seguintes linhas ao arquivo /etc/rc.conf: portmap_enable="YES" nfs_server_enable="YES" mountd_flags="-r" No cliente, deve ser adicionada a seguinte linha ao /etc/rc.conf: nfs_client_enable="YES" O arquivo /etc/exports, no servidor, especifica que arquivos devem ser compartilhados com os clientes. Cada linha especifica um diretrio, quem pode acess-lo e tambm pode ser especificado o tipo de acesso desejado. Por exemplo, para compartilhar o drive de CDROM com todas as mquinas da rede 192.168.0.0/16, a seguinte linha deve ser inserida: /cdrom -ro -network 192.168 -mask 255.255.0.0 O parmetro -ro especifica a permisso read-only, ou somente leitura. Para compartilhar o /home para as mquinas 192.168.0.2, 192.168.0.3 e 192.168.0.4, insira a seguinte linha: /home 192.168.0.2 192.168.0.3 192.168.0.4 Para compartilhar o diretrio /teste para a mquina 192.168.0.5 e deixar ela acessar esse diretrio como root (se o root na mquina cliente montar o /teste do servidor poder acess-lo com todos os poderes de root), basta inserir a seguinte linha: /teste -maproot=root 192.168.0.5 Para compartilhar os diretrios /usr/src e /usr/ports com a mquina teste.exemplo.org, insira a seguinte linha: /usr/src /usr/ports teste.exemplo.org Para compartilhar o diretrio /teste2 com todo mundo e dar permisso de somente leitura, adicione a seguinte linha: /teste2 -ro Com esses exemplos, pode-se ter uma boa idia de qual o formato do arquivo /etc/exports. Para maiores detalhes, veja o manual com o comando "man exports". Depois de configurar o NFS, necessrio reiniciar a mquina. Se apenas foi modificado o arquivo /etc/exports, basta reiniciar o mountd para que as alteraes entrem em vigor: # kill -HUP `cat /var/run/mountd.pid` ou simplesmente # killall -HUP mountd Para montar um diretrio compartilhado, utiliza-se no cliente o comando mount, no seguinte formato: # mount servidor:/compartilhamento /mountpoint

Por exemplo, para montar o /home do servidor 192.168.0.1 no diretrio /mnt local, basta digitar: # mount 192.168.0.1:/home /mnt Se for necessrio que algum compartilhamento seja montado automaticamente no cliente, no momento da inicializao, basta adicion-lo ao arquivo /etc/fstab. Seguindo o mesmo exemplo acima, deveramos adicionar a seguinte linha ao /etc/fstab: 192.168.0.1:/home /mnt nfs rw 0 0 Para maiores detalhes do formato do arquivo, man fstab. H um utilitrio para visualizar estatsticas sobre as atividades do servidor NFS, fica em /usr/bin/nfsstat. Ele mostra um relatrio bem detalhado se invocado sem parmetros. Se for utilizado o comando "nfsstat -w 2" teremos um relatrio resumido, e ser atualizado a cada 2 segundos, constatemente (obviamente o valor pode ser alterado).

3.4.4 - Autenticao para clientes Unix


* NIS (Network Information Services)
O NIS (Network Information Services), tambm conhecido como YP (Yellow Pages), foi desenvolvido pela Sun Microsystems para centralizar a administrao de mquinas com o sistema operacional SunOS. Com o tempo, tornou-se um padro entre os sistemas Unix Like, servindo geralmente para compartilhar entre vrias mquinas informaes como contas de usurios, grupos, nomes de mquinas etc. * Configurao do Servidor O FreeBSD possui suporte nativo ao NIS, bastando configur-lo, sem ter que instalar nada adicional. Para isso, adicione as seguintes linhas ao arquivo /etc/rc.conf: portmap_enable="YES" nisdomainname="teste-nis" nis_server_enable="YES" nis_yppasswd_enable="YES" Com a primeira linha, confirmamos que o portmap estar rodando, pois o NIS utiliza RPC. O parmetro "nisdomainname" especifica o nome do domnio NIS, que deve preferencialmente ser diferente do domnio do hostname. Pode-se configurar o nome que achar mais adequado, mas no deve ser confundido com o que chamamos simplesmente de domnio: o que tratamos agora o "domnio NIS". O parmetro "nis_yppasswd_enable" permite que os usurios troquem suas senhas a partir das mquinas clientes. Aps isso, reinicie a mquina. Passamos agora a configurar o NIS. Os arquivos dos quais ele busca as informaes so chamados "NIS maps", e so guardados no diretrio "/var/yp". Estes arquivos so gerados a partir de alguns arquivos de configurao que esto no diretrio "/etc", exceto um, que deve ser ajustado manualmente, que o "master.passwd". V at o diretrio /var/yp e copie para l o arquivo /etc/master.passwd. Aps isso, edite o arquivo (/var/yp/master.passwd) e remova todas as contas administrativas, que no devero ser propagadas aos clientes, como por exemplo root, bin, tty, games etc. O arquivo "/var/yp/master.passwd" dever ter a permisso 600. Execute o seguinte comando: # ypinit -m teste-nis O "ypinit" um utilitrio que inicializa os "NIS maps". O parmetro -m indica que estamos configurando um servidor mestre (master). Sero apresentadas algumas informaes e ento uma linha com o seguinte: master server : servteste Ao invs de servteste dever constar o hostname do seu servidor. Pressione Ctrl+D e ento enter. O ypinit ir criar o arquivo /var/yp/Makefile. Este arquivo possui toda a configurao do NIS, sendo que assume por padro que os clientes sero apenas FreeBSD. Caso haja algum Linux, deve-se editar o arquivo e descomentar a seguinte linha: UNSECURE = "True" Crie agora o arquivo /var/yp/securenets, com o seguinte contedo: 127.0.0.1 255.255.255.255 192.168.0.0 255.255.0.0 Este arquivo uma lista de endereos de rede, espao em branco, e a mscara de rede. As redes que forem especificadas

so as autorizadas a utilizar o servio NIS, ou seja, ningum com endereo IP fora das especificadas conseguir fazer uso do servio. Isto visa restringir o acesso ao servidor, e se o arquivo securenets no for criado o acesso ficar liberado para todos, o que pode gerar problemas de segurana. Terminadas estas etapas, temos um servidor NIS funcionando e capaz de autenticar os clientes. Um detalhe importante: toda vez que for modificada ou adicionada uma nova conta no sistema, deve-se executar a seguinte linha de comando: # cd /var/yp ; make teste-nis Isto ir recriar os "NIS maps", e sem isso o usurio recm-criado no conseguir logar nas mquinas clientes. * Configurao dos Clientes (FreeBSD) Edite o arquivo /etc/rc.conf e adicione as seguintes linhas: portmap_enable="YES" nisdomainname="teste-nis" nis_client_enable="YES" Edite o arquivo /etc/master.passwd, atravs do comando "vipw", e adicione a seguinte linha ao final do arquivo: +::::::::: Edite o arquivo /etc/group e adicione a seguinte linha ao final do arquivo: +:*:: Edite o arquivo /etc/hosts e adicione um sinal de "+" em uma linha em branco no final do arquivo: + Aps isso, reinicie a mquina e teste o login com uma conta de usurio, dever funcionar normalmente. interessante tambm que os diretrios home guardados no servidor sejam compartilhados com os clientes. Para isso, pode ser utilizado o NFS, adicionando no arquivo /etc/exports do servidor uma linha que compartilha o /home e adicionando no arquivo /etc/fstabs, nos clientes, uma linha que monta o /home. Dever ser criado o diretrio /home nos clientes, para que nele seja montado o /home do servidor. Como as permisses e propriedade dos arquivos sero mantidas, e os UIDs e GIDs sero os mesmos, pois so resgatados via NIS, o usurio que logar em uma mquina cliente ter acesso de forma transparente a apenas seus arquivos, como se estivesse logando no servidor.

3.4.5 - Autenticao e Compartilhamento de Arquivos para clientes Windows


* Samba
O Samba (www.samba.org) o servio que promove a integrao entre sistemas Unix e Windows em uma rede. Trabalha com o protocolo SMB, o qual o Windows utiliza nativamente, possibilitando desta forma que tenhamos um ambiente com ambas as plataformas interagindo. O Samba foi originalmente criado por Andrew Tridgell, em 1991. Nosso foco ser utilizar o Samba como controlador de domnio, servidor de arquivos e autenticao de clientes Windows. SMB significa Server Message Block, e o protocolo utilizado pelos sistemas Windows para comunicao e compartilhamento de recursos via rede. O Samba utiliza SMB sobre TCP para compartilhamento de arquivos e UDP para browsing. A Microsoft utiliza no Windows 2000 em diante uma verso melhorada do protocolo SMB, chamada CIFS - Common Internet File System, que tambm suportada pelo Samba. Faa o download do source da ltima verso estvel do Samba, atravs de algum dos mirrors listados no site. O arquivo tem o nome samba-latest.tar.gz. Pode-se fazer o download a partir de http://us1.samba.org/samba/ftp/sambalatest.tar.gz. A verso atual 3.0.1. Descompacte o arquivo no /tmp, ser criado o diretrio samba-3.0.1, acesse-o. Execute os seguintes comandos: # # # # cd source ./configure make make install

O Samba ser instalado em /usr/local/samba. Temos apenas dois daemons, o smbd e o nmbd, que ficam em /usr/local/samba/sbin. O smbd o responsvel por controlar os compartilhamentos de arquivos assim como autenticao e autorizao dos clientes. O nmbd auxilia com o browsing da rede e trabalha com NetBIOS (Network Basic Input/Output System) e WINS. Como os executveis do Samba so instalados em um diretrio diferente do padro, deve ser ajustado o valor da varivel PATH. Para isso, edite o arquivo /root/.profile ou /root/.bash_profile e insira no final da linha iniciada por "PATH" o seguinte valor:

:/usr/local/samba/bin:/usr/local/samba/sbin Junto com o Samba instalado o SWAT, que significa Samba Web Administration Tool. Como o prprio nome diz, uma ferramenta para configurar o Samba a partir de qualquer navegador. Para habilitar esta ferramenta, basta inserir ou ajustar a seguinte linha no arquivo /etc/inetd.conf: swat stream tcp nowait/400 root /usr/local/samba/sbin/swat swat Aps isso, reinicie o inetd, atravs do comando "killall -HUP inetd". O SWAT pode ser acessado a partir do endereo http://servidor:901, ento entre com o login e senha do root. Se o SWAT no for utilizado recomendado deix-lo desativado, para evitar qualquer problema se segurana. As portas utilizadas pelo Samba so: netbios-ns 137/udp # NETBIOS Name Service netbios-dgm 138/udp # NETBIOS Datagram Service netbios-ssn 139/tcp # NETBIOS Session Service microsoft-ds 445/tcp # Microsoft-DS O arquivo de configurao do Samba chama-se smb.conf, e fica no diretrio /usr/local/samba/lib. Possui muitas opes, possibilitando inmeras configuraes diferentes, cada uma atendendo ao propsito do servidor que est sendo configurado. Todas opes e variveis so bem explicadas na sua man page, acessvel pelo comando "man smb.conf". Segue abaixo um arquivo exemplo utilizado nesta instalao, adapte o que for necessrio: -------------------- Arquivo smb.conf -------------------# smb.conf # Contexto geral. [global] # Nome NetBIOS do servidor. netbios name = SERVTESTE # Nome do domnio. workgroup = TESTE # Descricao do servidor. server string = Servidor de Arquivos # Interfaces de rede. interfaces = 192.168.0.10, 127.0.0.1 # Limita o Samba a utilizar somente as interfaces mencionadas # acima. bind interfaces only = yes # Hosts permitidos a conectar. hosts allow = 192.168.0.0/255.255.0.0, 127. # Opcoes de socket, para ajuste das conexoes em camada de rede. socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE # Nivel de "auto-propaganda" na eleicao de controlador # de dominio. os level = 33 # O servidor eh o preferido na eleicao para controlador # de dominio. preferred master = Yes # Permitir logon no domnio de maqs Win9x. domain logons = Yes # Diretorio home que sera mapeado quando alguma maq. logar # no dominio. O valor da variavel %U sera o nome de usuario # da sessao. logon home = \\servteste\%U # Unidade a qual mapear o diretorio home. Usado apenas em WinNT. logon drive = L: # Local onde os perfis ambulantes sao armazenados. Se deixado # em branco ira desabilitar os perfis. Podem ser utilizadas # variaveis.

logon path = # Script executado quando o usuario logar. logon script = %U.bat # Usuario(s) administrador do dominio. admin users = root # Local do arquivo de senhas do Samba. smb passwd file = /usr/local/samba/private/smbpasswd # Quando trocar a senha do Samba trocar a do sistema tambem. unix password sync = Yes # Programa utilizado para troca a senha do sistema. passwd program = /usr/bin/passwd %u # Dialogo para a troca de senha do sistema. A variavel %n sera # a nova senha. passwd chat = *New*password* %n\n *Retype*password* %n\n *done* # Utilizar senhas encriptadas no login. encrypt passwords = Yes # Nivel de log (0-10). Quanto maior mais informacoes # serao logadas. log level = 1 # Tamanho maximo em KB de cada arquivo de log. max log size = 2048 # Arquivo de log. A variavel %m sera o nome da maq. cliente. log file = /var/log/samba/log.%m # Funcionar como servidor de hora para clientes Windows. time server = Yes # Mascara da permissoes dos arquivos criados pelos clientes. create mask = 0660 # Mascara das permissoes dos diretorios criados pelos clientes. directory mask = 0770 # Arquivos ou diretorios ignorados nos compartilhamentos. veto files = /mail/ # Pagina de codigos utilizada pelo servidor. unix charset = CP850 # Pagina de codigos utilizada nas mensagens do Samba. display charset = CP850 # Compartilhamento dos diretorios home. [homes] # Comentario, descricao. comment = Diretorio Pessoal # Ajuste "No" para permitir gravacao. read only = No # Nao ira ser anunciado no dominio. browseable = No # Compartilhamento Netlogon [netlogon] # Caminho no servidor. path = /usr/local/samba/lib/netlogon # Permite usuarios anonimos. guest ok = Yes browseable = No

# Compartilhamento utilizado, caso habilitado acima, # para os perfis ambulantes. [profiles] # A variavel %H sera o diretorio home do usuario. path = /%H/Perfil read only = No guest ok = Yes browseable = No # Compartilhamento do CD-ROM do servidor. [cdrom] comment = Drive CD-ROM path = /cdrom guest ok = Yes -------------------- Fim do arquivo smb.conf -------------------De acordo com esta configurao, os logs sero armazenados em /var/log/samba, ento este diretrio dever ser criado manualmente. O arquivo de log do smbd ser log.smbd, o do nmbd ser log.nmbd e para cada mquina cliente ser criado um arquivo no formato log.hostname. O tamanho mximo destes arquivos ser 2 MB, quando este limite for excedido o arquivo atual ser renomeado com a extenso ".old", e ser criado um novo arquivo. Se j houver outro ".old", este ser excludo. Com esta configurao, o nosso servidor ser o PDC (Primary Domain Controller) para o domnio TESTE. Para cada mquina ou usurio que ir participar deste domnio, deve ser cadastrada uma conta no sistema e tambm uma conta no Samba. Adicione um grupo para as contas de mquinas no sistema, com o nome "maquinas", ou qualquer outro: # pw group add maquinas -g 160 Para adicionar as contas de mquinas, utilize os seguintes comandos: # pw user add maquina1$ -c "Conta de Maquina" -d "/nonexistent" -s "/sbin/nologin" -g 160 # smbpasswd -a -m maquina1 Note que as contas de mquinas no sistema devem ser cadastradas com o hostname da mquina cliente seguido de cifro ($). O parmetro "-a", no smbpasswd, especifica que estamos fazendo um novo cadastro. J o "-m" indica que estamos cadastrando uma conta de mquina. Os cadastros de usurios so feitos da mesma forma como sempre, no sistema. Apenas deve-se cadastrar a senha de usurio do domnio com o comando smbpasswd, da seguinte forma: # smbpasswd -a usuario1 Insira a senha do usurio, que ser posteriormente utilizada para login nas mquinas clientes. Para inserir as mquinas clientes no domnio, deve-se proceder da mesma forma como se fosse um PDC Windows. Quando solicitada uma conta de administrao do domnio, deve-se inserir login e senha do root. H apenas uma ressalva no Windows XP, deve-se editar o registro e alterar o valor de duas chaves, ou apenas executar o arquivo abaixo: -------------------- Arquivo winxp.reg -------------------Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters] "requiresignorseal"=dword:00000000 "signsecurechannel"=dword:00000000 -------------------- Fim do arquivo winxp.reg --------------------

3.4.6 - Controle de Uso de Disco


* Quota
"Quotas" uma caracterstica do sistema que permite definir quotas para cada usurio, visando limitar o espao ocupado em disco em um determinado filesystem. Isso essencial visto que previne a m utilizao dos recursos assim como o provvel esgotamento antecipado do espao em disco. Para configurar o sistema de quotas no necessrio instalar nada, uma caracterstica nativa do sistema. preciso apenas habilitar no kernel, configurar para que os filesystems desejados suportem quotas e aplic-las s contas de usurios.

Edite o arquivo de configurao do kernel e adicione a seguinte linha: options QUOTA Aps isso, compile o kernel e reinstale-o. Esta tarefa est explicada na seo Recompilao e Instalao do Kernel. Edite o arquivo /etc/rc.conf e adicione as linhas abaixo: enable_quotas="YES" check_quotas="NO" Iremos desabilitar o "check_quotas" pois se habilitado ser executado o programa quotacheck no momento da inicializao do sistema. Este programa confere a integridade da base de dados de quotas em relao ao que est no disco, o que seria bom, mas o ponto negativo que em sistemas com vrios usurios e arquivos ir demorar bastante tempo para fazer a verificao. Dever ser definido em quais filesystems iremos habilitar o controle de quotas. Neste exemplo, iremos habilitar no filesystem que guarda os diretrios home dos usurios (por exemplo /home), para limitar o espao ocupado por seus arquivos, assim como pelas pastas de e-mails guardados, enviados etc, e no filesystem que guarda a caixa de entrada de e-mails (por exemplo /var). Para isso, edite o arquivo /etc/fstab e adicione o parmetro "userquota" nas entradas dos respectivos filesystems: /dev/ad0s1f /dev/ad0s1g /home /var ufs ufs rw,nosuid,userquota rw,nosuid,userquota 2 2 2 2

Agora reinicie a mquina. Execute o comando "quotacheck -a", para que seja criado o arquivo quotas.user, que armazena a base de dados de quotas, na raiz de cada filesystem com suporte a quotas. O controle de quotas estar ativado, mas ainda no foi definido nenhum limite para os usurios. A quota de cada usurio pode ser verificada atravs do comando "quota -u username", e editada atravs do comando "edquota -u username". Pode-se limitar tanto o nmero de blocos utilizados (blocks) quanto o nmero de arquivos criados (inodes), no entanto geralmente a maior utilidade limitar o nmero de blocos, o que se traduz por espao ocupado. Lembre-se que cada bloco corresponde a 1 KB. Temos dois tipos de limites: hard e soft. O limite hard no pode ser excedido, em nenhuma circunstncia, ou seja, assim que o usurio atingir este limite no poder alocar mais nenhum bloco no disco. J o limite soft pode ser excedido, por determinado tempo. Este limite de tempo se chama "grace period", e de uma semana por padro. Se o usurio ultrapassar o limite soft, aps o grace period este limite soft ser transformado em um limite hard, e o usurio no poder fazer mais nenhuma alocao. Assim que o usurio voltar abaixo do limite soft, a contagem do grace period resetada. Para editar as quotas do usurio fulano, utilize o comando "edquota -u fulano". Para cada filesystem haver duas linhas, uma com o limite de blocks e outra com o limite de inodes. Para mudar qualquer limite, simplesmente altere o valor, salve e saia do editor, o novo limite entrar em vigor imediatamente. Um limite com o valor 0 (zero) significa sem limite. Exemplos: Impor um limite hard de 10 MB no diretrio home e 5 MB na caixa de entrada do e-mail para o usurio fulano: # edquota -u fulano Quotas for user fulano: /home: kbytes in use: 418, limits (soft = 0, hard = 0) inodes in use: 2, limits (soft = 0, hard = 0) /var: kbytes in use: 384, limits (soft = 0, hard = 0) inodes in use: 2, limits (soft = 0, hard = 0) alterar para Quotas for user fulano: /home: kbytes in use: 418, limits (soft = 0, hard = 10000) inodes in use: 2, limits (soft = 0, hard = 0) /var: kbytes in use: 384, limits (soft = 0, hard = 5000) inodes in use: 2, limits (soft = 0, hard = 0) Verificar as quotas para o usurio fulano: # quota -u fulano Disk quotas for user fulano (uid 4123): Filesystem usage quota limit grace files quota limit grace

/home /var

418 384

0 10000 0 5000

3 2

0 0

0 0

Alterar as quotas do usurio fulano para um limite soft de 10 MB no /var e 50 MB no /home e um limite hard de 12 MB no /var e 60 MB no /home: # edquota -u fulano Quotas for user fulano: /home: kbytes in use: 418, limits (soft = 0, hard = 10000) inodes in use: 3, limits (soft = 0, hard = 0) /var: kbytes in use: 384, limits (soft = 0, hard = 5000) inodes in use: 2, limits (soft = 0, hard = 0) alterar para Quotas for user fulano: /home: kbytes in use: 418, limits (soft = 50000, hard = 60000) inodes in use: 3, limits (soft = 0, hard = 0) /var: kbytes in use: 384, limits (soft = 10000, hard = 12000) inodes in use: 2, limits (soft = 0, hard = 0) Como pode-se ver o processo muito simples. O problema quando o nmero de usurios grande, tornando impossvel gerenciar manualmente as quotas para cada um. Pode ser criado um script em shell para gerenciar isso, utilizando-se dos recursos do comando edquota, ou apenas utilizando os mesmos recursos via linha de comando. Os principais recursos do edquota para isso so a cpia de quotas de um usurio para outro(s) e a definio nointerativa das quotas. Exemplos: Copiar as quotas do usurio fulano para o usurio beltrano: # edquota -p fulano beltrano Copiar as quotas do usurio fulano para todos os usurios com UIDs entre 2000 e 10000: # edquota -p fulano 2000-10000 Definir as quotas dos usurios fulano e beltrano para um limite soft de 5 MB no /var e 50 MB no /home e um limite hard de 6 MB no /var e 55 MB no /home: # edquota -e /var:5000:6000 -e /home:50000:55000 fulano beltrano Definir as quotas acima para todos os usurios com UIDs entre 2000 e 10000: # edquota -e /var:5000:6000 -e /home:50000:55000 2000-10000 Remover os limites do usurio beltrano para o seu diretrio home: # edquota -e /home:0:0 beltrano Para alterar o "grace period" deve ser utilizado o comando "edquota -t", o perodo pode ser definido independentemente para cada filesystem com suporte a quotas. Se especificado o perodo 0 (zero), ser utilizado o padro, que 7 dias. Se especificado o perodo de um segundo, no haver "grace period", ou seja, qualquer "soft limit" ser entendido como "hard limit".

3.4.7 - Antivrus
* ClamAV
Nosso escopo nesta seo ser ter um antivrus funcionando e automatizar, atravs de um script em shell, a tarefa de varredura dos arquivos armazenados no servidor, em essencial os diretrios home dos usurios. O antivrus que ser utilizado o ClamAV - Clam AntiVirus. escrito na linguagem C e possui licensa GPL. O ClamAV no limpa os arquivos infectados, apenas detecta. Seu site www.clamav.net. Caso j tenha o ClamAV instalado e funcionando, ignore a parte de instalao e configurao do mesmo abaixo, e v direto para a "Automatizao da varredura" * Instalao e configurao do ClamAV

Para instalar o ClamAV necessrio adicionar um grupo e um usurio chamados clamav, da seguintes forma: # pw group add clamav -g 130 # pw user add clamav -c "Clam AntiVirus" -d "/nonexistent" -s "/sbin/nologin" -u 130 -g 130 Efetue o download da ltima verso estvel a partir de seu site, atualmente a 0.65, disponvel em http://unc.dl.sourceforge.net/sourceforge/clamav/clamav-0.65.tar.gz. Descompacte este arquivo no diretrio /tmp, ser criado o diretrio clamav-0.65, acesse-o. Digite os seguintes comandos: # ./configure # make # make install Os executveis sero instalados em /usr/local/bin e /usr/local/sbin, e o arquivo de configurao fica em /usr/local/etc/clamav.conf. Crie ainda o diretrio /var/clamav, com dono clamav e permisso 700, e tambm o diretrio /var/log/clamav. Copie o arquivo de configurao abaixo para /usr/local/etc/clamav.conf. Para maiores detalhes, consulte "man clamav.conf". -------------------- Arquivo clamav.conf -------------------# clamav.conf # Arquivo de log. LogFile /var/log/clamav/clamd.log # Para permitir multiplas instancias com o mesmo arquivo de log # descomente a linha abaixo. #LogFileUnlock # Tamanho maximo em bytes do arquivo de log. O valor 0 eh ilimitado. LogFileMaxSize 0 # Coloca data e hora em cada linha do log. LogTime # Usar o Syslog. #LogSyslog # Aumenta o detalhamento do log. #LogVerbose # Caso desejado salvar o PID em arquivo. #PidFile /var/run/clamd.pid # Diretorio contendo arquivos .db. DataDirectory /usr/local/share/clamav # Caminho para o socket local. LocalSocket /var/clamav/clamd # Remove sockets travados. FixStaleSocket # Porta TCP. #TCPSocket 3310 # Endereco IP. A linha abaixo fornece alguma protecao, ja # que iremos trabalhar apenas localmente. TCPAddr 127.0.0.1 # Tamanho maximo da fila de conexoes pendentes. #MaxConnectionQueueLength 30 # Stream de entrada sera salvo no disco antes de ser scanneado. #StreamSaveToDisk # Limite de tamanho do STREAM. Se excedido fecha a conexao. #StreamMaxLength 10M # Numero maximo de threads simultaneas. O padrao eh 5. MaxThreads 20 # Tempo maximo em segs para cada thread. O padrao eh 180. #ThreadTimeout 500

# Profundidade maxima de varredura de diretorios. MaxDirectoryRecursion 50 # Segue links simbolicos de diretorios. #FollowDirectorySymlinks # Segue links simbolicos de arquivos. #FollowFileSymlinks # Intervalo em segs entre cada verificacao da integridade interna. # O padrao eh 3600. #SelfCheck 600 # Comando executado quando um virus eh encontrado. # Nao deve ser usado para deletar ou mover arquivos. # %v = nome do virus / %f = nome do arquivo #VirusEvent /usr/local/bin/send_sms 123456789 "VIRUS ALERT: %f: %v" # Usuario sob o qual ira rodar. User clamav # Habilita grupos adicionais se o usuario clamav participar de algum. #AllowSupplementaryGroups # Nao roda em background. Util para debug. #Foreground # Habilita mensagens de debug. #Debug # Descomentar a linha abaixo se for varrer arquivos de e-mail. #ScanMail # Comentar a linha abaixo para desabilitar a varredura de arquivos. ScanArchive # Suporte a arquivos compactados RAR. #ScanRAR # Tamanho maximo de arquivo scanneado. O valor 0 eh ilimitado. ArchiveMaxFileSize 50M # Recursao maxima em arquivos compactados (um dentro do outro). ArchiveMaxRecursion 10 # Numero maximo de arquivos dentro de algum compactado. ArchiveMaxFiles 1000 # Limita a memoria para descompressao bzip2. #ArchiveLimitMemoryUsage -------------------- Fim do arquivo clamav.conf -------------------Aps isso, teste o ClamAV atravs do scanner de linha de comando, executando o seguinte: # clamascan -r /usr/originais/clamav-0.65.tar.gz Dever aparecer a seguinte linha: /usr/originais/clamav-0.65.tar.gz: ClamAV-Test-Signature FOUND Este scanner de linha de comando (clamscan) o programa que iremos utilizar para fazer a varredura nos arquivos. O daemon (clamd) no ser utilizado para esta tarefa. Aps isso, devemos configurar o sistema de atualizao automtica. Prepare o arquivo de log da atualizao, atravs dos seguintes comandos: # touch /var/log/clamav/clam-update.log # chown clamav /var/log/clamav/clam-update.log # chmod 600 /var/log/clamav/clam-update.log Adicione a seguinte linha ao arquivo /etc/crontab: 0 */4 * * * root /usr/local/bin/freshclam --quiet -l /var/log/clamav/clamupdate.log

Isto far com que o ClamAV seja atualizado a cada quatro horas, de acordo com a documentao do mesmo este o perodo mnimo sugerido. Crie um script para rotacionar o log do ClamAV, coloque-o em /usr/local/script/rotate_log_clamav.sh. Crie tambm o diretrio /var/log/clamav/oldlog. -------------------- Arquivo rotate_log_clamav.sh -------------------#!/bin/sh # Define o nome para arquivamento OLD_UPDATE_LOG=/var/log/clamav/oldlog/clam-update.log.`date +%y%m%d-%H%M%S` # move o arquivo para o diretorio de arquivamento mv /var/log/clamav/clam-update.log `echo $OLD_UPDATE_LOG` # cria novamente o arquivo de log do update touch /var/log/clamav/clam-update.log chown clamav /var/log/clamav/clam-update.log chmod 600 /var/log/clamav/clam-update.log # compacta o arquivado /usr/bin/gzip $OLD_UPDATE_LOG # apaga os logs com mais de um ano find /var/log/clamav/oldlog -mtime +365 -exec rm -f {} \; -------------------- Fim do arquivo rotate_log_clamav.sh -------------------Edite o arquivo /etc/crontab e adicione a seguinte linha: 20 0 1 * * root /usr/local/script/rotate_log_clamav.sh Isto far com que o arquivo de log seja rotacionado 0h20min do primeiro dia de cada ms. * Automatizao da varredura Agora temos um antivrus instalado e funcionando, basta automatizar a tarefa de varredura. Para isso crie um script com o nome /usr/local/script/varredura_antivirus.sh, como o exemplo abaixo, e adapte-o para as suas necessidades. A permisso deve ser 700. -------------------- Arquivo varredura_antivirus.sh -------------------#!/bin/sh COMANDO="/usr/local/bin/clamscan --quiet --log=/var/log/clamav/clamscan.log -recursive --move=/var/infectados --max-files=100 --max-space=100M --maxrecursion=15" $COMANDO /home $COMANDO --mbox /var/mail -------------------- Fim do arquivo varredura_antivirus.sh -------------------Desta forma, ser feita a varredura e os arquivos infectados encontrados sero movidos para o diretrio /var/infectados. No esquea de criar este diretrio e atribuir o dono clamav. Ser criado tambm o arquivo de log /var/log/clamav/clamscan.log. Agende a execuo deste script no Cron, para o horrio que for mais conveniente. Por exemplo, para fazer a varredura todo dia s 2 horas, insira a seguinte linha no arquivo /etc/crontab: 0 2 * * * root /usr/local/script/varredura_antivirus.sh

3.4.8 - Backup
* rsync
Fazer backup e ter certeza de que ele funciona uma das coisas mais importantes que podem ser feitas para proteger os dados armazenados em um servidor. Geralmente no se pode prever acidentes, ataques, desastres e outros tipos de eventos que iro prejudicar os dados ou o prprio hardware. Quanto ao hardware, podemos consertar, utilizar outra mquina ou mesmo receber outra do seguro, ou seja, algo que tem preo, pode ser comprado. J os dados e arquivos dos usurios na maioria das vezes so insubstituveis, podendo representar anos de trabalho, e a sua perda algo que pode parar uma empresa ou ao menos afetar muito o andamento dos processos. A est a importncia de existir um backup recente que possa ser restaurado no caso de qualquer incidente. A estratgia de backup adotada nesta seo simples e barata. Temos uma segunda mquina, que ser o servidor de backup, conectada via rede ao servidor do qual ser feito o backup, que ser denominado cliente de backup. O backup ser feito no disco rgido do servidor de backup. O programa utilizado ser o rsync, cuja finalidade prover um sistema

de transferncia de arquivos rpido e incremental. No primeiro backup o rsync ir copiar todos os arquivos para a mquina destino. Aps isso, em cada backup ele ir apenas atualizar os arquivos que esto no backup, sincronizando-os com os originais. Desta forma so transferidos pela rede apenas as diferenas entre os arquivos original e backup, tornando o processo mais rpido. A pgina do rsync rsync.samba.org. Efetue o download do source da ltima verso do rsync a partir de http://samba.org/ftp/rsync/. A verso atual 2.6.0 e seu arquivo chama-se rsync-2.6.0.tar.gz. Descompacte este arquivo no /tmp. Ser criado o diretrio /tmp/rsync-2.6.0, acesse-o e digite os comandos abaixo: # ./configure # make # make install O executvel ser instalado em /usr/local/bin/rsync. Remova agora o diretrio /tmp/rsync-2.6.0. O rsync um programa muito verstil, veja suas funcionalidades na sua man page (man rsync). Iremos utiliz-lo da seguinte forma: o servidor de backup ir rodar o rsync como um daemon, com mdulos diferentes para cada servidor do qual se deseja fazer backup (clientes de backup). Os mdulos so locais de armazenamento pr-definidos em que apenas determinado usurio e senha tero acesso. Cada cliente de backup ter agendado no seu Cron um processo rsync que ir sincronizar os arquivos originais com os arquivos do seu mdulo no servidor de backup. O rsync dever ser instalado no servidor de backup e tambm em cada cliente. * Configurao no servidor de backup No servidor de backup, crie o arquivo /usr/local/etc/rsyncd.conf, seguindo e adaptando o exemplo abaixo. A man page deste arquivo acessvel atravs de "man rsyncd.conf". -------------------- Arquivo rsyncd.conf -------------------# rsyncd.conf # Usuario sob o qual o rsync ira rodar. uid=root # Grupo sob o qual o rsync ira rodar. gid=wheel # Arquivo de log. log file = /var/log/rsyncd.log # Modulo para o servidorz. [servidorz] # Caminho onde fica o espaco para este modulo. path = /backup/servidorz # Usuario(s) autorizado(s). auth users = servidorzbak # Arquivo de senhas. secrets file = /usr/local/etc/rsyncd.secrets # Permitir gravacao. read only = false # Nao incluir este modulo quando solicitada a listagem. list = false # Hosts permitidos a conectar. Especificar o IP do # cliente de backup. hosts allow = 10.2.3.4 # Modulo para o servidorb. [servidorb] path = /backup/servidorb auth users = servidorbbak secrets file = /usr/local/etc/rsyncd.secrets read only = false list = false hosts allow = 10.5.6.7 -------------------- Fim do arquivo rsyncd.conf -------------------Para cada "path" especificado dever ser criado o diretrio correspondente. Neste exemplo, devemos criar manualmente os diretrios /backup, /backup/servidorz e /backup/servidorb, e atribuir a permisso 700 a todos. O dono destes

diretrios deve ser o root. Dever ser criado ainda o arquivo /usr/local/etc/rsyncd.secrets, que contm as senhas dos usurios de cada mdulo. Estes usurios no precisam existir no sistema. -------------------- Arquivo rsyncd.secrets -------------------# rsyncd.secrets # Formato: # usuario:senha servidorzbak:senhaX servidorbbak:senhaY -------------------- Fim do arquivo rsyncd.secrets -------------------Os arquivos rsyncd.conf e rsyncd.secrets devero ter permisso 600. Crie um script de inicializao para o rsync, com os seguintes comandos para inicializao e shutdown, respectivamente: /usr/local/bin/rsync --daemon --config=/usr/local/etc/rsyncd.conf e killall rsync * Configurao no cliente de backup No servidor ou mquina da qual se deseja fazer backup (cliente de backup), crie um script como o exemplo abaixo, com a permisso 700. Adapte-o para cada cliente de backup e tambm para incluir todos os locais que se deseja fazer backup: -------------------- Arquivo backup.sh -------------------#!/bin/sh # Comando rsync. RSYNC='/usr/local/bin/rsync -avR --delete --numeric-ids --passwordfile=/usr/local/etc/rsync.password' # Destino do backup. Ajuste o ip do servidor de backup. # Formato: login_do_modulo@ip_do_servidor_backup::modulo/ DEST='servidorz@10.20.30.40::servidorz/' # Arquivo de log. LOG='/var/log/backup.log' # Grava a data/hora de inicio do backup. echo -e "\nInicio do backup - `date`\n" >> $LOG ########## # Para fazer backup do /home. $RSYNC /home $DEST >> $LOG 2>&1 # Para fazer backup do /usr/local/apache2/htdocs. $RSYNC /usr/local/apache2/htdocs $DEST >> $LOG 2>&1 ########## # Grava a data/hora de fim do backup. echo -e "\nFim do backup - `date`\n" >> $LOG -------------------- Fim do arquivo backup.sh -------------------Crie ainda o arquivo /usr/local/etc/rsync.password. O contedo deste arquivo dever ser apenas uma linha com a senha que foi configurada no servidor de backup para este mdulo. Ateno na permisso deste arquivo, dever ser 600. Por fim, agende a execuo do backup no Cron. Edite o arquivo /etc/crontab e adicione uma linha para executar o script na freqncia desejada. O exemplo abaixo ir executar nas segundas, quartas e sextas-feiras s 2 horas: 0 2 * * 1,3,5 root /usr/local/script/backup.sh Para executar o backup todo dia, insira uma linha como a seguinte: 0 2 * * * root /usr/local/script/backup.sh Outro ponto a ser observado que o arquivo de log pode se tornar demasiado grande, neste caso implemente um script que faa a rotao desse log e agende sua execuo no Cron.

3.4.9 - Autenticao RADIUS


* FreeRADIUS
RADIUS a sigla de Remote Authentication Dial In User Service. um padro de autenticao, autorizao e accounting ("contabilizao") muito utilizado para as situaes em que um equipamento de acesso remoto, como um NAS (Network Access Server), precisa autenticar usurios de conexes discadas, como no caso de um provedor. O RADIUS trabalha em um modelo cliente/servidor, onde o NAS o cliente. O servidor responsvel por receber o pedido de conexo, autenticar o usurio, e autorizar, ou no, que seja estabelecida a conexo dial-up entre o usurio e o NAS. A comunicao entre o Servidor RADIUS e o NAS feita atravs do protocolo UDP, nas portas 1812 (autenticao - radius) e 1813 (accounting - radacct). O padro RADIUS definido pela RFC2865. O servidor que iremos utilizar o FreeRADIUS, que define-se como um servidor RADIUS de alta performance e altamente configurvel. Sua pgina www.freeradius.org. Efetue o download do source da ltima verso estvel do FreeRADIUS a partir de ftp://ftp.freeradius.org/pub/radius/. A verso atual 0.9.3 e o arquivo chama-se freeradius-0.9.3.tar.gz. Descompacte este arquivo no /tmp e acesse o diretrio que ser criado, /tmp/freeradius-0.9.3. Execute os seguintes comandos: # ./configure --localstatedir=/var # make # make install Ser criado automaticamente o diretrio /var/log/radius, onde ficaro todos os logs. Ser instalado o daemon radiusd no diretrio /usr/local/sbin, e os utilitrios abaixo no diretrio /usr/local/bin: radclient -> emula um cliente RADIUS, enviando pacotes para o servidor e mostrando a resposta. radlast -> mostra as ltimas conexes de usurios. radtest -> frontend para o radclient, utilizado para testar o servidor. radwho -> mostra os usurios conectados. radrelay -> replica dados de accounting para outro servidor RADIUS. radwatch -> no utilizado, instalado apenas por razes histricas. radzap -> efetua a limpeza da base de dados de sesses ativas. Os arquivos de configurao ficam no diretrio /usr/local/etc/raddb, acesse-o. O arquivo clients.conf guarda a configurao de quais clientes RADIUS iremos aceitar pedidos. Uma entrada de localhost como cliente ir permitir que sejam efetuados testes com o utilitrio radtest. Segue abaixo um exemplo do arquivo, que dever ter a permisso 600: -------------------- Arquivo clients.conf -------------------# clients.conf # Definicao do cliente 127.0.0.1 client 127.0.0.1 { # Secret do NAS secret = secretX # Apelido shortname = localhost # Tipo de NAS nastype = other } # Definicao do cliente 10.20.30.40. # Este devera ser o seu NAS. client 10.20.30.40 { secret = secretY shortname = nas-1 nastype = usrhiper } # Tipos de NAS (nastype) permitidos: # # cisco - Cisco Access Server

# computone - Computone PowerRack # livingston - Livingston PortMaster # max40xx - Ascend Max 4000 family # multitech - Multitech CommPlete Server # netserver - 3Com/USR NetServer # pathras - Cyclades PathRAS # patton - Patton 2800 # portslave - Cistron PortSlave # tc - 3Com/USR TotalControl # usrhiper - 3Com/USR Hiper Arc Total Control # other -------------------- Fim do arquivo clients.conf -------------------O prximo arquivo o naspasswd, que guarda o login e a senha de acesso administrativo de cada NAS para fazer a verificao se um cliente j est conectado ou no, caso se deseje limitar o login simultneo. Este arquivo s necessrio para os tipos de NAS que no permitem fazer essa verificao via SNMP ou finger, que so os seguintes: 3Com/USR TotalControl, 3Com/USR NetServer e Cyclades PathRAS. O arquivo dever ter a permisso 600, e possui o seguinte contedo: -------------------- Arquivo naspasswd -------------------# naspasswd # Formato: # ip_do_nas login senha 10.20.30.40 admin senhaX -------------------- Fim do arquivo nasspasswd -------------------O FreeRADIUS poder checar o login e senha dos usurios do sistema ou ento poder ser cadastrado cada usurio no arquivo "users". O mais recomendado que haja uma mquina dedicada para isso, e sejam utilizados o login e senha do sistema para a autenticao, ou seja, cada usurio criado no FreeBSD ser um usurio do provedor. Segue um exemplo do arquivo users abaixo, que dever ter permisso 600: ---------- Arquivo users -------------------# users # Desativa o acesso do usuario beltrano. #beltrano Auth-Type := Reject # Reply-Message = "Seu acesso foi desativado." # Desativa o acesso dos usuarios do grupo 'desativados'. #DEFAULT Group == "desativados", Auth-Type := Reject # Reply-Message = "Seu acesso foi desativado." # Para cadastrar os usuarios neste arquivo, insira as 4 linhas # abaixo para cada usuario. # #fulano Auth-Type := Local, User-Password == "senhaY" # Service-Type = Framed-User, # Framed-Protocol = PPP, # Framed-Compression = Van-Jacobson-TCP-IP # Padrao para efetuar a checagem de senha no sistema. # Comentar caso seja feito o cadastro dos usuarios neste arquivo. # Ajuste o parmetro Simultaneous-Use para o numero de conexoes # simultaneas permitidas com o mesmo login. DEFAULT Auth-Type := System, Simultaneous-Use := 1 Service-Type = Framed-User, Framed-Protocol = PPP, Framed-Compression = Van-Jacobson-TCP-IP -------------------- Fim do arquivo users -------------------O arquivo de configurao principal do FreeRADIUS o radiusd.conf. Faa uma cpia do original para ter como referncia, e leia todos os seus comentrios. No exemplo abaixo foram retiradas algumas opes. -------------------- Arquivo radiusd.conf -------------------# radiusd.conf prefix = /usr/local exec_prefix = /usr/local

sysconfdir = /usr/local/etc localstatedir = /var/radius sbindir = /usr/local/sbin logdir = /var/log/radius raddbdir = /usr/local/etc/raddb radacctdir = /var/log/radacct confdir = /usr/local/etc/raddb run_dir = /var/run/radiusd libdir = /usr/local/lib log_file = /var/log/radius/radius.log pidfile = /var/run/radiusd/radiusd.pid # Usuario sob o qual o daemon ira rodar. # Caso comentado ira rodar sob o usuario que o inicializou. #user = nobody # Grupo sob o qual o daemon ira rodar. # Caso comentado ira rodar sob o grupo do usuario que o inicializou. #group = nobody # Tempo maximo em segundos para processar um pedido. max_request_time = 30 delete_blocked_requests = no cleanup_delay = 5 # Numero maximo de pedidos em andamento. O recomendado eh # 256 * numero de NAS. max_requests = 256 # Endereco IP local utilizado. Ira aceitar pedidos nesta interface de # rede e ira enviar as respostas tambem por esta. #bind_address = 10.1.2.3 # Porta utilizada. Alguns NAS ainda utilizam o padrao # antigo, que eh 1645. port = 1812 hostname_lookups = no allow_core_dumps = no regular_expressions = yes extended_expressions = yes log_stripped_names = no # Logar ou nao pedidos de autenticacao no arquivo radius.log. log_auth = no # Logar ou nao senhas invalidas. log_auth_badpass = no # Logar ou nao senhas corretas. log_auth_goodpass = no usercollide = no lower_user = after lower_pass = no nospace_user = after nospace_pass = no checkrad = /usr/local/sbin/checkrad security { max_attributes = 200 reject_delay = 1 status_server = no } proxy_requests = no $INCLUDE /usr/local/etc/raddb/clients.conf snmp = no

thread pool { start_servers = 5 max_servers = 32 min_spare_servers = 3 max_spare_servers = 10 max_requests_per_server = 0 } modules { pap { encryption_scheme = crypt } unix { cache = no cache_reload = 0 radwtmp = /var/log/radius/radwtmp } preprocess { with_ascend_hack = no ascend_channels_per_line = 23 with_ntdomain_hack = no with_specialix_jetstream_hack = no with_cisco_vsa_hack = no } files { usersfile = /usr/local/etc/raddb/users acctusersfile = /usr/local/etc/raddb/acct_users compat = no } detail { detailfile = /var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m detailperm = 0600 } detail auth_log { detailfile = /var/log/radius/radacct/%{Client-IP-Address}/auth-detail-%Y%m detailperm = 0600 } acct_unique { key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-PortId" } radutmp { filename = /var/log/radius/radutmp username = %{User-Name} case_sensitive = no check_with_nas = yes perm = 0600 callerid = "yes" } attr_filter { attrsfile = /usr/local/etc/radius/attrs } always fail { rcode = fail } always reject { rcode = reject } always ok {

rcode = ok simulcount = 0 mpp = no } expr { } } instantiate { expr } authorize { preprocess auth_log files } authenticate { Auth-Type PAP { pap } unix } preacct { preprocess files } accounting { acct_unique detail unix radutmp } session { radutmp } -------------------- Fim do arquivo radiusd.conf -------------------Execute ainda os seguintes comandos, para que no sejam utilizados arquivos de configurao obsoletos, que so includos apenas por motivo histricos: # # # # cd mv mv mv /usr/local/etc/raddb naslist naslist.OFF clients clients.OFF realms realms.OFF

Feitas estas configuraes, o servidor pode ser inicializado e testado. Execute o /usr/local/sbin/radiusd e verifique o arquivo de log, em /var/log/radius/radius.log. Na ltima linha dever constar a seguinte frase logo aps a inicializao: Info: Ready to process requests. Agora teste o servidor, com o utilitrio radtest. Execute a linha de comando abaixo, substituindo os valores usuario e senha por um username e senha vlidos no seu sistema e secretX pelo secret do cliente 127.0.0.1 definido no arquivo clients.conf: # radtest usuario senha 127.0.0.1 10 secretX Dever aparecer a string Access-Accept como resultado. Tente novamente o comando com uma senha incorreta, e veja se aparece a string Access-Reject como retorno. O arquivo de log do daemon o /var/log/radius/radius.log. Alm deste, temos outros dois tipos de log, em /var/log/radius/radacct. Um o detail-aaaamm, onde aaaamm ser o ano e o ms corrente, este arquivo guarda o log de accounting. O outro chama-se auth-detail-aaaamm, e registra todos os pedidos de autorizao (login) para conexo. Crie um script de inicializao para o FreeRADIUS, em /usr/local/etc/rc.d/freeradius.sh, com a permisso 700 e os seguintes comandos para inicializao e shutdown, respectivamente:

/usr/local/sbin/radiusd e kill `cat /var/run/radiusd/radiusd.pid`

3.5 - Servio de Rede, Controle e Segurana 3.5.1 - DNS


* ISC BIND9
* Introduo ao DNS O DNS - Domain Name System - um banco de dados hierrquico e distribudo. Ele guarda os dados que possibilitam descobrir endereos IP de mquinas a partir do hostname das mesmas, e vice-versa, e tambm informaes sobre roteamento de e-mail e outras. Os clientes consultam os servidores DNS atravs de uma biblioteca 'resolver'. O DNS definido originalmente pelas RFCs 1034, 1035 e outras. * Domnios Os dados armazenados no DNS so identificados por nomes de domnios, que so organizados em formato de rvore invertida. Cada ramificao representa um domnio, e o endereo completo de um ponto especfico determinado atravs da ligao de todas as ramificaes daquele ponto at a raiz, veja o exemplo abaixo.

Cada n da rvore um domnio, mesmo que o n seja terminal, ou seja, que no possua subdomnios. Podemos concluir tambm que cada subdomnio um domnio, e cada domnio um subdomnio, exceto o Root Domain, ou seja, a raiz da rvore. * Zonas Uma zona (zone) um espao de nomes - um pedao contnuo da rvore DNS - que foi delegado a um determinado servidor de nomes. Este servidor ir possuir todas as informaes referentes esta zona, e ir possuir autoridade para responder qualquer requisio referente a ela. Pertencem a esta zona todas as ramificaes da rvore a partir do ponto onde foi delegada a autoridade, exceto as ramificaes que pertencem a outras zonas. Uma zona pode englobar um domnio inteiro ou apenas parte de um domnio. Cada zona possui ao menos um servidor de nomes autoritrio - Authoritative Name Server. * Servidor Mestre Primrio (Primary Master) Tambm chamado de servidor primrio, o servidor autoritrio onde mantida a cpia mestre dos dados sobre a zona. Os dados so carregados a partir de arquivos chamados "arquivos de zonas". * Servidor Escravo (Slave Server) Conhecido como servidor secundrio, tambm um servidor autoritrio sobre a zona. Busca os dados sobre a zona a partir do servidor primrio usando um processo de replicao chamado "zone transfer".

* Resource Records (RRs) Os Resource Records so registros que apontam diferentes servios em um arquivo de zona. So padronizados pela RFC1034 e outras subseqentes. Os principais tipos so: SOA -> Incio de uma zona autoritria NS -> Servidor de nomes autoritrio A -> Endereo de host CNAME -> Apelido MX -> Mail eXchanger PTR -> Ponteiro (utilizado para DNS reverso) O formato destas entradas no arquivo de zona : nome_registro IN tipo valor * Instalao e Configurao do BIND O BIND - Berkeley Internet Name Domain - um software mantido pelo Internet Software Consortium que implementa uma biblioteca 'resolver' e um servidor de nomes, o named. utilizado pela maior parte dos servidores DNS na Internet, incluindo os Root Name Servers. Possui atualmente as distribuies 8, que ainda est sendo utilizada, e 9, que implementa mais funcionalidades e a que iremos utilizar. Uma das principais mudanas em relao verso 8 que a 9 implementa o suporte a Views, que permite que um servidor seja visualizado de formas diferentes dependendo do cliente, por exemplo, possvel definir uma vista interna para alguns clientes, e uma vista externa para os outros. O site do BIND www.isc.org/products/BIND. Primeiramente desative o BIND que vem na instalao padro do FreeBSD. Execute os seguintes comandos: # mv /usr/sbin/named /usr/sbin/named.OFF # mv /etc/namedb /etc/namedb.OFF # rm /usr/share/man/man8/named* A verso atual do BIND9 a 9.2.3, efetue o seu download a partir de algum mirror disponvel no site ou de ftp://ftp.isc.org/isc/bind9/9.2.3/bind-9.2.3.tar.gz. Descompacte o arquivo no /tmp e acesse o diretrio que ser criado. Execute os comandos abaixo: # ./configure --sysconfdir=/usr/namedb --disable-threads # make # make install Crie agora o usurio e o grupo named, da seguinte forma: # pw group add named -g 170 # pw user add named -c "Bind" -d "/nonexistent" -s "/sbin/nologin" -u 170 -g 170 Crie os diretrios /etc/namedb, com dono named e permisso 700. Todos os arquivos dentro deste diretrio devero ter o dono named e permisso 600. Crie tambm o diretrio /var/log/named, onde o named ir guardar seus arquivos de log. O dono dever ser named tambm, e a permisso 700. * Configurao Simples Para efetuar este esquema de configuraes simples, tomaremos como base os seguintes dados hipotticos: Domnio: exemplo.org Servidor DNS: ns1.exemplo.org - IP 192.168.0.5 Servidor de E-Mail: mail.exemplo.org - IP 192.168.0.8 Servidor de Web e FTP: {www, ftp}.exemplo.org - IP 192.168.0.10 V at o diretrio /etc/namedb e efetue o download do arquivo named.root, que indica os Root Name Servers: # fetch ftp.internic.net/domain/named.root Crie o arquivo named.conf. Este ser o arquivo de configurao principal do named, que ele ir ler na inicializao. -------------------- Arquivo named.conf -------------------# named.conf options { # Diretorio onde ficam os arquivos de configuracao. directory "/etc/namedb"; # Arquivo que armazena o PID. pid-file "/var/log/named/named.pid";

# Para nao anunciar a versao, caso solicitado. version ""; }; # Direcionar o log para o arquivo /var/log/named/named.log logging { channel "named_log" { file "/var/log/named/named.log" versions 3 size 5m; print-time yes; print-category yes; print-severity yes; }; category "default" { "named_log"; }; }; # Desabilita os canais de controle via rndc. controls {}; # Root Domain. # Especifica o arquivo que ira indicar os Root Name Servers, # que sao os responsaveis pela raiz do DNS. zone "." { type hint; file "named.root"; }; # Reverso da zona localhost zone "0.0.127.in-addr.arpa." { # Este eh o servidor primary master desta zona. type master; # Arquivo de zona. file "localhost.REV"; # Nao notificar sobre alteracoes desta zona. notify no;

};

# Zona exemplo.org zone "exemplo.org" { type master; file "exemplo.org.DB"; }; # Reverso da zona exemplo.org zone "0.168.192.in-addr.arpa." { type master; file "exemplo.org.REV"; }; -------------------- Fim do arquivo named.conf -------------------Agora devem ser criados todos os arquivos de zonas. Veja os exemplos abaixo: ---------- Arquivo exemplo.org.DB -------------------; exemplo.org.DB $TTL 3600 ; Zona exemplo.org. 1 IN SOA ns1.exemplo.org. admin.exemplo.org. ( ; serial

10800 3600 604800 86400 )

; ; ; ;

refresh retry expire minimum

; Servidores DNS @ IN NS ; Nomes de hosts localhost IN A ns1 IN A mail IN A www IN A @ IN A ; Apelidos ftp

ns1.exemplo.org.

127.0.0.1 192.168.0.5 192.168.0.8 192.168.0.10 192.168.0.10

IN CNAME

www

; Servidores de e-mail @ IN MX 10 mail.exemplo.org. -------------------- Fim do arquivo exemplo.org.DB -------------------No arquivo acima, temos as seguintes configuraes: $TTL: o tempo de vida das configuraes deste arquivo, se algum outro servidor fizer cache destas informaes ele guardar apenas pelo tempo determinado. Zona: a entrada "IN SOA" (Start Of Authority). Especifica a zona sobre a qual temos autoridade, e qual servidor primrio responde por ela. Tambm especificado o endereo de e-mail do administrador, substituindo a arroba por ponto, por exemplo, admin@exemplo.org deve ser inserido como admin.exemplo.org. Os parmetros entre parnteses so, na ordem: serial: nmero serial da configurao, que deve ser incrementado toda vez que feita alguma mudana. refresh: tempo em segundos em que os servidores slave desta zona devero atualizar os seus dados, a partir do master. retry: caso algum slave no consiga atualizar os seus dados, dever tentar novamente neste intervalo de tempo, em segundos. expire: se aps este tempo (em segundos), algum slave no conseguiu atualizar seus dados, dever descart-los. minimum: TTL para o cache de respostas negativas. Servidores DNS: so as entradas "IN NS" (Name Server), e indicam os servidores de nomes que possuem informaes sobre a zona em questo. Todos os servidores autoritrios desta zona devero ser includos. A arroba indica a origem, o seja, exemplo.org. Ao invs da arroba poderamos colocar (neste arquivo) exemplo.org, o efeito seria o mesmo. Nomes de Hosts: associam nomes de hosts a seus respectivos endereos IP. So entradas "IN A". Novamente, a arroba indica a origem, ento exemplo.org indicar o endereo 192.168.0.10. Como em todo o arquivo de zona, caso um hostname seja especificado com ponto no final um endereo absoluto. Se for especificado sem um ponto no final, um endereo relativo origem, ou seja www se torna www.exemplo.org. Apelidos: so as entradas CNAME, ou Canonical Name. Associam outros nomes hosts que j esto cadastrados com entradas "IN A", formando aliases. Podem tambm ser usadas para fazer balanceamento de carga, especificando-se o mesmo apelido para vrias mquinas diferentes, ento cada requisio ir para a prxima mquina. Por exemplo: www.exemplo.org IN CNAME www1.exemplo.org www.exemplo.org IN CNAME www2.exemplo.org www.exemplo.org IN CNAME www3.exemplo.org Neste exemplo, as requisies para o endereo www.exemplo.org contero na resposta a indicao das trs mquinas, variando em ordem round-robin, e o cliente normalmente optar pela primeira indicao. Desta forma, a carga distribuda (de uma forma primitiva) entre 3 servidores. Servidores de e-mail: so as entradas "IN MX" (Mail eXchanger). Especificam para qual servidor deve ir os e-mails para o domnio exemplo.org (@). possvel especificar mais de um, ser seguida a ordem da prioridade especificada (10, no exemplo). Quanto mais baixa a prioridade antes ser verificado. Se o de prioridade mais baixa no reconhecer o destinatrio, o e-mail enviado ao servidor com a segunda prioridade mais baixa, e assim por diante. O prximo arquivo de zona o reverso da zona exemplo.org, segue o exemplo abaixo: -------------------- Arquivo exemplo.org.REV --------------------

; exemplo.org.REV $TTL 3600 ; Zona reversa 0.168.192.in-addr.arpa. 1 ; serial 10800 ; refresh 3600 ; retry 604800 ; expire 86400 ) ; minimum ; Servidores DNS @ IN NS IN SOA ns1.exemplo.org. admin.exemplo.org. (

ns1.exemplo.org.

; IPs de Hosts 5 IN PTR ns1 8 IN PTR mail 10 IN PTR www -------------------- Fim do arquivo exemplo.org.REV -------------------O objetivo deste arquivo fazer a relao entre endereos IPs e hostnames, ou seja, dado um determinado endereo IP descobre-se o hostname. O arquivo segue mais ou menos o mesmo formato do anterior, apenas algumas diferenas: Zona reversa: especificada no formato da faixa de IPs invertida mais a string ind-addr.arpa. Neste arquivo os IPs so todos lidos da direita para a esquerda, desta forma uma mquina com o IP 192.168.0.5 ter uma entrada 5.0.168.192.inaddr.arpa. Ao invs de especificar a zona "0.168.192.in-addr.arpa." poderamos apenas especificar "@", j que a @ ser substituda pela origem, que est no arquivo named.conf como "0.168.192.in-addr.arpa.", para este arquivo. IPs de Hosts: so especificados por meio de entradas "IN PTR", relacionando endereos IP a hostnames. O outro arquivo de configurao que foi especificado no named.conf o localhost.REV, que a zona reversa da mquina local. Segue o exemplo: -------------------- Arquivo localhost.REV -------------------; localhost.REV $TTL 3600 ; Zona 0.0.127.in-addr.arpa. IN SOA 1 ; serial 3600 ; refresh 900 ; retry 3600000 ; expire 3600 ) ; minimum ; Servidores DNS @ IN NS ns1 ns1.exemplo.org. admin.exemplo.org. (

; IPs de hosts 1 IN PTR localhost -------------------- Fim do arquivo localhost.REV -------------------Com estes arquivos no lugar, possvel inicializar e testar o named. Execute o comando a seguir: # /usr/local/sbin/named -u named -c /etc/namedb/named.conf Verifique o arquivo de log, em /var/log/named/named.log e tambm /var/log/messages e veja se no h nenhuma mensagem de erro. Adicione o seu servidor DNS no arquivo /etc/resolv.conf, coloque a primeira entrada "nameserver" apontando para o IP do servidor. Faa alguns testes, com os comandos dig e host, exemplos: # dig www.exemplo.org # host exemplo.org Para maiores detalhes veja as man pages dos comandos dig, host e nslookup. Por fim, faa um script de inicializao para o BIND, com os seguintes comandos para inicializao e shutdown, respectivamente: /usr/local/sbin/named -u named e

kill `cat /var/log/named/named.pid` * Configurao com Views Aps ter feito a configurao acima e estar tudo funcionando corretamente, pode-se partir para esta. Nesta configurao fazemos uso da funcionalidade "Views", que permite que criemos um servidor que ir retornar respostas diferentes dependendo do cliente. Podemos assim criar um servidor DNS que trabalha com um mesmo domnio mas fornecendo endereos de duas redes, uma interna e a outra externa. Esta configurao tambm chamada de Split DNS. Para esta configurao, iremos tomar como base os seguintes dados hipotticos: Domnio: exemplo.org Rede Externa: Servidor DNS: ns1.exemplo.org - IP 192.168.0.5 Servidor de E-Mail: mail.exemplo.org - IP 192.168.0.8 Servidor de Web e FTP: {www, ftp}.exemplo.org - IP 192.168.0.10 Rede Interna: Servidor DNS: ns1.exemplo.org - IP 10.10.0.5 Servidor de E-Mail: mail.exemplo.org - IP 10.10.0.8 Servidor de Web e FTP: {www, ftp}.exemplo.org - IP 10.10.0.10 Os arquivos named.root, localhost.REV, exemplo.org.DB e exemplo.org.REV continuam os mesmos. preciso modificar o arquivo named.conf e criar os arquivos exemplo.org.INTERNA.DB e exemplo.org.INTERNA.REV. Os exemplos esto abaixo: -------------------- Arquivo named.conf -------------------# named.conf options { directory "/etc/namedb"; pid-file "/var/log/named/named.pid"; version ""; }; logging { channel "named_log" { file "/var/log/named/named.log" versions 3 size 5m; print-time yes; print-category yes; print-severity yes; }; category "default" { "named_log"; }; }; controls {}; # Vista Interna view interna { # Clientes que irao visualizar esta view. match-clients { 10.10.0.0/16; }; # Efetua a busca recursiva apenas para clientes internos. recursion yes; # Root Domain. # Igual nas duas views. zone "." { type hint; file "named.root"; }; # Reverso da zona localhost # Igual nas duas views.

zone "0.0.127.in-addr.arpa." { type master; file "localhost.REV"; notify no; }; # Zona exemplo.org interna zone "exemplo.org" { type master; file "exemplo.org.INTERNA.DB"; }; # Reverso da zona exemplo.org interna zone "0.10.10.in-addr.arpa." { type master; file "exemplo.org.INTERNA.REV"; }; }; # Vista Externa view externa { # Serve a qualquer cliente. match-clients { any; }; # No faz buscas recursivas para clientes externos. recursion no; # Root Domain. zone "." { type hint; file "named.root"; }; # Reverso da zona localhost zone "0.0.127.in-addr.arpa." { type master; file "localhost.REV"; notify no; }; # Zona exemplo.org zone "exemplo.org" { type master; file "exemplo.org.DB"; }; # Reverso da zona exemplo.org zone "0.168.192.in-addr.arpa." { type master; file "exemplo.org.REV"; }; }; -------------------- Fim do arquivo named.conf -------------------No arquivo acima, a clusula "match-clients" da View Externa poderia ter sido omitida, pois caso no seja especificada nenhuma "match-clients" dentro de uma View, o padro servir a qualquer cliente. -------------------- Arquivo exemplo.org.INTERNA.DB -------------------; exemplo.org.INTERNA.DB $TTL 3600 ; Zona

exemplo.org. IN SOA ns1.exemplo.org. admin.exemplo.org. ( 1 ; serial 10800 ; refresh 3600 ; retry 604800 ; expire 86400 ) ; minimum ; Servidores DNS @ IN NS ; Nomes de hosts localhost IN A ns1 IN A mail IN A www IN A @ IN A ; Apelidos ftp IN CNAME

ns1.exemplo.org.

127.0.0.1 10.10.0.5 10.10.0.8 10.10.0.10 10.10.0.10 www

; Servidores de e-mail @ IN MX 10 mail.exemplo.org. -------------------- Fim do arquivo exemplo.org.INTERNA.DB --------------------------------------- Arquivo exemplo.org.INTERNA.REV -------------------; exemplo.org.INTERNA.REV $TTL 3600 ; Zona reversa 0.10.10.in-addr.arpa. IN SOA 1 ; serial 10800 ; refresh 3600 ; retry 604800 ; expire 86400 ) ; minimum ; Servidores DNS @ IN NS ns1.exemplo.org. admin.exemplo.org. (

ns1.exemplo.org.

; IPs de Hosts 5 IN PTR ns1 8 IN PTR mail 10 IN PTR www -------------------- Fim do arquivo exemplo.org.INTERNA.REV -------------------* Configurao de DNS Primrio e Secundrio Normalmente para cada zona so definidos no mnimo dois servidores DNS, um primrio e outro secundrio. Conforme descrito anteriormente, o servidor secundrio busca todas as informaes de zonas a partir do servidor primrio, num processo conhecido como "zone transfer". Tomaremos como base a Configurao Simples feita anteriormente, que de um servidor primrio, para adicionar suporte a um servidor secundrio. Tambm iremos ver os arquivos de configurao do servidor secundrio. Domnio: exemplo.org Servidor DNS Primrio: ns1.exemplo.org - IP 192.168.0.5 Servidor DNS Secundrio: ns2.exemplo.org - IP 192.168.0.6 Servidor de E-Mail: mail.exemplo.org - IP 192.168.0.8 Servidor de Web e FTP: {www, ftp}.exemplo.org - IP 192.168.0.10 Os arquivos de zona exemplo.org.DB e exemplo.org.REV, armazenados no servidor primrio, devero se modificados para incluir o novo servidor de nomes, conforme os exemplos abaixo: ---------- Arquivo exemplo.org.DB -------------------; exemplo.org.DB $TTL 3600 ; Zona exemplo.org. IN SOA ns1.exemplo.org. admin.exemplo.org. (

2 10800 3600 604800 86400 )

; ; ; ; ;

serial refresh retry expire minimum

; Servidores DNS @ IN NS @ IN NS ; Nomes de hosts localhost IN A ns1 IN A ns2 IN A mail IN A www IN A @ IN A ; Apelidos ftp IN CNAME

ns1.exemplo.org. ns2.exemplo.org.

127.0.0.1 192.168.0.5 192.168.0.6 192.168.0.8 192.168.0.10 192.168.0.10 www

; Servidores de e-mail @ IN MX 10 mail.exemplo.org. -------------------- Fim do arquivo exemplo.org.DB --------------------------------------- Arquivo exemplo.org.REV -------------------; exemplo.org.REV $TTL 3600 ; Zona reversa 0.168.192.in-addr.arpa. IN SOA 2 ; serial 10800 ; refresh 3600 ; retry 604800 ; expire 86400 ) ; minimum ; Servidores DNS @ IN NS @ IN NS ns1.exemplo.org. admin.exemplo.org. (

ns1.exemplo.org. ns1.exemplo.org.

; IPs de Hosts 5 IN PTR ns1 6 IN PTR ns2 8 IN PTR mail 10 IN PTR www -------------------- Fim do arquivo exemplo.org.REV -------------------Note que os arquivos de zonas acima sofreram um incremento no nmero serial. Cada vez que um arquivo de zona modificado necessrio fazer tal incremento, para que os outros servidores DNS, que buscam dados de zonas neste, saibam que o arquivo foi modificado e que devem atualizar os seus dados locais. Aps isso, d um "killall -HUP named", para que os arquivos sejam re-lidos pelo BIND. Partimos agora para a configurao do servidor secundrio. Siga os mesmos passos da instalao etc. do primeiro servidor, o que ir mudar so apenas os arquivos de configurao. Crie o arquivo named.conf conforme o exemplo abaixo: -------------------- Arquivo named.conf -------------------# named.conf options { directory "/etc/namedb"; pid-file "/var/log/named/named.pid"; version ""; }; logging { channel "named_log" {

file "/var/log/named/named.log" versions 3 size 5m; print-time yes; print-category yes; print-severity yes; }; category "default" { "named_log"; };

};

controls {}; # Root Domain. zone "." { type hint; file "named.root"; }; # Reverso da zona localhost zone "0.0.127.in-addr.arpa." { type master; file "localhost.REV"; notify no; }; # Zona exemplo.org zone "exemplo.org" { type slave; file "exemplo.org.DB"; masters { 192.168.0.5; }; }; # Reverso da zona exemplo.org zone "0.168.192.in-addr.arpa." { type slave; file "exemplo.org.REV"; masters { 192.168.0.5; }; }; -------------------- Fim do arquivo named.conf -------------------Note que no arquivo acima as zonas forward e reverse exemplo.org passaram a ser do tipo slave, especificando que este servidor o escravo, ou secundrio, para estas zonas. O parmetro "file" servir apenas para fazer uma cpia dos dados das zonas nos arquivos especificados, ou seja, no adianta mudar algo nestes arquivos porque o servidor master ir mandar atualizaes dos mesmos e eles sero sobrescritos. O parmetro "masters" indica qual o servidor primrio responsvel por esta zona. Tambm copie para este servidor o arquivo named.root. Crie ainda o arquivo localhost.REV, com a seguinte configurao: -------------------- Arquivo localhost.REV -------------------; localhost.REV $TTL 3600 ; Zona 0.0.127.in-addr.arpa. IN SOA 1 ; serial 3600 ; refresh 900 ; retry 3600000 ; expire ns2.exemplo.org. admin.exemplo.org. (

3600 )

; minimum ns2

; Servidores DNS @ IN NS

; IPs de hosts 1 IN PTR localhost -------------------- Fim do arquivo localhost.REV --------------------

3.5.2 - DHCP (Dynamic Host Configuration Protocol)


* ISC DHCP Server
Um servidor DHCP tem por objetivo fornecer parmetros de configurao, como por exemplo o prprio endereo IP, hosts em uma rede. definido pela RFC2131. O DHCP funciona basicamente da seguinte forma: quando o cliente inicializado ou configurado para obter um endereo IP automaticamente, ele faz broadcasts na porta UDP 68, solicitando suas configuraes. O servidor, aps receber a solicitao, responde na porta UDP 67, fornecendo ao cliente um endereo IP e outras configuraes, como gateway, DNS etc. Essas informaes so "alocadas" ao cliente, sendo que s sero vlidas por um perodo determinado. Caso o cliente ainda esteja na rede quando este perodo acabar, pode solicitar que seja renovada a sua alocao. Iremos utilizar o servidor DHCP fornecido pelo Internet Software Consortium, sua pgina http://www.isc.org/products/DHCP. Este pacote inclui um servidor DHCP (dhcpd), que o que iremos utilizar, um cliente DHCP (dhclient) e um agente de retransmisso DHCP (dhcrelay), que pode ser til caso seja necessrio obter endereos IP de um servidor que no se encontra no mesmo domnio de broadcast que os clientes. Baixe o source da ltima verso estvel, que fica em ftp://ftp.isc.org/isc/dhcp/dhcp-latest.tar.gz. Neste momento, a ltima verso a 3.0pl2. Descompacte o arquivo dhcp-latest.tar.gz no diretrio /tmp, ser criada a pasta /tmp/dhcp-3.0pl2. Acesse essa pasta e digite os seguintes comandos: # ./configure # make # make install O executvel dhcpd ser instalado em /usr/sbin/dhcpd. Copie o arquivo /tmp/dhcp-3.0pl2/server/dhcpd.conf para /etc/dhcpd.conf.sample. Este arquivo um exemplo de configurao, iremos guard-lo como referncia. Remova agora o diretrio /tmp/dhcp-3.0pl2. A configurao do servidor DHCP consiste em apenas um arquivo, que ir ficar em /etc/dhcpd.conf. Este arquivo define, por exemplo, quais os endereos IP disponveis para alocao, qual o gateway etc. Atribua a permisso 600 a este arquivo. Segue abaixo um exemplo comentado deste arquivo: -------------------- Arquivo dhcpd.conf -------------------# dhcpd.conf # Dominio. option domain-name "exemplo.org"; # Servidores DNS. option domain-name-servers 10.10.0.5, 10.10.0.6; # Servidores WINS. # Descomentar caso utilizado. #option netbios-name-servers 10.10.0.9; # Tempo padrao de alocacao em segundos. # Se o cliente no especificar nenhum periodo de tempo # sera atribuido este. default-lease-time 600; # Tempo maximo de alocacao em segundos. # Tempo maximo que o cliente podera alocar o IP. # Apos isso deve renovar a alocacao. max-lease-time 7200; # Nao tentar atualizar o DNS.

ddns-update-style none; # Caso este servidor nao seja o oficial para esta rede o # parametro abaixo devera ser comentado. authoritative; # O log eh feito pelo syslog. log-facility daemon; # Declaracao de Subrede. subnet 10.10.0.0 netmask 255.255.0.0 { # Faixa de IPs disponiveis para alocar. range 10.10.20.1 10.10.20.100; # Gateway. option routers 10.10.0.5; } # Declaracao de um cliente especifico. # Pode ser especificado um IP fixo, que nao deve estar na faixa # de disponiveis para alocacao acima. host maquina10 { # Endereco MAC do host. hardware ethernet 08:00:07:26:c0:a5; # Endereco fixo. fixed-address 10.10.30.10; # Tempo padrao de alocacao em segundos. default-lease-time 86400; # Tempo maximo de alocacao em segundos. max-lease-time 864000; } -------------------- Fim do arquivo dhcpd.conf -------------------Deve ser criado um arquivo em branco onde o DHCP ir armazenar as informaes sobre as alocaes, para seu controle. Execute os seguintes comandos: # touch /var/db/dhcpd.leases # chmod 600 /var/db/dhcpd.leases Para que o log seja direcionado para um arquivo especfico, edite o arquivo /etc/syslog.conf e adicione as seguintes linhas: !dhcpd *.* # # # # /var/log/dhcp/dhcpd.log

Crie ento o diretrio /var/log/dhcp e o arquivo dhcpd.log, ambos com permisso 600, e reinicialize o syslog: mkdir /var/log/dhcp touch /var/log/dhcp/dhcpd.log chmod -R 600 /var/log/dhcp killall -HUP syslogd

Poder ser criado um script para rotacionar o log do DHCP, para o mesmo no se tornar demasiado grande. Aps isso, inicialize o seu servidor DHCP executando o comando abaixo (substitua xl0 pela sua interface de rede que ir servir DHCP): # /usr/sbin/dhcpd xl0 Efetue alguns testes, com mquinas clientes utilizando configurao automtica de IP. Verifique o arquivo de log, em /var/log/dhcp/dhcpd.log. Verifique tambm o arquivo de alocaes, em /var/db/dhcpd.leases. Toda vez que for feita alguma modificao no arquivo dhcpd.conf, o dhcpd dever ser parado e inicializado novamente. Faa um script de inicializao, com os seguintes comandos para inicializao e shutdown, respectivamente (substitua xl0 pela sua interface de rede que ir servir DHCP): /usr/sbin/dhcpd xl0 -q

e killall dhcpd

3.5.2 - Firewall
* IPFW2
O IPFIREWALL o filtro de pacotes nativo do FreeBSD, sendo tambm chamado de IPFW, que a interface para controle do IPFIREWALL. O IPFIREWALL faz o monitoramento de cada pacote em cada conexo feita mquina, determinando por meio das regras definidas pelo IPFW qual o tratamento dado a estes pacotes. As regras so lidas de cima para baixo, e podem determinar se o pacote ser liberado, bloqueado, encaminhado etc. Atualmente podemos ativar o suporte a IPFW2. O IPFW2 uma nova verso do IPFW, com maior flexibilidade no formato das regras e algumas funcionalidades a mais, entre elas: suporte a regras no especficas para TCP ou UDP com nmero de porta, suporte a blocos OR, keepalives para sesses stateful e filtragem por cabealho MAC. Ativando o IPFW2 Para habilitar o suporte ao ipfirewall e o ipfw2, devemos seguir alguns passos. Inicialmente, o prprio ipfw dever ser recompilado, para suportar ipfw2. Execute os seguintes comandos: # # # # cd /usr/src/sbin/ipfw make clean make -DIPFW2 make -DIPFW2 install

Para que quando formos atualizar o sistema e executar um "make buildworld" o make saiba deste detalhe no momento de compilar o ipfw, adicione a linha abaixo ao arquivo /etc/make.conf: IPFW2=TRUE Edite o arquivo de configurao do kernel e insira as seguintes linhas, descritas abaixo: options options options options options options IPFIREWALL IPFW2 IPFIREWALL_VERBOSE IPFIREWALL_VERBOSE_LIMIT=100 IPFIREWALL_FORWARD IPDIVERT

Primeira linha: ativa o ipfirewall, carregando-o estaticamente no kernel. Segunda linha: ativa o ipfw2 propriamente dito. Terceira linha: ativa o suporte a log no ipfirewall. O log feito via syslog. Quarta linha: define um limite para o log de cada regra. O padro 100, dessa forma cada regra ter at 100 ocorrncias no log. Isto feito para evitar o comprometimento do sistema em caso de ataques como negao de servio. Quarta linha: ativa o suporte a encaminhamento de pacotes. Quinta linha: ativa o suporte a redirecionamento de porta atravs de socket "divert". Aps todas estas configuraes, compile e reinstale o kernel, e reinicie a mquina. Isto dever ser feito no console, pois aps reiniciar o firewall ser carregado, e como no foi definida nenhuma regra ir bloquear tudo. Uma forma de contornar isso, caso no seja possvel estar junto a mquina, inserir as seguintes linhas no arquivo /etc/rc.conf: firewall_enable="YES" firewall_type="OPEN" Isto far com que na inicializao seja carregada a configurao "OPEN" do arquivo /etc/rc.firewall. Esta configurao ir adicionar uma regra que libera todo o trfego. Aps reiniciada a mquina, digite o seguinte comando: # ipfw list Ser mostrada a lista de regras ativas, que de acordo com a configurao OPEN do arquivo /etc/rc.firewall dever ser a seguinte: 00100 00200 00300 65000 65535 allow ip from any to any via lo0 deny ip from any to 127.0.0.0/8 deny ip from 127.0.0.0/8 to any allow ip from any to any deny ip from any to any

Neste momento, todos os pacotes que entram e saem da mquina esto passando por estas regras, na ordem em que esto, definida pelo nmero da regra (que vai de 1 a 65535). A primeira regra que for atendida ir definir o que fazer com o pacote, e as demais so geralmente ignoradas (em alguns casos especficos o pacote reinjetado). Regra 100: permite que qualquer pacote IP trafegue na interface lo0 (localhost). Regra 200: bloqueia o trfego de qualquer origem para a rede 127.0.0.0/8 (localhost). Regra 300: bloqueia o trfego com origem na rede 127.0.0.0/8 para qualquer destino. Regra 65000: permite qualquer trfego. Regra 65535: bloqueia qualquer trfego. Estas regras esto no formato do ipfw1, que tambm suportado, para compatibilidade, pelo ipfw2. Lembre-se que todas estas regras foram definidas pelo rc.firewall, exceto a regra de nmero 65535 (mximo), que o padro do ipfirewall, bloquear tudo. Caso seja conveniente que o padro do firewall seja liberar tudo, ou seja, a regra 65535 seria "allow all from any to any", ento deve ser adicionada a seguinte linha na configurao do kernel: options IPFIREWALL_DEFAULT_TO_ACCEPT Comando IPFW O comando ipfw, de uma forma sucinta, possui os seguintes parmetros: ipfw [-q] add regra -> Adiciona a regra (ver o formato abaixo). A opo "-q" indica que dever ser uma operao "silenciosa", no gerando sadas nem relatando as aes. ipfw delete nmero_regra -> Remove a regra com o nmero especificado. ipfw list -> Lista as regras ativas. ipfw [-t -d] show -> Lista as regras ativas, incluindo os contadores nmero de pacotes e nmero de bytes. O parmetro -t inclui ainda a data/hora da ltima ocorrncia. O parmetro -d lista tambm as regras dinmicas. ipfw [-q] flush -> Deleta todas as regras. ipfw [-q] zero -> Zera todos os contadores (nmero de pacotes, nmero de bytes, nmero de logs e timestamp). ipfw [-q] resetlog -> Zera o contador nmero de logs. Formato das Regras As regras que vimos anteriormente, como foi mencionado, esto no formato do ipfw1, que atualmente tambm aceito pelo ipfw2. Pode-se usar este formato para escrever as regras, no entanto bom se habituar com o novo formato. Quando forem acrescentadas regras no formato novo, o ipfw2 ir automaticamente inserir as palavras "ip from any to any", que fazem parte do formato antigo, e no iro mudar em nada a regra, j que no impes nenhuma restrio, e quem vai ditar a especificao dos pacotes so as opes, explicadas adiante. Este esquema feito para manter uma certa compatibilidade com o ipfw1. A partir de agora, j podem ser definidas regras para controlar o Firewall. muito importante se familiarizar com a sintaxe e forma de uso do ipfw, que ser o nico comando utilizado para controlar o ipfirewall. A formato das regras o seguinte: [nmero_regra] [prob probalilidade] ao [log [logamount nmero] ] corpo_regra [nmero_regra] Varia de 1 a 65535 e indica a seqncia em que as regras sero processadas. A nmero 65535 reservado para a ao padro do firewall, que ser bloquear ou permitir tudo, dependendo da configurao do kernel. Se no for inserido um nmero de regra ela ser automaticamente a ltima antes da 65535. Se forem inseridas duas ou mais regras com o mesmo nmero, ser obedecida a ordem em que foram inseridas. [prob probabilidade] Define uma probabilidade para aplicar a regra. Varia de 0 a 1. Ao allow Sinnimo de accept, pass e permit. Libera o trfego do pacote e termina a leitura das regras. check-state Checa o pacote contra um conjunto de regras dinmico. count Apenas atualiza o contador desta regra. As demais regras continuam a ser lidas. deny Sinnimo de drop, descarta o pacote e termina a leitura das regras. divert porta

Redireciona o pacote para a porta especificada, utilizando um socket "divert". Pode ser especificado nmero ou nome, veja /etc/services. fwd ip[,porta] Sinnimo de forward, encaminha o pacote para o ip especificado. Se o ip for local ser encaminhado para a porta especificada, se o ip no for local a porta ser ignorada. O pacote no alterado, e isto inclui o ip de destino, ento se o pacote for encaminhado para outro host provavelmente ser rejeitado. Caso seja encaminhado para um ip local, desta mquina, o socket que ir receber o pacote ter o seu endereo alterado para coincidir com o endereo de destino do pacote, aceitando desta forma o mesmo. pipe nmero Passa o pacote atravs de um "pipe" dummynet, para controle de trfego. queue nmero Passa o pacote para uma "queue" dummynet, para controle de trfego utilizando WF2Q+. reset Descarta o pacote, e se o mesmo for TCP tenta enviar um TCP RST. skipto nmero Pula para a regra de nmero especificado. tee porta Aceita o pacote e envia uma cpia do mesmo para a porta especificada, via socket "divert". unreach cdigo Descarta o pacote, e tenta enviar uma resposta "ICMP unreachable" com o cdigo especificado. O cdigo deve ser entre 0 e 255, ou alguma destas palavras chave: net, host, protocol, port, needfrag, srcfail, net-unknown, host-unknown, isolated, net-prohib, host-prohib, tosnet, toshost, filter-prohib, host-precedence ou precedence-cutoff. [log [logamount nmero] ] Caso mencionada a palavra log, cada vez que um pacote coincidir com esta regra ser feito um log, atravs do syslog. Caso seja inserido logamount nmero, este ser o limite de vezes que ser feito o log para esta regra. O valor 0 (zero) significa sem limites. Caso no seja inserido logamount, o padro o limite que foi configurado no kernel. corpo_regra Contm uma ou mais exigncias que o pacote precisa coincidir para a regra ser atendida. Essa especificao pode incluir endereo ip de origem, endereo ip de destino, porta de origem, porta de destino, protocolo, interface de rede de entrada, interface de rede de sada etc. O corpo da regra pode possuir uma ou mais opes. Essas opes podem ser precedidas de "not", como negao, ou serem agrupadas em blocos OR, entre chaves, por exemplo: { dst-port 50 or dstport 51 or not src-port 52 }. A seguir as opes mais importantes: // comentrio Insere o texto como sendo um comentrio na regra. dst-ip endereo Endereo IP de destino do pacote. dst-port porta Porta(s) de destino do pacote. Se for especificada mais de uma porta, separar por vrgula (50, 51, 52), ou em faixa de portas (50-60). established Se o pacote tiver os bits RST ou ACK. frag fragmentos de pacotes, no sendo o primeiro fragmento. gid grupo Pacotes TCP ou UDP enviados ou recebidos pelo grupo. O grupo pode ser especificado pelo nome ou pelo GID. icmptypes tipo Tipo(s) de pacotes ICMP. Se for mais de um, separar por vrgula. Os tipos podem ser: echo reply (0), destination unreachable (3), source quench (4), redirect (5), echo request (8), router advertisement (9), router solicitation (10), timeto-live exceeded (11), IP header bad (12), timestamp request (13), timestamp reply (14), information request (15), information reply (16), address mask request (17) e address mask reply (18). in | out Pacotes de entrada ou de sada. Note que isto significa que os pacotes esto entrando ou saindo da mquina, ento

mesmo que um pacote venha da rede interna, estar entrando na mquina antes de sair. keep-state Quando um pacote coincidir com uma regra que tiver esta opo, ser criada uma regra dinmica, cujo comportamento ser coincidir o trfego bidirecional entre este ip/porta de origem e ip/porta de destino, no mesmo protocolo. A regra dinmica expira aps um certo tempo. Dessa forma, pode-se definir uma regra "check-state" anterior a esta, liberando este fluxo de pacotes, e teremos um firewall "stateful". limit {ip-origem | porta-origem | ip-destino | porta-destino} nmero Sero permitidas apenas o nmero especificado de conexes com os parmetros especificados. mac mac-destino mac-origem Pacotes com o endereo MAC de destino e/ou de origem especificados. Se no for especificado algum dever ser usada a palavra "any", para coincidir com todos os endereos. proto protocolo Pacotes com o protocolo (IP) especificado. Veja /etc/protocols. recv interface | xmit interface | via interface Pacotes recebidos pela interface de rede especificada (recv xl0), pacotes transmitidos pela interface especificada (xmit fxp0), ou pacotes passando pela interface, independentemente de entrar ou sair (via xl0). Quando xmit for utilizado requerida a opo "out", j que o pacote estar saindo. setup Pacotes com o bit SYN mas sem o bit ACK. src-ip endereo Endereo IP de origem do pacote. src-port porta Porta(s) de origem do pacote. tcpflags flags Flags dos pacotes TCP, separadas por vrgula. As possveis so: fin, syn, rst, psh, ack e urg. A negao pode ser feita por um "!". uid usurio Pacotes TCP ou UDP enviados ou recebidos pelo usurio. O usurio pode ser especificado pelo username ou pelo UID. vrrevpath Pra pacotes de entrada, feita uma consulta ao endereo de origem na tabela de roteamento. Se a interface na qual o pacote entrou a mesma de sada especificada pela rota, ento a regra coincide. Isto pode ser utilizado para criar regras anti-spoofing. Os pacotes de sada no so submetidos verificao. Firewall Stateful O funcionamento stateful permite que o firewall crie regras dinmicas para fluxos especficos de pacotes. Pode-se fazer algumas coisas interessantes, como por exemplo manter o firewall fechado, bloqueando todo trfego de fora para dentro e permitindo apenas que pacotes da rede interna saiam para a rede externa, passando por uma regra "keep-state". Assim, cada conexo feita de dentro para fora ir criar uma regra dinmica, que ir liberar aquele trfego nas duas direes, permitindo que os dados de resposta, por exemplo, uma pgina web que um usurio acessou, cheguem at a mquina do usurio, na rede interna. As regras dinmicas possuem as seguintes informaes: protocolo, endereo IP e porta de origem e endereo IP e porta de destino. Elas iro permitir o trfego bidirecional, ou seja, mesmo que os endereos de origem e destino se invertam. Isto uma das coisas que possibilita criar o que foi descrito acima. As regras dinmicas possuem um tempo de vida limitado, que determinado pelas variveis net.inet.ip.fw.dyn*, do sysctl (maiores informaes vide a man page do sysctl). Estas variveis tambm determinam o nmero mximo de regras dinmicas, entre outros. Uma regra dinmica criada cada vez que um pacote coincide com uma regra que possua as opes keep-state ou limit, no sem antes checar se a regra j existe. As regras dinmicas so checadas na ocorrncia da ao check-state. Exemplo: # ipfw add 1000 check-state # ipfw add 1100 allow tcp from 10.10.0.0/16 to any setup keep-state # ipfw add 1200 deny tcp from any to any Este conjunto de regras ir, para cada pacote: 1. Checar se existe alguma regra dinmica que permita o trfego do mesmo; 2. Caso o pacote seja da rede 10.10.0.0/16 e tiver o bit SYN, mas no o bit ACK (indicando desta forma um incio de conexo), ir permitir o trfego e criar uma regra dinmica; 3. Bloquear qualquer outro trfego. Log

Para direcionar os logs do ipfw para o arquivo /var/log/ipfw/ipfw.log, primeiramente crie este diretrio e este arquivo: # mkdir /var/log/ipfw # touch /var/log/ipfw/ipfw.log # chmod -R 600 /var/log/ipfw Ento adicione as seguintes linhas ao arquivo /var/log/syslog.conf: !ipfw *.* /var/log/ipfw/ipfw.log

Aps isso, reinicie o syslog, atravs do comando "killall -HUP syslog". Talvez seja interessante tambm criar um script que faa a rotao deste log e agendar no Cron, ou adicionar uma entrada no newsyslog.conf, para que o arquivo no fique demasiado grande. Arquivo de Regras No recomendado editar o arquivo /etc/rc.firewall, que vem com o sistema. O seu conjunto de regras dever ficar em um arquivo separado, exclusivo para isso. Este arquivo poder ser um script shell ou poder ser apenas uma listagem de regras, que o ipfw ir interpretar. O tipo de arquivo uma escolha pessoal, e no far diferena no funcionamento do firewall. Arquivo com listagem de regras Dever ser criado um arquivo, por exemplo /etc/firewall, com dono root e permisso 600. Neste arquivo sero colocadas as regras, que so iguais s passadas via linha de comando ao ipfw, mas sem o comando "ipfw" no comeo. Exemplo: add 1000 allow src-ip 10.10.0.0/16 dst-ip 192.168.0.0/16 Para efetuar a inicializao destas regras no momento da inicializao, adicione ou modifique as seguintes linhas no /etc/rc.conf: firewall_enable="YES" firewall_type="/etc/firewall" firewall_quiet="YES" A opo firewall_quiet faz com que seja executado o comando "ipfw -q" ao invs de simplesmente "ipfw", ao ler cada regra do arquivo. Dessa forma ocorrer uma operao "silenciosa", no gerando sadas na tela. Para interpretar um arquivo deste tipo via linha de comando, simplesmente execute "ipfw /etc/firewall". Script de regras No caso de criamos um script shell com as regras, tambm dever ser criado um arquivo exclusivo para isso, como por exemplo /etc/firewall.sh, com dono root e permisso 700. O contedo deste arquivo pode ser como voc quiser, pois trata-se de um script comum. Quando for passar as regras, o comando ipfw deve ser exatamente como se fosse via linha de comando. recomendado usar a opo "-q", do comando ipfw, em scripts. Para que o script seja executado na inicializao do sistema, edite o arquivo /etc/rc.conf, remova as linhas (caso existirem) firewall_type e firewall_quiet, mantenha a linha firewall_enable="YES" e adicione a seguinte linha: firewall_script="/etc/firewall.sh" Deste ponto em diante, cabe a voc decidir como dever ser o comportamento do seu firewall, tendo em vista a que ele se destina. Sugiro a leitura do livro "Building Internet Firewalls", de D. Brent Chapman e Elizabeth D. Zwicky, da editora O'Reilly. Seguem abaixo algumas regras e um script simples, a ttulo de exemplo. Exemplos de Regras (no esquecer do comando "ipfw" antes delas):

add 100 allow via lo0 add 200 deny { dst-ip 127.0.0.0/8 or src-ip 127.0.0.0/8 } Observe os espaos aps a "{" e antes da "}". Se no houver este espao ser retornado o seguinte erro: ipfw in free(): warning: modified (chunk-) pointer Estas duas regras acima tero o mesmo efeito que as regras abaixo, no formato antigo, descritas anteriormente:

add 100 pass all from any to any via lo0 add 200 deny all from any to 127.0.0.0/8 add 300 deny ip from 127.0.0.0/8 to any

add 1000 allow src-ip 10.10.0.0/16 dst-port 80 add 1100 allow dst-ip 10.10.0.0/16 dst-port 1024-65535 Ir permitir que mquinas da rede 10.10.0.0/16 enviem pacotes com destino a porta 80 e ir permitir que pacotes cheguem at a rede 10.10.0.0/16 com destino a portas entre 1024 e 65535, permitindo por exemplo a resposta de um pedido HTTP.

add 1000 allow proto tcp dst-port ssh recv xl0 add 1100 deny proto tcp dst-port ssh out Ir permitir que a mquina receba conexes TCP pela interface de rede xl0, porta do ssh, que a porta 22, conforme definido no arquivo /etc/services. Tambm ir negar a sada de qualquer pacote com protocolo TCP e com destino a porta do ssh.

add 1000 check-state add 1100 allow src-ip 10.10.0.0/16 keep-state add 1200 deny log ip from any to any Ir permitir que a rede 10.10.0.0/16 estabelea qualquer conexo, cujo trfego de resposta ser liberado pelas regras dinmicas que sero criadas pela regra 1100 e que sero checadas pela regra 1000. Qualquer outro trfego ser bloqueado e logado no arquivo de log.

add 50 deny not vrrevpath in Ir bloquear ip-spoofing, conforme explicado anteriormente.

add 500 deny log { src-ip 10.0.0.0/8 or dst-ip 10.0.0.0/8 } via xl0 add 510 deny log { src-ip 172.16.0.0/12 or dst-ip 172.16.0.0/12 } via xl0 add 520 deny log { src-ip 192.168.0.0/16 or dst-ip 192.168.0.0/16 } via xl0 Ir proibir o trfego de pacotes de redes privadas, conforme definido na RFC1918, na interface de rede xl0. Tambm ir fazer log quando a regra coincidir com algum pacote.

add 100 prob 0.05 deny in Ir bloquear 5% dos pacotes de entrada, como se houvesse perda de pacotes.

Exemplo de Script

#!/bin/sh ipfw="/sbin/ipfw -q" # IP local ip="10.10.0.5" # Portas de entrada permitidas portas="22,53,80" $ipfw flush

$ipfw $ipfw $ipfw $ipfw $ipfw

add add add add add

100 deny log not verrevpath in 1000 check-state 1100 allow src-ip $ip keep-state 1200 allow dst-port $portas in 65000 deny ip from any to any

3.5.4 - Controle de Trfego


* IPFW2 + Dummynet
O Dummynet uma ferramenta muito flexvel para gerenciamento de banda, para impor ou simular algumas condies desejadas no trfego da rede. Ele funciona interceptando os pacotes e passando-os por um ou mais "pipes" ou "queues", que podem efetuar a limitao de banda, perdas de pacotes, retardos de propagao etc. Os pipes so canais com largura de banda fixa, enquanto as queues representam filas de pacotes, associadas a um peso (weight). As queues compartilham, em proporo ao peso, a largura de banda dos pipes aos quais esto associadas. Todo o gerenciamento do Dummynet feito atravs do IPFW, que dever estar configurado e funcionando. Veja sobre isto na seo Firewall - IPFW2. H apenas duas opes a mais que devem ser adicionadas configurao do kernel: options DUMMYNET options HZ=1000 A segunda opo no obrigatria, mas na maioria dos casos auxilia no funcionamento do Dummynet. Ela define a granularidade do timer utilizado pelo sistema, que de 10ms (HZ=100) por padro. Efeitos do Dummynet como o delay de propagao so aplicados um a cada ponto do timer, ento reduzir a granularidade ir possibilitar o tratamento de taxas de trfego mais altas, e a especificao de delays mais precisos. A opo HZ=1000 ir definir a granularidade para 1ms. Valores menores que 1ms no so recomendados, para maiores informaes veja a RFC1323. Adicionadas as opes, compile e instale o kernel, conforme descrito na seo Recompilao e Instalao do Kernel. Aps isso, basta adicionar as regras desejadas atravs do IPFW. As opes do IPFW especficas para Dummynet esto descritas abaixo. Para definir um pipe utiliza-se o seguinte comando / regra: ipfw pipe nmero config opes-configurao Para a definio de uma queue utiliza-se o comando / regra abaixo: ipfw queue nmero config opes-configurao Em ambos os casos o parmetro nmero no depende da nmerao das demais regras do ipfw. As opes de configurao so as seguintes: Opes de configurao especficas do pipe: bw banda Define a largura de banda do pipe. A banda deve ser especificada em Kbit/s, Mbit/s, KByte/s ou MByte/s. delay delay Define o delay de propagao do pipe. O delay dever ser especificado em milisegundos. Opes de configurao especficas da queue: pipe nmero Conecta a queue ao pipe especificado. Podem ser conectadas vrias queues a um nico pipe. weight peso Especifica o peso daquela queue. O valor pode variar de 1 a 100. Principais opes de configurao, comuns ao pipe e queue: buckets tamanho-tabela Especifica o tamanho da tabela usada para guardar as diversas queues. O valor pode variar de 16 a 65536, o padro 64. mask especificao-mscara Define diferentes fluxos atravs da aplicao da mscara especificada. Cada fluxo enviado para uma queue ou pipe separado, criados dinamicamente. Cada pipe dinmico ter a mesma largura de banda do pipe original, enquanto que cada queue dinmica ir compartilhar com as demais dinmicas a largura de banda do pipe ao qual est conectada a original. A especificao de mscara deve ser uma ou mais das seguintes:

dst-ip mscara, src-ip mscara, dst-port mscara, src-port mscara, proto mscara ou all. O parmetro all define que todos os bits em todos os campos so significantes. noerror No reporta o erro quando um pacote for perdido, por exemplo em uma simulao de perda de pacotes ou congestionamento. plr taxa-perda Define a taxa de perda de pacotes. O valor dever ser entre 0 e 1, com 0 significando nenhuma perda, e 1 significando 100% de perda. queue {slots | tamanhoKBytes} Tamanho da fila, em slots ou KBytes. Os comandos para manipular as regras de pipes e queues so similares aos das regras comuns do IPFW: ipfw {pipe | queue} {delete | list | show} nmero Exemplos

Limitar o trfego da rede 10.10.0.0/16 para a 192.168.0.0/16 em 300 Kbit/s: ipfw add 1000 pipe 1 src-ip 10.10.0.0/16 dst-ip 192.168.0.0/16 ipfw pipe 1 config bw 300Kbit/s queue 50KBytes

Simular uma perda de pacotes de entrada de 5%: ipfw add 1000 pipe 1 in ipfw pipe 1 config plr 0.05

Limitar o trfego em 300Kbit/s de entrada em ambas as direes: ipfw ipfw ipfw ipfw add 1000 pipe add 1100 pipe pipe 1 config pipe 2 config 1 in 2 out bw 300Kbit/s queue 50KBytes bw 300Kbit/s queue 50KBytes

Limitar o trfego de cada mquina da rede 10.10.0.0/16 em 128Kbit/s nas duas direes: ipfw ipfw ipfw ipfw add 1000 pipe add 1100 pipe pipe 1 config pipe 2 config 1 src-ip 10.10.0.0/16 out 2 dst-ip 10.10.0.0/16 in mask src-ip 0x000000ff bw 128Kbit/s queue 10KBytes mask dst-ip 0x000000ff bw 128Kbit/s queue 10KBytes

Introduzir um delay no trfego: ipfw ipfw ipfw ipfw add 1000 pipe add 1100 pipe pipe 1 config pipe 2 config 1 in 2 out delay 250ms bw 1Mbit/s delay 250ms bw 1Mbit/s

Devemos dar ateno ao tamanho da queue (fila) nos pipes quando fazemos limitao de banda, pois apesar de limitarmos a largura de banda em 50 Kbit/s, por exemplo, o MTU da interface de rede continua o normal, 1500 bytes. Se no for especificado o tamanho da fila, ela ser muito grande e ir gerar um delay no desejado no trfego. O tamanho padro da fila 50 slots, que multiplicado pelo MTU de 1500 bytes, d o valor de 600 Kbits. Essa fila iria levar 12 segundos para ser preenchida por uma banda de 50 Kbit/s, o que um atraso muito grande na comunicao.

3.5.5 - NAT (Network Address Translation)


* IPFW2 + NATD
O NAT - Network Address Translation, ou Traduo de Endereo de Rede - um mecanismo que permite por exemplo que mquinas com endereos IPs de redes privadas se comuniquem com mquinas na Internet, que possuem IPs vlidos. O daemon que implementa o NAT no FreeBSD o natd. Um gateway rodando o natd ir alterar os pacotes que vo para a rede externa fazendo com que o IP de origem destes pacotes seja o endereo do gateway, e para cada pacote alterado cria uma entrada em uma tabela interna para registrar isso. A porta de origem tambm alterada para indicar a entrada relacionada ao pacote na tabela. Todos os pacotes que chegam tendo como destino o gateway so verificados contra a tabela. Caso possua algum registro na tabela, o pacote encaminhado para o IP interno e a porta correta. Para fazer o NAT desta forma, preciso que o daemon natd esteja rodando em uma porta especfica. O IPFW filtra o trfego decidindo o que deve ser encaminhado para NAT, e faz isso atravs de um socket divert. Para que o NAT funcione com IPFW2, so necessrias as seguintes opes no kernel: options IPFIREWALL options IPFW2 options IPDIVERT Veja maiores detalhes na seo de configurao do IPFW2, importante saber como funciona, pois o NATD sozinho no far nada. O firewall dever estar configurado e funcionando. Tambm necessrio que a mquina atua como Gateway. Para isso, insira a seguinte linha no arquivo /etc/rc.conf: gateway_enable="YES" Segue abaixo a descrio dos principais parmetros do natd: -log Faz o log de algumas informaes no arquivo /var/log/alias.log. Este arquivo truncado cada vez que o natd for inicializado. -deny_incoming No permite a passagem de pacotes que no possuam uma entrada na tabela interna de traduo. -log_denied Faz um log de cada pacote bloqueado, via syslog. interessante direcionar este log para um arquivo, via /etc/syslog.conf. -log_facility daemon Faz o log com a "facilidade" do syslog especificada. -use_sockets Aloca um socket para cada conexo ftp data, permitindo melhor funcionamento do FTP. -same_ports Tenta manter a mesma porta quando altera os pacotes de sada. Com isso, protocolos como RPC tm mais chances de funcionar. -verbose No se torna um daemon, fica rodando no console. til para debug. -unregistered_only Altera apenas os pacotes de sada que pertenam a redes privadas (RFC1918). -redirect_port proto ipdestino:portadestino [ipalias:]portaalias [ipremoto[:portaremota]] Redireciona conexes de entrada na porta "portaalias" para o host "ipdestino" na porta "portadestino". O parmetro "proto" dever ser tcp ou udp. O parmetro "ipalias" pode ser utilizado para especificar o endereo da placa de rede onde a mquina dever esperar este tipo de conexo. Os parmetros "ipremoto" e "portaremota" podem ser especificados se voc deseja determinar que somente as conexes vindas deste ip e porta devero ser redirecionadas. -redirect_proto proto iplocal [ippublico [ipremoto]] Redireciona os pacotes de entrada do protocolo "proto" destinados ao endereo "ippublico" para o endereo "iplocal". Os protocolos se encontram listados em /etc/protocols. Se "ippublico" no for especificado, ser utilizada a interface de traduo padro. Se o parmetro "ipremoto" for especificado, apenas os pacotes vindos deste endereo sero redirecionados. -redirect_address iplocal ippublico Redireciona o trfego que chega em "ippublico" para o host "iplocal". Esta funo conhecida como SNAT - Static NAT, ou NAT Esttico.

-redirect_port proto ipdestino:portadestino[,ipdestino:portadestino[,...]] [ipalias:]portaalias [ipremoto[:portaremota]] -redirect_address iplocal[,iplocal[,...]] ippublico Estes formatos de "-redirect_port" e "-redirect_address" so utilizados para distribuir de forma transparente a carga de um servidor entre vrios. Essa funo conhecida como LSNAT - Load Sharing NAT - definida pela RFC2391. Cada conexo ser direcionada para uma mquina, em ordem round-robin. -port porta Utiliza a porta especificada para operao. Note que trata-se de uma porta "divert". Se esta opo no for especificada, utilizada a porta padro do natd, que 8668, conforme especificado em /etc/services. -alias_address endereo Utiliza o endereo especificado para fazer a traduo. Este endereo dever ser de uma interface de rede da mquina local e geralmente da interface conectada a rede externa. Esta opo ou a opo abaixo (uma das duas) deve ser sempre utilizada. -interface interface Especifica a interface de rede em que ser feita a traduo. Similar ao "-alias_address endereo", geralmente a interface que se conecta rede externa. -config arquivo Utiliza as configuraes determinadas no arquivo. As opes que no levam argumentos so seguidas de yes ou no. -reverse Faz com que o natd trabalhe de forma inversa com os pacotes de entrada e de sada. Desta forma, ele pode operar na interface interna ao invs da externa. til para algumas situaes de proxy transparente. -proxy_only Fora o natd a trabalhar apenas como um proxy transparente. No so efetuadas tradues de endereos. -proxy_rule port porta server ip:porta Trabalha como proxy transparente, redirecionando pacotes TCP com a "porta" especificada para o host e porta "ip:porta". -punch_fw basenumber:count Essa opo permite ao natd "abrir buracos" no ipfw para conexes FTP funcionarem corretamente. Isto feito automaticamente instalando uma regra temporria no firewall que ir permitir a conexo. Assim que a conexo for encerrada a regra removida. O argumento "basenumber" especifica o nmero de regra inicial e o argumento "count" especifica o mximo de regras que sero criadas. -log_ipfw_denied Faz o log quando um pacote no pode ser re-injetado devido a uma regra no ipfw que bloqueia o mesmo. -pid_file arquivo Especifica um arquivo alternativo para guardar o PID. O padro /var/run/natd.pid. Os parmetros do natd podem ser passados via linha de comando ou podem ser colocados em um arquivo, voc que sabe. Geralmente a opo do arquivo mais interessante, por facilitar a organizao. Exemplo 1: Vamos supor que voc possua uma rede interna 10.10.0.0/16. A interface externa a xl1, com o endereo 192.168.0.5. Crie um arquivo chamado /etc/natd.conf e insira as configuraes, uma em cada linha. Segue o exemplo abaixo: -------------------- Arquivo natd.conf -------------------# natd.conf use_sockets yes alias_address 192.168.0.5 punch_fw 500:100 -------------------- Fim do arquivo natd.conf -------------------Coloque a seguinte regra no ipfw2: add 1000 divert natd via xl1 Note que esta regra dever ficar antes de qualquer outra regra que possa permitir que os pacotes entrem e saiam da mquina, pois caso contrrio provavelmente esta regra nem ser lida. Aps feita a traduo pelo natd, o pacote reinjetado no ipfw na regra logo aps a 1000 (neste caso), ento qualquer outro bloqueio poder afetar o trfego. Exemplo 2: Adicione ao cenrio acima o fato de voc ter um servidor web rodando na mquina 10.10.0.15 da rede interna, e deseja que todas as conexes ao IP 192.168.0.6, que um alias da interface xl1, sejam direcionadas para este servidor.

Mantenha a configurao como est, apenas adicione a seguinte linha no /etc/natd.conf: redirect_port tcp 10.10.0.15:80 192.168.0.6:80 Para que o natd seja inicializado no corretamente no momento do boot, insira as linhas abaixo no arquivo /etc/rc.conf: natd_enable="YES" natd_flags="-config /etc/natd.conf" Para inicializar o natd no console digite a seguinte linha de comando: /sbin/natd -config /etc/natd.conf

3.5.6 - Proxy e Cache HTTP


* Squid
O Squid um software largamente utilizado como servidor proxy e cache HTTP em diversos tipos de redes, como corporativas, de provedores, universidades etc. Possui alta performance e suporta os protocolos HTTP, FTP e Gopher. A sua pgina www.squid-cache.org. De um modo simplificado, o Squid recebe os pedidos de usurios que desejam visualizar pginas externas e verifica se tem a pgina em cache. Se tiver a pgina em cache, verifica se ela ainda vlida e envia para o cliente. Se no tiver a pgina em cache, busca a pgina no servidor externo, armazena no cache e manda para o cliente. Assim, na prxima vez que algum solicitar esta pgina a mesma ser carregada muito mais rapidamente, pois estar em um cache local. Entre as principais vantagens de utilizar o Squid esto: Aumento na segurana, pois todas as requisies para pginas externas iro passar atravs do proxy; Aumento da velocidade de navegao e/ou diminuio da utilizao do link Internet, j que muitas pginas acessadas pelos usurios estaro em cache local; Possibilidade de definir uma poltica de acesso, bloqueando pginas fora do escopo a que se destina a Internet na instituio, como chat, pornografia etc. O Squid necessita de um diretrio no disco onde ir armazenar o seu cache. Geralmente, em mquinas com esse propsito criamos um filesystem especial para o Squid, que pode ser /squid, onde sero guardados o cache e os logs. O tamanho do cache pode ser determinado pela configurao do Squid, e quanto maior o cache mais pginas sero armazenadas e mais rpida ser a navegao. Efetue o download da ltima verso estvel do Squid, a partir do seu site. A verso atual 2.5 STABLE4, e o arquivo se encontra em http://www.squid-cache.org/Versions/v2/2.5/squid-2.5.STABLE4.tar.gz. Extraia este arquivo no /tmp, e v at o diretrio que ser criado. Execute os seguintes comandos: # ./configure --prefix="/usr/local" --sysconfdir="/usr/local/etc/squid" -localstatedir="/var" --enable-storeio="ufs diskd" --enable-removal-policies="lru heap" --enable-default-err-language="Portuguese" --disable-hostname-checks # make # make install O executvel do Squid ser instalado em /usr/local/sbin/squid. O arquivo de configurao ser /usr/local/etc/squid/squid.conf. Deve ainda ser removido o diretrio /var/logs (iremos utilizar outro diretrio para os logs do Squid): # rmdir /var/logs Crie um usurio e um grupo de nome squid: # pw group add squid -g 180 # pw user add squid -c "Squid" -d "/nonexistent" -s "/sbin/nologin" -u 180 -g 180 Crie o diretrio /var/log/squid, para armazenar os logs do Squid. Atribua a este diretrio o dono squid e aplique a permisso 750. V at o diretrio /usr/local/etc. Visualize o arquivo squid.conf.default e veja todas as opes. Segue abaixo um exemplo sintetizado do arquivo squid.conf. Copie-o no diretrio mencionado. Mantenha o squid.conf.default como referncia. -------------------- Arquivo squid.conf -------------------# squid.conf # Define em qual ip e porta o Squid devera aguardar requisicoes. # Pode ser definido o IP interno, no caso de uma maquina com # mais de uma interface. Tambem pode ser especificada apenas a

# porta. O padrao eh ouvir todas as interfaces na porta 3128. #http_port 10.10.0.5:3128 # O parametro no_cache define que determinados objetos no devero # ser armazenados em cache. Eh preciso primeiro definir uma acl # indicando quais os objetos. Em seguida aplica-se o no_cache a # esta acl. acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY # O parametro cache_mem nao especifica o tamanho maximo do processo # do Squid, que ira ultrapassar este valor. O cache_mem se destina a # especificar o espaco em memoria destinado aos objetos em transito e # outros importantes. A prioridade eh dos objetos em transito, e # apenas o espaco restante sera ocupado pelos outros (Hot Objects e # Negative-Cached Objects). Se o espaco necessario para os objetos # em transito for maior que cache_mem sera alocada mais memoria, # ou seja, cache_mem nao especifica um limite de memoria. O padrao # eh 8 MB. #cache_mem 8 MB # Tamanho maximo dos objectos armazenados no cache no disco. # O padrao eh 4096 KB. #maximum_object_size 4096 KB # Tamanho minimo dos objetos armazenados no cache no disco. # O padrao eh 0, sem limite. #minimum_object_size 0 KB # Tamanho maximo dos objetos mantidos em memoria. # O padrao eh 8 KB. #maximum_object_size_in_memory 8 KB # O parametro cache_replacement_policy determina qual a politica # de substituicao dos objetos quando se esgota o espaco destinado # ao cache em disco. # lru: mantem os objetos referenciados recentemente. # heap GDSF: otimiza o "hit rate" por manter objetos pequenos e # e populares no cache, guardando assim um numero maior de objetos. # heap LFUDA: otimiza o "byte hit rate" por manter objetos populares # no cache sem levar em conta o tamanho. Se for utilizado este, o # maximum_object_size devera ser aumentado para otimizar o LFUDA. cache_replacement_policy heap GDSF # O memory_replacement_policy define a politica de substituicao dos # objetos em memoria, da mesma forma como o cache_replacement_policy. # Os valores possiveis so os mesmos. O padrao eh lru. #memory_replacement_policy lru # O cache_dir define qual o diretorio e qual o espaco # utilizado para o cache no disco. Podem ser definidos # varios diretorios se necessario. O tamanho (em MB) nao deve # ser o tamanho total da particao, descontar no minimo # 20%. # cache_dir diskd Diretorio Tamanho 16 256 Q1=72 Q2=64 cache_dir diskd /squid 1000 16 256 Q1=72 Q2=64 # Log de requisicoes. cache_access_log /var/log/squid/access.log # Log do cache. cache_log /var/log/squid/cache.log # Log de objetos guardados. Pode ser desativado. cache_store_log none # Arquivo com o PID. pid_filename /var/log/squid/squid.pid # Tempo de espera para resolver conexoes pendentes antes de

# efetuar o shutdown do Squid. O padrao eh 30 seconds. shutdown_lifetime 10 seconds # ACLs gerais. 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 to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 563 10000 acl Safe_ports port 80 21 443 563 70 210 1025-65535 280 488 591 777 acl CONNECT method CONNECT # ACL que define os clientes permitidos. Especificar as redes que # irao utilizar o cache. acl clientes src 10.10.0.0/16 10.20.0.0/16 # ACLs para paginas proibidas. Os arquivos especificados conterao # as ACLs, para facilitar a edicao. acl proibido-url url_regex -i "/usr/local/etc/squid/proibido-url" acl proibido-urlpath urlpath_regex -i "/usr/local/etc/squid/proibido-urlpath" acl proibido-dominios dstdom_regex -i "/usr/local/etc/squid/proibido-dominios" # Permitir ou negar o acesso baseado nas acls. http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access deny proibido-url http_access deny proibido-urlpath http_access deny proibido-dominios http_access allow clientes http_access deny all # Usuario sob o qual ira rodar o Squid. cache_effective_user squid # Grupo sob o qual ira rodar o Squid. cache_effective_group squid # Hostname completo. visible_hostname squid.exemplo.org # Opcoes para suportar proxy transparente. httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on # Numero de arquivos de log rotacionados a guardar. logfile_rotate 4 # O parametro always_direct permite definir que as requisicoes # preenchendo as exigencias de determinada ACL serao sempre # encaminhadas direto ao servidor requisitado. Exemplo: #acl servidores-locais dstdomain dominiolocal.org #always_direct allow servidores-locais # Evita que sejam feitos coredumps. coredump_dir none -------------------- Fim do arquivo squid.conf -------------------O diretrio no qual o Squid ir guardar o cache dever ter o dono squid e permisso 750. Como estaremos utilizando o diskd, interessante fazer um certo tuning, adicionando algumas opes no kernel. Adicione as opes abaixo, e aps isso recompile e instale o novo kernel, e reinicie a mquina.

# Suporte a memoria compartilhada. options SYSVSHM

# Maximo de segmentos de memoria compartilhada por processo. options SHMSEG=16 # Numero maximo de identificadores de memoria compartilhada. options SHMMNI=32 # Tamanho maximo de segmento de memoria compartilhada. options SHMMAX=2097152 # Numero maximo de paginas de memoria compartilhada. options SHMALL=4096 # Suporte a filas de mensagens. options SYSVMSG # Numero maximo de bytes por fila de mensagem. options MSGMNB=16384 # Numero maximo de identificadores de filas de mensagens. options MSGMNI=41 # Numero maximo de segmentos de mensagem no sistema. options MSGSEG=2049 # Tamanho de um segmento de mensagem. options MSGSSZ=64 # Numero maximo de mensagens no sistema. options MSGTQL=2049

Aps ter configurado, execute o Squid pela primeira vez com a opo "-z": # /usr/local/sbin/squid -z Isto ir criar a estrutura de diretrios que ir suportar o cache. Para efetuar o servio de proxy transparente, este servidor dever encaminhar para a porta do Squid as requisies HTTP vindas dos clientes, da rede interna por exemplo. Para isso, voc dever ter um firewall configurado e funcionando, veja a seo IPFW2. Coloque a seguinte regra no ipfw2: add 800 fwd 127.0.0.1,3128 dst-port { 80 or 21 } src-ip 10.10.0.0/16 add 810 allow dst-port 3128 dst-ip 10.10.0.5 src-ip 10.10.0.0/16 add 900 deny dst-port 3128 A rede 10.10.0.0/16 no exemplo a rede interna, cujas requisies nas portas 80 e 21 sero direcionadas para a porta 3128 em localhost. Tambm ser permitido que mquinas da rede local contatem o Squid, caso o proxy seja configurado manualmente. O ip 10.10.0.5 no exemplo o da interface do servidor conectada a rede interna. A terceira regra ir bloquear qualquer outro trfego tendo como destino a porta 3128. Estas regras devem ficar antes da(s) regra(s) do NAT, caso esteja utilizando-o. V at o diretrio /usr/local/etc/squid. Podero ser criados os arquivos proibido-url, proibido-urlpath e proibidodominios, todos com o dono squid. Estes arquivos devero possuir a relao de pginas cujo acesso no ser permitido. Devero ter uma entrada por linha, e descritas em expresses regulares - na maioria das vezes no so necessrias espresses muito elaboradas, bastando inserir as strings, uma por linha. O arquivo proibido-url deve conter as strings que sero verificadas contra toda a URL. O proibido-urlpath, as strings que sero verificadas contra a URL completa menos o nome do servidor e domnio, por exemplo no endereo www.exemplo.org/testes/pagina, o urlpath apenas "testes/pagina". J o proibido-dominios o contrrio, contm as strings que sero verificadas apenas contra o nome e domnio do site, no exemplo anterior seria "www.exemplo.org". Um excelente guia sobre expresses regulares se encontra no endereo http://aurelio.net/er/. Para que os logs do Squid sejam rotacionados na freqncia desejada, insira uma linha no arquivo /etc/crontab que execute o comando "squid -k rotate". O exemplo abaixo faz com que a rotao seja feita todo sbado s 23h58min: 58 23 * * 6 root /usr/local/sbin/squid -k rotate Crie um script de inicializao para o Squid, em /usr/local/etc/rc.d/squid.sh. Os comandos de inicializao e shutdown devero ser, respectivamente: /usr/local/sbin/squid e

/usr/local/sbin/squid -k shutdown

3.5.7 - Relatrio de Uso do Squid


* Sarg (Squid Analysis Report Generator)
O Sarg - Squid Analysis Report Generator - como o prprio nome diz serve para gerar relatrios de utilizao do Squid. desenvolvido por um brasileiro, e seu site http://web.onda.com.br/orso/sarg.html. O Sarg gera relatrios em HTML. Faa o download da ltima verso do Sarg a partir de seu site. A verso atual 1.4.1 e se encontra em http://web.onda.com.br/orso/sarg-1.4.1.tar.gz. Extraia o arquivo no diretrio /tmp, ser criado o diretrio sarg-1.4.1, acesse-o. Execute os comandos abaixo: # ./configure --enable-bindir=/usr/local/bin --enable-sysconfdir=/usr/local/etc # make # make install O executvel ser instalado em /usr/local/bin/sarg, e o arquivo de configurao ser /usr/local/etc/sarg/sarg.conf. Mova este arquivo para sarg.conf.original, para t-lo como referncia, e copie e adapte o exemplo abaixo em seu lugar, ou simplesmente edite o sarg.conf e altere os parmetros que achar necessrios: -------------------- Arquivo sarg.conf -------------------# sarg.conf # Idioma. language Portuguese # Local do arquivo de log do Squid. access_log /var/log/squid/access.log.0 # Titulo do relatorio. title "Relatorio de Uso do Squid" # Diretorio onde sera salvo o relatorio. output_dir /usr/local/apache2/htdocs/sarg # Converter enderecos IP para nomes DNS ou no. resolve_ip yes # Formato da data. e=dd/mm/yy. date_format e # Numero de relatorios que devem ser mantidos. # Insira 0 (zero) para no limitar. lastlog 12 # Local do arquivo exclude_codes. exclude_codes /usr/local/etc/sarg/exclude_codes -------------------- Fim do arquivo sarg.conf -------------------Crie o diretrio /usr/local/apache2/htdocs/sarg para que sejam guardados a os relatrios. Ser acessvel atravs de http://servidor/sarg, este diretrio pode ser protegido por senha se voc preferir (atravs do Apache). Especificamos no arquivo de configurao que ser analisado o arquivo access.log.0 para gerar o relatrio. Poder ser especificado o arquivo access.log, mas da forma como fizemos fica mais prtico para fazer a rotao do arquivo de log, atravs do "squid -k rotate". Desta forma, agendamos no Cron a execuo da rotao do log e aps isso o Sarg, que far a anlise do arquivo recm-rotacionado. Exemplo de entrada no /etc/crontab: 58 23 * * 6 root /usr/local/sbin/squid -k rotate 10 00 * * 7 root /usr/local/bin/sarg Com isso, a rotao do log ser feita s 23h58min no sbado, e o Sarg ir gerar os relatrios 0h10min.

3.5.8 - Grfico de Consumo de Banda


* MRTG (Multi Router Traffic Grapher)
O MRTG - Multi Router Traffic Grapher - uma ferramenta que gera grficos indicativos do consumo de banda em redes. Os grficos, no formato PNG, so inseridos em relatrios HTML, e so atualizados constantemente, mostrando as condies dos enlaces de rede de uma forma bastante clara e atualizada. O MRTG desenvolvido em Perl e C. Seu

site oficial http://people.ee.ethz.ch/~oetiker/webtools/mrtg. Alm da funo original do MRTG, que monitorar roteadores atravs do protocolo SNMP (Simple Network Management Protocol), ele tambm pode ser utilizado para monitorar diversos outros sistemas, como servidores de email, Squid, servidores web, condies do tempo, temperatura etc. Basta que se tenha alguma fonte de dados para que o MRTG gere seus grficos. O relatrio de consumo de banda para um determinado link possui quatro grficos: dirio, ltima semana, ltimas cinco semanas e ltimo ano. Normalmente, trabalha-se com quatro dados, na seguinte ordem: contagem de bytes de entrada, contagem de bytes de sada, uptime e nome. Faa a instalao do MRTG atravs do Ports. mais fcil, j que o MRTG depende de algumas bibliotecas grficas que podem no estar instaladas no seu sistema, V at o diretrio /usr/ports/net/mrtg e digite o comando "make install". O MRTG ser instalado, o seu executvel ficar em /usr/local/bin/mrtg, e seu arquivo de configurao no diretrio /usr/local/etc/mrtg/. instalado por padro um arquivo de configurao de exemplo, mrtg.cfg.sample. Mantenha-o como referncia, e crie outro arquivo, com o nome mrtg.cfg para as suas configuraes. As principais opes de configurao so descritas abaixo: WorkDir: /usr/local/apache2/htdocs/mrtg Local onde sero colocadas as pginas e os grficos. RunAsDaemon: Yes Rodar como um daemon ou no. Interval: 5 Intervalo em minutos entre aquisies de dados pelo MRTG. O padro 5 minutos, que tambm o valor mnimo. Refresh: 300 Tempo em segundos para atualizao da pgina no browser. O padro 300. Language: brazilian Idioma. Target: Especifica quais as portas de quais roteadores o MRTG dever consultar e construir grficos. Os principais formatos so: Target[nome]: porta:community@roteador Target[nome]: /ip:community@roteador O nome uma descricao da porta/link, e o community a senha para acesso via SNMP ao roteador. Exemplos: Target[link1]: 1:public@192.168.0.10 Target[link2]: /192.168.0.15:estatisticas@192.168.0.10 A especificao do endereo IP da porta ao invs do nmero til em alguns casos onde a ativao ou desativao de uma porta no equipamento muda toda a seqncia. Para combinar mais de uma porta no mesmo grfico, somando os dados, deve-se utilizar o seguinte formato: Target[portas3e4]: 3:public@192.168.0.10 + 4:public@192.168.0.10 Pode ser utilizado tambm algum programa ou script externo para gerar os dados lidos pelo MRTG. A sada do script dever conter 4 linhas: Linha 1: estado atual da primeira varivel, normalmente a contagem de bytes de entrada. Linha 2: estado atual da segunda varivel, normalmente a contagem de bytes de sada. Linha 3: string com o uptime do dispositivo. Linha 4: string com o nome do dispositivo. Para utilizar um script deste tipo, a entrada no mrtg.cfg dever ter o formato abaixo: Target[disco1]: `/usr/local/script/df2mrtg /dev/ad0s1a` MaxBytes[nome]: 12500000 Velocidade mxima em bytes/segundo para aquela porta. Title[nome]: Anlise de Trfego da Porta 1 do Roteador X Ttulo da pgina que ser gerada. PageTop[nome]: <H1>Anlise de Trfego</H1><br>Qualquer texto. HTML a ser inserido no topo da pgina. PageFoot[nome]: Qualquer texto...

HTML a ser inserido no final da pgina. Unscaled[nome]: dw No altera a escala vertical dos grficos especificados de acordo com o trfego, ou seja, mesmo havendo baixos valores a escala continua a mesma. Os grficos especificados podem ser (d)ay, (w)eek, (m)onth e (y)ear. WithPeak[nome]: wm Por padro os grficos semanal, mensal e anual contm apenas as mdias de trfego, sem mostrar os picos. Esta opo indica que devero ser exibidos os picos de trfego para os grficos especificados. Suppress[nome]: ym No produz os grficos especificados. PNGTitle[nome]: Trafego Link Y Insere o texto como ttulo no grfico gerado. Options[nome]: opes Permite definir algumas opes booleanas. As principais so: growright Por padro os grficos crescem para a esquerda. Este parmetro inverte, fazendo com que os dados mais recentes estejam na parte esquerda do grfico. bits Exibe os valores em bits ao invs de bytes nos grficos. noinfo No coloca as informaes uptime e nome do dispositivo na pgina. nopercent No exibe as porcentagens de utilizao. transparent Gera os grficos com fundo transparente. noborder Gera os grficos sem borda. Para incluir parmetros que sero usados em mais de um dispositivo (determinado pelo valor "nome"), pode-se fazer uso de valores padro, especificados como o nome "_". Exemplo: Options[_]: growright,noinfo MaxBytes[_]: 12500000 Todos os parmetros decritos devero estar no arquivo de configurao, mrtg.cfg. Segue abaixo um exemplo do arquivo: -------------------- Arquivo mrtg.cfg -------------------# mrtg.cfg WorkDir: /usr/local/apache2/htdocs/mrtg RunAsDaemon: Yes Language: brazilian Options[_]: growright,bits Target[porta1]: 1:public@192.168.0.10 MaxBytes[porta1]: 12500000 Title[porta1]: Analise de Trafego Porta 1 PageTop[porta1]: <H1>Estatisticas Porta 1</H1> Target[porta2]: 2:public@192.168.0.10 MaxBytes[porta2]: 1250000 Title[porta2]: Analise de Trafego Porta 2 PageTop[porta2]: <H1>Estatisticas Porta 2</H1> -------------------- Fim do arquivo mrtg.cfg -------------------Crie um usurio de nome mrtg no grupo mrtg, para no precisar rodar o MRTG como root. Execute os seguintes comandos: # pw group add mrtg -g 190

# pw user add mrtg -c "MRTG" -d "/nonexistent" -s "/sbin/nologin" -u 190 -g 190 Dever ser criado o diretrio no qual o MRTG ir colocar as pginas e os grficos e dever ser atribudo o dono mrtg ao diretrio, que definido pelo parmetro "WorkDir". Atribua tambm o dono mrtg ao diretrio /usr/local/etc/mrtg. Para inicializar o MRTG utilize o seguinte comando: # /usr/local/bin/mrtg --user=mrtg --group=mrtg /usr/local/etc/mrtg/mrtg.cfg Faa alguns testes, e verifique as pginas criada em http://servidor/mrtg/. A pgina com os grficos de cada porta/link ter o nome que foi especificado no arquivo de configurao, por exemplo porta1.html, porta2.html etc. Voc poder criar uma pgina index.html para agrupar estes grficos ou para fornecer links para a pgina de cada porta. Faa um script de inicializao para o MRTG, com os seguintes comandos para inicializao e shutdown, respectivamente: /usr/local/bin/mrtg --user=mrtg --group=mrtg /usr/local/etc/mrtg/mrtg.cfg > /dev/null e kill -9 `cat /usr/local/etc/mrtg/mrtg.pid`

4 - Artigos Diversos
4.1 - Adio de Espao de Swap em Arquivo
Em determinado momento voc pode se deparar com um servidor que necessita de mais espao para Swap, seja porque a partio swap original foi mal calculada ou por qualquer outro motivo. A maneira mais simples criar um arquivo e instruir o sistema a fazer swap naquele arquivo. Inicialmente, edite o arquivo de configurao do kernel e adicione a seguinte linha: pseudo-device vn 1 Aps isso, recompile e instale o novo kernel, e ento reinicie a mquina. Estes passos esto descritos na seo Recompilao e Instalao do Kernel. Aps a reinicializao da mquina, deve ser criado o dispositivo "vn": # cd /dev # sh MAKEDEV vn0 Defina o tamanho desejado de swap adicional, e ento crie o arquivo. O exemplo abaixo ir criar um arquivo chamado /usr/swap0, com 2GB (2048 blocos de 1024k cada): # dd if=/dev/zero of=/usr/swap0 bs=1024k count=2048 # chmod 0600 /usr/swap0 Edite o arquivo /etc/rc.conf e adicione a seguinte linha: swapfile="/usr/swap0" Agora basta reiniciar a mquina para ativar o novo espao de swap, ou executar a seguinte linha de comando: # vnconfig -e /dev/vn0b /usr/swap0 swap Voc pode verificar se a swap nova est ativa e tambm o uso da swap atravs do comando "swapinfo". Maiores informaes sobre a adio de swap em um sistema FreeBSD podem ser obtidas no endereo http://www.freebsd.org/handbook/adding-swap-space.html.

Você também pode gostar