Você está na página 1de 87

Notas da FreeBSD Brasil:

Ateno: essas anotaes foram criadas por Edgar Paes (edgar.paes@lagoinha.com) na turma de
2010 do SSA. Por favor no compartilhem sem anuncia explcita do Edgar, a quem agradecemos por
liberar suas anotaes pessoais, complemento bem relevante pras turmas :-)

Treinamento SSA
Histria
A DEC, em 1965 criou uma linhagem de mainframe conhecido como PDP, que era
a base de chips de silcio. O primeiro sistema operacional utilizado foi o GENIE, e
posteriormente o CTSS do MIT.
Preemptivo granularidade do escalonador, que medida em HZ. Respeita-se o
time slice, ou time sharing, ou seja, antes da preempo, verifica-se a prioridade.
Todo esse processo conhecido como Multiplexao, o qual derivou o MULTICS,
que demandou um consrcio de 08 empresas e bem como um fundo da UCLA. A
AT&T tinha interesse simplesmente em desenvolver mecanismos que possibilitasse
o processo de Switching de telefonia de forma computacional. Porm, havia
conflitos de interesses, onde tcnicos da AT&T possuam um determinado
interesse, e os da IBM possuam outros, de forma que o projeto de um sistema
operacional multitarefa no estava sendo possvel.
Brian Kernnighan, criador do PMI, assumiu a liderana do projeto, e a AT&T
abandonou o projeto do MULTICS (1969). Ken Thompson, Denis Riche, Joseph
Francis Osanna, continuaram com as ideias do desenvolvimento do Sistema
Operacional.
Ken Thompson modificou o Multics, transformando os Jobs em processos de 165535 (PID), um outro programa mapeava a geometria da memria e sua
respectiva alocao de pginas, tambm um outro programa que separa as
pginas de memria em duas primitivas (atualmente so oito tipos de primitivas):
Segment Stack Size (SSS), que continha o programa de fato, que era o exec, o
corpo do PID e o DSS Dynamic Allocate Stack Size, que consistia nas variveis
alocadas pelo PID. Um outro programa separava a DSS (para gravar o highscore
do jogo). Um outro programa era utilizado para gravao em Fita Magntica, que
na verdade foi o principio de FS File System de 512 Bytes e depois 1k. Outro
para gravar no FS e o Loader, que carregava o programa em estado de execuo
junto com o highscore, que originou posteriormente as bibliotecas compartilhadas.
Houve modificaes para jogar em modo versus, que possibilitou o Gerenciamento
de Portas Seriais: Serial Input e Serial Output (SIO), onde o PID recebia o SIO que
funcionou da seguinte forma:
std output SIO

std input SIO


Com todo esse processo houve os conceitos:
Monoltico/Monobloco (que gerencia todo um conjunto de processos bsicos,
como memria, disco), no caso o Kernel. O Multics era Multi Kernel, ou Micro
kernel, onde as aplicaes executam em regies de memria diferentes. O
MAC OS X Kernel Monoltico (projeto Darwin), onde h diversos microkernels
(para drivers) que no comunicam entre s, somente com o kernel monoltico.
Outro sistema operacional de microkernel o GNX Os outros sistemas so
monolticos e carregam (registram) mdulos, mas no so microkernels.
- O PDP-11 de Berkeley, alm de estar na Internet (ns2.berkeley.edu, que o DNS
Secundrio) tem um update de 26 anos.
- Com a linguagem C, foi possvel a Portabilidade. Ken Thompson foi aluno de Bob
Fabry durante o Doutorado e Ps-doutorado.
- Inicialmente o PDP-11/45, possua system crash quando utilizado em duas
controladoras, este bug foi identificado por Keith Standiford. Ken Thompson depurou o
problema via Modem.
Unix (evoluo) Atravs das mudanas principais e relevantes de Bill Joy e Chuck
Haley gerou o Unix 6 V Changes, o qual era a evoluo iniciada em Berkeley e
concluida aps a concluso de ken Thompson. Posteriormente houve 30 melhorias no
sistema que o diferenciavam muito do Unix da AT&T. Em 1977: BSD Unix Berkeley
Software Distrubtion of Unix Operating System.
- A VAX 11/780 possua arquitetura de 32 Bits, Possui muito mais discos, permitindo at
mesmo SCSI (primeira da histria).
Memria Virtual Desenvolvida por Marshall Kirk Mckusick. O 3BSD foi o primeiro
sistema a utilizar o subsistema de mquina virtual.
Em funo de questes de patente, recursos financeiros, entre outros, o DARPA
contatou Boby Fabry para utilizao do BSD de Berkeley, onde em 5 meses, 100%
dos computadores da ARPANET utilizava o 3BSD.
O HTTP foi criado na universidade de UCLA.
O BSD adotou o Job Control, que o escalonamento: crontab (periodicidade), at
(executa em data especifica), envio de sinais em background (ctrl + z), comando (#
j exibe jobs) exemplos: # sleep 10&& ls / # sleep 10; ls.
A Calculadora HP utiliza a linguagem LISP.
Mackusick criou os conceitos de inodes, formatao, partio, quota por bytes, etc.,
junto com o UFS e posteriormente o FFS (Fast File System). O NTFS utiliza
Journaling.
O TCP/IP foi desenvolvida por Bob Kahl e Vincent Cerf (Universidade de Purdue
Vice Presidente do Google).
- O Brasil segue a Lei escrita, conhecida como positivista.
Licena GPL: Baseada principalmente nos seguintes quesitos: Liberdade para Ler,
Acesso, Modificao, Estudo, Redistribuio no item 1. No item 2, nada em qualquer
hiptese pode impedir as liberdades asseguradas no item 1. No item 3, Qualquer produto
derivado dessa licena, torna-se automaticamente GPL, etc. So 08 termos com 29
requisitos. A verso do Kernel 0.3 foi a primeira verso sob GPLv2.

W^R = Write XOR Read, onde uma pgina deve estar Write pelo menos uma vez, e um
Read pelo menos uma vez. Com isso, se uma pgina estiver True, ser True somente
para o processo acessando aquela pgina de memria, se outros processos tentarem
acessar a pgina e gerar entradas True, pelo XOR, a pgina ser Falsa, no permitindo o
acesso. Tambm criou o sysTrace, o Super Smach Stack (gcc 5.2).
O 386BSD mudou de nome (quatro meses depois) em1993 para FreeBSD.
Strings no kernel32.dll
# strings /bin/ls | grep color ABC
# strings kernel32.dll netinet.dll ipnat.sys powershell.exe
ftp.exe ftp.mib | grep Calif

BAE Systems De propriedade da NAI Labs, que o X400 (Classificao A2 (Mxima)).


Windows Server, Linux (Debian, Slackware, etc.) C3
Red Hat e Suse B1
FreeBSD, Mac OS Server Leopard B2
FreeBSD 7
phkmalloc(4) jemalloc(4) Utilizado tambm no Firefox 3, Solaris e Oracle. um
alocador de memria otimizado.
Kernel 2.6.23 O Linux adotou o escalonador (schedule) CFS em vez de OCS, CFS
possui mais performance para Desktop, porm, para ambiente de Servidores OCS
muito melhor em funo de IO Bound e CPU Bound.
FreeBSD 8
Memory Superpages (McKusick) Quando aloca-se memria, o kernel aloca um nmero
de pginas de memria, o tamanho de pgina de 4k. Quando necessrio alocar 80k,
aloca-se 20 pginas, 79k 20 pginas, 1k uma pgina, etc. Ou seja, em dado momento h
um desperdcio de pginas de memria, com o Memory Superpages, o tamanho d
pgina varivel em funo da necessidade do PID, porm, a pgina de memria nunca
ser menor que 4K.
Http://www.netcraft.com
INSTALAO
http://www.freebsd.org/releases/errata Neste site encontra-se anomalias geralmente
em decorrncia de hardware. Geralmente no possui erratas, mas deve-se olhar.
http://www.freebsd.org/releases/hardwarenotes Deve colocar no checklist antes de
colocar no oramento de aquisio de hardware, principalmente quanto ao Chipset.
http://www.freebsd.org/releases/releasenotes

Site

que

esclarecem

as

novas

implementaes.
CD1 Base binria de instalao, cdigo-fonte e documentao.
CD2 Pacotes pr-compilados;
DVD1 Pacotes Extras + CD1 + CD2 + Live CD para resoluo de problemas.
Mini-inst No tem nada, somente a base principal, sem documentao, cdigo-fonte,
etc.
Boot Only Somente para boot, utilizado para instalao via rede.
Tarefa pr-instalao (E/S (Teclado, Monitor), Storage (Disco) e Media (CD, DVD))

Menu de Opes de Instalao Menu Beast


Opo 1: Boot FreeBSD [default] Entra por default
Opo 2: Boot FreeBSD witch ACPI disabled Desabilita a interface de controle de
energia, que foi criada pela Microsoft e Intel para eliminar limitaes do hardware (nmero
de interrupes, no pode usar o mesmo ID de Interrupo). No uma boa ideia utilizar
ACPI, pois esta no passa de uma gambiarra. Esta opo trabalha com perspectiva
inversa, de forma que a ACPI DEVE estar ligada na BIOS, pois se estiver desligada, essa
opo liga a ACPI.
Opo 6: Escape to loader prompt Utilizado para comandos que no esto por padro
habilitados no menu.
# show Exibe diversas diretivas que tratam de como resolver problemas de
incompatibilidade de hardware.
# boot (Boot Normal); boot -s (Boot Single Mode),
Inicializao
probe Momento de reconhecimento de drivers.
Com a tecla Scroll Lock, ativado o probe buffer, quer permite re-visualizar as
mensagens do probe.
Entrando no Loader Prompt (Opo 6)
As variveis de loader so divididas em trs categorias principais:
Variveis de Comportamento de Loader
Controlam o boot logo, boot delay time, arquivos a carregar carregamento de mdulos
Variaveis de Tunning (Load Time Tunable)
H duas perspectivas de sysctl, que utiliza se de variveis MIBs, que um banco de
dados hierrquico, onde uma executada em ambiente de produo, o kern.maxfiles, que
trada dos Files Descriptors. Esta uma MIB sysctl de Runtime, e no de Load Time (No
momento de loader do Kernel, que aps a alterao torna-se Read Only).
hw.<xxx> Modifica o modo, uma varivel qualitativa, faz modificao de
comportamento de recursos.
kern.<xxx> Permite tunning de performance atravs do dimensionamento de
recursos de alocao para cada recurso de kernel, ou seja, valores quantitativos.
# set (para definir) unset (para destruir)
# set kern.hz=200
# set kern.ipc.sndbuff=8192 (8k)
kern.pic<xxx> Reservado para comunicao de syscalls, que so recursos de
alocao do prprio kernel.
# man loader.conf

Variveis hint (Dica)


Trata de como o Kernel deve controlar determinado hardware (por exemplo, habilita tal
recurso, aloca interrupo em tal recurso, etc.)
hint.<dispositivo>.<unidade>.<recurso>=<valor>
<dispositivo> - Device control (ad, da, ata, sio, etc)
<unidade> - unidade do device (0, 1, 2)
<recurso> at (barramento onde device est isa, pci, usb), port (endereo de memoria de
inicio de requisies), portsize (numero de portas usadas pelo device)
device_reserved = (portsize*port), maddr (endereo inicial de memoria usada
pelo device) msize (tamanho do espao em memria usado), flags (define bits
adicionais ao device), disable ( se definido como 1, indica para no alocar recursos)
Em caso de problemas, sempre utilizar o boot verbose.
Processo de Boot [Default]
Pressionando as teclas Alt+F2 exibido uma tela de debug, que tambm pode ser
utilizado para verificar o teclado correto digitando-se as letras.
A opo Fixit permite entrar em modo de reparo, principalmente no DVD, que possui um
live CD.
Opo Custom
Menu Options
NFS Secure [NO] NFS Server que trabalha apenas em portas baixas. Em
sistemas Linux roda somente em portas altas, em solaris somente em porta baixa. Isto
para instalao via NFS.
NFS Slow [NO] NFS Server para conexes lentas. Tambm Utilizado para
instalao via NFS.
NFS TCP [NO] Utilizado para forar TCP, pois por padro UDP.
NFS Version 3 [YES] Utiliza a verso 3.
Debuggin [YES] Exibe detalhes de instalao.
No Warings [NO] No ser exibido alertas.
Yes To All [NO] Define Yes para todas as perguntas do sistema.
Package Temp /var/tmp Arquivos temporrios
Fixed Console [standart/serial] Em qual mecanismo ser visualizada
a instalao, em caso de serial, ser impossvel instalar o FreeBSD, geralmente
utilizado para debbugin de Roteadores.
Re-Scan Device <*> Hardwares no detectados, utiliza o rescan device.
Newfs Args -b 16384 -f 2048
-b block size, que o tamanho lgico do inode que alocado.
-f Fragment Size, quando um arquivo form menor que o block size, em
quanto Fragment Size ser gravado.
Utiliza a regra 8/1. Em caso de SPARC, PowerPC e Alpha no necessrio utilizar
a regra 8/1, ou seja, 8 * 2048 = 16384. Em discos SSD tambm no necessrio seguir a

regra.
-02 UFS2 (Esta opo no est disponvel por padro).
Para apagar inodes, utilizado a syscall unlink(), por exemplo, o
comando # rm utiliza a syscall unlink().
O Squid sempre grava arquivos de tamanho fixo de 8K.
# dd if=/dev/zero of=/usr/local/squid/cache/teste.bin bs=8k
count=500000 Um banchmark de performance em SATA2 deve ser de 165MBytes/s.
O FreeBSD sempre deve ser instalado na partio primria, o FreeBSD no instala em
partio que no seja primria.
Configurao de Parties
/ = 512M
Swap = 2 * Phisycal Memory + 10%(Phisycal Memory)
/var = 35%
/tmp = 512M
/usr = 65%
Padro FreeBSD Brasil
/ 512M
Swap =
/tmp =
/var =
/usr =

(i386) ou 1024M (ia64)


MF * 2 + 10% (Acima de 16GB, Swap = RAM)
1GB
5GB
06GB a 08GB

Se necessrio, criar as parties:


/var/db Banco de Dados
/var/log Para Log Server
/var/dados Samba
/usr/local Para muitas aplicaes
ATENO: No Slice que contm o diretrio /, deve-se utilizar a tecla s (Set
Bootable), e depois a tecla w (write).
Com a opo z, pode-se customizar o blocksize e o fragmentset (obedencendo a
regra 8/1). Para parties do Squid (/usr/local/squid/cache) usar: -b 8192 -f
1024.
No caso de servidores dedicados a banco de dados eleva-se o blocksize para -b
32768 -f 4096.
Samba 128K -b (128 * 1024) -f (128 * 1024) / 8
var Variable Content data, onde o contedo do diretrio variam e so temporrios
usr Unix Resource Recursos . O POSIX recomenda que o diretrio de usurios
estejam sob /usr, ou seja, /usr/home/diretorio_do_usuario.
* Sempre deve-se reservar pelo menos 10% do Slice.

Soft Updates
Userdata Dados dos usurios (arquivos, dados gravados), aplicaes, etc.
Metadata dados (informaes) do userdata. constitudo por filename, inode, inode de
inicio, inode de fim, etc.
O LFS, faz sync somente em dados importantes que so gravados em arquivos de log
(Log File System) (disco (EEPROM) em um disco de alta velocidade, de forma que no se
perde o que estava em disco, pois os metadados so gravados em log. O Journaling
utiliza uma partio separada para armazenar esses arquivos, e essa partio sempre
sncrona. A partio de /boot sempre assncrona. O Raiserfs (o desenvolvedor do
Raiserfs est preso por assassinar toda sua famlia) possui uma implementao muito
boa de Journaling.
O Soft Updates (Sncrono)
Uma variao de 500 linhas de cdigos sobre o UFS. Na usenix 8 foi feito um benchmark
de oito testes, sendo que em todos apresentaram segurana equivalentes. O Soft
Updates ganhou 6, empatou 1 e perdeu 1 (leitura de files menores armazenados
sequencialmente).
Durante a instalao:
Alt+F2 Debug
Alt+F4 Prompt com o que j est sendo instalado.
POS-INSTALAO
/boot/device.hint Configuraes de hint.
Trocando o menu Beast
# cd /boot
# ls *.4th
# ee beastie.4th
Alm de trocar o menu beast, tambm deve-se estudar o que o safe mode executa, de
forma que se o sistema boota em safe mode, mas no boota em estado default, devese desabilitar as variveis que so desabilitadas durante o boot em safe mode, talvez seja
problema com ACPI, DMA, ou outro hardware.

Composio de Discos
(PATA) ata0
Master: ad0
Slave: ad1 (Slave sempre tem ID mpar)
(PATA) ata1
Master: ad2
Slave: ad3
(SATA) ata3
Master: ad6 (sempre ID par) e No existe Slave em SATA
Device Name:
ad0s1 (s1 Slice 1)
ad0s2b Primeiro Canal IDE (IDE 0), Master, Segundo Slice, Label
2
# dumpfs /usr/local/squid/cache
# umount -f /usr/local/squid/cache
# tunefs -o space /usr/local/squid/cache (Otimiza para espao
(ignora escrita de disco))
# tunefs -o time /usr/local/squid/cache (Otimiza para tempo de escrita
(ignora economia de disco))
# man tunefs
# vidcontrol (Muda a cor do terminal)
possvel, com o tunefs, habilitar e desabilitar o Soft Updates.
# ls -l /boot/mbr /boot/boot0
Esses arquivos so de 512 Bytes, e so os arquivos de MBR, sendo que o boot0 um
backup do /boot/mbr.
/boot/boot1 Carrega o boot2 (Boot Manager) caso durante a instalao tenha sido
instalado o Boot Manager. Em caso contrrio, procura por /boot/config, onde -P -s 9600
(boota na interface serial ativa (freebsd como roteador). Tambm, pelo boot.config
possvel carregar o sistema a partir de outra partio.
O /boot/boot2 carrega o /boot/device.hints e /boot/defaults/loader.conf
Nunca deve-se alterar as configuraes dos arquivos nas estruturas de defults, como
/boot/defaults, /etc/defaults, etc. Com isso, caso tenha que modificar uma
configurao no /boot/loader, ento, deve-se consultar as opes em
/boot/defaults/loader.conf, ento cria-se uma cpia do arquivo original, no caso
/boot/loader.conf
e
acrescenta
as
configuraes
necessrias
do
/boot/defaults/loader.conf
# man rc.conf

#
#
#
#
#
#

man
man
man
man
man
man

rc.conf | grep em0


7 hier Toda a estrutura hierrquica do FreeBSD documentada.
9 style
sis Manual explicativo da Placa de Rede SiS 900.
lint
ident

Para criar arquivos de que executam procedimentos, deve-se criar arquivos no rc.d,
obedecendo as prerrogativas de PROVIDE, REQUIRE, KEYWORD, BEFORE (se
necessrio).
# /etc/rc.d/named rcvar
UNIX BSICO
Arquivos de TTY
# /etc/tty
Neste diretrio traz o controle de terminais remotos, fsicos e discados. Nele tambm
configura-se segurana bsica quanto aos TTY. Aps o ttyv9, comea a ser acrescido
como ttyva at ttyvf
Aps as alteraes,
# Kill -HUP 1 (init)
Configurao de Rede
# ifconfig <interface> <opcao>
Configurando IP
# ifconfig <interface> <ip/mascara>
# ifconfig <interface> <ip> <netmask>
Verificando as velocidades suportadas
# ifconfig -m sis0
# ifconfig sis0 media 100baseTX mediaopt full-duplex
Dica: Utilize o mouse para para copiar e colar a sada do comando # ifconfig sis0 -m

Detectando erros de transmisso


# netstat -i
As colunas mais importantes so: 0errs e Coll (Coliso). Ipkts (Input Packets), Ierrs (Erros
de entrada), Idrop (Pacotes de entrada dropados), Opkts (Erros de Sada).
O FreeBSD trabalha exclusivamente com IRQ dedicados, no possvel utilizar IRQ
compartilhado.
Modificando IRQ

Identificado IRQ compartilhada.


# dmesg | grep irq
Com a sada, deve-se verificar todas as IRQ que so idnticos aos da placa de rede. Para
modifica-los h opes como: Modificar na BIOS, utilizar as variveis de hint)
# ifconfig sis0 polling
# ifconfig sis0 -polling (remove o polling)
Em caso de erros de compartilhamento de IRQ, no dmesg exibido sis0: Watchdog
timeout, tambm no /var/log/messages. Em casos raros, pode ser tambm um
problema na placa.
Trabalhando com Alias
# ifconfig sis0 <ip/mask> alias
# ifconfig sis0 192.168.10.10/24 alias
# ifconfig sis0 192.168.10.10/24 -alias (removendo o alias)
O ARQUIVO RC.CONF
# cat /etc/defaults/rc.conf | grep ifconfig
###### RC.CONF ####
# Arquivo de configuracao do arquivo rc.conf
# Criado em 21/09/2009 por Jean Melo <jmelo@freebsdbrasil.com.br>
# Alterado por: Danton Dorati <danton@freebsdbrasil.com.br>
# HABILITA REDE
moused_enable=YES
# CONFIGURACOES DE REDE
ifconfig_sis0=inet 201.48.151.207/27
# CONFIGURANDO O ALIAS
ifconfig_sis0_alias0=inet 192.168.10.207/24 # O primeiro alias sempre
deve comear com 0.
ifconfig_sis0_alias1=inet 192.168.10.10/24
##### FIM DO ARQUIVO ####
# cd /etc/rc.d
# ls | wc -l
# sh /etc/rc.d/netif restart

