11.07.2015 Views

Firewalls em Sistemas BSD Unix

Firewalls em Sistemas BSD Unix

Firewalls em Sistemas BSD Unix

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

AgendaIntrodução/ConceitosOpções disponíveisConfigurações/Prática


ConceitosModelosPreventivoReativo


Preventivo + ReativoOnde estão os ativosPontos de vulnerabilidadeSegurança FísicaPolítica de SegurançaAtualização de Sist<strong>em</strong>as


Preventivo + ReativoTreinamentoEducaçãoBackupIdentificação de Ameaças


Política de SegurançaConteúdoExplicaçõesLinguag<strong>em</strong> simplesAutoridadeResponsabilidade de todosProbl<strong>em</strong>as não relacionados acomputadores


Tecnologias de FirewallFiltrag<strong>em</strong> de PacotesServiços de ProxyNAT (Network Address Translation)VPN (Virtual Private Networks)


Arquiteturas de FirewallRoteadoresBastion HostsSubredes


Pago ou Feito <strong>em</strong> Casa?


Estratégias de SegurançaMenor PrivilégioDefesa <strong>em</strong> ProfundidadeSegurança por Obscuridade


Opções DisponíveisSist<strong>em</strong>as OperacionaisFree<strong>BSD</strong>Net<strong>BSD</strong>Open<strong>BSD</strong><strong>Firewalls</strong>IPFILTERIPFWPF


Free<strong>BSD</strong>RobustoEstávelSeguroLimpo


IPFILTERLeveEstávelPortado para outros sist<strong>em</strong>as <strong>Unix</strong>Curva de aprendizado baixa


PF e Open<strong>BSD</strong>Próximo Evento..


HardwareQualquer Pentium?32, 64, 128MB de RAM..4GB de HD2 ou mais interfaces de redeMelhor hardware = MaiorestabilidadeQualidade dos componentes


Instalando o Free<strong>BSD</strong>Instalação básica, seguindo o roteiro:http://www.abdv.net/roteiro.htmlAtualização do sist<strong>em</strong>aAjustes no /etc/rc.confsshd_flags=“-4”syslogd_flags=“-ss”


Como particionar o disco?Particionamento do disco/ - 128MBSwap – Por volta de 2 x a m<strong>em</strong>ória RAM/var – 256MB/tmp – 256MB/usr – Restante do disco


Compilação do Kernel parasuporte ao IPFILTERFontes <strong>em</strong> /usr/src/sys/i386/confArquivo de configuração padrão:GENERICVamos criar nosso próprio arquivo:cp GENERIC SERVER (nome da suamáquina)vi SERVERLocalize a entrada ident GENERIC porident SERVER


Compilação do Kernel parasuporte ao IPFILTERLocalize a entrada “options INET6” e,logo abaixo, insira:options IPFILTERoptions IPFILTER_LOGEdite o arquivo /etc/make.conf e adicionea linha:KERNCONF=SERVER


Compilação do Kernel parasuporte ao IPFILTERCompilando e instalando o kernel:make buildkernelmake installkernelmake cleanEspere 1 minuto, próximo slide porfavor...shutdown -r now


IPFILTERConfigurações no /etc/rc.confipfilter_enable=“YES”ipfilter_flags=“”ipmon_enable=“YES”ipmon_flags=“-Dsv”ipnat_enable=“YES”Verifique se o IPFILTER “subiu”:dmesg | grep Filter


IPFILTERMais configurações <strong>em</strong> /etc/rc.confpara trabalhar com o IPFILTER:gateway_enable=“yes”ifconfig_lo0=“127.0.0.1”network_interfaces=“xl0 xl1 lo0”icmp_drop_redirects=“YES” (parareduzir DoS)


IPFILTEROutras opções de incialização doIPFILTER, IPNAT e IPMON:/etc/defaults/rc.conf


Criando aquivos de logsseparados para o IPFILTER# touch /var/log/firewall_logs# chmod 600 /var/log/firewall_logs# vi /etc/syslog.conf, acrescente:security*. /var/log/firewall_logs# vi /var/log/messages, acrescente:security.noneRotacione os logs, # vi /etc/newsyslog.conf,adicione a linha:/var/log/firewall_logs 600 14 100 * J /var/log/ipmon.pidReinicialize o da<strong>em</strong>on syslogd


Conceitos básicos para criaros arquivos de regrasFiltrag<strong>em</strong> egressa (egress filtering)Interfaces: interna e externaMúltiplos critérios de filtrag<strong>em</strong>in/out, block/pass, protoA palavra-chave “quick”Leitura das regras:Top – downFirst match wins (using “quick”)Arquivo de regras do IPFILTER: /etc/ipf.rulesArquivo de regras do IPNAT: /etc/ipnat.rules


etc/ipf.rulesNosso primeiro conjunto de regras:pass in allblock in all


etc/ipf.rulesControlando as regras com apalavra-chave “quick” (first matchwins)block in quick allpass in all


