Construir meu próprio firewall, em Java ou outra linguagem de alto nível?

3

Postei uma pergunta no ServerFault sobre uma empresa especializada Configuração do firewall , mas como um ávido desenvolvedor de software, também estou pensando em criar o meu próprio.

Estou interessado apenas em usar uma linguagem de alto nível, preferencialmente Java ou Node.JS. Existe algum sistema para Linux ou Illumos que levará todos os pacotes de rede e os fornecerá ao meu aplicativo para determinar se eles devem ser permitidos, descartados ou recusados? (ou reescrito)

Estou interessado apenas em pacotes ICMP, UDP e TCP. Eu estou prevendo que eu iria escrever um aplicativo Java, que me permitiria farejar o tráfego para determinar se ele deveria ser permitido. Por exemplo, no tráfego HTTP, posso querer verificar o cabeçalho Host para determinar qual site o navegador está tentando visitar.

Eu sei que isso provavelmente reduzirá o potencial de processamento, mas talvez a solução que vocês recomendam tenha documentação que me permita esclarecer o impacto dessa advertência.

É quase como se eu estivesse pedindo o FUSE, exceto firewalls em vez de sistemas de arquivos.

Existe algum programa desse tipo, ou eu estaria preso a escrever código C / C ++ para o firewall?

    
por George Bailey 08.07.2016 / 22:13

3 respostas

5

Em plataformas baseadas em Linux, há um soquete netlink que você pode abrir do seu programa Java e determinar se aceita ou não o pacote. Esse soquete pode ser incluído na pilha de rede com uma regra iptables . Aqui, é claro, você também pode limitar os tipos de pacotes a serem passados para o seu filtro de modo de usuário.

Veja o que o man page tem a dizer sobre o assunto:

ULOG

This target provides userspace logging of matching packets. When this target is set for a rule, the Linux kernel will multicast this packet through a netlink socket. One or more userspace processes may then subscribe to various multicast groups and receive the packets.

Devido à complexidade e sofisticação do projeto netfilter, pode valer a pena pedir soluções para o problema que você está tentando resolver. (Ou talvez seja o que sua outra questão de SE cobriu; eu ainda não olhei)

    
por 08.07.2016 / 22:39
4

No OpenBSD, o mecanismo divert(4) pode ser usado para enviar pacotes entre o kernel e um processo userland arbitrário escrito em uma linguagem arbitrária, supondo que a linguagem possa ser feita para interagir com a chamada do sistema (seja diretamente ou possivelmente através da complicação adicional de uma camada de proxy shim divert(4) -para qualquer coisa-IPC-obrigatório) a linguagem é uma droga nas chamadas do sistema).

    
por 08.07.2016 / 22:54
3

É totalmente plausível que um firewall possa ser construído em Java, mas é muito improvável que seja um projeto organizado que funcione nas velocidades que os sistemas de rede exigem.

Eu costumava trabalhar para uma empresa que fazia um appliance de segurança de rede que funcionava com o SecureBSD. Todas as alterações que fizemos no ipchains precisaram ser analisadas com cuidado porque o tráfego foi filtrado em tempo real. Mesmo uma perda muito pequena de desempenho pode ser catastrófica.

    
por 10.07.2016 / 21:02