Adicionando Rotas
#
#
#
#
#

route
route
route
route
route

add -net 192.168.10.0/24 172.16.10.1


add -host 192.168.10.10 172.16.10.1
delete -net 192.168.10.0/24 172.16.10.1
add -net 192.168.10.0/24 172.16.10.1 -iface sis0
add -host 192.168.10.10 -iface sis0

-h Para chegar a um host.


-net Para chegar a toda uma rede.
Rota Default
# route add default <ip-do-gateway>
# route delete default
# netstat -rn
FreeBSD como Router
No /etc/rc.conf,
gateway_enable=YES
defaultrouter=201.48.151.207/27
Configurao de rotas estticas no rc.conf
########### RC.CONF ########
static_routes=rota1 rota2 jean filial
route_rota1=-host 172.16.0.1 192.168.10.
route_rota2=-net 10.0.0.0/24 172.16.0.1(gateway quem me leva a rede)
route_jean=
route_filial=
#############################
# route flush Apaga todas as rotas
sh /etc/rc.d/routing restart
ou
# sysctl -a
# sysctl net.inet.ip.forwarding=1
# tcpdump -i sis0 icmp
# tcpdump -i sis0 host 172.16.0.1
Quando h problemas com roteamento, onde no h rota de volta, o icmp exibe somente
requisies de echo request (exibido pelo host pingando no host de destino), aps as
configuraes corretas, verifica-se atravs do tcpdump -i sis0 host 172.16.0.1, verifica-se
icmp echo request e icmp echo reply.
# netstat -an Exibe servios que esto ativos (rodando);
# sockstat -4l Exibe servios em IPv4. A coluna Foringn Address indica quais

redes, Ips, que este servio aceita conexes.


# ee /etc/resolv.conf
nameserver 201.48.151.193
nameserver 201.48.151.194
# ee /etc/hosts
201.48.151.207 edgar.ssa.com.br edgar
FSCK Verificando a integridade dos discos
# cat /etc/defaults/rc.conf | grep fsck
CONTORNANDO PROBLEMAS:
A diretiva moused_enable est faltando aspas, o que gerar um erro.
moused_enable=YES
Problema:
/etc/rc.conf: 11: Syntax error
Resoluo:
# mount -a
# ee /etc/rc.conf
moused_enable=YES
# return
Ou,
Resoluo:
# mount /usr
# mount -u -o rw / Montando a partio como escrita
# ee /etc/rc.conf
# return

Problema com o FSTAB


Problema:
Problemas ocorridos com o /etc/fstab, que geralmente sintaxe errada quando
inserida manualmente, ou qualquer outro problema que o arquivo este corrompido. O erro
exibido abaixo:
<fstype>:<device> Mount <device> using filesystem <fstype>
eg. Ufs:/dev/da0s1a
<mountroot> ufs:/dev/ad0s1a (Atente-se ao Slice que foi utilizado para o /)
1) Deve-se entrar no Single Mode (Opo 4)
2) ufs:/dev/ad0s1a
3) Montar o barra como escrita: # mount -u -o rw /dev/ad0s1a /
4) Reparar o /etc/fstab
Em caso de solicitar que utilize o FSCK:
# fsck -t ufs /dev/ad0s1a (Aps utilizar o ufs:/dev/ad0s1a)
# mount -u -o rw /dev/ad0s1a /
# mv /etc/fstab.bkp /etc/fstab
Outra opo, no Menu Beastie: [opo 6]
OK> set vfs.root.mountfrom=/dev/ad0s1a
OK> set vfs.root.mountfrom.options=rw
OK> boot
PERIODIC /etc/periodic
Os scripts do /etc/periodic executados diariamente esto localizados em
/etc/periodic/daily.
Para
habilita-los,
primeiramente,
consultar
/etc/defaults/periodic.conf. Quando configurado para fazer backups com a
opo 200.backup-passwd, os arquivos so armazenados em /var/backups.
# touch /etc/periodic.conf
Editar o arquivo acima com as diretivas desejadas em /etc/defaults/periodic.conf.
# cd /etc/periodic/daily
# ee 200.passwd-backup Verificar as variveis que contm os paths para backup,
ou outra finalidade.
# sh 200.passwd-backup
Base de Usurios do FreeBSD
/etc/master.passwd Contm os usurios do sistema e bem como o hash de senha
criptografada do usurio.
/etc/passwd Base dedados dos usurios. Os usurios que contm :*: so usurios
criados pelo sistema. Toda o ndice (base indexada) de base de dados do usurio est
localizado em /etc/pwd.db e /etc/spwd.db.

Reconstruindo a Base de dados


Antes, aps habilitar o periodic, para fazer backup de master.passwd, copiar:
# cp /etc/bakcups/master.passwd.bak /etc/master.passwd
# cd /etc
# pwd_mkdb -d /etc/ master.pwd
Caso no esteja com backup:
# cd /usr/src/etc
# cp /usr/src/etc/master.passwd /etc/master.passwd
# pwd_mkdb -d /etc/ master.pwd
Quando perder a senha de root, entrar em single user mode e reconfigurar a senha de
root.
# chfn edgarpaes Para manipulao de usrios
# vipw Para editar o arquivo /etc/master.passwd
# pw user add edgarpaes -s /bin/csh -d /usr/home/ -G whell -m (cria o
home do usurio)
# passwd edgarpaes
# rmuser -ry [Remove todos os dados do usurio, home, e-mails, etc.]
# pw userdel <usuario>
LOGS
/var/log/auth.log Informaes sobre tentativas de autenticao.
/var/log/cron Informaes sobre as entradas executadas pelo crontab.
/var/log/debug.log Informaes sobre debug relevantes do sistema.
/var/log/lastlog Registro das ltimas informaes sobre logons no sistemas. O
comando # last trs informaes deste arquivo.
/var/log/lpd-errs Registro de informaes sobre erros de impresso
/var/log/maillog Registro de e-mails
/var/log/messages Registra informaes gerais do sistema.
/var/log/ppp.log Registra informaes de conexo discada.
/var/log/security Registra informaes de logs do Firewall.
/var/log/userlog Registra criao de usurios, remoo, etc.
/var/log/wtmp Gera informaes de quem est logado no sistema atualmente.
/var/log/xferlog Log do X.
No /etc/syslog.conf, possvel redirecionar os logs para um SysLog Server, dessa
forma, basta editar: (Escuta na porta: 514 UDP)
*.*

@201.48.151.193

No /etc/rc.conf:
syslogd_enable=YES
syslogd_flags=-a 201.48.151.193
PERMISSO

# chmod u=rwx,g=rx,o=r arquivo.txt


# chmod u=rwx,g=,o= arquivo.txt [rwx------]
4 - r
2 - w
1 - x
# chmod 0660 teste.txt
# chown <usario:grupo> arquivo.txt
# chown <:grupo> arquivo.txt Altera somente o grupo, omitindo o primeiro
parmetro.
# chgrp jean arquivo.txt
Criando um diretrio oculto. Para acess-lo necessrio digitar da mesma forma como foi
criado.
# mkdir ..
# cd ..
# rm -rf ..
Link Simbolico
# ln -s /usr/home/edgar /edgar
# rm /edgar Ateno: No pode conter / no final, por exemplo, /edgar/
StickBit
# ls -l /usr/bin/passwd [-r-sr-xr-x]
-setuid: 4 # chmod 4755 /usr/file.sh (Com isso, ser executado com
privilgio de root).
-setgid:2
-stick bit: 1
ls -l /
[drwxrwxrwxt] /tmp t representa o StickBit, somente o dono do diretrio ou arquivo
criado possa remov-lo.
# chmod 7551 Configura StickBit
# cp -v Copia com verbose.

Monitorando TTY, observando conexes SSH, escrevendo na sesso, e destruindo


# w
Nesse momento, observa-se o tty que o mesmo est utilizando e utiliza-se o watch.
# watch
Enter device: pts/1
# watch -W
Device name: pts/1
# Estou vendo Ok!!
Para sair: ^g
Para limpar a tela: ^w
Para destruir a sesso do indivduo, basta utilizar o comando kill.
# w
# kill -PID_do_individuo
# head -10 /var/log/messages Primeiras 10 linhas de mensagens do arquivo.
# tail -F /var/log/messages Mesmo em caso de rotacionamento continuar
sendo exibido as mensages.
Monitorando Processos
Process Status - PS
# ps ax Exibe todos processos em execuo.
# ps aux Exibe todos os processos em execuo e qual o usurio e informaes de
CPU, Memria, etc.
Colunas:
VSZ Quanto est alocado de memria para o processo.
RSS Quanto o processo est utilizando do que lhe foi alocado em VSZ.
TOP
Colunas:
load averages Carga de CPU [0.00 (5 minutos), 0.00 (10 minutos), 0.00 (15
minutos)]. Uma carga alta caracterizada quando um dos valores chegarem a 1 (100%)
quando houver somente 1 processador, 2 quando houver dois processadores. Somente
no FreeBSD 8.0.
Quanto ao Swap, o algoritmo de gerenciamento de Swap, baseado em Schedule, faz
sempre uso de Swap, pois o mesmo identifica os processos que esto parados e joga-os
no Swap, privilegiando os processos que requerem prioridades.
A coluna C do comando TOP, indica qual CPU o processo est utilizando.
# top -m io
# top -o res Quanto est ocupando memria
# top -o s

# top -o time
# systat
# vmstat Memria virtual
# iostat troughput de disco
# iostat -w1
# gstat troughput de disco. Nesse programa, deve-se observar a
coluna %busy, onde caso esteja chegando a 100%, representa
gargalo. A coluna L(q) (Lenth Queue), que representa a fila de
processos esperando para escrever em disco. As duas colunas devem
ser combinadas, devendo observar o coluna %busy em funo da
coluna L(q), porm, deve-se ater que caso chege a 97.0%, por
exemplo, este deve ser constante, e no espordico.
# uptime
# swapinfo
Enviando Sinais para os daemons
- TERM = -9 Mata o processo;
- HUP = -1 Aborta
- ABRT Aborta
- SGV (Falha de Segmentao) (Signal 11) Geralmente ocasionado por
problema fsico na memria RAM. Error: Signal 11.
Referncias On-line FreeBSD
http://www.freebsd.org/docs Site oficial do Projeto FreeBSD
http://www.fug.com.br Grupo de usurios de FreeBSD do Brasil. Assinar a lista.
Http://free.bsd.com.br Site do Jean

#
#
#
#

Quando instalar uma nova shell via ports, por exemplo, bash, necessrio
adicion-lo no /etc/shells
alias ls -ls -G Criando alias. O -G exibe cores do sistema.
set autolist Exibe e auto completa comandos e diretrios.
setenv EDITOR ee
setenv Exibe todas as variveis de ambiente.

Arquivos de inicializao do Shell


O arquivo .cshrc do home do usurio que contm as configuraes da shell.
# fetch http://201.48.151.193/cshrc2
# source .cshrc Utilizado em vez de logout.

Agendamento de Processos
O crontab em nvel de sistema est localizado em /etc/crontab.
Minuto / hora / dia_semana / ms / mes_do_ano / usurio / comando
01
00
*
*
* Executa todos os dias a 00:01

root

/root/backup.sh

# killall -HUP cron


# crontab -u root -e
O DEVFS
o sistema de arquivos de dispositivos. Todo dispositivo encontrado criado no /dev. Na
sada do comando df -h, o devfs sempre aparece como 100% de espao ocupado.
O INETD
# ee /etc/inetd.conf Habilita servios (daemons) padro. Cada linha
descomentada ativa um daemon. Configurar o inted no /etc/rc.conf
(inted_enable=YES)
# /etc/rc.d/inted start
PORTS
# /etc/Mk Scripts de makefile, onde cada arquivo representa bibliotecas que avaliam
os comandos necessrios para instalao, onde o principal arquivo o bsd.port.mk, que
contm todos os detalhes da programao dos ports.
# /usr/ports/UPDATING Este arquivo descreve as principais mudanas de
qualquer software que possui algum impacto que afete o usurio. Por exemplo, abra este
arquivo e procure por racoon.
# /usr/ports/MOVED Arquivos que foram movidos ou descontinuados em funo de
alguma alterao.
# /usr/ports/CHANGES Alteraes, principalmente para commiters.
Estrutura do Ports
/usr/ports/www/admuser
pkg-descr Pequena descrio do port.
pkg_distinfo Verifica se o arquivo est instalado, hash md5 do arquivo, tamanho e
um SHA256. Isto permite maior segurana. A base de repositrios do Debian foi toda
contaminada em funo de no verificar com prerrogativas de segurana coerentes.
Makefile o script principal para instalar o admuser. Onde:

PORTNAME - Nome do port.


PORTVERSION - Verso da aplicao.
CATEGORIES - Categoria que est inserida.
MASTER_SITES - Onde est localizado para baixar e instalar o port. Em caso de
falha instala do FreeBSD.org.
MAINTAINER - Mantenedor do port. O mantenedor nem sempre o criador do
port, mas o responsvel por inseri-lo na rvore de ports e customiza-lo para uma
instalao mais fcil para o usurio. Quando o mantainer estiver como ports@freebsd.org,
significa que no h nenhum manteiner ainda responsvel. Caso algum se interesse,
poder adotar o port e tornar-se um mantenedor. Marcelo Tossati, mantenedor do Kernel
do Linux, que comitava patchs de Kernel para o Debian, baseava-se em uma perspectiva
de confiana na estirpe dos criadores de patchs e no revisava de fato o cdigo-fonte,
principalmente quanto a segurana.
HAS_CONFIGURES Habilita recursivamente as dependncias.
pkg-plist Programas instalados junto com o Ports. Em caso de remoo, o sistema
consulta este arquivo para remover os pacotes dependentes.
Instalao de Ports
Modelo de compilao em partes:
#
#
#
#
#
#
#
#
#

cd /usr/ports/www/admuser
make fetch
ls /usr/ports/distfiles
make checksum
make extract
make patch
make configure
make build
make install

criado um registro da instalao do port em /var/db/pkg.


Targets Make
# make config Opes de configurao para compilao.
# make showconfig Configuraes setadas para o port.
# make rmconfig Remove as configuraes feitas pelo usurio e volta para o
default.
# make depends Instala somente as dependncias.
# make readmes Cria um arquivo readme.html com a descrio do pacote.
# make clean Apaga o diretrio work, que contm o source-code do pacote.
# make distclean Apaga o arquivo tarbal em /usr/ports/distfiles.
# make search name=stress Encontra na rvore do Ports o pacote em questo.
Este comando deve ser aplicado somente dentro do diretrio /usr/ports.
# make search name-stress display=name,path Busca customizada
(Recomendvel).
Opes: maint=ports@freebsd.org display=name, path | more Procura pelo
mantenedor.
# make search key=apache display=name,path Procura qualquer port com a
palavra apache.

# whereis portaudit
Todos os arquivos do ports que passam por processo de busca, esto localizados no
arquivo indexado /usr/ports/INDEX-8.
# make deinstall Remove todos os binrios e arquivos correlatos ao port.
Instalando Aplicaes em Pool de Mquinas
# make package instala e cria o arquivo admuser-2.3.2.tbz, para ser utilizado em
outras mquinas.
# cd /usr/ports/databases/mysql50-server/
# make BUILD_OPTIMIZED=yes install
Alguns casos, deve-se vasculhar o arquivo Makefile do port e verificar muito mais opes
disponveis sempre.
Instalao via binrio (semelhante a .rpm, .deb)
# pkg_add pacote.tbz
# pkg_info
# pkg_delete pacote Deleta o pacote baseado na saida da informao do
pkg_info.
# pkg_add -rv admuser Baixa do FreeBSD.org.
# pkg_create -b pacote Cria um arquivo pacote.tbz (binrio).
Em servidores sempre utiliza-se instalao via Ports, pois o compilador otimizado para a
arquitetura de hardware do servidor em questo. Os pacotes binrios so sempre
compilados para uma arquitetura genrica, tal qual Linux.
Atualizando a Coleo de Ports
Portsnap Faz um snapshot da rvore de ports e confere com o repositrio central do
FreeBSD.org.
# portsnap fetch extract
# portsnap fetch
# portsnap update
0 3 * * * root /usr/sbin/portsnap cron
Posteriormente, basta utilizar o portsnap update.
Atualizao dos Pacotes Instalados
Portaudit
#
#
#
#

cd /usr/ports/ports-mgmt/portaudit
make install
rehash
portaudit -Fda

Caso queira instalar algum pacote vulnervel, apesar de no ser recomendvel,


desabilitar atravs da varivel:
setenv DISABLE_VULNERABILITIES=yes
No arquivo Makefile de cada pacote exitem as diretivas FORBIDEN, DEPRECATED, ou
BROKEN, que so lidas pelo Portaudit. Caso o pacote contenha a diretiva FORBIDEN, o
Portaudit no permitir a instalao. Aplicaes DEPRECATED sero descontinuadas do
Ports.
Sites:
http://freshports.org
http://pointyhat.freebsd.org
http://portsmon.freebsd.org
XORG
Deve-se conhecer o hardware de placa de vdeo.
Conhecer as configuraes de resoluo do monitor.
O FreeBSD tambm esfora-se para criar um ambiente X com hardware genrico.
O XORG atua como uma camada entre o Window Manager e o hardware. Para instal-lo:
Ports
# /usr/ports/x11/xorg
# make install
Tambm, pelo DVD do FreeBSD 8.1 atravs do Sysinstall, nas
Configure/Packages/, e deve-se escolher a media CD-ROM, no menu Media.