etc/ipf.rulesFiltrag<strong>em</strong> básica por endereço:block in quick from 10.3.18.20/32 to anypass in all


etc/ipf.rulesFiltrag<strong>em</strong> por interfaceNossas Interfaces: xl0 (interna) e xl1(externa)pass in allblock in quick on xl0 allInterface + endereço IPblock in quick on xl0 from 10.3.18.20/32 to anypass in all


etc/ipf.rulesComportamento padrão definido nacompilação do kernel (block ou pass)Filtrag<strong>em</strong> bi-direcional, palavrachaveoutpass out quick on xl1 from 10.3.18.4/32 to anyblock out quick on xl1 from any to anyAinda estamos “stateless”


etc/ipf.rulesRegistrando o que acontece com apalavra-chave “log”pass out quick on xl1 from 10.3.18.0/24 to anyblock in log quick on xl1 from any to any


etc/ipf.rulesAo criar as regras, l<strong>em</strong>bre-se, ospacotes entram (in) e sa<strong>em</strong> (out) decada interfaceAinda t<strong>em</strong>os mais alguns critériospara filtrag<strong>em</strong>, até aqui filtramos porinterface, por endereço e fiz<strong>em</strong>oslog.


etc/ipf.rulesFiltrag<strong>em</strong> por protocolo, palavrachave“proto”block in log quick on xl0 proto icmpblock in log quick on xl0 proto udp


etc/ipf.rulesPortas TCP e UDP, a palavra-chave“port”block in quick on xl0 proto tcp from any to10.3.18.30/24 port = 25block in quick on xl0 proto udp from any to10.3.18.0/24 port = 514


etc/ipf.rulesConjunto completo de regras“stateless”pass in on xl0 from 10.3.18.0/24 to anypass out on xl0 from 10.3.18.0/24 to anypass in on xl1 from 10.3.18.0/24 to anypass out xl1 from 10.3.18.0/24 to any


etc/ipf.rulesPermissão implícita - “keep state”Conexões têm: início, meio e fimFiltramos o inícioTabela de estadospass out quick on xl0 proto tcp from any to any keep state(agora sim, estamos “stateful”)


etc/ipf.rulesStateful UDPComo se o UDP não é orientado àconexão?60s na tabela de estadosServiço de DNSStateful ICMPMesma idéiapass out quick on xl1 proto icmp from any to anyicmp-type 8 keep state


etc/ipf.rulesDetectando scan FINPalavra-chave “flags”pass in quick on xl1 proto tcp from any to10.3.18.6/32 port = 22 flags S keep stateExceção: pacotes fragmentadosPara resolver usamos “keep frags”pass in quick on xl1 proto tcp from any to 10.3.18.6/32port = 22 flags S keep state keep frags


etc/ipf.rulesRespondendo a um pacote bloqueadoCom TCP – RST (Reset). Nossa palavrachave:“return-rst”block return-rst in log on xl1 proto tcp from anyto 10.3.18.6/32 port = 22block in log quick on xl1Atenção! Apenas para TCP, por issoprecisamos da segunda regra block paradescartar os pacotes UDP e ICMP“connection refused” ao invés de“connection timed out”


etc/ipf.rulesRespondendo pacotes UDPbloqueadosUse as mensagens ICMP (return-icmp)block return-icmp(port-unr) in log quick on xl1 protoudp from any to 10.3.18.6/32 port = 111


etc/ipf.rulesProbl<strong>em</strong>a, a regra anterior retorna oendereço IP do firewall! Para evitarisso usamos a seguinte sintaxe:block return-rst-as-dest(port-unr) in log on xl1 protoudp from any to 10.3.18.6/32 port = 111Cuidado com as respostas: flood


NAT e ProxiesFalta de endereçamentoReescrevendo o endereço de saídamap xl1 10.3.18.0/24 -> 200.100.1.10/32Para endereços dinâmicos:map tun0 10.3.18.0/24 -> 0/321 pra 1map xl1 10.3.18.9/32 -> 200.100.1.11/32


NATPolicy NATmap tun0 from 10.3.18.0/24 ! to 200.1.2.0/24 ->200.100.1.2/32map tun0 from 10.3.18.1/32 port = 5555 to 199.2.6.1/32-> 200.100.1.3/32


NATOferecendo serviços atrás do firewallatravés de redirect (rdr)rdr xl1 200.1.2.3/32 port 80 -> 10.3.18.5 port = 80 tcprdr xl1 200.1.2.3/32 port 22 -> 10.3.18.7 port = 22 tcp


Filtrando serviçosredirecionados com rdrNão basta criar o redirect, precisamoscriar as regras para permitir a entrada<strong>em</strong> /etc/ipnat.rules:rdr xl1 200.1.2.3/32 port = 80 -> 10.3.18.5 port = 80 tcp<strong>em</strong> /etc/ipf.rules:pass in quick on xl1 proto tcp from any to 10.3.18.5/32 port= 80 flags S keep state* O NAT ocorre antes da filtrag<strong>em</strong>..


