Arquivo da categoria: Kernel

O Hypervisor

Hypervisor, ou Monitor de Máquina Virtual (VMM) é uma camada de software entre o hardware e o sistema operacional, que permite executar múltiplos sistemas operacionais em um mesmo equipamento ao mesmo tempo. O VMM controla o acesso dos sistemas hóspedes aos dispositivos de hardware e dá a cada máquina virtual a ilusão de que ela está sendo executada em um hardware próprio.

É interessante notar que o hypervisor não executa em modo usuário, pois é ele que deve executar, ou simular a execução, das instruções privilegiadas requisitadas pelo sistema operacional visitante.

Existem basicamente dois tipos de hypervisors: O primeiro é o que roda diretamente sobre o hardware, a expressão usada é “on bare metal”, ou “direto no metal”.

O segundo é um software que roda dentro do ambiente do sistema operacional.

Também existe um tipo híbrido, que roda diretamente sobre o hardware mas executa cada máquina virtual como um processo no sistema hospedeiro.

O trabalho do hypervisor é alocar recursos para os hosts hóspedes, isola-los uns dos outros, fornecer interfaces de dispositivos portáteis e limpas, ou seja, fornecer máquinas virtuais que possam ser utilizadas de forma eficiente. Para fazer tudo isso ele deve ocupar uma posição privilegiada no sistema.

Em um sistema tradicional, não virtualizado, o sistema operacional ocupa uma posição privilegiada em relação aos aplicativos que rodam no nível de usuário. Para permitir isso, na maioria das arquiteturas de processadores, existem pelo menos dois níveis de privilégio. O sistema operacional então executa em um nível de prioridade maior do que o dos aplicativos dos usuários, forçando assim que estes aplicativos a “seguir regras”, ou a “respeitar a hierarquia”.

No caso de ambientes virtualizados, o hypervisor trabalha neste nível alto de prioridade.


netfilter/iptables turbinado com layer7

Layer7 é um excelente plugin para o netfilter/iptables que trabalha na camada de aplicação, dando maior flexibilidade ao firewall. Este é um tutorial para aplicação do patch no kernel e no iptables.

baixar fontes do kernel (http://kernel.org)

baixar fontes do layer7 e os protocolos (http://sourceforge.net/projects/l7-filter)

baixar fontes do iptables (http://www.netfilter.org)
ftp://ftp.netfilter.org/pub/iptables/

descompactar kernel em /usr/src
descompactar layer7 e protocolos em /usr/src/layer7

aplicar patch do layer7:
cd /usr/src/linux
patch -p1 < /usr/src/layer7/netfilter-layer7-v2.9/kernel-2.6.18-2.6.19-layer7-2.9.patch

configurar o kernel: make menuconfig

habilitar as opções: (copiado descaradamente do blog do César Domingos)
Networking –>
Networking options –>
[*] Network packet filtering framework (Netfilter) –>
[*] Bridged IP/ARP packets filtering
Core Netfilter Configuration —>
<M> Netfilter netlink interface
<M> Netfilter NFQUEUE over NFNETLINK interface
<M> Netfilter LOG over NFNETLINK interface
<M> Netfilter connection tracking support
-*- Connection tracking flow accounting
-*- Connection mark tracking support
[*] Connection tracking security mark support
[*] Connection tracking events (EXPERIMENTAL)
<M> SCTP protocol connection tracking support (EXPERIMENTAL)
<M> UDP-Lite protocol connection tracking support (EXPERIMENTAL)
<M> Amanda backup protocol support
<M> FTP protocol support
<M> H.323 protocol support (EXPERIMENTAL)
<M> IRC protocol support
<M> NetBIOS name service protocol support (EXPERIMENTAL)
<M> PPtP protocol support
<M> SANE protocol support (EXPERIMENTAL)
<M> SIP protocol support (EXPERIMENTAL)
<M> TFTP protocol support
<M> Connection tracking netlink interface (EXPERIMENTAL)
{M} Netfilter Xtables support (required for ip_tables)
<M> “CLASSIFY” target support
<M> “CONNMARK” target support
<M> “DSCP” target support
<M> “MARK” target support
<M> “NFQUEUE” target Support
<M> “NFLOG” target support
<M> “NOTRACK” target support
<M> “TRACE” target support
<M> “SECMARK” target support
<M> “CONNSECMARK” target support
<M> “TCPMSS” target support
<M> “comment” match support
<M> “connbytes” per-connection counter match support
<M> “connlimit” match support”
<M> “connmark” connection mark match support
<M> “conntrack” connection tracking match support
<M> “DCCP” protocol match support
<M> “DSCP” match support
<M> “ESP” match support
<M> “helper” match support
<M> “length” match support
<M> “limit” match support
<M> “mac” address match support
<M> “mark” match support
<M> IPsec “policy” match support
<M> Multiple port match support
<M> “physdev” match support
<M> “pkttype” packet type match support
<M> “quota” match support
<M> “realm” match support
<M> “sctp” protocol match support (EXPERIMENTAL)
<M> “state” match support
<M> “layer7″ match support
[ ] Layer 7 debugging output
<M> “statistic” match support
<M> “string” match support
<M> “tcpmss” match support
<M> “time” match support
<M> “u32″ match support
<M> “hashlimit” match support

IP: Netfilter Configuration —>
<M> IPv4 connection tracking support (required for NAT)
…… (Tem mais opções antes)
<M> Full NAT
<M> MASQUERADE target support
<M> REDIRECT target support
<M> NETMAP target support
<M> SAME target support (OBSOLETE)
<M> Basic SNMP-ALG support (EXPERIMENTAL)

Criar pacote .deb para instalar o kernel:
make-kpkg –revision=1 –append-to-version=-hbueno kernel_image

Criar ram drive para não dar pau na inicialização:
make-kpkg –append-to-version=“-hbueno” –initrd –us –uc kernel_image

Instalar o kernel:
dpkg -i linux-image-2.6.23.12-hbueno_1_i386.deb

Reinicie a máquina com o novo kernel

Decompactar fonte do iptables e entrar no diretório descompactado em /usr/src/layer7
Aplicar patch do layer7 no iptables:
patch -p1 < /usr/src/layer7/netfilter-layer7-v2.17/iptables-1.4-for-kernel-2.6.20forward-layer7-2.17.pa
chmod 755 extension/.layer7-test
make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux

A instalação do layer7 no iptables está finalizada. Vamos agora instalar os protocolos.
cd /usr/src/layer7/l7-protocols-xxxx
make install

Exemplo de regra para testar:
iptables -A FORWARD -m layer7 –l7proto bittorrent -j DROP