guias

Configuraes:
# cd /usr/local/etc
Deve-se inicializar as aplicaes dbus* e hald*, que tratam das configuraes de
interfaceamento de teclado e mouse do Xorg.
No /etc/rc.conf
dbus_enable=YES
hald_enable=YES
# /usr/local/etc/rc.d/dbus start
# /usr/local/etc/rc.d/hald start
# Xorg -configure
Gera-se o arquivo /root/xorg.conf.new
# X -config /root/xorg.conf.new

Para sair ctrl+alt+F1, depois Ctrl+c


Em caso de uma tela preta, o processo de deteco do hardware e o ambiente necessrio
para o Xorg ocorreu com sucesso.
Editar o arquivo /root/xorg.conf.new
Na seo Section Device, encontra-se as configuraes do driver da placa de vdeo. Na
guia Driver, caso o driver esteja identificado como 'Vesa, significa que foi instalado um
driver genrico. Verifique o driver da placa de vdeo e instale-o em:
/usr/ports/x11-drivers/xf86-driver*, onde driver, representa o fabricante da
placa de vdeo, como por exemplo, xf86-video-sis
Execute:
# Xorg -configure
Para gerar outro arquivo /root/xorg.conf.new. Conferir se detectou o driver correto. Na
seo driver deve aparecer o driver correto, neste caso:
Driver sis
# cp /root/xorg.conf.new /etc/X11/xorg.conf
Instalando o Window Manager
Em /usr/ports/x11-wm, encontram-se os diversos window manager disponveis. Os
mais populares so GNOME e KDE. No FreeBSD h projetos com equipes separadas
para GNOME e KDE. Tambm h o Compiz, que um extraordinrio Window Manager
baseado nas novas geraes de window manager, porm, requer que a placa de vdeo
seja excelente, possui diversos recursos 3D. encontrado em /usr/ports/x11wm/compiz.
Instalando o GNOME
# cd /usr/ports/x11/gnome2
# make install
Ou
pelo
DVD,
pelo
sysinstall.
Escolher
Configure/Packages/Media
(CD/DVD)/Gnome/gnome2-2.26.3. Sero selecionadas todas as dependncias
automaticamente. IMPORTANTE: possvel executar o X somente como usurio
desprivilegiado.
# cd /usr/home/usuario
# touch .xinitrc
# ee .xinitrc
Inserir a linha:
exec gnome-session
# startx

# ee /etc/ttys, basta configurar para on na linha /xdm para iniciar sempre em modo
grfico.
COMPILAO DO KERNEL
# uname -a
FreeBSD 8.1-RELEASE #0 Identifica o nmero de vezes que o kernel foi compilado.
# /boot/kernel/kernel Kernel do FreeBSD, possui, no Kernel Genrico,
aproximadamente 11MB, que um valor alto para o sistema.
Arquivos de Configurao
# cd /sys/i386/conf/
Crossbuilding- possvel criar um kernel FreeBSD ia64, amd64, arm, etc, em uma
arquitetura i386.
Arquivos /sys/i386/conf:
DEFAULTS: Diretivas de configuraes padres que devem ser obrigatrias para a
compilao do Kernel em funo da arquitetura.
GENERIC: Arquivo com as configuraes que compem o Kernel genrico.
GENERIC.HINTS: Arquivo semelhante a /boot/device.hints, porm, so compiladas
estaticamente, que no recomendvel.
PAE: Arquivo de Extenso de Memria Fsica. Em caso memria acima de 04GB de RAM
em arquitetura de 32 bits, utilizado para estender a capacidade de gerenciamento em
funo da limitao de sistemas 32 Bits. Quando habilita-se suporte a PAE, no
possvel compilar os mdulos de Kernel estaticamente, somente em runtime. Tambm,
diversos drivers e outras diretivas no iro funcionar ou no foram testadas, observar as
diretivas nodevice.
XEN: Para atuar como guest no sistema de virtualizao do XEN de forma customizada.
NOTES: Arquivo de referncias de toda as opes de Kernel do FreeBSD dentro da
arquitetura em questo. Deve ser consultado em diversas ocasies.
/sys/conf/NOTES: Este arquivo independente de arquitetura, ou seja, referncia base
de configuraes para todas as arquiteturas, por exemplo, opes de Firewall esto
contidas neste arquivo.
*******************************************************************************************************
* bpf Utilizado para suporte a sniffers, criando um subsistema de rede virtual para tal
*fim.
*******************************************************************************************************
# make LINT Concatena as opes de kernel de /sys/i386/conf/NOTES com
/sys/conf/NOTES, e cria o arquivo LINTS, porm sem comentrios.
Melhor prtica:
# cd /sys/i386/conf/
# cat /sys/conf/NOTES NOTES > NOTES_FULL
**************************************************************
* nload Monitoramento, parecido com iptrafic
*

* RATE Monitoramento, parecido com iptrafic


*
**************************************************************
# cd /boot
# cp -rp kernel.old kernel.generic
Resolvendo problemas de Kernel:
Reiniciar, e escolher a opo 6 (Loader Prompt).
# unload kernel
# load /boot/kernel.generic/kernel
# boot
Foi carregado o Kernel antigo, basta rever as configuraes.
Outra opo de compilao do Kernel
# cd /usr/src/
# make buildkernel KERNCONF=SSA
# make installkernel KERNCONF=SSA
Mdulos de Kernel
Este mecanismos no recomendvel em funo de ter perda de performance em at
40%. Os mdulos devem ser sempre compilados estaticamente no kernel. Em caso
emegerncial, carregar o mdulo de Kernel e recompilar o kernel com o mdulo
necessrio.
# kldstat -v Visualiza os mdulos estticos compilados no Kernel.
# kldload <modulo> Utilizado para carregar mdulos do Kernel em /boot/kernel/.
Todos os arquivos terminados com .ko* so mdulos de Kernel. As interfaces de rede so
majoritariamente identificadas como if_, por exemplo, if_sis.ko, atravs das pginas de
manual (# man sis), percebe-se que se trata de uma interface da SiS 900 Fast Ethernet.
Caso o mdulo possua dependncia de outros mdulos, estes so carregados
automaticamente.
# kldload if_sis.ko Carrega o mdulo de Kernel da interface SiS 900.
# kldunload if_sis.ko Descarrega o mdulo de Kernel da interface SiS 900.
# config -x /boot/kernel/kernel Extrai as configuraes do Kernel
customizado.
Salvando as Configuraes de Mdulos de Kernel
# ee /boot/defaults/loader.conf Referncia de opes (mdulos) para ser
configuradas no loader.conf
# ee /etc/boot/loader.conf
if_sis_load=YES

Atualizando o FreeBSD
Modelo de desenvolvimento do Projeto FreeBSD
O FreeBSD no possui dono majoritrio, sendo que desenvolvido tambm por outros
desenvolvedores. O OpenBSD s possui um mantenedor. O Projeto formado como:
Core Team: Composto por seis pessoas eleitas a cada dois anos, que tomam as decises
cruciais quanto ao Projeto FreeBSD. O corpo do Core Team definido pelos Commiters.
Commiters: Colaboram com projeto FreeBSD, atualmente aproximadamente 400
comitters. Os commiters so designados a trabalhar nas subdivises de Kernel, Userland,
Docs e Ports.
Contribuidores: Colaboram com o projeto de forma indireta.
Branches:
FreeBSD-CURRENT o FreeBSD que est em desenvolvimento e no est pronto
para produo.
FreeBSD-RELEASE o FreeBSD em mdia.
FreeBSD-Stable o processo de atualizao do source. Aps baixar o FreeBSDRELEASE, feito a atualizao do Sistema, e ento este tornado Stable. considerado
o cdigo mais recente.
Sries (RELENG_X) a ltima da srie em questo, por exemplo, a srie 8, possui
como RELENG, o 8.1.
O ciclo de vida do FreeBSD de a cada 3 verses. No lanamento do FreeBSD 9.0, a
verso do FreeBSD 6.0 deve ser descontinuada.
CVS Control Version System
Web: http://cvsweb.freebsd.org
CVSUP: O CVSUP programa que conecta no servidor do freebsd.org e faz uma
comparao com a verso do usurio. Atualmente, aps ser escrito em C (Antes era em
Perl, localizado em /usr/ports/net/cvsup, passou a ser instalado na Base,
conhecido como CSUP.
# cat /usr/local/share/examples/cvsup/stable-supfile Atualiza o
FreeBSD para Stable.
Alterar a linha host para host=cvsup2.br.FreeBSD.org
Na Linha,
*default release=cvs tag=RELENG_8_1 Atualiza somente patchs de
Segurana.
Opes:
*default release=cvs tag=. - Atualiza para o Current.
*default release=cvs RELENG_8 Atualiza a verso 8 (Recomendvel).
# cd /boot/
# csup -g L2 /root/sup* && make buildworld
Este arquivo pode ser baixado em: http://main.bh.freebsdbrasil.com.br/~jmelo/sup e
http://main.bh.freebsdbrasil.com.br/~jmelo/sup2. (acessvel em: 22/09/2010)

Tambm possvel atualizar o ports via cvsup. Atualmente somente via portsnap.
Os arquivos que podem ser utilizados para atualizar via csup so:
doc-supfile Atualiza documentaes.
ports-supfile Atualiza a rvore de Ports, porm utilizado o # portsnap fetch
extract.
stable-supfile Atualiza o FreeBSD para Stable (ou PRE-RELEASE)
Gerando o Arquivo de Atualizao
# grep -v '#' stable-supfile > sup-stable
# ee sup-stable
Alterar:
*default host=cvsup.br.FreeBSD.org
# csup -g -L2 sup-stable
Verificando o Mirror mais rpido (mecanismo automizado)
# cd /usr/ports/sysutils/fastest_cvsup
# make install
# rehash
# fastest_cvsup -c br -Q Verifica o mirror mais rpido.
# csup -g -L2 -h 'fastest_cvsup -c br -Q' stable-supfile Faz o
processo automtico pegando a sada do comando fastest_cvsup -c br -Q e
colocando como host no arquivo stable-supfile.
Aps atualizar o cdigo-fonte, inicia-se a construo do mundo (userland).
Ento,
# csup -g -L2 -h 'fastest_cvsup -c br -Q' stable-supfile && make
buildworld
compilado dentro de /usr/obj, onde consta tudo que foi reconstrudo, mas ainda no foi
instalado. Recompilando o kernel sem os mdulos:
# cd /sys/i386/conf
# ee SSA
# make buildkernel KERNCONF=SSA && make installkernel KERNCONF=SSA
Enfim, Passos de atualizao (Exceto o processo de csup, todo o processo restante
feito em /usr/src):
1) # cd /usr/src &&
csup -g -L2 -h 'fastest_cvsup -c br -Q'
/usr/share/examples/cvsup/stable-supfile && make buildworld
Atualiza o cdigo-fonte (/usr/src/) e compila/reconstri toda a userland do sistema
em /usr/obj/
2) # make buildkernel KERNCONF=SSA && make installkernel
KERNCONF=SSA Compila o Kernel
3) # make installworld Instala a userland que foi compilada pelo processo de
buildworld.

4) # mergemaster -i (LEIA ABAIXO)


*** ATENO *** - ANTES de executar o comando acima:
# cd /
# cp -rp etc etc.bkp Fazendo backup do /etc.
# cd /etc/
# pwd Verifique que est dentro de /etc.
# rm -rf * CUIDADO: DIGITE DENTRO DE /etc
# cd /etc.bkp
# cp *.db /etc/
# cp group /etc/
# rm -rf /var/named/ Caso seja um servidor de DNS, faa backup deste
diretrio.
# cp passwd /etc/
# cp master.passwd /etc/
# margemaster -i
O mergemaster ir apresentar telas descrevendo as alteraes. Leia atentamente
pressione [q] e escolha a opo desejada quanto as opes que o mergemaster lhe
oferece (i instalar / d deletar).
Arquivos re-copiados do /etc.bkp para /etc durante o treinamento:
# cd /etc.bkp/
# cp crontab /etc
# cp fstab /etc
# cp hosts /etc
# cp inetd.conf /etc
# cp periodic.conf /etc
# cp resolv.conf
# cp -rp ssh /etc
# cp ttys /etc
# reboot BOA SORTE!!!
# uname -a Tem que aparecer: 8.1-STABLE FreeBSD 8.1-STABLE #0
:/usr/obj/usr/src/sys/SSA i386
Esses passos abaixo so utilizados principalmente em atualizao de Sries, sendo que
na atualizao de Releases, no necessrio.
# cd /usr/src
# make delete-old
# make delte-old-libs
# reboot
Problemas procsize mismatch A userland no est em sincronia com o novo kernel,
geralmente ocasionados por somente compilar, mas no instalar o novo kernel ou
userland. A recomendao do projeto que o processo de reconstruo do mundo seja
em single user aps o processo de compilao. Atente-se e leia tambm as
recomendaes em /usr/src/UPDATING.

Otimizando o compilador:
# ee /usr/src/share/examples/etc/make.conf
# ee /etc/make.conf
CPUTYPE?=athlon-xp
Flags:
CPUTYPE?=pentium3 (Tipo de CPU pode ser encontrado em # dmesg | more), nas
linhas acima do arquivo /usr/src/share/examples/etc/make.conf, que h tipos
de CPU para AMD CPUs, Intel CPUs e Via CPUs.
CPUTYPE?= Verifica se exite configurao, caso exista ignora, em caso contrrio utiliza
pentium3.
CPUTYPE+= Verifica se exite configurao de CPUTYE e concatena com a existente.
No utilizando aplicaes da userland:
# /usr/src/contrib
# ee /etc/make.conf
NO_TELNET=YES
### NO_APLICAO=YES###

Implementando Journal
S vivel em parties acima de 01 GB. No possvel instalar o Journal durante a
instalao do FreeBSD, somente aps a instalao. Deve-se deixar uma partio
separada para o log do Journal. Utiliza-se o gjournal para configurar o Journal.
Criando uma partio virtual
# dd if=/dev/zero of=disco.bin bs=1024k count=1500
# mdconfig -a -t vnode -f disco.bin -u 0 O arquivo alocado em
memria na posio 0.
# /dev/md0 Memory Disc
# gjournal load
# gjournal label md0 Neste disco, so gravados as informaes de log dos
metadados.
# grournal label md0 md1 Neste caso, utilizado um disco para dados e outro
para log de informao de metadados.
# newfs -J /dev/md0.journal
# mdconfig -d -u 0 Para destruir o disco virtual, se necessrio.
# mount /dev/md0.journal /mnt
# mount -o async /dev/md0.journal /mnt Garante performance e o torna
assncrono.
No /etc/fstab
/dev/md0.journal
fsck (0))

/mnt ufs

rw,async

