PORTEIRO v2.0
Shell Script · Nginx · Open Source · MIT

Porteiro
— Nginx IP Access Control

Mantém /phpmyadmin/ e rotas sensíveis bloqueadas para a internet inteira. Libera acesso apenas para o IP detectado via SSH, com Auto-Off automático. Zero dependências externas.

0
dependências
<5min
instalação
MIT
licença
5
comandos
porteiro-on· porteiro-off· porteiro-status· porteiro-list· porteiro-revoke· multi-rota· auto-off por ip· nginx validation· audit log· telegram optional· ubuntu · debian· porteiro-on· porteiro-off· porteiro-status· porteiro-list· porteiro-revoke· multi-rota· auto-off por ip· nginx validation· audit log· telegram optional· ubuntu · debian·

Uso básico

# instalar
$ git clone https://github.com/henriquetourinho/porteiro && cd porteiro
$ sudo bash install.sh
 
# abrir acesso pelo IP da sessão SSH atual
$ sudo porteiro-on 2h
  ✓ Acesso liberado.
  IP : 189.x.x.x
  Rotas : /phpmyadmin/ /adminer/
  Off em: 2h
 
# listar IPs autorizados
$ sudo porteiro-list
  189.x.x.x — aberto 14:32:01
 
# revogar IP específico sem afetar outros
$ sudo porteiro-revoke 189.x.x.x
 
# fechar tudo
$ sudo porteiro-off
  — Bloqueado.
$

Referência de comandos e recursos

porteiro-on [tempo] Detecta o IP via $SSH_CLIENT (fallback: who am i). Injeta no porteiro_ips.conf, valida com nginx -t e recarrega. Aceita 30, 30m, 2h.
porteiro-off Limpa o arquivo de IPs e recarrega o Nginx. Fecha o acesso para todos os IPs imediatamente.
porteiro-status Exibe estado atual, IPs ativos, rotas protegidas e últimas entradas do log. Notifica via Telegram se configurado.
porteiro-list Lista todos os IPs autorizados no momento com data e hora de abertura. Lê direto do porteiro_ips.conf e do log — sem banco de dados.
porteiro-revoke <IP> Remove o acesso de um IP específico sem afetar os demais. Valida formato IPv4, escapa input antes do sed, registra REVOGADO no log.
Auto-Off por IP Timer individual por admin via at, com tag #porteiro-IP. O Auto-Off de um admin não cancela o dos outros nem afeta jobs externos do servidor.
Multi-rota Proteja /phpmyadmin/, /adminer/, /wp-admin/ ou qualquer rota. Um arquivo porteiro_ips.conf compartilhado — um comando libera tudo.
Nginx validado Roda nginx -t antes de qualquer reload. Se a config estiver quebrada, aborta com mensagem clara — nunca derruba o servidor.
Log de auditoria Cada evento registrado em /var/log/porteiro.log. Logrotate configurado automaticamente — rotação mensal, retenção de 6 meses.
Telegram (opcional) Notificação a cada on, off e status. Configure TELEGRAM_TOKEN e TELEGRAM_CHAT_ID no porteiro.conf. Deixe em branco para desativar.
porteiro-on [tempo] porteiro-off porteiro-status porteiro-list porteiro-revoke <IP>

Fluxo de execução

01 — SSH

Conectar ao servidor

A variável $SSH_CLIENT expõe o IP da sessão automaticamente. Fallback para who am i — funciona em tmux, screen e sudo su.

02 — ON

sudo porteiro-on

IP injetado em /etc/nginx/porteiro_ips.conf. Nginx validado com nginx -t e recarregado. Multi-IP: cada admin tem sua própria entrada.

03 — ACCESS

Rotas liberadas

Todos os blocos location com include porteiro_ips.conf ficam acessíveis para o IP autorizado. O resto do mundo recebe 403.

04 — OFF

Auto-Off automático

O at agenda porteiro-revoke <IP> com tag #porteiro-IP. Timer individual por admin. Esqueceu? O Porteiro não esquece.

Recurso Sem Porteiro Com Porteiro
/phpmyadmin/ exposto ✗ Sempre ✓ 403
Força bruta ✗ Possível ✓ Bloqueado
Esqueceu a porta ✗ Problema ✓ Auto-Off
Multi-rota ✗ Manual ✓ Wizard
Revogação por IP ✗ Não ✓ porteiro-revoke
Log de auditoria ✗ Não ✓ Sim
Dependências ✓ Zero

3 passos. Ubuntu / Debian.

01 — Clonar
$ git clone https://github.com/henriquetourinho/porteiro.git
$ cd porteiro
02 — Instalar
$ sudo bash install.sh
  # wizard interativo: escolha de rotas e Telegram (opcional)
  ✓ Instalado em /opt/porteiro/
03 — Configurar Nginx
# cole o bloco gerado pelo instalador no seu site Nginx:
 
location ^~ /phpmyadmin/ {
    include /etc/nginx/porteiro_ips.conf;
    deny all;
    location ~ \.php$ { ... }
}
 
$ sudo nginx -t && sudo systemctl reload nginx
  ✓ Porteiro de plantão.
Pronto para instalar?
Open Source · MIT · Ubuntu / Debian · Rocky / Alma / CentOS
↗ Ver no GitHub
"Código aberto.
Porta fechada."
— Carlos Henrique Tourinho Santana · Salvador, Bahia

Perguntas frequentes

Não — ele age na camada HTTP do Nginx; o firewall age na camada de rede. Os dois se complementam. Use ambos.

Sim. O porteiro-on sempre lê o IP atual da sessão SSH ativa. Cada execução adiciona o novo IP sem remover os anteriores.

Não. Cada porteiro-on agenda um porteiro-revoke <IP> com tag #porteiro-IP específica. Quando o timer expira, só aquele IP é revogado.

Não. Deixe TELEGRAM_TOKEN e TELEGRAM_CHAT_ID em branco no porteiro.conf. As notificações são ignoradas silenciosamente.

O arquivo /etc/nginx/porteiro_ips.conf é compartilhado por todos os blocos location. Um porteiro-on libera tudo; um porteiro-off bloqueia tudo.

O Auto-Off fecha após o tempo configurado (padrão: 1 hora), mesmo que você feche o terminal.

Sim: sudo SSH_CLIENT='SEU_IP 0 0' porteiro-on. A variável $SSH_CLIENT normalmente só existe em sessões SSH remotas.