Algumas “mágicas” do NATProxies de AplicaçãoControle de sessões FTPmap xl0 10.3.18.0/24 -> 200.100.1.3/32 proxy portftp ftp/tcpBalanceamento de carga Palavra-chave “round-robin”rdr xl1 200.100.1.3/32 port 80 -> 10.3.18.6, 10.3.18.7port 80 tcp round-robin


Carregando e Manipulando asregrasO utilitário ipf:-F Flush (i, input; o, output; a, all)-f -V versão do IPFILTERO utilitário ipnat:-l mostra as entradas da tabela NAT-C apaga as entradas NAT carregadas,exceto as que estão ativas-F apaga as entradas NAT carregadas-f


Monitorando e DepurandoO utilitário ipfstat:S<strong>em</strong> flags – mostra informaçõesinteressantes, estatísticas-i lista as regras de input-o lista as regras de output-h hit count-n número da regra-s dump da tabela de estados


Monitorando e DepurandoO utilitário ipmonMostra o que está acontecendo <strong>em</strong>t<strong>em</strong>po real-o especifica qual dos logs ler (N – NAT, S– state log, I – normal IPFilter)-a lê todos os logs ao mesmo t<strong>em</strong>po,equivale a -o NSI


Conjunto completo de regrasChecklist:Quais as minhas interfaces de redeO que pretendo bloquear/liberar?Pretendo fazer mudanças nas regras comfrequência?Qual a carga que este equipamentosuporta?Tenho muitos usuários?


Conjunto de regras “stateful”pass in quick on xl0 from 10.3.18.0/24 to any keep statepass out quick on xl1 from 10.3.18.0/24 to any keepstate


Mais segurançaVocê quer mais segurança?Edite seu /etc/fstab (mas faça um backupantes – cp /etc/fstab /etc/fstab.bkp)Todos as suas partições (exceto a deswap e /dev/acd0) dev<strong>em</strong> estar rw –READ/WRITE


Mais SegurançaModifique para o seguinte:/ ufs rw,nosuid 1 1/tmp ufs rw,noexec,nosuid,nodev 2 2/usr ufs ro 2 2/usr/home ufs rw,noexec,nosuid 2 2/usr/local ufs ro,nosuid 2 2/var ufs rw,noexec,nosuid 2 2Observe que o layout das partições édiferente ao sugerido no início dest<strong>em</strong>aterial, mas isso não impede quefaçamos uma configuração restritiva


Exercícios PráticosObtenha os seguintes dados da suamáquina:Nome da interface de redeEndereço IPPortas no estado “listening” (abertas)


Exercícios PráticosCrie um conjunto de regras quesatisfaça as seguintes condições:Permita a saída do tráfego nas interfaceslocais (incluindo a de loopback)Permita a entrada de tráfego SSH apenaspara as máquinas à sua esquerda e à suadireita (quando aplicável)Bloqueie o tráfego para os d<strong>em</strong>ais Ips damesma classe de endereços da suaBloqueie o tráfego para as redes declasses privadas (10.0.0.0/8)


Exercícios PráticosApós o t<strong>em</strong>po limite de criação deregras tente conectar-se à qualquermáquina da rede via SSH, casoobtenha sucesso anote o endereço IP.Obtenha informações (IP) a partir doslogs ou <strong>em</strong> t<strong>em</strong>po real das máquinasque estão tentando conectar-se à sua,caso você detecte falhas tente corrigilas<strong>em</strong> t<strong>em</strong>po real.


Exercícios PráticosInstale o scanner de segurança NMAPatravés do comando:# pkg_install -r nmapDigite nmap -h, leia com atenção asopções e faça as seguintes operaçõesnos endereços IP da sua rede:Tente descobrir a versão dos programas<strong>em</strong> execução na máquina r<strong>em</strong>otaFaça um scan do tipo PingFaça scan de TCP connect(), TCP SYNFaça scan de portas UDP


Exercícios PráticosUtilizando os utilitários do IPFILTERcolha os seguintes dados estatísticosdo seu firewall:Input packetsOutput packesA versão do IPFILTER


Exercícios PráticosSugestão:Use vários terminais para agilizar suasoperações de scan e monitoramentoAntes de tentar conectar-se à outrasmáquinas certifique-se de que a sua estáb<strong>em</strong> protegidaSe estiver <strong>em</strong> dificuldades não trabalhesozinho, procure ajuda


Isto foi só o início, agora é porsua conta..Configurar um firewall leva t<strong>em</strong>po, épreciso fazer muitos testes para tercerteza de que tudo está comoplanejado. L<strong>em</strong>bre-se, segurança é umprocesso contínuo, não um produto.Você encontra esta apresentação e outrosartigos atualizados <strong>em</strong>:http://www.abdv.netalex.vasconcelos@gmail.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!