0(no

ser

utilizado

Desfazendo o Processo
#
#
#
#

umount /mnt
gjournal stop md0.journal Parando o sistema jornalado.
gjournal clear md0 Limpa todas as referncias de metadados.
mdconfig -d -u 0

NFS Network File System


Aplicaes mnimas: rpcbind (mapeamento de portas), mountd (montagem de diretrios
exportados) e nfsd (daemon). Atente-se que o primeiro servio a ser iniciado ser
rpcbind, seguido de nfsd e mountd. Tambm, necessrio criar o arquivo
/etc/exports manualmente.
# showmount -e
# nfsstat -w1 Exibe gargalo do servidor NFS.

RAID Mirror (RAID 1)


# gmirror
# gmirror load
# sysctl kern.geom.debugflags=16
# gmirror label -vnb round-robin gm0 ad0 Cria um label de um array de
disco[gm0], com verbose e round-robin, de forma que feito um balanceamento de
acesso aos discos.
# cd /etc/fstab
# cp fstab fstab.bkp
# ee /etc/fstab
/dev/mirror/gm0s1a
/dev/mirror/gm0s1b
/dev/mirror/gm0s1c

/
ufs
/tmp ufs
/usr ufs

rw
rw
rw

1
1

# ee /boot/loader.conf
geom_mirror_load=YES
#
#
#
#

reboot
gmirror configure -a gm0
gmirror insert gm0 ad2 inserindo o segundo disco.
gmirror status Exibe o processo de sincronizao.

Em caso de um disco ficar danificado, basta seguir os passos.


# gmirror forget gm0
# gmirror remove gm0 adx adx, disco com defeito.
# gmirror insert gm0 ady ady, disco substitudo.
Pode-se tambm configurar no /etc/periodic.conf para auditar o gmirror.

DNS Domain Name System


A documentacao (RFC) foi gerada em funcao do Sotware, que foi o BIND, desenvolvido
em Maio de 1984, por quatro alunos, que submeteram ao CSRG.
http://www.eecs.berkeley.edu/Pubs/TechRpts/1984/5937.html
Nao existe cliente BIND, o lado cliente 'e uma bilioteca, a Resolv Library (libresolv),
compilado junto com a libc. Na pesquisa do nome, sao feitas duas chamadas de sistema,
no cliente gethostbyaddress()(Reverso) e a gethostbyname() (Mais utilizada).
No lado cliente:
/etc/host.conf --> Ordem de busca de nome: hosts (/etc/hosts) e DNS, tambm
NIS (broadcast), WINS, NWDS (Network Domain System), NSSwitch(Active Directory)
/etc/resolv.conf --> A diretiva nameserver no obrigatria: sendo, que pela RFC
deve haver somente at 03 Name Servers, sendo que no FreeBSD pode haver 256, no
Linux somente 03 (que um Struct, contendo 03 entradas para memria) e no Windows
Server tambm. Ha uma diretiva chamada search, que busca pelo short name, por
exemplo, no FQDN = hostname.domainname, o shortname somente o host, sem o
domnio. O search ssa.com.br bh.ssa.com.br --> # ping www, existe www.ssa.com.br?,
caso positivo, responde, buscando somente o shortname www em ssa.com.br e
bh.ssa.com.br.
options
timeout:5(segundos) attempts:1 (falhou uma vez, vai pro
prximo)
search ssa.com.br bh.ssa.com.br
nameserver 208.48.151.193
Durante uma pesquisa DNS, 'e feita uma pesquisa em uma DataBase Local, e o Servidor
tambm tem uma libresolv, que faz uma consulta em outros servidores, e assim por
diante.
Respostas tipicamente retornadas quando no consegue resolver:
NXDomain Quando o domnio tem um dono, e pergunta-se ao servidor
Autoritativo, e este diz no existe o domnio.
Failure Falha
permission|allowd|restriceted Baseado na RFC
A zona utilizada ainda da ARPA para reverso, no caso, IN-ADDR.ARPA, herdado das
origens do sistema de nomes baseados em arquivos hosts.txt em FTP.
TLD - Top Level Domain - com, net, org, gov, edu, mil, int(nao vingou, dominios
internacionais) --> Conhecidos como The Orginal Sevens
Cada pas, possui o ISO Country Code (BR, US, etc), que passou a ser utilizado depois
de uk, fr, br. O Brasil foi o terceiro a entrar nos TLDs, atravs de um professor de Qumica,
chamado Pedro Henrique de Alcntara Albuquerque Vaz, que conquistou PhD na UCLA.
Root Level (Root Name Servers) .
TLD - Top Level Domain .us, .com, .mil
SLD - Sub Level Domain .com . gov
LLD - Lower Level Domain - www, ns
A FAPESP foi a responsvel pelo processo de implantao do DNS no Brasil. As funes

da FAPESP foi organizada posteriormente pelo Governo Federal, onde foi criado CG.BR,
e abaixo deste, o NIC.BR e Registro.BR.
Os Servidores podem Ser:
Forwarders, Recursivos, Autoritativos e Cache.
O Bind9 foi totalmente reescrito depois da serie 8, mantendo somente o nome e parser
(configurao). A veracidade da resposta baseada na QID (Query ID) que randmica.
J ocorreram 06 casos de envenenamento de cache. Esta sendo criado o BindX, que
suporta a falha e erros fatais, como negao de servio, de forma que a falha s ocorra
na Thread, e no no servio.
Novos Recursos
Xfer Signature - Assinatura de Transferncia, Views, ACL, IPV6, DNS Security,
NSEC/NSEC3 (RFC5155).
O DNS da Microsoft, MS-CWrap, no possui suporte a ACL, e no possui Segurana.
A Microsoft utiliza o Bind, mas no compliance com as RFCs.
#
#
#
#
#

/etc/rc.d/named rcvar
man chroot
mkdir /bin/ls
ldd /bin/ls
cp -p /lib/lib /tmp

O BIND9 j roda no FreeBSD em ambiente CHROOT, como observado em


/etc/defaults/rc.conf
Habilitando o named:
# ee /etc/rc.conf
# named_enable="YES"
# /etc/rc.d/named start
# /var/named/etc/namedb
# ln -s /var/named/etc/namedb/ /etc/namedb Criando um link simblico
para /var/named/etc/namedb/, pois durante o mergemaster -i, foi apagado.
Pode-se utilizar o RNDC - Remote Named Domain Controller
# rndc status
# rndc-configen --> Gerado automaticamente pelo BIND.
edgar# sockstat -4l | grep named
bind
named
1822 20 tcp4
bind
named
1822 21 tcp4
bind
named
1822 512 udp4

127.0.0.1:53
127.0.0.1:953
127.0.0.1:53

# ee /etc/resolv.conf
# cat /etc/resolv.conf
nameserver 127.0.0.1
nameserver 201.48.151.193
Neste momento o servidor assume a funo de Recursivo.

*:*
*:* --> rndc
*:*

# nslookup www.ig.com.br
Server:
127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
Name:
www.ig.com.br
Address: 187.31.64.25
O NSLOOKUP, mais humana, amigvel. O dig, mais tcnico.
# tcpdump -n -v -i rl0
# dig www.uol.com.br
Busca Rescursiva
# nslokup www.bsd.com.br 201.48.151.193
# dig @201.48.151.193 www.uol.com.br
DNS no tem funo especifica traduzir endereo, mas o tipo de informao, no tipo A,
trata de endereos.
# nslookup -type=MX bsd.com.br
# dig bsd.com.br MX
Resource Records
Categorias:
Baseados na RFC 1035
Estruturais:
Garantem a existncia da Zona:
SOA 6(cdigo)
RFC1035
Start of Authority
NS
2
RFC1035
Lista de Name Servers com Autoridade Diz
que auto suficiente autoritrio e os nameservers tambm que respondem pelo domnio.
MAPEAMENTO:
A
1
PTR

RFC Nome IP
RFC1035
IP Nome

COMPLEMENTARES:
HINFO
13
RFC1035
TXT 16
1035
WKS 11
RFS1035 Descontinuado e substitudo pelo SRV
AAA IPV6
O Registro LOC, utilizado para fornecer latitude e longitude, de forma que o GPS
consiga encontrar o endereo da empresa atravs do DNS.
# rndc dumpdb Faz um dump e grava no diretrio /var/namedb/var/dump/dump-db
# cat dump-db til para verificar poison cache, verificaes do que h em cache.
Toda vez que restarta o named ele perde o cache, se o cache existir, no so perdidas.

##################### named.conf ###########################

options {
directory
"/etc/namedb"; //WorkDirectory
// No /var/log/messages vai aparecer: The work directory is not writable
// ISSO E TIMO, pois quem escreve no workdir o Sysadmin, e no a aplicao
pid-file
"/var/run/named/pid";
dump-file
"/var/dump/named_dump.db"; //dump de cache em memria
//cache-file
"/var/dump/outro-cache-db"; //compartilhar cache via NFS
statistics-file "/var/stats/named.stats"; // # rndc stats | # less
named.stats. Pode ser utilizado com CACTI
listen-on
{ 127.0.0.1; 201.48.151.206; };
allow-recursion { 127.0.0.1; 201.48.151.192/27;};
// recursion yes|no;

A frase Lame Name Server on xxx, onde xxx = IP, significa configurao atrasada, isto
quer dizer que um dos servidores, por exemplo, o Slave esta desatualizada, que a
definio do Serial, esta com a configurao atrasada. No caso do servidor Primrio, o
named.root que esta desatualizado.
# mv named.root
# fetch ftp://ftp.internic.net/domain/named.root
# diff -u named.root.dist named.root A diferena sera nos bytes, onde 08
espaos so oito bytes, um TAB consome um 1 byte.
# named-checkconf /etc/namedb/named.conf Faz a verificao do arquivo
named.conf
Por padro o named j vem com recurso habilitada.
Quando utilizar ACLs, fica mais fcil gerenciar as recurses:
acl <nome> {
ip;
rede/bitmask;
!ip;
outra-acl;
};
ACLs Padres
localhost loopback e ip
localnets Rede que o servidor faz parte (IP pblico).
any; todos
none; ningum
Exemplos:
acl vcnao {
!201.48.151.206; Todos IPs, exceto este. (Cuidado, pois permitir uma rede
que o IP faz parte e neg-lo depois, ainda assim este ter acesso, pois a avaliao
realizada first-match-wins).
};

acl clients {
localhost;
localnets;
};
# nslookup www.hotmail.com 200.210.70.5 Caso um site resolve, e outros
no resolvem, significa que at o BIND 9.2.2, o cache ainda faz recursividade, de forma
que possvel mapear os tipos de sites que a empresa em questo acessam.
# nslookup www2.hotmail.com 200.201.48.151
# nslookup www2.hotmail.com ns1.hotmail.com
# nslookup www2546464646.hotmail.com ns1.hotmail.com
Em provedores, geralmente h diversos POPs, que possuem Gateways comuns (Upper
Gateways), que tambm pode ser um servidor DNS, ou tambm,
outro servidor DNS:
[INTERNET]
|
+------[GW UPPER]---+
|
|
[POP]
[POP]
Neste caso, utiliza-se forward, onde o POP2, pode verificar no POP, ou GW UPPER.
Isto s deve ser utilizado neste caso especifico:
forwarders {
pop.telecom.com.br
gw.upper.telecom.com.br
};
Existem dois tipos de Cache
Positivo: Baseado em informao que existe
Negativo: Baseado em informacao que no existe, o cliente requisita www.44.com.br,
ou seja, o endereo no existe, mas o servidor ainda assim faz cache, em caso de outro
cliente requisitar a mesma informao, no sera necessrio procurar novamente, para
isso tambm utilizado o minimum, no arquivo de zona.
A diretiva min-cache-ttl configurado para valor alto pode gerar complicaes. O mincache-ttl do Terra 'e de 1 Ms, dessa forma, quem utiliza o DNS do cache podem ter
problema de atualizao, tendo informao antiga por mais tempo.

***************** LOGS *********************


Categorias Mais importantes:
query, xfer-in e xfer-out (sada para o Slave)
# rndc status
version: 9.6.2-P2 (Microsoft Windows Server 2008)
CPUs found: 1
worker threads: 1
number of zones: 12
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is ON --> O log foi ativado.
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
No bloco options:
querylog no;
Dica: Se necessrio, utilize o rndc para ativar log e desativar log, de forma que faa-se um
estudo do abuso, e depois desligue-o novamente. O Log habilitado geralmente para
verificar problemas, no necessrio deix-lo ativado o tempo todo.
# rndc querylog Habilita
# rndc status
**** A Diretiva backholes Bloquea abusos. ******
acl bloqueados {
201.48.151.206;
};
Na sesso options:
blackhole { bloqueados; }
**********************************************************
# cd /usr/ports/dns/dnstracer
# make install
# dnstracer -s . freebsdbrasil.com.br
# nslookup -type=SOA www.freebsdbrasil.com.br
# dig www.freebsdbrasil.com.br SOA

************************** ZONAS DNS *************************


zone "<zona>" {
type master | slave | hint | dynamic | forward;
file "";
Pode ser adicionado qualquer diretiva dentro do campo options, de forma que escopo
seja local para essa zona, e no global.
};
zone "ssa.com.br" {
type master;
file "/etc/namedb/master/ssa.com.br.zone";
};
############### ssa.com.br.zone ############
Na RFC, estipula-se que o nome de e-mail de DNS no pode conter ., por exemplo,
edgar.paes.bsd.com.br.[errado];
# named-checkzone ssa.com.br ssa.com.br.zone
# rndc relad Para mudanas na zona
@ sempre aponta para IN ou A
CNAME Nvel mximo de recursividade so 3.
MX Sempre Aponta para um A, nunca para um CNAME. MX com prioridade idntico,
por exemplo,
5 mx1.com.br
5 mx2.com.br
No sendmail, no entrega a nenhum servidor, caso o primeiro servidor no responder. O
Exchange, faz round-robin por sesso, e o QMAIL faz por servidor. A RFC no comenta
sobre essa questo.
O grande concorrente do SMTP, 'e o QMTP,
# telnet mail.hotmail.com 25
ehlo edgar
mail from: <email@hotmail.com>
rcpt to <vc@linuxinfo.com.br>
MXSW MX 0-20000 = SMTP
MX 2001-3000 = QMTP
MX 3001-4000 = SMTP

########### /etc/named.conf - NAO-DEFINITIVO ###############


options {
directory
"/etc/namedb"; //WorkDirectory No /var/log/messages tem que
aparecer: The work directory is not writable, pois quem escreve no workdir o
sysadmin, e nao a aplicacao BIND.
pid-file
"/var/run/named/pid";
dump-file
"/var/dump/named_dump.db"; dump de cache em memoria, se
exitir 'e carregado para memoria.
//cache-file
"/var/dump/outro-cache-db"; //compartilhar cache via NFS
statistics-file
"/var/stats/named.stats"; utilizado com o comando
#rndc status
allow-recursion { clientes; }; Permite somente recursao para a ACL em
questao.
allow-query { clientes; }; A quem pode fazer consulta
root-delegation-only
exclude
{
"de";
"lv";
};
//evita
www23335544.otempo.com.br
listen-on
{ 127.0.0.1; 201.48.151.207; };
version "Microsoft Windows Server 2008";
cleaning-interval 80; //minutos
// max-cache-size 12M; // NAO ACONSELHAVEL, quando chega ao mximo, exclui
os antigos e utiliza novos.
querylog no;
blackhole { bloqueados; };
};

zone "." { type hint;


file "/etc/namedb/named.root";
};
zone "ssa.com.br" {
type master;
file "/etc/namedb/master/ssa.com.br.zone";
};
acl clientes {
localnets;
localhost;
};
acl bloqueados {
201.48.151.206;
};
logging {
channel log_de_consultas {
file "/var/log/named_consultas.log" versions 3 size 10M;
print-time yes;
print-severity yes;
print-category
no;
//se
estiver
escolhendo
categoria
especifica
};
category queries {
log_de_consultas;
};
};

############### FIM DE ARQUIVO: named.conf #########################


############## ARQUIVO: /etc/named/masetr/ssa.com.br.zone ##########
;
;comentario
;
;<nome>
IN
<RR> <OP> <VALOR>
;@
IN
SOA ns1 ; a mesma coisa
$TTL 14400 ;ttl default para todos registros, exceto SOA
@
IN
SOA ns1.ssa.com.br.
hostmaster.ssa.com.br. (
2010092302
;serial
86400
;refresh
3600
;retry
604800
;expire
86400
;default ttl ou negative ttl
)
@
@
@
@
@
@
@

IN
IN
IN
IN
IN
IN
IN

NS
NS
NS
A
MX
MX
MX

ns1
ns2
www
ftp
mx1
mx2
mx3

IN
IN
IN
IN
IN
IN
IN

A
201.48.151.207
A
201.48.151.206
CNAME
ns1.ssa.com.br.
CNAME
ns1.ssa.com.br.
A
201.48.151.207
A
201.48.151.207
A
201.48.151.207

ns1.ssa.com.br.
ns2.ssa.com.br.
ns1.locaweb.com.br.
201.48.151.207
10
mx1.ssa.com.br.
20
mx2.ssa.com.br.
20001
mx3.ssa.com.br. ;QMTP > 20000

;ROUND-ROBIN E DISPONIBILIDAE, O CLIENTE QUE BALANCEIA, NAO O


SERVIDOR, POIS A RESPOSTA CONSISTE
;EM VARIOS IPS QUE SAO ENTREGADOS COMO CONSULTA PELO SERVIDOR AO
CLIENTE, COMO PODE SER OBSERVADA EM UMA CONSULTA COM NSLOOKUP.
;www2
IN
A
201.48.151.207
;www2
IN
A
201.48.151.206
;$TTL 8400 --> PODE-SE DEFINIR OUTRO VALOR DE TTL SOMENTE DAQUI
PARA BAIXO (TTL DIFERENCIADO)
;www2
IN
A
201.48.151.205
;www2
IN
A
201.48.151.204
################ FIM DO ARQUIVO ssa.com.br.zone ################

SPF - Sender Policy Framwork, atua tanto no DNS quanto no MTA. Deve ser publicado no
DNS. A partir do BIND 9.2.4. O draft RFC 4408.
# nslookup -type=TXT uol.com.br
Server:
201.48.151.207
Address:
201.48.151.207#53
Non-authoritative answer:
uol.com.br text = "v=spf1 ip4:200.221.11.0/24 ip4:200.221.29.0/24
ip4:200.221.4.0/24 ip4:187.17.116.0/24 ip4:200.98.217.0/24
ip4:200.147.1.0/29 ip4:200.147.32.248/29 ip4:200.147.2.0/27
ip4:200.147.34.0/27 -all"
Authoritative answers can
uol.com.br
nameserver
uol.com.br
nameserver
uol.com.br
nameserver

be found from:
= charles.uol.com.br.
= borges.uol.com.br.
= eliot.uol.com.br.

Caso esteja com o final "~all", o MTA decide se vai aceitar ou no.
@
IN
MX
@
IN
MX
@
IN
MX
;@
IN
TXT
;@
IN
SPF
-all" ;RECOMENDADO
;@
IN
SPF
considerados validos.

10
mx1.ssa.com.br.
20
mx2.ssa.com.br.
20001 mx3.ssa.com.br. ;QMTP > 20000
"v=spf1 mx ip4:200.214.160.20 ip4:189.112.64.82 -all"
"v=spf1
mx
ip4:200.214.160.20
ip4:189.112.64.82
"v=spf1 mx -all" ; SOMENTE OS MX Registrados serao

Pode-se utilizar tambm os caracteres:


? ou *, porm somente uma das opes podem ser usadas.
exemplos:
www
www?
*

IN
IN
IN

A
A
A

201.200.200.200
201.200.200.200
201.200.200.200

# nslookup www50.ssa.com.br No caso a ? faz com que o que for digitado depois
de wwww seja aceito.
# nslookup abcdef.ssa.com.br faz com que qualquer coisa que for digita
precedendo o domnio .ssa.com.br seja aceito.
############ EXERCICIO ZONA NANACA.COM.BR ######################
$TTL 14400
@
IN
SOA ns1.nanaca.com.br. webmaster.nanaca.com.br. (
2010092300
86400
3600
604800
86400
)
@
IN
NS
ns1.nanaca.com.br.
@
IN
NS
ns2.nanaca.com.br.
@
IN
A
201.48.151.207
@
IN
MX
10
mx1.nanaca.com.br.

@
@
ns1
ns2
www
mx1
mx2

IN
IN
IN
IN
IN
IN
IN
IN

MX
20
mx2.nanaca.com.br.
SPF "v=spf1 mx -all"
A
201.48.151.207
A
201.18.151.206
CNAME
ns1.nanaca.com.br.
A
201.48.151.207
A
201.48.151.207
A
201.48.151.207

######################## FIM DO EXERCICIO ##########################


############################ SLAVE ###########################
Deve-se observar que o BIND quando Slave, no copia os arquivos do Master, somente
transferido o que esta em memoria, como pode ser observado, que o arquivo que vem do
Master contem configuraes que no foram feitas no Slave, como $ORIGIN .,
comentrios das diretivas de serial, etc.
zone "eliandersonbichamagra.com.br" {
type slave;
file "/etc/namedb/slave/elianderson.com.br.zone";
masters { 201.48.151.206; };
allow-notify { 201.48.151.206; };
};
############ CONFIGURANDO O REVERSO ###############
A Zona reversa trata das redes delegadas que respondem ao nome de domnio da
empresa. Nos exemplos abaixo, o que verifica-se que se trata de um processo de
delegaes, onde 'e verificar a raiz da Internet at a rede delegada.
Exemplo,
# nslookup 201.48.151.3
Server:
201.48.151.207
Address: 201.48.151.207#53
Non-authoritative answer:
3.151.48.201.in-addr.arpa

name = capeta.freebsdbrasil.com.br.

Authoritative answers can be found from:


151.48.201.in-addr.arpa nameserver = galheta.mdbrasil.com.br.
151.48.201.in-addr.arpa nameserver = capeta.freebsdbrasil.com.br.
capeta.freebsdbrasil.com.br
internet address = 201.48.151.3
# nslookup -type=SOA in-addr.arpa
Server:
201.48.151.207
Address: 201.48.151.207#53
Non-authoritative answer:
in-addr.arpa
origin = a.root-servers.net
mail addr = dns-ops.arin.net
serial = 2010092304
refresh = 1800
retry = 900

expire = 691200
minimum = 10800
Authoritative answers can
in-addr.arpa
nameserver
in-addr.arpa
nameserver
in-addr.arpa
nameserver
in-addr.arpa
nameserver
in-addr.arpa
nameserver
in-addr.arpa
nameserver
in-addr.arpa
nameserver
in-addr.arpa
nameserver
in-addr.arpa
nameserver
in-addr.arpa
nameserver
in-addr.arpa
nameserver
in-addr.arpa
nameserver

be found from:
= l.root-servers.net.
= m.root-servers.net.
= h.root-servers.net.
= f.root-servers.net.
= k.root-servers.net.
= e.root-servers.net.
= g.root-servers.net.
= b.root-servers.net.
= c.root-servers.net.
= a.root-servers.net.
= d.root-servers.net.
= i.root-servers.net.

# nslookup -type=SOA 201.in-addr.arpa


Server:
201.48.151.207
Address: 201.48.151.207#53
Non-authoritative answer:
201.in-addr.arpa
origin = NS.LACNIC.NET
mail addr = hostmaster.LACNIC.NET
serial = 2010092315
refresh = 1800
retry = 900
expire = 691200
minimum = 10800
Authoritative answers can be found from:
201.in-addr.arpa
nameserver = ns2.LACNIC.NET.
201.in-addr.arpa
nameserver = SEC1.AUTHDNS.RIPE.NET.
201.in-addr.arpa
nameserver = NS.LACNIC.NET.
201.in-addr.arpa
nameserver = sec3.apnic.NET.
201.in-addr.arpa
nameserver = ns2.dns.br.
201.in-addr.arpa
nameserver = tinnie.arin.NET.
201.in-addr.arpa
nameserver = NS-LACNIC.NIC.MX.
201.in-addr.arpa
nameserver = ns3.afrinic.NET.
NS.LACNIC.NET internet address = 200.3.13.10
NS.LACNIC.NET has AAAA address 2001:13c7:7002:3000::10
ns2.dns.br
internet address = 200.192.232.53
ns2.LACNIC.NET internet address = 200.3.13.11
ns2.LACNIC.NET has AAAA address 2001:13c7:7002:3000::11
ns3.afrinic.NET
internet address = 204.61.215.62
sec3.apnic.NET internet address = 202.12.28.140
sec3.apnic.NET has AAAA address 2001:dc0:1:0:4777::140
tinnie.arin.NET
internet address = 199.212.0.53
tinnie.arin.NET
has AAAA address 2001:500:13::c7d4:35

# nslookup -type=SOA .48.201.in-addr.arpa


nslookup: '.48.201.in-addr.arpa' is not a legal name (empty label)
# nslookup -type=SOA 48.201.in-addr.arpa
Server:
201.48.151.207
Address: 201.48.151.207#53
Non-authoritative answer:
48.201.in-addr.arpa
origin = a.dns.br
mail addr = hostmaster.registro.br
serial = 2010092313
refresh = 1800
retry = 900
expire = 604800
minimum = 900
Authoritative answers can be found from:
48.201.in-addr.arpa nameserver = f.dns.br.
48.201.in-addr.arpa nameserver = d.dns.br.
48.201.in-addr.arpa nameserver = c.dns.br.
48.201.in-addr.arpa nameserver = a.dns.br.
48.201.in-addr.arpa nameserver = b.dns.br.
# nslookup -type=SOA 151.48.201.in-addr.arpa
Server:
201.48.151.207
Address: 201.48.151.207#53
Non-authoritative answer:
151.48.201.in-addr.arpa
origin = capeta.freebsdbrasil.com.br
mail addr = root.capeta.freebsdbrasil.com.br
serial = 2010043001
refresh = 3600
retry = 900
expire = 3600000
minimum = 3600
Authoritative answers can be found from:
151.48.201.in-addr.arpa nameserver = galheta.mdbrasil.com.br.
151.48.201.in-addr.arpa nameserver = capeta.freebsdbrasil.com.br.
capeta.freebsdbrasil.com.br
internet address = 201.48.151.3
# nslookup -type=SOA 3.151.48.201.in-addr.arpa
Server:
201.48.151.207
Address: 201.48.151.207#53
Non-authoritative answer:
*** Can't find 3.151.48.201.in-addr.arpa: No answer OBSERVE ESSA
LINHA
Authoritative answers can be found from:
151.48.201.in-addr.arpa

origin = capeta.freebsdbrasil.com.br
mail addr = root.capeta.freebsdbrasil.com.br
serial = 2010043001
refresh = 3600
retry = 900
expire = 3600000
minimum = 3600

VERIFICANDO O REVERSO DA REDE NAO DELEGADA


# nslookup 189.112.64.82
Server:
201.48.151.207
Address: 201.48.151.207#53
Non-authoritative answer:
82.64.112.189.in-addr.arpa
name = 189-112-064
082.static.ctbctelecom.com.br.
Authoritative answers can be found from:
64.112.189.in-addr.arpa nameserver = nspar.ctbc.com.br.
64.112.189.in-addr.arpa nameserver = nssar.ctbc.com.br.
nspar.ctbc.com.br
internet address = 201.48.254.49
nssar.ctbc.com.br
internet address = 201.48.254.57
# nslookup 189-112-064-082.static.ctbctelecom.com.br.
Server:
201.48.151.207
Address: 201.48.151.207#53
Non-authoritative answer:
Name:
189-112-064-082.static.ctbctelecom.com.br
Address: 189.112.64.82
############################## REVERSO ########################
// zone "0-127.151.48.201.in-addr.arpa" { }; Para uma
delegada
zone "151.48.201.in-addr.arpa" {
type master;
file "/etc/namedb/master/151.48.201.in-addr.arpa.rev";
};

rede

############## ARQUIVO DE ZONA REVERSO DO NANACA.COM.BR ###########


$TTL 14400
@
IN
SOA ns1.nanaca.com.br.
2010092300
86400
3600
604800
86400
)

webmaster.nanaca.com.br. (

@
@
207
206

IN
IN
IN
IN

NS
NS
PTR
PTR

ns1.nanaca.com.br.
ns2.nanaca.com.br.
ns1.nanaca.com.br.
ns1.elianderson.com.br.

################### FIM DO ARQUIVO #########################


OBS.: SO PODE HAVER UMA ENTRADA POR IP DISTINDO, GERALMENTE, O IP DO
NS1, COMO NO ARQUIVO ACIMA.
############################ DNS DINAMICO #######################
# mv master/ssa.com.br dynamic/
# ee named.conf
zone "ssa.com.br" {
type master;
file "/etc/namedb/dynamic/ssa.com.br.zone"; --> atualizado
para dynamic
};
GERANDO A CRIPTOGRAFIA (O AD nao suporta blowfish)
# md5 -s dnsdinamico
MD5 ("dnsdinamico") = 4e5bebbe5153ea311b36b843bb658fd3
key

dinamica {
algorithm hmac-md5;
secret "4e5bebbe5153ea311b36b843bb658fd3";

};
zone "ssa.com.br" {
type master;
file "/etc/namedb/dynamic/ssa.com.br.zone";
update-policy{
//grant <chave> domain ANY;
//grant <chave> subdomain mx1.ssa.com.br. ANY;
grant dinamica subdomain mx1ssa.com.br. ANY;
};
};

SGBD - MySQL
O MySQL Dual License. O MYSQL pertencia a MySQL AB, empresa alem~a, comprada
pela SUN, e depois a SUN foi comprada pela Oracle. Quando a empresa utiliza o MySQL
e aufere lucro de uma aplicao instalada em clientes, deve-se pagar licena. O valor 'e
U$250,00 por ano, antes com a SUN eram U$80,00.
Flags de Otimizao
BUILD_OPTIMIZED=yes No funciona no Linux.
BUILD_STATIC=yes Utiliza a biblioteca do MySQL em modo esttico, ha um
consumo de aproximadamente 4% de memria e aproximadamente um ganho de 15%.
WITH_FEDERATE Cluster baseado em distribuio de contedo, ele consegue deixar
uma parte do database em cada N, que pode permitir um balanceamento e ganhar mais
performance.
# du -s * | sort -n (Procurando diretorios grandes)
# cd /usr/ports/databases/mysql50-server
# make Para ver as opes de flags.
# /usr/local/etc/rc.d/mysql-server rcvar
# mysql
mysql_enable="NO"
#
(default: "")
Deve-se habilitar no /etc/rc.conf como na sada acima.
#/usr/loca/etc/rc.d/mysql-server start
# sockstat -4l | grep mysql
mysql
mysqld
1623 10 tcp4
*:3306

*:*

Escolhendo a verso do MySQL


As verses de final par, so verses de produo, de final de impar, de mudana.
No final par, s tem update de segurana. No final mpar, de update security, features,
performance e configurao. O MySQL considera pronto a mais importante de verso par
mais alta da serie e a impar mais alta da serie. Para produo, somente as que no
www.mysql.com estiverem classificadas como GA, GENERAL AVAIALBLE, ou seja
disponvel para o publico em geral. A verso 5.0 a versa mais par mais alta e GA. A
verso 6 e chamada de NG, Next Generation.

Check List
* REMOVER O DATABASE Test
* COLOCAR SENHA PARA O ROOT
mysql> drop database test;
Query OK, 0 rows affected (0.02 sec)
+---------------------------+
| Tables_in_mysql
|
+---------------------------+
| columns_priv
|
| db --> IMPORTANTE
| func
|
| help_category
|
| help_keyword
|
| help_relation
|
| help_topic
|
| host
|
| proc
|
| procs_priv
|
| tables_priv
|
| time_zone
|
| time_zone_leap_second
|
| time_zone_name
|
| time_zone_transition
|
| time_zone_transition_type |
| user --> IMPORTANTE
+---------------------------+
17 rows in set (0.00 sec)

mysql> show columns from user;


Removendo o usuario anonimo:
mysql> select user,password,host from user;
+------+----------+------------------+
| user | password | host
|
+------+----------+------------------+
| root |
| localhost
|
| root |
| edgar.ssa.com.br |
| root |
| 127.0.0.1
|
|
|
| localhost
|
|
|
| edgar.ssa.com.br |
+------+----------+------------------+
5 rows in set (0.01 sec)
mysql> delete from user where user='';
Query OK, 2 rows affected (0.02 sec)

mysql> select user,password,host from user;


+------+----------+------------------+
| user | password | host
|
+------+----------+------------------+
| root |
| localhost
|
| root |
| edgar.ssa.com.br |
| root |
| 127.0.0.1
|
+------+----------+------------------+
3 rows in set (0.00 sec)
# mysqladmin -u root password senhasecreta No recomendvel.
# history -c Limpa o histrico
Atualizando senha de Root.
mysql>
update
user
set
password=PASSWORD('novasenha')
user='root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0

where

mysql> flush privileges;


Query OK, 0 rows affected (0.00 sec)
mysql>use mysql\g O ";" significa GO, e deve ser utilizado com \g.
mysql> status
-------------mysql
Ver 14.12 Distrib 5.0.90, for portbld-freebsd8.1 (i386)
using 5.2
Connection id:
6
Current database:
mysql
Current user:
root@localhost
SSL:
Not in use
Current pager:
more
Using outfile:
''
Using delimiter:
;
Server version:
5.0.90 FreeBSD port: mysql-server-5.0.90
Protocol version:
10
Connection:
Localhost via UNIX socket
Server characterset:
latin1
Db
characterset:
latin1
Client characterset:
latin1
Conn. characterset:
latin1
UNIX socket:
/tmp/mysql.sock
Uptime:
30 min 10 sec
Threads: 1
Questions: 72
Slow queries: 0
Opens: 22
tables: 1 Open tables: 17 Queries per second avg: 0.040
--------------

Flush

Sempre que logar, utilizar


mysql> \W Habilita Warnings.
mysql> \w ou nowaring; Desabilita o Warnings.
CRIANDO DATABASES
mysql> create database cliente1;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| cliente1
|
| mysql
|
+--------------------+
3 rows in set (0.00 sec)
CRIANDO UM USUARIO:
PERMISSOES ESPECIFICAS PARA ACESSO EXTERNO
mysql>
GRANT
SELECT,INSERT
ON
cliente1.*
cliente1@201.48.151.207 IDENTIFIED by 'senhadocliente';
Query OK, 0 rows affected (0.01 sec)

to

PERMISSOES ESPECIFICAS PARA ACESSO INTERNO


mysql> GRANT ALL ON cliente1.* to cliente1@'192.168.20.0/24'
IDENTIFIED by 'outrasenha';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
INFORMACOES DO USUARIO:
mysql> show full processlist\g
id - ID do usurio
user - usurios logados
host - origem
db - banco utilizado
command - Query que esta sendo utilizada
time - quanto tempo levou para executar a query
state - estado da query
info - comando que esta sendo executado
+----+------+-----------+-------+---------+------+------+-----------------------+
| Id | User | Host
| db
| Command | Time | State | Info
|
+----+------+-----------+-------+---------+------+------+-----------------------+
| 6 | root | localhost | mysql | Query
|
0 | NULL | show full processlist
|
+----+------+-----------+-------+---------+------+------+-----------------------+

1 row in set (0.00 sec)

BACKUP DO MYSQL
NUNCA GERE BACKUP QUE NAO SEJA DE QUERY INTEIRA
# mysqldump -u root -p mysql > /usr/home/edgarx/Desktop/backup.sql
Enter password:
# cd /usr/home/edgarx/Desktop/
# ls
DNS
backup.sql edgar-arquivos
# mysql -u root -p mysql < backup.sql
Enter password:
FORMA CORRETA:
#
mysqldump
-c
-u
root
/usr/home/edgarx/Desktop/backupcompleto.sql

-p

mysql

# mysql -uroot -pnovasenha mysql --exec="show tables;"


+---------------------------+
| Tables_in_mysql
|
+---------------------------+
| columns_priv
|
| db
|
| func
|
| help_category
|
| help_keyword
|
| help_relation
|
| help_topic
|
| host
|
| proc
|
| procs_priv
|
| tables_priv
|
| time_zone
|
| time_zone_leap_second
|
| time_zone_name
|
| time_zone_transition
|
| time_zone_transition_type |
| user
|
+---------------------------+
global:
/etc/my.cnf
/usr/local/etc/my.cnf
/var/db/mysql/my.cnf Preferencial (principalmente para NFS)
por db:
/var/db/mysql/<database>/my.cnf
/usr/local/share/mysql Exemplos de configurao de arquivos do MySQL
# ls *.cnf

>

Recuperando a senha de root:


Adicionar no arquivo de configurao a diretiva skip-grant-tables, reiniciar o MySQL
e digitar: #mysql -u root, e trocar a senha.
# No houve na rede, continua funcionando local via Unix Socket
skip-network
# Utilizado para recuperar a senha de root
skip-grant-tables
DIRETIVAS DO ARQUIVO E CONFIGURACAO
[mysqld]
port
socket

= 3306
= /tmp/mysql.sock

Por padro, o MySQL faz locktable, para evitar escrita por mais de um processo, como
restaurar backup.
Skip-locking Eleva a performance, porem no deve ter atualizao enquanto o
banco esta rodando (por exemplo, backup)
key_buffer = 16M Quantidade de memoria reservada para gravar log em RAM de
toda estrutura indexada de banco de dados, por exemplo, CREATE INDEXEX (DBA). Em
produo, no minimo 08MB (se utilizar indexao);
max_allowed_packet = 1M o tamanho mximo de uma coluna de cada registro.
S eleva-se em casos que possui campos binrio. O erro de packet, neste caso a
coluna do registro.
table_cache = 64 Garante as table_cache mais acessadas em disco. Com o
show full processlist, deve-se levantar o numero de tabelas acessadas
simultaneamente em disco, ou seja, numero de tabelas abertas em horrio de pico.
sort_buffer_size = 512K Utilizada principalmente em Sorter By e Group By e
Order By, que so tarefas pesadas, trabalha junto com o myisam_sort_buffer_size
(engine), que e quantidade de cache para lembrar de todas as respostas de querys mais
populares, comuns, que usam order by e group by. Por padro vale 2M, se estiver
trabalhando com MySAM, tentar usar com pelo menos de 25% da memoria RAM.
net_buffer_length = 8K Deve ignorar, o MySQL aloca memoria antecipadamente
antes de enviar o pacote pela rede. Estudar sobre isto.
read_buffer_size = 256K Cache genrico de SELECT.
read_rnd_buffer_size = 512K Se for necessrio porque deve-se utilizar
clculos matemticos, exemplo select rand(5); calculo matemtico com valores no
previsveis, tenta melhorar levando para memoria parte do processo. Deve-se evitar esses
tipos de clculos aleatrios.
myisam_sort_buffer_size = 8M (25% de memoria RAM)

# skip-networking
# Disable Federated by default
skip-federated
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin
long_query_time=20 (Valor em segundos)
log_slow_queries
Exibe as queries que estao demorando mais do que
long_query_time. Muito til para analisar se as configuraes de tunnings, ou queries
mal feitas, problemas com ordenao, sorteadas por grupo etc.
max_connections = 5000 Numero maximo de conexoes simultaneas
max_connect_erros = 10000 Se gerar mais de 256 erros (queryes erradas,
retorno invalido) na mesma sesso, bloqueada a conexo, (FLUSH USERTABLE), se
aumentar eleva a possibilidade de erros.
interactive_timeout = 500 Por padro vale 0, se o usurio ficar utilizando o slot,
o idle de inatividade for alto, desconectado. A conexo persistentes pode ser um
problema com essa diretiva, ento no deve utiliz-la.
wait_timeout = 750 (segundos) Queries que esto executando mais do que
wait_timeout, sera criado um timeout.
max-allowed-regs=5000 O MySQL no impe limite de quota de disco, porem h
um limite de registro que um database pode ter.

Apache Web Server


Verses do Apache
As verses pares mais altas e imediatamente anterior. As verses impares so versos de
desenvolvimento.
./simple_httpd -d /tmp/ -l /var/log/simplet.log
telnet 0 80
GET / HTTP/1.0
POST /envia.cgi HTTP/1.0
# cd /usr/src/release/picobsd/tinyware/simple_httpd/
# make
# ls
Makefile README
simple_httpd.c
Makefile

README

simple_httpd

simple_httpd.c simple_httpd.o

# ./simple_httpd -d /tmp/ -l /var/log/simple_http.log


# sockstat -4l | grep 80
root
simple_htt 21641 3 tcp4
*:80
root
syslogd
803
9 udp4
*:514

*:*
*:*

# telnet 0 80
Outras opes so o lighthttp, muito utilizado para configuraes em servidores
standalones, com pouca requisio, como por exemplo, o FeeNAS, PF Sense, etc. Outra
opo o aolserver, que da suporte a TCL, que concede performance muito maior do que
PHP e Java. A TCL nativamente multithread.
# apachectl configtest Faz o parse do arquivo de configurao httpd.conf.
/usr/local/etc/apache2 Workdir
# ls
Includes httpd.conf
envvars.d magic

mime.types
ssl.conf

magic file /bin/ls; um magic number para identificar os arquivos. No


utilizado em sistemas Unix.
envvars.d Utilizado para variveis de ambiente. Nesse diretrio, No http.conf, a
diretiva Timeout:
Timeout ${P_TIMEOUT}
# echo "300" > envvars.d/P_TIMOUT
# echo "100" > envvars.d/P_TIMOUT
Com isso, uma modificao na varivel faz com que se tenha uma configurao dinmica,

sem ser necessrio restartar o apache.


# apachectl start
# sockstat -4l | grep http
www
httpd
21702 3
www
httpd
21701 3
www
httpd
21700 3
www
httpd
21699 3
www
httpd
21698 3
root
httpd
21697 3

tcp4
tcp4
tcp4
tcp4
tcp4
tcp4

6
6
6
6
6
6

*:80
*:80
*:80
*:80
*:80
*:80

*:*
*:*
*:*
*:*
*:*
*:*

A primeira instancia sobe como root (em funo de fazer Bind em porta baixa), e nunca
atende os clientes, porem cria os 5 start-servers, de forma que h 6 processos. Os
start-servers, se for necessrio, starta os min-spare-severs, ou seja, startservers * min-spare-servers. Aps 25 conexes simultneas, criado mais um
start-servers em cada start-servers, de forma que o limite seja
MaxStartServers. O primeiro fork(), iniciam 5 processos StartServers, que
requerem uma nica syscall. MinSpareServer e StartServers devem ser iguais.
Apos as 55, o root comea a colocar as requisies em fila, essa fila vai ate a quantidade
de no mximo de MaxClients. MaxClients deve ser no mximo (3 *
(StartServers * MaxSapare) + StartServers), que a recomendao da
Apache Foundation, onde h no mximo dois slots de espera. Cada MinSpareServer
deve esperar no mximo 02 slots em fila. Se acima de MaxClients, e depois de
Timeout segundos, ento, o root exibe na tela TimeOut, ou Server Busy.
ServerLimit, essa diretiva deve ser modificada em caso de MaxClients for superior a
256, tambm ServerLimite deve ser igual a MaxClients, quando este for superior a
256 (que um struct do cdigo-fonte do apache)
O apachegraceful apenas reativa as configuraes alteradas no httpd.conf.
O FreeBSD para as principais features de Webserver mantem aceleradores em kernel,
que so aceleradores accf_http (ACCEPT_FILTER_HTTP, ACCEPT_FILTER_DATA,
ACCEPT_FILTER_DNS).
Para carregar uma pagina, so necessrias aproximadamente 08 syscalls, como
receive_buffer, send_buffer, etc. Com o ACCEPT_FILTER_HTTP,
todo o processo feito em uma nica syscall.
# cat /usr/local/etc/rc.d/apache2
eval apache2ssl_enable=\${apache2ssl_${profile}_enable:-NO}
eval
apache2_flags="\${apache2_${profile}_flags:-$
{apache2_flags}}"
eval
apache2_http_accept_enable="\${apache2_$
{profile}_http_accept_enable:-${apache2_http_accept_enable}}"
-->
configurar no /etc/rc.conf
eval
apache2limits_enable="\${apache2limits_$
{profile}_enable:-${apache2limits_enable}}"
eval
apache2limits_args="\${apache2limits_$
{profile}_args:-${apache2limits_args}}"

