Pesquisar

Guilherme M.

(0.0 - 0 avaliações)

Projetos concluídos: 0 | Recomendações: 0 | Registrado desde: 12/12/2025

Projetos (Aguardando Propostas):

  • Desenvolvimento de proxy HTTPS transparente (SNI Filter) para pfSense 2.8.1

    Outra - Web, Mobile & Software | Orçamento: Aberto | Publicado: | Propostas: 4

    Este documento descreve, em detalhes, o escopo completo do desenvolvimento de um pacote/módulo para pfSense baseado em FreeBSD 15.x. O objetivo é criar um proxy HTTPS transparente capaz de inspecionar o IP de origem e o hostname (via SNI) para aplicar políticas de bloqueio/liberação com registro de logs e integração futura à interface web do pfSense.

    Visão Geral

    - **Nome do pacote:** `sni_filter_proxy`
    - **Plataforma alvo:** pfSense 2.8.1 (FreeBSD 14.x)
    - **Linguagens preferenciais:** C/C++ (alternativamente Go/Rust, desde que compatível e com bom desempenho)
    - **Funcionamento:** Proxy TLS transparente (porta 443) que captura o ClientHello, extrai o SNI, cruza com o IP de origem e aplica regras do tipo allow/block. Todas as decisões devem ser registradas em log.
    - **Requisito crítico:** o serviço precisa rodar como daemon e possuir script rc.d completo (start/stop/reload/status) para garantir persistência após reboots.
    ---

    ## Requisitos Funcionais

    ### 1. Core do Proxy
    - Interceptar conexões TCP/443 (HTTPS) via redirecionamento `pf`.
    - Ler a mensagem TLS ClientHello para extrair o hostname (SNI).
    - Registrar IP de origem e SNI e checar contra as regras definidas.
    - Aplicar **allow** ou **block** com prioridade para allow; ausência de regra implica allow.
    - Ao bloquear, encerrar a conexão rapidamente (RST) sem alertar o usuário.

    ### 2. Regras e Configurações
    - Arquivo principal: `/usr/local/etc/sni_filter/access_rules.txt`.
    - Formato da linha: `[tipo];[ip de origem/cidr ou *];[hostname ou *]`.
    - Suporte a IPv4/IPv6 e hostnames com wildcard (`*.dominio.com`).
    - Implementar recarga das regras em runtime via sinal `SIGHUP`.
    - Manter estrutura thread-safe ou processos múltiplos conforme necessário para atender a várias conexões.

    ### 3. Logs
    - Local padrão: `/var/log/sni_filter_proxy.log`.
    - Cada entrada precisa conter: timestamp, IP de origem, hostname e ação final (allow/block/erros).
    - Manter o log rotativo via `newsyslog` (documentar sugestões) e garantir permissões corretas.

    ---

    Fases de Entrega

    ### Fase 1 – Daemon + Serviço rc.d
    1. Implementar o daemon (processo CLI executável em FreeBSD) com:
    - Proxy TCP transparente.
    - Parser de TLS ClientHello/SNI.
    - Engine de regras conforme formato acima.
    - Logging estruturado.
    - Tratamento de sinais (SIGHUP ? reload, SIGTERM ? shutdown limpo).
    2. Entregar script rc.d completo em `/usr/local/etc/rc.d/sni_filter_proxy` com funções `start/stop/restart/status/reload`.
    3. Produzir documentação detalhando:
    - Dependências.
    - Comandos de build (`make`/`gmake`).
    - Instalação manual (copiar binário + configs + script rc.d).
    - Como configurar regras e testar com `openssl s_client`.

    Fase 2 – Integração GUI no pfSense
    1. Criar arquivos xml/php necessários para expor o serviço em **Services > SNI Filter Proxy**:
    - Formulário para editar as regras (`access_rules.txt`), campos de configuração (porta, timeout etc.).
    - Botões para `start/stop/reload/status` e visualização das últimas linhas do log.
    2. Integrar com o `config.xml` do pfSense:
    - Salvar as regras na seção própria e sincronizá-las com o arquivo físico.
    - Garantir que o `rc.d` seja acionado conforme o usuário aplica mudanças.
    3. Descrever, em documentação, como empacotar o módulo (Makefile do pacote, `pkg-descr`, `pkg-plist`) para distribuição pelo Package Manager do pfSense.

    Instruções para os Desenvolvedores

    1. **Referência:** utilizar o pacote `e2guardian` para pfSense como base de estrutura e boas práticas (organização, integração com GUI, scripts de instalação).
    2. **Organização do código:** manter padrão profissional com diretórios `src/`, `include/`, `scripts/`, `docs/`, `config/`.
    3. **Testes:**
    - Fornecer testes unitários/automatizados quando aplicável (ex.: parser de regras, parser SNI).
    - Documentar testes manuais com `openssl s_client` simulando cenários allow/block e recarga.
    4. **Segurança:** validar inputs (regras, hostnames) para evitar crashes; tratar conexões sem SNI com bloqueio seguro.

    Entregáveis Esperados

    1. Código-fonte completo do daemon (C/C++ ou Go/Rust) com instruções de build.
    2. Script rc.d funcional para instalação em `/usr/local/etc/rc.d/`.
    3. Arquivo de regras de exemplo e instruções para criação de diretórios/configs.
    4. Documentação Fase 1:
    - Passo a passo de build/instalação/teste.
    - Comandos para start/stop/reload e verificação de logs.
    5. Documentação Fase 2:
    - Guia de implementação dos arquivos xml/php e do package para pfSense.
    - Descrição de como a GUI salva/aplica regras e interage com o daemon.
    6. Checklist de testes (CLI e GUI) para validar o comportamento antes da entrega final.

    Critérios de Aceite

    - Daemon roda estavelmente no pfSense 2.8.1, reiniciando automaticamente via rc.d.
    - Regras são aplicadas corretamente (allow prioritário, block quando aplicável, fallback allow).
    - Logs registram todas as conexões analisadas, ações e recargas.
    - `SIGHUP` recarrega as regras sem interromper conexões em andamento.
Carregando...

Carregando...

Pesquisar

FREELANCERS
PROJETOS
Ocorreu um erro inesperado. Caso o erro persista, entre em contato conosco através do e-mail suporte@99freelas.com.br.