Fazendo um firewall com Raspberry

fw

Recentemente fiz um firewall para um amigo. A rede doméstica dele necessitava de um certo grau de segurança, o roteador não é do tipo que roda WRT e sua rede também é composta por wireless. Para dar a segurança necessária a um determinado host (e quaisquer outros que estejam do lado protegido) fiz um firewall Linux usando Raspberry Pi. O processo foi o seguinte:

 

Meio físico

– Um case nao é fundamental, mas fica melhor do que jogado.
– Um dungle ethernet será necessário para fazer a segunda interface de rede.
– Um fonte de tablet (é o ideal por ser 5v 2A. Mais detalhes aqui)
– Dissipador (não é fundamental, mas ajuda. Mais detalhes aqui)
– um teclado USB ou wireless, apenas para uso durante a configuração.

Raspbian

Instale um sistema de verdade do Raspberry. O título é sugestivo, você pode baixá-lo em Raspberry.org. Procedimento para instalação da imagem pode ser encontrada aqui.




Conceito do firewall

Rapidamente, vou explicar como funciona o firewall do Linux pra ver que não é pouca merda.

Netfilter

O firewall do Linux se chama Netfilter. Ele reside no kernel space, de forma que não pode ser manipulado. O kernel (para quem não sabe) é o núcleo do sistema operacional; o cérebro que gerencia todo o hardware. O kernel tem seu espaço específico onde nenhum programa pode tocar, de forma a ser 100% protegido.

A interface de rede tem seu próprio processamento, onde recompõe bits em bytes, bytes em quadros, quadros em pacotes e então repassa para a próxima camada do modelo OSI. Trocando em miúdos (detesto miúdos), isso significa que antes de entrar no sistema operacional, existe um pré-processamento no hardware. Quando esses dados são recompostos, o kernel interage com o hardware através dos protocolos estabelecidos no driver da ethernet em questão. Somente após isso esse fluxo de dados é repassado ao sistema no user space. E isso é o que faz do Linux um firewall excepcional! Uma vez que o netfilter está no kernel space e o que sai da interface ethernet tem que passar primeiramente pelo kernel, não há a menor possiblidade de fazer um bypass como em determinados sistemas operacionais que o firewall é um “porgrama”. Isso possibilita uma blindagem na segurança do sistema operacional quanto à filtragem de pacotes. Mas como determinar as regras que o netfilter deve seguir para a filtragem de pacotes?

IPtables

O IPtables é a ferramenta do user space que interage com o netfilter. Aí você pergunta: “O kernel space não é isolado?” – SIm, é. O IPtables cria um conjunto de predefinições que coloca em uma tabela, então dispara um evento para o kernel. O kernel se encarrega de ir até a região de memória da tabela e ler as regras, então aplicá-las, desde que dentro do protocolo.

Em relação à composição de regras, dá pra fazer uma infinidade de coisas, mas sua aplicação realmente depende da necessidade, portanto, se você conseguir chegar aos ‘ovos de páscoa’ contidos nesse firewall, você é um cara de sorte. Eu me orgulho em dizer que já contemplei alguns.

Para um firewall doméstico, esse conjunto de regras dispostas a seguir são o suficiente:

 

Basicamente, esse conjunto de regras determina que o repasse de pacotes originados em uma interface sejam permitidos a trafegar através de outra (talvez um tutorial específico seja uma boa idéia, se tiverem interesse, manifestem-se). Depois entram as regras, iniciando em bloqueio absoluto. Então entra o mascaramento, isto é, todas as estações da rede local sairão pelo interface externa do firewall com o IP do firewall. Para um firewall doméstico é a melhor opção para evitar roteamentos, acredite.

Seguidamente, uma regra permite que toda a rede local possa trafegar através do firewall e por fim, somente pacotes reconhecido como tráfego legítimo (chamado de stateful).

Esse conjunto de regras descritos devem ser guardados em um arquivo, por exemplo, firewall.sh. Eu normalmente guardo esse arquivo em /etc. Para fazê subir junto com o sistema tem um monte de modos para fazê-lo, então se você é adepto de outro meio, faça do seu jeito.

Com o arquivo devidamente criado, mude suas permissões e propriedade:

 

E insira sua chamada em um arquivo rc do sistema:

Reinicie o sistema e veja (como root) se as regras foram estabelecidas:

Minha última citação a respeito é relacionado ao throughput. Quanto processamento um firewall Linux necessita? Bem, eu digo que se você não estiver abrindo pacotes para ler strings (que é uma aberração que incluiram no iptables), o processamento necessário é tanto quanto a sua interface ethernet processa – ou seja, praticamente nenhum. Por isso você vai utilizar um firewall em Raspberry com a mesma eximia que um desktop ou seja lá qual hardware for.

Aí está seu firewall!

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Próximo post a caminho!




Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Deixe uma resposta