# ee /etc/rc.conf
apache2_enable="YES"
apache2_http_accept_enable="YES"
Carregando como modulo
# cd /usr/src/sys/modules/accf_http/
# make
# make install
# kldload accf_http
# kladstat
O ARQUIVO /USR/LOCA/ETC/APACHE2/HTTPD.CONF
LockFile Utilizado em Cluster, onde so acessado arquivos (NFS, por exemplo). O
Apache precisa saber que h concorrncia de escrita. Tambm, nunca coloque o NFS
externo, por exemplo, um NAS, mas somente local. Enfim, quando h mais de um
processo acessando o mesmo arquivo compartilhado.
ScoreBoardFile Estatsticas
Timeout Quanto tempo o apache vai manter o cliente em fila, depois de Timeout :
Server Timeout
KeepAlive Criado a partir do HTTP 1.1, aproveita sesses HTTP em andamento.
MaxKeepAliveRequest Numero de clientes que vai lembrar. Numero de clientes que
acessam a pagina. Acima disso, 'e refeito o processo de ThreeWayHandshake.
TCP/80
[FIREFOX]
[HTTPD]
-------------(syn,!ack(sem ack))--------->
<------------(syn,rst)-------------------> O rst (redefina o criterio de syncronizacao
<------------(syn,ack)-------------------> Se estiver ouvindo (ThreeWayHandshake)
-------------(ack)-----------------------> (Sessao)
<------------(ack)------------------------------------(ack)-----------------------> (GET /arquivo.html HTTP/1.0)
<------------(ack)------------------------ (RESPONSE-BODY (2Kb)) offset/1/2 (Fragmentado,
MTU de 1500 Bytes)
-------------(ack)-----------------------> (RECEBI 1/2)
<------------(ack)------------------------ (RESPONSE-BODY)
-------------(ack)-----------------------> (RECEBI 2/2)
<------------(fin,ack)-------------------- (Termino)
-------------(ack)----------------------->

No caso da Keep Alive, em vez de um fin,ack, ele envia uma flag com ack,acknumber,keepalive. Cada pagina de memoria (4k) possvel lembrar de dois clientes
(2K por cliente). 100 clientes consomem 200Kb de pagina de memoria.
No quadro acima h quatro momentos (estados) separados, sendo o
setup(threewayhandshake), h uma comunicao estabelecida(sesso), depois o
encerramento. Ha trs estados. O quarto estado, seria a ausncia desses estados, de
forma que na prxima conexo, todo o processo seja refeito e avaliado pelo Firewall,
ainda que seja da mesma origem, etc.

Modulos de Tunning
<IfModule prefork.c>
StartServers
5
MinSpareServers
5
MaxSpareServers
10
MaxClients
150

MaxClientes
3*((StartServers*MaxSapareServers)+StartSevers)
MaxRequestsPerChild 0
</IfModule>

Maximo

<IfModule worker.c>
StartServers
2
#MaxClients
150 Pode-se comentar, pois prefork.c tem
precedencia sobre worker.c
MinSpareThreads
25 25 * NCPU
MaxSpareThreads
75 Soma de todos os processos 3*MinSpareThreads
ThreadsPerChild
25 Limite maximo de cada processo. Boa
Pratica: MaxSapare/(StartServers*MaxSpare)+StarServers) ou liberar
no minimo MinSpareThreads.
#MaxRequestsPerChild 0
</IfModule>
CONFIGURACAO DE CONTEXTO
Contexto o isolamento de configurao de recurso baseado em algum critrio.
FilesMatch "^\.ht" Tudo que comea com .ht.
<FilesMatch ".*\.mp3$"> Tudo que termina com mp3.
</FilesMatch>
O mod_access, definido no mod_access_module, trabalha com ACL, e funciona em
qualquer contexto.
Alias Faz um mapeamento hierrquico de uma estrutura de arquivo.
Alias "/lojafree" "/usr/local/data/client1" Faz com que quando o
cliente digitar site.com.br/lojafree, a estrutura fsica vai para estrutura virtual.
# REDIRECT Faz redirecionamento temporrio ou permanente, somente para url.
Redirect permanent /loja2 http://www.disney.com
[Fri Sep 24 10:40:15 2010] [error] [client 127.0.0.1]
denied by server configuration: /usr/home/cliente1/

