IP allowlist
A IP allowlist controla quais servidores podem chamar a API do mxout. Antes de qualquer verificação de token, o mxout avalia o IP do cliente e rejeita com 403 os que não constam na lista.
O IP do cliente é lido do header X-Forwarded-For (o mxout fica atrás do Traefik). Na ausência do header, usa o IP da conexão TCP.
Lista vazia = aberta
Quando a lista não tem nenhuma entrada, qualquer IP é aceito. Esse é o estado inicial — útil para validar a instalação antes de restringir o acesso.
Após confirmar que a integração funciona, adicione os IPs ou faixas dos seus servidores e a lista fecha automaticamente para externos.
Formato das entradas
Cada entrada é um IP solto ou um bloco CIDR, em IPv4 ou IPv6:
| Formato | Exemplo |
|---|---|
| IP único IPv4 | 198.51.100.7 |
| Bloco CIDR IPv4 | 203.0.113.0/24 |
| IP único IPv6 | 2001:db8::1 |
| Bloco CIDR IPv6 | 2001:db8::/32 |
Os exemplos nesta página usam faixas da RFC 5737 (203.0.113.x, 198.51.100.x), reservadas para documentação e sem roteamento real.
Autenticação
Esses endpoints usam o mesmo header dos demais: X-Auth-Token comparado com MXOUT_AUTH_TOKEN. A checagem de allowlist ocorre antes da checagem de token, portanto um IP bloqueado recebe 403 e nunca chega à validação do token.
GET /allowlist
Retorna a lista atual de IPs e faixas CIDR permitidos.
Resposta
| Código | Condição |
|---|---|
| 200 | Sucesso. allowlist contém as entradas configuradas (vazia = aberta). |
| 401 | Token ausente ou inválido. |
Exemplo
curl -s \
-H "X-Auth-Token: {TOKEN}" \
https://mxout.203.0.113.x/allowlistResposta com entradas configuradas (HTTP 200):
{
"allowlist": ["203.0.113.0/24", "198.51.100.7"]
}Resposta quando a lista está vazia, ou seja, aberta (HTTP 200):
{
"allowlist": []
}PUT /allowlist
Substitui a lista inteira pelas entradas enviadas no corpo. Para reabrir o acesso a todos os IPs, envie uma lista vazia.
Corpo da requisição
{
"allowlist": ["203.0.113.0/24", "198.51.100.7"]
}O campo allowlist é obrigatório e deve ser um array de strings. Cada string é validada como IP ou CIDR antes de persistir.
Resposta
| Código | Condição |
|---|---|
| 200 | Lista salva com sucesso. |
| 400 | Uma ou mais entradas são inválidas. O campo entry indica qual falhou. |
| 401 | Token ausente ou inválido. |
| 500 | Falha ao persistir a lista no disco. |
Exemplo — definir faixas permitidas
curl -s -X PUT \
-H "Content-Type: application/json" \
-H "X-Auth-Token: {TOKEN}" \
-d '{"allowlist": ["203.0.113.0/24", "198.51.100.7"]}' \
https://mxout.203.0.113.x/allowlistResposta (HTTP 200):
{
"ok": true
}Exemplo — reabrir para todos (lista vazia)
curl -s -X PUT \
-H "Content-Type: application/json" \
-H "X-Auth-Token: {TOKEN}" \
-d '{"allowlist": []}' \
https://mxout.203.0.113.x/allowlistExemplo — entrada inválida
curl -s -X PUT \
-H "Content-Type: application/json" \
-H "X-Auth-Token: {TOKEN}" \
-d '{"allowlist": ["não-é-um-ip"]}' \
https://mxout.203.0.113.x/allowlistResposta (HTTP 400):
{
"error": "bad_cidr",
"entry": "não-é-um-ip"
}Aviso: não se tranque para fora
Ao preencher a lista pela primeira vez, inclua o IP do servidor ou da aplicação que chama o mxout. Se esquecer, esse servidor passa a receber 403 em todas as chamadas.
A recuperação é simples: como a lista vazia reabre o acesso, basta enviar um PUT /allowlist com "allowlist": [] a partir de qualquer IP. Depois corrija a lista com as entradas corretas.
Recursos relacionados
- GET /check — valida DNS dos domínios remetentes.
- POST /send — envia mensagens via SMTP com assinatura DKIM.
- Autenticação — detalhes sobre
X-Auth-TokeneMXOUT_AUTH_TOKEN.