Escolar Documentos
Profissional Documentos
Cultura Documentos
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
Servios Web
Servidor Web - Apache HTTP Server Estatsticas de Uso do Servidor Web - Webalizer
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.
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.
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.
* 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
* 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.
-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".
/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
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.
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.
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.
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.
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
# 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
$ ./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.
# 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.
/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.
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`
/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.
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).
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.
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 --------------------
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.
# 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:
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
; ; ; ;
; 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.
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.
; 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. (
; ; ; ; ;
; 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.
; 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
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 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
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
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.
-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
# 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.
# 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
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.