client

Esse erro sempre em funo do mod_access, deve-se criar um contexto Directory com
as permisses adequadas.

Order <allow,deny|deny,allow>
Allow from <nome_dns|ip|rede/bitmask|all|*.freebsdbrasil>
Deny from <nome_dns|ip|rede/bitmask|all|*.freebsdbrasil>
Para permitir server side include. Nunca execute um include dentro de server-side com
CGI.
<!-- #include "outro.html">
Lembrar que o Apache last-match-wins, mesmo permitindo a todos (Allow from
all), a ltima regra diz Deny from 200.48.151.206.
Diretrios: /usr/home/cliente1/ e /usr/home/cliente1/download
Alias "/loja" "/usr/home/cliente1/"
<Directory "/usr/home/cliente1">
Order Allow,Deny
Allow from all
Options -Indexes
Deny from 200.48.151.206
</Directory>
<Directory "/usr/home/cliente1/download">
Options +Indexes FollowSymLinks
outros diretorios dentro destes usurios.
</Directory>

Permite

navegao

aos

Contextos de Autenticao
Basic - Trabalha em texto plano;
Digest - Trabalhe com hash criptografado na senha, que na verdade um hash da
senha mais um secret da engine do apache.
AUTENTICACAO BASIC
Exemplo:
# cd /usr/home/cliente1/
# mkdir secreto
# echo "ACESSO SECRETO" > secreto/index.html
# htpasswd -m -c /usr/local/etc/apache2/senhas.conf edgar Para os
prximos usurios no necessrio a flag -c (criar). O -m para utilizar MD5.
<Directory "/usr/home/cliente1/secreto">
Order Allow,Deny
Allow from all
AuthType Basic
AuthName "Acesso Registro"
AuthUserFile /usr/local/etc/apache2/senhas.conf
Require valid-user
# Require user edgar
</Directory>

AUTENTICACAO DIGEST
Combinao criptogrfica da senha, realm e usurio.
Deve-se descomentar o modulo para digest na linha:
LoadModule auth_digest_module libexec/apache2/mod_auth_digest.so
# htdigest -c /usr/local/etc/apache2/digest.conf "Acesso Restrito"
edgar A flag -c deve ser omitida na criacao dos proximos usuarios
<Directory "/usr/home/cliente1/secreto">
Order Allow,Deny
Allow from all
AuthType Digest
AuthName "Acesso Restrito"
AuthDigestFile /usr/local/etc/apache2/digest.conf
Require valid-user
# Require user edgar
</Directory>
# COMBINANDO DOIS METODOS. NEGA PARA TODOS, MAS PERMITE SE FOR
INTERNO, POREM EXTERNO, 'E NECESSACIO AUTENTICACAO
<Directory "/usr/home/cliente1/secreto">
Order Deny,Allow
Deny from all
Allow from 192.168.10.0/20
AuthType Digest
AuthName "Acesso Restrito"
AuthDigestFile /usr/local/etc/apache2/digest.conf
Require valid-user
Satisfy any
# Require user edgar
</Directory>
SERVER INFO
<Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from 201.48.151.207 127.0.0.1
</Location>
SERVER STATUS
ExtendedStatus On Descomentar
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 201.48.151.207 127.0.0.1
</Location>

EXEMPLO DO SERVER STATUS


Current Time: Friday, 24-Sep-2010 12:31:46 UTC
Restart Time: Friday, 24-Sep-2010 12:31:45 UTC
Parent Server Generation: 6
Server uptime: 1 second
Total accesses: 0 - Total Traffic: 0 kB
CPU Usage: u0 s0 cu0 cs0
0 requests/sec - 0 B/second 1 requests currently being processed --> O numero de request deve
ser observdo para fazer tunning no apache. 4 idle workers
(processos parados)
Os pontos abaixo, representa um start-server * minSpareServer, se
ha ".", 'e que ha slot vazio. o w (respondendo a requisicao) "_",
em espera.
W____...........................................................
................................................................
................................................................
................................................................
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process
Srv
0-6

PID Acc M
CPU SS
Req
VHost
Request
1695 0/0/0
W
0.00 0
127.0.0.1 edgar.ssa.com.br

Conn Child

0
0.0 0.00 0.00
GET /server-status HTTP/1.1

APACHE BENCHMARKING TOOL


- v - verbose 4 (mximo de informaes)
-n - requisies
-c - conexes concorrentes, simultneas
# ab -v 4 -n 100 -c 200 http://201.48.151.207:80/
APACHE TOP
# cd /usr/ports/sysutils/apachetop/
# make install
# apachetop -f /var/log/http-access-log*
ou
# apachetop -f /var/log/http-access-log
d - domnio
r - refer, de onde veio, linkam no servidor
R - Requisio
B - Maior banda

Slot Client

CONFIGURANDO O MOD_DEFLATE
Permite enviar respostas via deflate, que faz com que as respostas sejam compactadas.
Essa possibilidade 'e registrada em RFC.
LoadModule deflate_module libexec/apache2/mod_deflate.so
################# PATRICK MOD_DEFLATE ######################
<IfModule mod_deflate.c>
#
# Definicoes globais para mod_deflate
# cada definicao pode ser customizada em containers
# Directory ou VirtualHost
#
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|jpg|gif)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
#SetEnvIfNoCase Request_URI \.swf$ no-gzip dont-vary # avaliar caso-a-caso
DeflateCompressionLevel 5 --> Por omissao o valor 'e 3. O recomendavel 'e 5
DeflateMemLevel 9
DeflateWindowSize 15
BrowserMatch
BrowserMatch
BrowserMatch
BrowserMatch

^Mozilla/4 gzip-only-text/html
^Mozilla/4\.0[678] no-gzip
\bMSIE !no-gzip !gzip-only-text/html
"Opera/(9|8|7|6|5)" no-gzip

# Logs temporarios para avaliacao de taxa de compressao


DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info
LogFormat
'%v
"%r"
%{output_info}n/%{input_info}n
testemoddeflate
CustomLog /var/log/httpd-deflate_log testemoddeflate

(%{ratio_info}n%%)'

</IfModule>
# Passa com preferencia quem faz Full Caching
Header set X-Cache "HIT from varnished.internal"
Header set X-Cache "HIT from Thunder"

#######################################################################
No /usr/local/etc/apache2/httpd.conf
Include etc/apache2/mod_deflate.conf
################## WebDAV #############
Permite uma estrutura HTTP que recebe arquivo. Faz praticamente, um mapeamento do
Servidor Web como um disco virtual. Possui baixssimo, que mitigado com autenticao.
recomendvel utilizar com Digest e HTTPS.

No /usr/local/etc/apache2/httpd.conf

LoadModule dav_module libexec/apache2/mod_dav.so


LoadModule dav_fs_module libexec/apache2/mod_dav_fs.so
Deve indicar um LockDB, para o apache controlar o lock.
#
# HABILITA DAV
#
davLockDB /tmp/webdav.lock
# chown www:wheel secreto/
<Location /edgardav>
DAV On
</Location>
Alias "/edgardav" "/usr/home/cliente1/secreto"
<Directory "/usr/home/cliente1/secreto/">
Order Allow,Deny
Allow from all
</Directory>

############### VIRTUAL HOST ####################


<VirtualHost *:80>
ServerName www.nanaca.com.br
</VirtualHost>
#######################http.conf################
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@nanaca.com.br
ServerName www.nanaca.com.br
DocumentRoot /usr/home/www/nanaca
CustomLog /var/log/nanaca.com.br-access_log combined
ErrorLog /var/log/nanaca.com.br-error_log
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@nanaca.com.br
ServerName nanaca.com.br
ServerAlias *.nanaca.com.br
DocumentRoot /usr/home/www/nanaca
CustomLog /var/log/nanaca.com.br-access_log combined
ErrorLog /var/log/nanaca.com.br-error_log
</VirtualHost>
<Directory "/usr/home/www/nanaca/>
Order Allow,Deny
Allow from All
</Directory>
################FIM ARQUIVO#################

# apachectl -t -D DUMP_VHOSTS
#################### APACHE-SSL ######################
A identificao de CN no X.500 no Apache a URL FQDN. A criptografia na sesso ocorre
de forma simtrica. A chave simtrica negociada com base na assimtrica. O primeiro
byte durante a conexo j configurada. O SSL - Secure Socket, a segurana em
nvel de socket, onde trata no TCP, o TLS na camada 7, onde
# telnet smtp.gmail.com 25
Trying 74.125.67.109...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP i30sm3770134anh.9
ehlo
250-mx.google.com at your service, [201.48.151.207]
250-SIZE 35651584
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
# openssl s_client -connect www.gmail.com:443
CONNECTED(00000003)
depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
verify error:num=20:unable to get local issuer certificate
verify return:0
--Certificate chain
0
s:/C=US/ST=California/L=Mountain
View/O=Google
Inc/CN=mail.google.com
i:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
1 s:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
i:/C=US/O=VeriSign,
Inc./OU=Class
3
Public
Primary
Certification Authority
--Server certificate
-----BEGIN CERTIFICATE----MIIDIjCCAougAwIBAgIQHxn23jXdY6FCkYrVLMCrEjANBgkqhkiG9w0BAQUFADBM
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x
MTEyMTgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh
MRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApHb29nbGUgSW5jMRgw
FgYDVQQDFA9tYWlsLmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
AoGBANknyBHye+RFyUa2Y3WDsXd+F0GJgDjxRSegPNnoqABL2QfQut7t9CymrNwn
E+wMwaaZF0LmjSfSgRSwS4L6ssXQuyBZYiijlrVh9nbBbUbS/brGDz3RyXeaWDP2
BnYyrVFfKV9u+BKLrebFCDmzQ0OpW5Ed1+PPUd91WY6NgKtTAgMBAAGjgecwgeQw
DAYDVR0TAQH/BAIwADA2BgNVHR8ELzAtMCugKaAnhiVodHRwOi8vY3JsLnRoYXd0
ZS5jb20vVGhhd3RlU0dDQ0EuY3JsMCgGA1UdJQQhMB8GCCsGAQUFBwMBBggrBgEF
BQcDAgYJYIZIAYb4QgQBMHIGCCsGAQUFBwEBBGYwZDAiBggrBgEFBQcwAYYWaHR0
cDovL29jc3AudGhhd3RlLmNvbTA+BggrBgEFBQcwAoYyaHR0cDovL3d3dy50aGF3
dGUuY29tL3JlcG9zaXRvcnkvVGhhd3RlX1NHQ19DQS5jcnQwDQYJKoZIhvcNAQEF
BQADgYEAicju7fexy+yRP2drx57Tcqo+BElR1CiHNZ1nhPmS9QSZaudDA8jy25IP

VWvjEgaq13Hro0Hg32ZNVK53qcXwjWtnCAReojvNwj6/x1Ciq5B6D7E6eiYDSfXJ
8/a2vR5IbgY89nq+wuHaA6vspH6vNR848xO3z1PQ7BrIjnYQ1A0=
-----END CERTIFICATE----subject=/C=US/ST=California/L=Mountain
View/O=Google
Inc/CN=mail.google.com
issuer=/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
--No client certificate CA names sent
--SSL handshake has read 1773 bytes and written 325 bytes
--New, TLSv1/SSLv3, Cipher is RC4-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher
: RC4-SHA
Session-ID:
DFD3B3CE007865BD3E947043E3B95C36AE991888FD87019CD6D996974F7E40C2
Session-ID-ctx:
Master-Key:
7E9B9B71FC0CE77EE8755D7E41783ACF172CD093B0B5783B9C50A84313E4F2B71B
1CCEFF00E119D6C4DEFA1FBFD86C81
Key-Arg
: None
Start Time: 1285342811
Timeout
: 300 (sec)
Verify return code: 20 (unable to get local issuer
certificate)
--GET HTTP/1.0
HTTP/1.0 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Location: http://www.google.com
Content-Length: 218
Date: Fri, 24 Sep 2010 18:50:54 GMT
Server: GFE/2.0
<HTML><HEAD><meta
http-equiv="content-type"
content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.com">here</A>.
</BODY></HTML>
read:errno=0
MasterKey, a chave proposta para a criptografia, pois a criptografia ira ocorrer de forma
simtrica, no entanto para garantir que a chave confivel, enviado tambm o
SessionID, que criptografou com a chave privada, e a chave publica tambm foi enviada,

como pode ser visto em Server Certificate, que compreende a chave entre BEGIN
CERTIFICATE e END CERTIFICATE.
[PUB KEY] VerySign
|
[KEY] =================================================> [CSR]
|
[CRT] (Certificado)
# grep -v
comentrios.

ssl.conf.bkp

>

ssl.conf

Gerando um arquivo sem

Implentando SSL
# mkdir ssl.key Chave Privada
# mkdir ssl.csr Assinatura
# mkdir ssl.crt Certificado
Gerando a chave privada (1024 bits)
# openssl genrsa -out ssl.key/www.nanaca.com.br.key 1024
Generating RSA private key, 1024 bit long modulus
............................++++++
...............................++++++
e is 65537 (0x10001)
Gerando o Pedido de Certificado assinando-o com a Chave Privada
# openssl req -new -key ssl.key/www.nanaca.com.br.key -out
ssl.csr/www.nanaca.com.br.csr
You are about to be asked to enter information that will be
incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name
or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
----Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:Minas Gerais
Locality Name (eg, city) []:Belo Horizonte
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Nanaca
LTDA
Organizational Unit Name (eg, section) []:TI
Common Name (eg, YOUR name) []:www.nanaca.com.br
Email Address []:tecnologia@nanaca.com.br
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:23grdess
An optional company name []:Nanaca-LTDA

Apos este processo a chave pode ser enviada para a CertSign e conseguir um Certificado
Valido.
Assinando a Chave Auto-Assinada
# openssl x509 -days 365 -req -in ssl.csr/www.nanaca.com.br.csr
-signkey ssl.key/www.nanaca.com.br.key -out
ssl.crt/www.nanaca.com.br.crt
Signature ok
subject=/C=BR/ST=Minas
Gerais/L=Belo
Horizonte/O=Nanaca
LTDA/OU=TI/CN=www.nanaca.com.br/emailAddress=tecnologia@nanaca.com
.br
Getting Private key

############ ARQUIVO SSL.CONF ################


# builtin = o prprio mod_SSL se vira
# HSM, um hardware dedicado faz o processo de criptografia, por exemplos as placas
Hifn. Mesmo criador das placas soekris em www.soekris.com.br
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
<IfDefine SSL>
Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl
.crl
SSLPassPhraseDialog

builtin

# Evita enviar o mesmo ID, de forma que a repeticao do ID, nunca


sera enviado
# mesmo que nao esteja em uso.
SSLSessionCache
SSLSessionCacheTimeout
SSLMutex

dbm:/var/run/ssl_scache
300

