← miniProxy
Changelog
47 versãoões no total.
-
2.27.0
Adicionado
- Cloudflare - modo global (Flexible sempre ativo): toggle na pagina
Cloudflare que trata qualquer dominio como atras da CF quando a conexao vem de
um IP real do Cloudflare (cf_src) — pega o IP real do visitante e atende o
SSL Flexible na :80 sem loop, sem precisar marcar dominio por dominio.
Seguro contra spoof (so confia se a origem estiver nas faixas da CF). O
"recusar acesso direto" (lockdown) continua por-dominio.
Alterado / desempenho
- Interface mais leve com o tempo aberta. Dashboard: polling pausa quando a
aba esta em segundo plano (document.hidden) e retoma ao voltar
(visibilitychange); graficos atualizam sem animacao (update('none'));
historico passa de 2s para 10s. - Coleta de stats de 2s para 5s (menos escrita e ~2,5x menos linhas por
consulta; ostats.dbencolhe conforme os dados antigos saem pela retencao de
3 dias) e SQLite em modo WAL (leitor/escritor nao se bloqueiam — menos
travadas na interface sob concorrencia).
- Cloudflare - modo global (Flexible sempre ativo): toggle na pagina
-
2.26.2
Corrigido
- Editar lista (dominio/UA) ainda quebrava ao abrir pelo menu (URL com hash).
Obootstrap.bundlecarrega depois do script da pagina; ao entrar via
#dom-lists/#ua-lists, oshowTabFromHash()chamavanew bootstrap.Tab()
no load, antes do bootstrap existir — a excecao interrompia o script e os mapas
UA_LISTS/DOM_LISTSnunca eram atribuidos. AgorashowTabFromHashignora o
bootstrap ausente e a ativacao da aba e adiada para oDOMContentLoaded.
- Editar lista (dominio/UA) ainda quebrava ao abrir pelo menu (URL com hash).
-
2.26.1
Corrigido
- Botao "editar" de listas (dominio e UA) quebrado com
Uncaught SyntaxError: Unexpected end of input. Oonclickembutia{{ ...|tojson }}, cujas aspas
duplas do JSON fechavam o atributoonclick="..."e cortavam o script. Agora
os dados vao em mapasDOM_LISTS/UA_LISTSnum<script>(contexto seguro) e
oonclickpassa apenas o nome da lista.
- Botao "editar" de listas (dominio e UA) quebrado com
-
2.26.0
Corrigido (outage de SSL)
- Renovacao parcial nao publica mais nada = corrigido. Uma unica lineage com
DNS morto faziacertbot renewsair != 0;renew_certs()eapi_renew_certs()
entao davamreturnANTES de recombinar os pem, e nenhum dos certs renovados
com sucesso era publicado no HAProxy (10 de 13 dominios serviram cert expirado
por ate 4 dias). Agora a publicacao roda SEMPRE, por lineage, e falha parcial
vira resultado parcial + aviso — nunca abort total. - Escrita atomica do pem: o
open(pem,"w")truncava no lugar e so fazia
chmoddepois (janela com a chave privada 0644 e pem truncado visivel a um
reload concorrente). Novo helperpublish_cert_to_haproxy()escreve em tmp
0600 no mesmo dir e fazos.replaceatomico; pula se o conteudo nao mudou.
Adicionado
- Hooks de renovacao do certbot (causa raiz): deploy hook publica cada
lineage renovada no HAProxy (atomico, idempotente, ignora certs de staging do
--dry-run) e sinaliza; post hook validahaproxy -ce recarrega uma unica
vez. Instalados pelosetup.she tambem auto-instalados no boot do painel
(para servidores atualizados via rsync sem rerodar o setup), removendo o hook
legado que recarregava a cada lineage.certbot.timerhabilitado. - Painel de Certificados: dias restantes com destaque (vermelho expirado /
amarelo < 15 dias), deteccao de drift (o HAProxy serve um cert mais velho
que o certbot ja renovou em/etc/letsencrypt/live) com botao Republicar,
e um botao geral Republicar do Let's Encrypt (recombina tudo sem chamar o
certbot). - Deteccao de lineage orfa: dominios em
/etc/letsencrypt/renewalque nao
resolvem no DNS e/ou nao estao no HAProxy sao listados com acao de remover
(certbot delete+ apaga o pem) — e o gatilho que dispara o outage.
Alterado
- O bloco fullchain+privkey -> pem estava duplicado em 5 lugares (add_domain,
generate_cert, renew_certs, api_generate_cert, api_renew_certs, provision);
todos passam a usar o helper unicopublish_cert_to_haproxy().
- Renovacao parcial nao publica mais nada = corrigido. Uma unica lineage com
-
2.25.0
Adicionado
- Tela de Dominios: servidores do backend inline + busca. Cada dominio agora
mostra os servidores do seu backend (nome, IP:porta, status, backup, maxconn)
e permite adicionar / remover / habilitar-desabilitar servidores ali mesmo
(reusa as APIs/api/backends/*), com aviso de que a edicao afeta todos os
dominios que compartilham o backend. Novo campo de busca filtra os cards
por hostname, backend ou IP.
Corrigido / robustez
- Atualizacao mais confiavel: apos o
rsync, o reinicio do servico agora tem
fallback (systemd-run e, se falhar, processo destacado) e loga se nao conseguir.
A tela de Atualizacao passa a comparar a versao rodando vs. a versao em disco
e, quando divergem (arquivos ja atualizados mas servico ainda na versao antiga),
mostra um aviso "reinicie para concluir" com botao de Reiniciar agora — evita
o caso em que o update aplica os arquivos mas o processo antigo continua servindo
templates/codigo em cache.
- Tela de Dominios: servidores do backend inline + busca. Cada dominio agora
-
2.24.0
Adicionado
- Gateway de saida (NAT) na pagina Configs: card para usar este servidor como
gateway de internet das VMs da rede interna. Ligaip_forward+ masquerade
(nftables, table propriamp_gateway) da(s) rede(s) interna(s) escolhida(s)
saindo pela interface publica, com opcao de firewall de encaminhamento
(restrito/liberado). Persistente no boot (sysctl.d + unit systemd), validado
comnft -cantes de aplicar, e reversivel (desativar remove tudo). - Menu Tuning renomeado para Configs.
Corrigido
- Loop de redirect (302) para IPs da whitelist: o
http-request allow if trusted_srcencerrava o processamento das regras antes dosset-header X-Forwarded-Proto https, entao o backend (ex.: Magento) achava que a
requisicao era HTTP e redirecionava pra HTTPS em loop. Os cabecalhos
X-Forwarded-Proto/Port/For+X-Real-IPagora sao setados dentro do bloco
da whitelist, antes doallow— corrige o loop e tambem o IP real do cliente
nos logs do backend para IPs confiaveis.
- Gateway de saida (NAT) na pagina Configs: card para usar este servidor como
-
2.23.0
Alterado
- "Lista de confianca" virou "Whitelist" — e agora libera de tudo: IPs/faixas
na whitelist passam sem qualquer bloqueio, limite ou inspecao (blocklist global,
bloqueio temporario de IP, rate-limit, regras condicionais e WAF). Implementado
comohttp-request allow if trusted_srcno topo do ft_https (logo apos o bloco
Cloudflare, com o IP real ja resolvido, e antes de todas as defesas). Antes so
isentava rate-limit, bloqueio manual de IP e WAF. O escape para liberar
Googlebot, webhooks de pagamento, monitoramento ou o proprio IP sem quebrar nada.
- "Lista de confianca" virou "Whitelist" — e agora libera de tudo: IPs/faixas
-
2.22.1
Alterado
- Trafego enxuto, Regras centraliza a seguranca: "Lista de confianca"
(allowlist), "Blocklist global (IP/UA)" e "Limite de requisicoes por dominio"
sairam da pagina Trafego e viraram abas/sub-itens da pagina Regras. A
pagina Trafego fica so com o monitoramento ao vivo de requisicoes por IP e o
bloqueio temporario de IP por dominio. O menu "Regras" passa a ter: Condicoes,
Listas de UA, Listas de dominio, Lista de confianca, Blocklist global e Limite
por dominio.
- Trafego enxuto, Regras centraliza a seguranca: "Lista de confianca"
-
2.22.0
Adicionado
- Regras condicionais por dominio (estilo firewall da Cloudflare): pagina
"Regras" com construtor de regra combinando condicoes por E (todas
precisam bater) com opcao de negacao ("nao e"), e acao Bloquear (403),
Permitir (excecao) ou Limitar (429). Tipos de condicao: pais
(geoip), path/URL (comeca com / contem), User-Agent (substring),
lista de UA e IP/CIDR. Varias regras por dominio sao avaliadas de cima
pra baixo — a primeira que casar vence (Permitir acima de um bloqueio funciona
como excecao). Cada regra tem contador de matches ao vivo e log por
regra (via marcador no log-format do HAProxy), com modal listando IP, hora,
status, metodo e path. - Listas de User-Agent reutilizaveis: listas nomeadas de UAs usadas nas
regras pela condicao "Lista de UA" (casa se o UA contiver qualquer item). - Listas de dominio: agrupam varios dominios (apenas dominios ja
configurados no HAProxy, via checkboxes) para servir de alvo de uma
regra — a regra vale pra todos os dominios da lista de uma vez. - Pagina de fallback "Dominio nao disponivel" (host guard): acesso pelo IP
do servidor, com Host ausente, ou por dominio apontado por DNS mas nao
criado no HAProxy agora recebe uma pagina de erro branded do miniProxy (404)
em vez de cair nodefault_backende servir o vhost padrao do backend. A lista
de dominios validos (valid_hosts.lst) e mantida em sincronia automaticamente;
o desafio ACME continua liberado para emitir SSL de dominios novos. - Bypass ACME (
/.well-known/acme-challenge/): allow no topo dos frontends
para a emissao/renovacao de SSL nunca ser barrada por restricoes do dominio
(blocklist, geoblock, rate-limit, WAF, regras). - Menu lateral reorganizado: secoes Infraestrutura / Seguranca / Sistema;
"Regras" colapsavel com sub-itens (Condicoes, Listas de UA, Listas de dominio)
e secao "Sistema" colapsavel para ocupar menos espaco; "Sair" fixo no rodape.
Card "Regras" na Dashboard com o numero de regras ativas.
Alterado
- /traffic simplificado: "Geoblock por dominio", "Bloqueio de User-Agent por
dominio" e "Limite de requisicoes por User-Agent por dominio" sairam da pagina
Trafego e passaram a ser feitos pela pagina Regras (condicoes pais / UA /
lista de UA + acoes Bloquear/Limitar), evitando duplicidade.
- Regras condicionais por dominio (estilo firewall da Cloudflare): pagina
-
2.21.0
Adicionado
- Contadores de bloqueio na Dashboard: card "Bloqueios" com o total ativo e
detalhamento (IP + User-Agent global/por dominio + bloqueios temporarios),
linkando para a pagina Bloqueios; e card "Rate-limit UA" com o numero de regras
de throttle por User-Agent, linkando para Trafego. Calculo leve (le os arquivos
de estado, sem varrer log).
- Contadores de bloqueio na Dashboard: card "Bloqueios" com o total ativo e
-
2.20.0
Adicionado
- Pagina "Bloqueios" (log dos bloqueios), com duas visoes:
- Historico de acoes (auditoria): registra cada bloqueio/desbloqueio feito
pelo painel ou pela API — quando, acao, alvo, detalhe e por quem. Cobre IP,
User-Agent (global e por dominio), import de lista e bloqueio temporario de
IP. Inclui itens ja removidos. Guardado em/etc/haproxy/blocklist-audit.jsonl
(auto-poda nas ultimas 5000 linhas), com filtro de busca. - Eventos 403: requisicoes que foram barradas de verdade (status 403),
lidas do log de acesso do HAProxy (IP, dominio, metodo, path), com busca e
modo ao vivo. (O log-format nao inclui User-Agent — avisado na tela.) - Limite de requisicoes por User-Agent (por dominio): throttle (429) de um
User-Agent num dominio, com contador agregado por UA (todos os IPs somam),
casando por substring em minusculas. Stick-table string por dominio (sc2),
separado do rate-limit por IP (sc1) — dá pra ter os dois no mesmo dominio.
IPs da lista de confianca sao isentos.
-
2.19.0
Adicionado
- Tema claro com alternancia: botao no rodape da barra lateral troca entre
claro/escuro; preferencia salva no navegador (localStorage) e aplicada antes
de pintar a tela (sem flash). O logo troca junto com o tema. Paleta clara via
variaveis CSS (data-bs-theme="light"); caixas de terminal/log seguem escuras
nos dois temas de proposito. - Bloqueio de User-Agent por dominio (importar lista): na pagina "Trafego",
cola-se uma lista de User-Agents (1 por linha, ex.: do.htaccess) e escolhe-se
os alvos — "Todos os dominios" (blocklist global) e/ou dominios especificos.
Casa por substring em minusculas (ahrefsbotpegaAhrefsBot/7.0). Cada
dominio tem seu proprio mapa (/etc/haproxy/ua-block/<dominio>.map) e uma regra
de deny que casa host + UA; a lista bloqueada aparece por dominio, com remocao
individual. Remover o ultimo UA de um dominio apaga o mapa e a regra some.
- Tema claro com alternancia: botao no rodape da barra lateral troca entre
-
2.18.0
Adicionado
- Blocklist global de IP e User-Agent (aplicada em ft_http e ft_https):
- API REST sob
/haproxy-admin/api/blocklist/ipe/blocklist/ua
(GET lista, POST bloqueia, DELETE desbloqueia; resposta{"ok":...}).
Autenticada (sessao do painel ou HTTP Basic para automacao). - Efeito imediato sem reload via Runtime API (
add/del mapno socket
admin) + persistencia nos arquivos.map; metadados (motivo/timestamp)
num sidecar/etc/haproxy/blocklist-meta.json. - IP casa endereco/CIDR (
map_ip); User-Agent casa substring em minusculas
(map_sub, ex.:ahrefsbotpegaAhrefsBot/7.0). - Bloco de deny inserido nos frontends apos o Cloudflare (src ja e o IP real
por tras da CF) e antes dosuse_backend; instalado sob demanda no primeiro
bloqueio (um reload) e depois so runtime. Maps criados no boot. - Validacao: IP via
ipaddress.ip_network; UA normalizado (minusculas,
strip, <=200 chars, sem espacos/quebras); entrada sanitizada antes do socket. - Tela na pagina "Trafego" (secao "Blocklist global"): listas de IP e
User-Agent com motivo, adicao e remocao, reusando o mesmo backend da API.
-
2.17.0
Adicionado
- Nova pagina "Logs" — central unica de todos os logs gerados no servidor:
- Visualizador ao vivo com dropdown de fontes: acesso HTTP do HAProxy,
WAF Coraza (matches + auditoria), servico do painel e do HAProxy (journald),
e um item por proxy TCP quando a separacao esta ligada. Filtro de texto,
nº de linhas e modo "ao vivo". Cai para o journald quando o arquivo nao
existe (servidores journald-only). - Retencao por fonte: edita os arquivos reais do logrotate
(/etc/logrotate.d/*) — dias a guardar + compressao on/off — validando com
logrotate -dantes de gravar. Lista os arquivos de cada fonte (inclui os
rotacionados.gz) com tamanho e download (restrito aos diretorios de
log, com protecao contra path traversal), e botao "Rotacionar agora". - Separacao de logs TCP por porta: cada
listen tcp_<nome>recebe
log-tag haproxytcp-<nome>e uma regra rsyslog roteia porprogramname
para/var/log/haproxy-tcp/<nome>.log(antes ficavam misturados no
haproxy.log). Ativacao/desativacao reversivel pela interface, com
validacao (haproxy -c) e reload.
Corrigido / robustez
- Detecta servidores journald-only (sem rsyslog instalado): a separacao de
logs TCP se recusa a ativar com mensagem clara em vez de reportar sucesso
falso, e a pagina orienta a usar o journald do servicohaproxy.
-
2.16.0
Adicionado
- Nova pagina "Trafego" — modulo de observabilidade e defesa por dominio:
- Requisicoes por IP: lista os IPs que mais acessaram cada dominio nos
ultimos 30s/60s/120s/5min (lido do log de acesso do HAProxy, independente
do audit.log do WAF), com taxa normalizada em req/10s e atualizacao viva. - Bloqueio temporario de IP por dominio: bloqueia um ou varios IPs/CIDRs
num dominio por 10min/1h/6h/24h/7 dias. Expira sozinho via ACLdate()do
HAProxy (sem job de desbloqueio). Lista de bloqueios ativos com contagem
regressiva + desbloqueio manual, e historico das ultimas 24h. - Limite de requisicoes por dominio (rate-limit): define req/10s por IP
por dominio (stick-table dedicado por dominio, isolado dos demais); quem
passa do limiar recebe 429 automaticamente. - Geoblock por dominio (permitir-so): aceita so visitantes dos paises
escolhidos; o resto recebe 403. Seletor de paises com busca e checkboxes
(231 paises). Faixas de IP (IPv4+IPv6) baixadas do ipdeny.com e cacheadas
em/etc/haproxy/geoip/, com botao de atualizar. - Lista de confianca (allowlist): IPs/prefixos isentos de rate-limit,
bloqueio de IP e geoblock — o escape para liberar Googlebot, webhooks de
pagamento, pixel do Facebook etc. sem quebrar SEO/checkout. - WAF - exclusoes por path: exclusoes globais por prefixo de URI
(global_path_exclusions, sem checar dominio) e exibicao/remocao das
exclusoes por dominio+path na interface, alem de contador de eventos
bloqueados recentes.
Alterado
- Estado dos novos recursos em arquivos proprios:
/etc/haproxy/ip-blocks.json,
rate-limits.json,geoblock.json,traffic-allowlist.lst. Todos os blocos
nahaproxy.cfgsao gerenciados entre marcadores, validados comhaproxy -c
e aplicados com backup + reload gracioso. - Genericizacao de plataforma: removidas as mencoes de "CWP" e "Magento" da
interface e do codigo (rotulos, comentarios e exemplos passam a ser
neutros), para o painel servir a qualquer plataforma. Os nomes de
backend/servidor dahaproxy.cfgdo usuario nao sao tocados.
-
2.15.0
- Auto-atualizacao via minirepo: aba Atualizacao com check de versao e
update remoto (baixa pacote, aplica comrsyncpreservando dados, reinicia).
- Auto-atualizacao via minirepo: aba Atualizacao com check de versao e
-
2.14.0
- Rebrand para miniProxy (logos, favicon e nome em toda a interface).