file:/var/run/ssl_mutex

<VirtualHost _default_:443>
DocumentRoot "/usr/home/www/nanaca"
ServerName www.nanaca.com.br:443
ServerAdmin tecnologia@nanaca.com.br
ErrorLog /var/log/nanaca-ssl-error.log
TransferLog /var/log/nanaca-ssl-access.log

SSLEngine on
SSLCipherSuite
+eNULL

ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:

SSLCertificateFile
/usr/local/etc/apache2/ssl.crt/www.nanaca.com.br.crt
SSLCertificateKeyFile
/usr/local/etc/apache2/ssl.key/www.nanaca.com.br.key
<FilesMatch "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog /var/log/httpd-ssl_request.log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
</IfDefine>
################### FIM DE ARQUIVO ############
# apachectl stop
# apachectl startssl
No /etc/rc.conf apache2ssl_enable="YES"
# lynx https://www.nanaca.com.br
LINGUAGEM DE PROGRAMACA PHP
A linguagem implementa aproximadamente 40% do Padro POSIX.1e. Esta em
/usr/ports/php5, que o Core do PHP. Opes:
CLI - Linha de Comando
CGI - O php roda em soquete de rede e processa o que esta em memoria-socket.
APACHE - Cria um modulo nativo para o Apache
AP2FILTER - Capacidade de PHP de processar expresses regulares. Ainda nao esta
testado e funcional.
SUHOSIN - Expresso em japons que significa o incrvel drago vermelho que protege,
baseado em projeto de segurana Hardening PHP.
MULTIBYTE - Possibilidade de carregar extenses externas que no foram carregas no
S.O, por exemplo, extenses de terceiros, ou proprietrios, por exemplo, da ZEND.
MAILHEAD - Quando utilizar a funo mail, ele acrescenta um header que indica quem

(script) enviou o e-mail, o que torna mais facil identificar SPAM.


LINKTHR - Experimental, ambiente Multithread.
em /usr/ports/lang/php5-extensions:
SOCKETS, MYSQL, MYSQLi.
# pkg_info -Dx php5.5.3
Information for php5-5.3.3_2:
Install notice:
***************************************************************
Make sure index.php is part of your DirectoryIndex.
You should add the following to your Apache configuration file:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps --> NAO COLOCAR ESSA
LINHA NO HTTPD.CONF (FIRULA PARA BICHAS)
***************************************************************
No /usr/local/etc/apache2/httpd.conf
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
DirectoryIndex
index.html
index.php
index.php5 index.htm index.default.html

index.php3

index.php4

# apachectl configtest
# apachectl graceful
# cp php.ini-production php.ini
register_globals = On A varivel estar global para todos. A varivel estar
disponvel para todos os scripts, de forma que o escopo torna-se nico.
$saida = shell_exec("/bin/ls");
safe_mode = Quando habilitado faz seguimentao de memoria para cada varivel
(mesmo com Register Globals). Existe tambm a comparao de UID, garantido que cada
dono de arquivo lhe seja de fato como dono. Tambm, desabilita shell_exec,
system, etc.
open_basedir = /usr/local/www:/tmp Limita as operaes em arquivo para
aquele diretrio e os diretrios abaixo dele, no caso www e tmp.
disable_functions = Desabilita phpinfo(), fsockopen(), etc.
No diretrio TREINA do Treinamento h diversas configuraes quanto a segurana em
PHP.
expose_php = Off

engine = On Liga ou desliga o PHP. O recomendvel ' Off, e cada VirtualHost


configura-se como:
<VirtualHost *:80>
ServerAdmin webmaster@nanaca.com.br
ServerName www.nanaca.com.br
DocumentRoot /usr/home/www/nanaca
CustomLog /var/log/nanaca.com.br-access_log combined
ErrorLog /var/log/nanaca.com.br-error_log
php_admin_flag engine on
php_admin_value open_basedir /usr/home/www/nanaca
php_admin_value doc_root /usr/home/www/nanaca
php_admin_flag function.fsockopen on
#
php_admin_value upload_tmp_dir /usr/home/www/nanaca
</VirtualHost>
############### RATS #####################
# /usr/ports/security/rats
# rehash
# rats arquivo.php
Em www.zend.com de um banco de dados de diversos scripts e auditorias de segurana
para ser utilizado com o rats.
TOCTOU - Time Of Check, Time Of Use - Falta de validao de entrada, verificando
exclusivamente e somente na hora de us-la, ou seja, s checa se pode escrever
tentando escrever, e posteriormente escrever, atravs de mecanismos booleano por
exemplo.
############### PERFORMANCE ################
# /usr/ports/www/eaccelerator
Edit /usr/local/etc/php.ini and add:
zend_extension="/usr/local/lib/php/20090626/eaccelerator.so"
Colocar no final do arquivo do php.
Then create the cache directory:
Criar o diretorio:
mkdir /tmp/eaccelerator
chown www /tmp/eaccelerator
chmod 0700 /tmp/eaccelerator

Firewall
Componentes de Segurana Formais
- Melhores praticas geridas e fomentadas pelo NIST, SANS Security e ISC^2.
- Mltiplos domnios de segurana: IDS/IPS, Firewall, Proxy. O Proxy de entrada
consegue garantir segurana dentro de um contexto, de forma que o processo de negocio
ocorra a contento, onde possvel exigir processos de negcios (logon, separacao de
politicas), utilizado muito tambm em WebService, HAProxy (Proxy Reverso) e Varnished
(Cache de Entrada), o mod_proxy do Apache.
- Firewall por roteamento nulo, onde gera-se uma rota que encaminha para endereo
nulo, descartando pacotes. Utiliza-se next-hope para uma blackhole, por exemplo:
# ifconfig disc0 create
# route add -host 200.200.200.200 -iface disc0
# set nexthop blackhole (OpenBGP)
Firewall Por Filtragem de Pacotes
Todo dispositivo que pode ser utilizado entre dois ou mais seguimentos de redes
gerenciando os pacotes:
TCB - Trusted Code Base, Appliance com Firewall. TCB TCSEC/A2 X400 BAE Systems
(NAI) so funciona em Appliance.
O Nokia FW IPSO, baseado no FreeBSD.
Firewall Livres:
IPFIREWALL, IPFILTER, PACKETFILTER, NetFilter, IPchains.
PFSense - Recomendavel.
#################### IPFirewall ######################
IPFirewall / IPFW
- Histrico
o mais integrado sistema de Firewall do FreeBSD, que consegue inclusive, fazer firewall
para sistemas de arquivos, onde permite-se ou nega que determinado ID do usurio
acesse a determinado diretrio.
Topologias:
- Deve-se projetar o Firewall cautelosamente, avaliando-se os pr-requisitos, melhores
praticas, etc.
Screengin Router
Um roteador com ACL, que classificado como um Firewall.
Dual Homed
Ligao nica e fsica interligando dois permetros (Bastion Host). Avalie o trafego entre
dois permetros.

Firewall Por Perimetro


Avalia-se os seguimentos da rede e tem como pr-requisito: as regras devem ser capazes
de filtrar o permetro e classificar fluxo/interface, onde regras de entrada/sada.
Screned Sub Network
nica ligao fsica onde ha mais que dois permetros.
Network Based Firewall (Camada 3)
Client Based Firewall - Client Firewall, uma boa abordagem em por exemplo, Servidores
Web, Banco de Dados, etc.
StandAlone Screened Sub Network
Potencializao de segurana por profundidade.
DMZ = Controle Pleno sobre seguimento fsico de rede, onde consegue-se isolar outra
rede apenas baseada no controle da rede intermediaria. necessrio uma rede isolada
sobre a qual tenha controle absoluto sobre a mesma. Observar os conceitos da CISP. A
DMZ, trata principalmente da separao da rede, desvinculando da rede militar.
NAT:
Quando o host faz uma requisio, o firewall desmonta o pacote, troca o IP de origem,
aloca a requisio em uma tabela com IP, ACK NUMBER, SEQ NUMBER, PORT, no
volta, o processo o mesmo. Tipos de Nat.
NAT Simtrico - Sai com a mesma porta que o host solicitou.
NAT Assimtrico - Sai com uma porta aleatria gerada no Firewall.
Filtro de Pacotes - Camada 2
Firewall StateLess - Camada 2, 3 e 4, onde filtrado pacote a pacote, no pode distinguir
o estado, analisa protocolos e portas.
Firewall Statefull - Camada 2, 3 e 4, que verifica e isola os estados de conexo, avaliando
desde o inicio ate o fim da sesso. Processa no minimo todos os 40 Bytes, analisando
portanto a camada de sesso. A camada de sesso esta inclusa na camada de
Transporte. A camada de apresentao esta contida na camada de aplicao, o criador do
TCP diz que o TCP tem 5 camadas, o criador do IP diz que tem 3, o Tanenbaum diz que
tem 4.
options
IPFIREWALL Opo em Kernel para utilizao do IPFirewall.
options
DEFAULT_TO_ACCEPT Passa a liberar em vez de bloquear.
options
VERBOSE Faz loggin no Termina
options
VERBOSE_LIMITE Limita o numero de registro de log que podem ser
geradas regra por regra, no exemplo abaixo:
# tail -1 /var/log/messages | wc
1
15
132 Bytes
options
FORWARD Encaminhamento de pacote sem reescrita, onde atua-se
tambm como Gateway, que pode trocar a next-hop.

########## INTRODUCAO AO IPFIREWALL ###################


Regra padro gerada pelo Kernel atravs da diretiva DEFAULT_TO_ACCEPT
# ipfw show
65535 14345 7156944 allow ip from any to any
# /etc/rc.d/ipfw rcvar
# ipfw
#
firewall_enable="NO" Com essa opo para "YES", l o
arquivo /etc/rc.firewall
#
(default: "")
O IPFW first-match-wins, onde a primeira regra vai ser sempre aplicada. O Linux lastmatch-wins, o PF tambm.
# sysctl net.inet.ip.fw.autoinc_step. Pode ser modificado para
incrementar em valores alternativos.
# echo net.inet.ip.fw.autoinc_step=10 >> /etc/sysctl.conf
Protege-se a loopbackup, que o nico IP de fato que em toda situao vai sempre existir,
pois evita-se spoof.
# ipfw zero <numero-da-regra> zera os contadores da regra
# ipfw zero zera todas as regras
# bc
785/12
# CRIANDO AS REGRAS PERSONALIZADAS
in via Entrando passando pela interface
in recev e out xmit Sempre destinado ao prprio Firewal
reass recebe pacotes fragmentados, coloca em fila juntando os pacotes pequenos e
envia-los em pacotes maiores para a LAN. Muito utilizado em Redes Sem Fio.
QUESTOES SOBRE ICMP
router advevertisement (09), router solicition (10) Troca de rota via
RIP, se estiver usando RIP liberar.
route redirect Redirecionar rota
IP reader bad (Pedido de retransmisso - liberar)
Liberar: 0, 3, 8, 11, 12
$fw add set 1 pass udp from any to any 53 { via $ife or via
wlan0 }
$fw add set 1 pass tcp from $dns_slave to me 53 in recv $ife
$fw add set 1 pass tcp from any to any 53 { via $ife or via

wlan0 } iplen 120-1500


# ipfw set disable 1 Desabilita um conjunto de regras
# ipfw set enable 1 Habilita um conjunto de regras desabilitadas
verfy - Tcnica para evitar spoof de rede. Da match quando a ao permitida acontecer,
a diretiva antspoof da match quando no deveria acontecer
B-Tree - Dennis Ritchie
Radix Tree (McKusick), cada octeto separado em ramos distintos da arvore, utilizado na
tabela de roteamento PATRICIE TRIE - RIP
45 -> 15
/
200 -> 210 -> 70 -> 1
|
\
201 38 -> 2
|
70
|
10
CUIDADO COM O STATEFULL DINAMICO
No Kernel,
options IPFW_NTABLES=X, onde x no pode ser maior que 65535. O padro so 128
tabelas.
O Firewall statefull dinmico no IPFW faz validao e inspeo profunda do pacote.
sysctl net.inet.ip.fw.dyn_buckets=256 (padrao) - Struct em Kernel 16/1
para cada 16 regras de statefull 1 dyn_buckets. 8000/16 = 500 dyn_buckets. Em 64
bits a relao 32 para 1.
sysctl net.inet.ip.fw.dyn_max=4096 (padrao) - Aumentar se necessrio.
Erros quando ultrapassa a 4096, negao de servio.
Failed to install state
Too many dynamic rules
O custo de regra dinmica 2k de memoria
O setup acompanha o keep-state. Somente o handshake terminar que gerado o
handshake
###################### EXEMPLO 1 ###################################
#!/bin/sh
fw="/sbin/ipfw"
# INTERFACE EXTERNA
ife="sis0"
# SERVIDORES
# DNS

dns_slave="201.48.151.206"
# WEB
#
# REGRAS INCREMENTADAS A PARTIR DO SCRIPT PADRAO EM
/etc/rc.firewall
# LIMPANDO AS REGRAS
$fw -f flush
# TCP FLAGS #$fw add deny
#$fw add deny
#$fw add deny
#$fw add deny

BLOQUEAR PACOTES INVALIDOS


tcp from any to any tcpflags syn,fin
tcp from any to any tcpflags fin,!ack
tcp from any to any frag
log logamount tcp frag

# STATEFULL DINAMICO
$fw add check-state
# ANTISPOOF
$fw add deny all from any to any not antispoof
# TIMESTAMP
$fw add deny all from any to any ipoptions ts
# REMONTA PACOTES FRAGMENTADOS DEMAIS (FRAGMENTOS FORCADOS POR
WINDOW SIZE)
$fw add reass all from any to any in
# FIREWALL STATEFULL -VEM ANTES DAS REGRAS DE FATO
$fw add allow { tcp or udp or sctp } from any to any established
# LIBERA O FIREWALL PARA O MUNDO - NAO NECESSARIO PELO FATO DE
ESTAR UTILIZANDO CHECK-STATE - STATEFULL DINAMICO
#$fw add allow all from me to any out { xmit $ife or xmit wlan0 }
# REGRAS PARA LOOPBACK
$fw add pass all from any to any via lo0
$fw add deny all from any to 127.0.0.0/8
$fw add deny ip from 127.0.0.0/8 to any
# PERMITE ICMP
# O PROTCOLO ICMP, PELO CABECALHO SAO PROCESSADOS SOMENTE 20
BYTES. O TOTAL DE PAYLOAD NAO
# PODEM PASSAR DO MINIMO DE 20 BYTES (CABECALHO) E NO MAXIMO 128
BYTES (MICROSOFT WINDOWS) + 20 BYTES
# DO CABECALHO
$fw add pass icmp from any to any icmptypes 0,3,8,11,12 iplen 20148
# DNS E PERMICAO PARA TRASNFERENCIA DE ZONA

$fw add allow udp from any to any 53 { via $ife or via wlan0 }
keep-state
$fw add allow udp from any 53 to any { via $ife or via wlan0 }
keep-state
$fw add allow tcp from $dns_slave to me 53 in recv $ife keep-state
tcpflags syn,!ack
$fw add allow tcp from any to any 53 { via $ife or via wlan0 }
iplen 120-1500 keep-state tcpflags syn,!ack
### COM A DIRETIVA KEEP-STATE TCPFLAGS SYN,!ACK VERIFICADO TODO O
HANDSHAKE ANTES DE GERAR STATE
$fw add allow tcp from any to me 443 in recv $ife keep-state
tcpflags syn,!ack
$fw add reset log logamount 1000 tcp from any to me 80 in keepstate
#### QUESTOES DE PERFORMANCE NA AVALIACAO DE REGRAS ####
######################## RADIX TREE TABLE #######################
# $fw table 1 add 201.48.151.201
# $fw table 1 add 201.48.151.202
# $fw table 1 add 201.48.151.203
# $fw table 1 add 201.48.151.204
# $fw table 1 add 201.48.151.205
# $fw table 1 add 201.48.151.206
#
#
#
#

ipfw
ipfw
ipfw
ipfw

table
table
table
table

all list
1 list
1 flush
all flush

# ipfw table 1 add 201.48.151.195


# ipfw table 1 delete 201.48.151.195
#$fw add allow tcp from "table(1)" to me dst-port 22 in recv $ife
####################### STATEFULL DINAMICO ######################

########## EXEMPLOS #####################


# PERMITE SSH
# FIREWALL ATOMICO { IP or IP } / { recv INTERFACE or INTERFACE }
# $fw add pass tcp from { 201.48.151.206 or 201.48.151.205 } to me
dst-port 22 in recv $ife
#
# OUTRA FORMA OTIMIZADA - LENDO OS 24 BITS DA REDE MAIS 8 BITS
PARA O ULTIMO OCTETO
# $fw add pass tcp from 201.48.151.190/24{201,202} to me dst-port
22 in recv $ife
#
# LENDO RANGES DE IP

# $fw add pass tcp from 201.48.151.190/24{201,202,205-240} to me


dst-port 22 in recv $ife
#
#$fw add pass tcp from 201.48.151.206,201 to me dst-port 22 in
recv $ife
#$fw add deny tcp from any to me dst-port 22 in
#
# PERMITE APACHE NA LAN E WEB HTTPS
#$fw add pass tcp from 201.48.151.192/27 to me dst-port 80 in recv
$ife
#$fw add deny log logamount 1000 tcp from any to me
#
# OUTRA ABORDAGEM: NEGAR A QUEM NAO EH DE DIREITO
# $fw add pass tcp from not 201.48.151.190/24{201,202,205-240} to
me dst-port 22 in recv $ife
#
#
# DNS (TODOS PODEM CONSULTAR, MAS SOMENTE SLAVES (TCP) PODEM
#TRANSFERI ZONAS
#
#
#

# POLITICA: FECHADA
#
$fw add 65534 deny all from any to any
################FIM DO ARQUIVO #############################
SETUP LIMIT
setup limit src-addr 2 dst-addr 10 - Aceita somente 02 conexes de uma
origem e permite no mximo 10 conexes, permitindo no mximo 5 clientes.
ipfw add prob 0.5 deny icmp from any to any icmptypes 8 - neste caso,
provavelmente, em 10 pings, 5 pings sero aceitos.
# ipfw add fwd 201.48.151.203 all from me to any out - policy based
routing, em que 'e escolhido um outro
# ipfw add fwd <ip-proxy>,80 tcp from any to not me 80 in - Proxy
Transparente.
Balanceamento por sesso
# ipfw add prob 0.5 fwd <gateway> all from me to any out setup
keep-state
# ipfw add fwd <outrogateway> all from me to any out setup keepstate
# ifpw table 2 list
# ipfw table 2 add 201.48.151.201 201.48.181.193

#
#
#
#

ipfw
ipfw
ipfw
ipfw

table
table
table
add 1

2 add 201.48.151.202 201.48.181.193


2 add 201.48.151.203 201.48.181.199
2 add 201.48.151.204 201.48.181.199
fwd tablearg all from "table(2)" to any out

Multiplas Tabelas de Roteamento


FIB - Forward Information Base
RIB - Route Information Base - Roteamento Dinmico
* O Firewall utiliza FIB
options ROUTETABLES=1 a 65535
# setfib -0 netstat -rn
Routing tables
Internet:
Destination
Netif Expire
default
sis0
127.0.0.1
lo0
201.48.151.192/27
sis0
201.48.151.207
lo0

Gateway

Flags

Refs

Use

201.48.151.193

UGS

25

4734

link#4

UH

1643

link#1

1625

link#1

UHS

3287

Internet6:
Destination
Flags
Netif Expire
::1
lo0
fe80::%lo0/64
lo0
fe80::1%lo0
UHS
lo0
ff01:4::/32
lo0
ff02::%lo0/32
lo0
edgar# setfib -1 netstat -rn
Routing tables
Internet:
Destination
Netif Expire
127.0.0.1
lo0
201.48.151.192/27
sis0

Gateway
::1

UH

link#4

link#4
fe80::1%lo0

fe80::1%lo0

Gateway

Flags

Refs

Use

link#4

UH

link#1

Internet6:
Destination
Flags
Netif Expire
::1
lo0
fe80::%lo0/64
lo0
fe80::1%lo0
UHS
lo0
ff01:4::/32
lo0
ff02::%lo0/32
lo0

Gateway
::1

UH

link#4

link#4
fe80::1%lo0

fe80::1%lo0

Duas tabelas de roteamento:


# setfib -0 route add default 201.48.151.202
# setfib -1 route add default 201.48.151.203
# setfib -1 /usr/local/etc/rc.d/apache start O Apache ira rodar somente
na tabela de roteamento 1, e no 0.
$fw add setfib 1 all from any to any in via wlan1 - Todos que chegarem
na wlan1 iro passar pela tabela tabela de roteamento dela. As regras existentes para a
wlan1 sero aplicadas normalmente.
################################# NAT ################################
Segurana, utilizar userland para escrita em memoria (desprivilegiada) e em kernel.
DIVERT - Protocolo orientado a conexao e a porta, somente para FreeBSD (no, IANA).
############################### EXERCICIO NAT #######################
# ifconfig wlan0 destroy
# ifconfig wlan0 create wlandev ath0 wlanmode ap up
# ifconfig wlan0 ssid edgar-ap channel 11
# ifconfig wlan0 192.168.0.207/24
NO /etc/rc.conf
natd_enable="YES"
natd_flags="-f /etc/natd.conf"
##################### /etc/natd.conf ###############
# PLACA DE REDE EXTERNA (Internet)
interface sis0
dynamic yes
# same_ports no - NAT Assimetrico
# same_ports yes - NAT Simetrico (recomendvel)
same_ports yes
use_sockets yes
# FAZ NAT SOMENTE PARA RFC1918
unregistered_only yes

############## FIM DO ARQUIVO ####################


########## /etc/rc.ipfw ########
######################### NAT #############################
$fw add divert 8668 all from 192.168.0.0/24 to any out via $ife
$fw add divert 8668 all from any to me in recv $ife
################################################################
###### FIM /etc/rc.ipfw ########
# /etc/rc.d/natd start
Starting natd.
Loading /lib/libalias_cuseeme.so
Loading /lib/libalias_ftp.so
Loading /lib/libalias_irc.so
Loading /lib/libalias_nbt.so
Loading /lib/libalias_pptp.so
Loading /lib/libalias_skinny.so
Loading /lib/libalias_smedia.so
edgar# sockstat -4l | grep natd
root
natd
3661 3 div4

*:8668

*:*

# sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 1 -> 1
# echo 'gateway_enable="YES"' >> /etc/rc.conf
LSNAT RFC2931 - Permite balancear sesses de entrada para rede falsa via NAT.
Para outros Links (EMBRATEL, CTBC, GVTA)
######## ARQUIVO NATD.CONF COM DUAS INSTANCIAS #############
# PLACA DE REDE EXTERNA (Internet)
interface sis0
dynamic yes
# same_ports no - NAT Assimetrico
# same_ports yes - NAT Simetrico (recomendvel)
same_ports yes
use_sockets yes
# FAZ NAT SOMENTE PARA RFC1918
unregistered_only yes
################## PUBLICANDO SERVIDORES ############################
#
# PODE-SE CRIAR VARIAS INTERFACES VIRTUAIS, FAZENDO COM QUE CADA
#SERVIDOR
# DA LAN RESPONDA PELO IP VIRTUAL CORRESPONDENTE
#
# redirect_port <proto> <ip_interno>:<porta> [ip_externo]:<porta>
redirect_port tcp 192.168.0.206:443 201.48.151.207:443

# NAT 1:1
# redirect_address <ip_interno> <ip_externo>
redirect_address 192.168.0.207 201.48.151.207
#
# NAT EMBRATEL
#
instance embratel
dynamic yes
interface wlan0
use_sockets yes
same_ports yes
unregistered_only yes
port 8669
################# ENFILEIRAMENTO DE PACOTES - QoS ################
KAME (www.kame.net) - Projeto de tecnologias focadas em Internet, sempre licenciadas
BSD, foram criadas tecnologias como IPSEC, IPv6, SCTP. etc. Um dos projetos o ALTQ
(Alternative Queueing). Jun Ichiro Itojun Hagino, que foi commiter do Projet FreeBSD,
OpenBSD, NetBSD, Desenvolvedor Linux, Desenvolvedor SUN, Cisco, faleceu aos 33
anos.
Quando o ALTQ foi criado, foram gerados as disciplinas:
- PRIQ
- HFSC
- CBQ (LINUX)
- ECN (Parte do IPv6)
- RED e GRED
- WFQ
O PF Implementa todas as disciplinas, exceto WFQ. Luigi Rizzo, na dissertao de
Mestrado, Na Universitat dI Piazza, Roma, criou o DUMMYNET,
que trabalha na classificao e separao de trafego IP, utilizando-se de Pipes, a Cisco
utilizou o WF2Q, a Junniper criou o WF2Q+, que 'e utilizado pelo DUMMYNET.
Para ter suporte a DUMMYNET, basta adicionar no Kernel. Trs duas novas acoes no
IPFW (pipe, queue) e dois comandos (config pipe e configue queue).
pipe <1 - 65535> - O numero do PIPE no reflete na ordem de processamento, execuo
das regras.

Q1W5 Q2W10

QW315

5
10
25
---- ---- ---40
40
40
-------------------1024
Q1W5 Q2W10

QW315

1
1
1
---- ---- ---6
3
2
-------------------1024
MMC:
Q1W5 - 1/6 / 1024 = 170Kb
Q2W10 - 1/3 / 1024 = 341Kb
Q3W15 - 1/2 / 1024 = 512Kb
#### Arquivo de rc.ipfw Completo ####
#!/bin/sh
fw="/sbin/ipfw"
# INTERFACE EXTERNA
ife="sis0"
# SERVIDORES
# DNS
dns_slave="201.48.151.206"
# DESABILITA RECURSO QUE IMPOSSIBILITA QUE CONTROLE DE BANDA
# GERADO PELO
#DUMMYNET NAO FACAM BYPASS PELO FIREWALL. TODO O PROCESSO PASSARA
# PELA
#VALIDACAO DO FIREWALL VARIAS VEZES
$fw disable one_pass

#
REGRAS
INCREMENTADAS
/etc/rc.firewall
# LIMPANDO AS REGRAS
$fw -f flush
# TCP FLAGS #$fw add deny
#$fw add deny
#$fw add deny

BLOQUEAR
tcp from
tcp from
tcp from

PARTIR

DO

SCRIPT

PACOTES INVALIDOS
any to any tcpflags syn,fin
any to any tcpflags fin,!ack
any to any frag

PADRAO

EM

#$fw add deny log logamount tcp frag


# STATEFULL DINAMICO
$fw add check-state
# ANTISPOOF
$fw add deny all from any to any not antispoof
# TIMESTAMP
$fw add deny all from any to any ipoptions ts
# REMONTA PACOTES FRAGMENTADOS DEMAIS (FRAGMENTOS FORCADOS POR
#WINDOW SIZE)
$fw add reass all from any to any in
# FIREWALL STATEFULL -VEM ANTES DAS REGRAS DE FATO
$fw add allow { tcp or udp or sctp } from any to any established
# LIBERA O FIREWALL PARA O MUNDO - NAO NECESSARIO PELO FATO DE
#ESTAR UTILIZANDO CHECK-STATE - STATEFULL DINAMICO
#$fw add allow all from me to any out { xmit $ife or xmit wlan0 }
############################## LAYER 2 MAC ##########################
# GARANTINDO TRAFEGO PARA PROTOCOLOS ESPECIFICOS
# sysctl net.link.ether.ipfw=1
#$fw add deny all from any to any layer2 not mac-type
ipv4,arp,rarp
# LIBERA SOMENTE IPv4
$fw add deny all from any to any layer2 not mac-type ipv4
#####################################################################
# REGRAS PARA LOOPBACK
$fw add pass all from any to any via lo0
$fw add deny all from any to 127.0.0.0/8
$fw add deny ip from 127.0.0.0/8 to any
######################### CONTROLE DE BANDA #################
#
# FIFO
#
### IMPOE DELAY DE 400ms DE ENTRA E SAIDA (# ipfw pipe 1 show)
$fw
$fw
$fw
$fw

add pipe 1 all from


add pipe 2 all from
pipe 1 config queue
pipe 2 config queue

any to me in via $ife


me to any out via $ife
10 delay 400
10 delay 400

## PLANO CONTRATADO DE 256Kb


# SEMPRE TRATAR DE ACORDO COM O SEGUIMENTO DO CLIENTE NO CASO, SE
#O CLIENTE VEM DA REDE INTERNA,
# TRATAR DIRETAMENTE PELA REDE INTERNA, NA VOLTA, TAMBEM IR PARA A

#REDE INTERNA
$fw
$fw
$fw
$fw

add pipe 4 all from


add pipe 5 all from
pipe 4 config queue
pipe 5 config queue

201.48.151.206 to any in via $ife


any to 201.48.151.206 out via $ife
10 bw 256Kb burst 2M
10 bw 256Kb burst 2M

#### NESTE UTILIZAR TABLE EM VEZ DE { <IP> or <IP }


# NO EXEMPLO ABAIXO, SERA GARANTIDO A BANDA DE 256Kb PARA CADA
#CLIENTE
$fw add pipe 4 all from { 201.48.151.206 or 201.48.151.208 } to
any in via $ife
$fw add pipe 5 all from any to { 201.48.151.206 or
201.48.151.208 } out via $ife
$fw pipe 4 config queue 10 bw 256Kb burst 2M mask src-ip
255.255.255.255
$fw pipe 5 config queue 10 bw 256Kb burst 2M mask src-ip
255.255.255.255
# (ATE FREEBSD 6.0, A MASKARA ERA EM HEXA 0xffffffff)
# BURST - CASO O CLIENTE FIQUE EM IDLE, NAO USANDO A BANDA, QUANDO
#O ESTE FOR UTILIZAR A CONEXAO DEPOIS DE IDLE, ESTE GANHA UM
#"BONUS" DE DE CHEGAR A ATE 2M.
# PLANO DE 1Mb
$fw
$fw
$fw
$fw

add pipe 6 all from


add pipe 7 all from
pipe 6 config queue
pipe 7 config queue

any to any in via $ife


any to any out via $ife
10 bw 1Mb burst 4M
10 bw 1Mb burst 4M

############# ENFILEIRAMENTO PRIORITARIO (QoS) ########################


#
# WF2Q+ (QoS)
#
$fw add queue 10 all from 192.168.0.206 to any in via wlan0
$fw add queue 11 all from any to 192.168.0.206 out via wlan0
$fw queue 10 config weight 5 pipe 20
$fw queue 11 config weight 5 pipe 21
$fw
$fw
$fw
$fw

add queue 20 all from 192.168.0.208 to any in via wlan0


add queue 21 all from any to 192.168.0.208 out via wlan0
queue 20 config weight 10 pipe 20
queue 21 config weight 15 pipe 21

$fw add queue 30 all from 192.168.0.209 to any in via wlan0

$fw add queue 31 all from any to 192.168.0.209 out via wlan0
$fw queue 30 config weight 10 pipe 20
$fw queue 31 config weight 15 pipe 21
$fw pipe 20 config bw 1Mb queue 10
$fw pipe 21 config bw 1Mb queue 10
####################################################################
#
# QoS => 50% = http + https ; 25% = SMTP, POP3, IMAP ; 25% = RESTO
# TOTAL DA BANDA = 5Mbps
# JUSTA (WF2Q+)
#
$fw
$fw
$fw
$fw

add queue 10 tcp from any to any 80,443 in via wlan0


add queue 11 tcp from any 80,443 to any out via wlan0
queue 10 config weight 50% pipe 20
queue 11 config weight 50% pipe 21

$fw
$fw
$fw
$fw

add queue 10 tcp from any to any 25,110,143 in via wlan0


add queue 11 tcp from any 25,110,143 to any out via wlan0
queue 10 config weight 25% pipe 20
queue 11 config weight 25% pipe 21

$fw add queue 10 all from any not to any 80,443,25,110,143 in via
wlan0
$fw add queue 11 all from any not 80,443,110,25,143 to any out via
wlan0
$fw queue 10 config weight 25% pipe 20
$fw queue 11 config weight 25% pipe 21
$fw pipe 20 config bw 5Mb queue 10
$fw pipe 21 config bw 5Mb queue 10
#######################################################################
######## IPFW CAMADA 2 LLC/MAC

############

# O LINUX NAO BLOQUEIA CAMADA 2, SOMENTE O ARP REPLAY E ARP


REQUEST, #DE FORMA QUE SE ESTIVER
# ARP STATICO NAO 'E VALIDADO
# PODE-SE UTILIZAR O KEEP-STATE
$fw add allow all from any to any layer2 mac any 00:0c:6e:33:08:63
$fw add allow all from any to layer2 mac 00:0c:6e:33:08:63 any
$fw add allow all from 201.48.151.206 to any layer2 mac any
00:0c:6e:33:08:63
$fw add allow all from any to 201.48.151.206 layer2 mac
00:0c:6e:33:08:63 any
$fw add allow all from 201.48.151.206 to any layer2 mac any
00:0c:6e:33:08:63/24
$fw add allow all from any to 201.48.151.206 layer2 mac

00:0c:6e:33:08:63/24 any
########### AQUI COLOCARIA-SE O PROXY TRANSPARENTE #################
#$fw add fwd 201.48.151.200,80 tcp from any to not me 80 in
########################################################################
###
########################## NAT #############################
### PRIMEIRA INSTANCIA
$fw add divert 8668 all from 192.168.0.0/24 to any out via $ife
$fw add divert 8668 all from any to me in recv $ife
$fw add allow tcp from 192.168.0.0/24 to any in via wlan0 setup
keep-state
$fw add allow udp from 192.168.0.0/24 to any in via wlan0 keepstate
### SEGUNDA INSTANCIA - EMBRATEL
$fw add divert 8669 all from 192.168.0.0/24 to any out via $ife
$fw add divert 8669 all from any to me in recv $ife
$fw add allow tcp from 192.168.0.0/24 to any in via wlan0 setup
keep-state
$fw add allow udp from 192.168.0.0/24 to any in via wlan0 keepstate
### PERMITE PUBLICACAO
$fw add allow tcp from any to 192.168.0.207 80 out via wlan0
##################################################################
#########
### TEMPORARIO
# $fw add allow all from any to any
# PERMITE ICMP
# O PROTCOLO ICMP, PELO CABECALHO SAO PROCESSADOS SOMENTE 20
#BYTES. O TOTAL DE PAYLOAD NAO
# PODEM PASSAR DO MINIMO DE 20 BYTES (CABECALHO) E NO MAXIMO 128
#BYTES (MICROSOFT WINDOWS) + 20 BYTES
# DO CABECALHO
$fw add pass icmp from any to any icmptypes 0,3,8,11,12 iplen 20148
# DNS E PERMICAO PARA TRASNFERENCIA DE ZONA
$fw add allow udp from any to any 53 { via $ife or via wlan0 }
keep-state
$fw add allow udp from any 53 to any { via $ife or via wlan0 }
keep-state
$fw add allow tcp from $dns_slave to me 53 in recv $ife keep-state
tcpflags syn,!ack
$fw add allow tcp from any to any 53 { via $ife or via wlan0 }
iplen 120-1500 keep-state tcpflags syn,!ack

################# PERMITE PORTA 80 ####################################


$fw add allow tcp from me to any 80 out setup keep-state
$fw add allow tcp from 192.168.0.0/24 to me 80 in recv wlan0 setup
keep-state
$fw add allow tcp from 201.48.151.206 to me 80 in recv $ife setup
keep-state
########################################################################
###
##### COM A DIRETIVA KEEP-STATE TCPFLAGS SYN,!ACK 'E VERIFICADO TODO O
#HANDSHAKE ANTES DE GERAR STATE
$fw add allow tcp from any to me 443 in recv $ife keep-state
tcpflags syn,!ack
######################## DICA ##################################
# DEVE-SE VERIFICAR NO /var/log/security ALGUM PROBLEMA. NESTE
ARQUIVO #CONSTA COMO ABAIXO:
# NESTE CASO DEVE-SE DIGITAR O COMANDO: # ipfw show 2800,(2800 'E
A REGRA) #E SERA EXIBIDO O A REGRA QUE APRESENTA
# O PROBLEMA.
#
# Sep 25 19:20:00 edgar kernel: ipfw: 2800 Reset TCP
201.48.151.206:39287 192.168.0.207:80 in via sis0
# Sep 25 19:20:03 edgar kernel: ipfw: 2800 Reset TCP
201.48.151.206:39287 192.168.0.207:80 in via sis0
#
##################################################################
#$fw add reset log logamount 1000 tcp from any to me 80 in keepstate
####################################################################
######### QUESTOES DE PERFORMANCE NA AVALIACAO DE REGRAS #########
######################## RADIX TREE TABLE #######################
# $fw table 1 add 201.48.151.201
# $fw table 1 add 201.48.151.202
# $fw table 1 add 201.48.151.203
# $fw table 1 add 201.48.151.204
# $fw table 1 add 201.48.151.205
# $fw table 1 add 201.48.151.206
#
#
#
#

ipfw
ipfw
ipfw
ipfw

table
table
table
table

all list
1 list
1 flush
all flush

# ipfw table 1 add 201.48.151.195


# ipfw table 1 delete 201.48.151.195

#$fw add allow tcp from "table(1)" to me dst-port 22 in recv $ife


####################### STATEFULL DINAMICO ######################

############################EXEMPLOS ############################
# PERMITE SSH
# FIREWALL ATOMICO { IP or IP } / { recv INTERFACE or INTERFACE }
# $fw add pass tcp from { 201.48.151.206 or 201.48.151.205 } to me
dst-port 22 in recv $ife
#
# OUTRA FORMA OTIMIZADA - LENDO OS 24 BITS DA REDE MAIS 8 BITS
#PARA O ULTIMO OCTETO
# $fw add pass tcp from 201.48.151.190/24{201,202} to me dst-port
22 in recv $ife
#
# LENDO RANGES DE IP
# $fw add pass tcp from 201.48.151.190/24{201,202,205-240} to me
dst-port 22 in recv $ife
#
#$fw add pass tcp from 201.48.151.206,201 to me dst-port 22 in
recv $ife
#$fw add deny tcp from any to me dst-port 22 in
#
# PERMITE APACHE NA LAN E WEB HTTPS
#$fw add pass tcp from 201.48.151.192/27 to me dst-port 80 in recv
$ife
#$fw add deny log logamount 1000 tcp from any to me
#
# OUTRA ABORDAGEM: NEGAR A QUEM NAO EH DE DIREITO
# $fw add pass tcp from not 201.48.151.190/24{201,202,205-240} to
me dst-port 22 in recv $ife
#
#
# DNS (TODOS PODEM CONSULTAR, MAS SOMENTE SLAVES (TCP) PODEM
TRANSFERI ZONAS
#
#################################################################
#
# POLITICA: FECHADA
#
$fw add 65534 deny all from any to any

Você também pode gostar