Configuración de Proxy para Consultas al SII
Introducción al Proxy
Un proxy es un servidor intermediario que actúa como puente entre tu aplicación y los servicios externos. En el contexto de API Gateway, utilizamos proxies para distribuir las consultas al SII (Servicio de Impuestos Internos) desde diferentes direcciones IP, evitando así restricciones y limitaciones de uso.
¿Por qué necesitamos un proxy?
API Gateway es la plataforma líder en Chile que ofrece servicios web que el SII no proporciona directamente. Debido al alto volumen de consultas que procesamos, el SII puede implementar límites de uso basados en direcciones IP para controlar el acceso a sus servicios.
Cuando el SII restringe o limita las consultas desde una IP específica, esto puede afectar a múltiples usuarios. Un proxy resuelve este problema permitiendo que las consultas se realicen desde direcciones IP alternativas, distribuyendo la carga y minimizando el impacto de las restricciones.
Beneficios del uso de proxy:
- Aislamiento de restricciones: Si una IP es limitada, solo afecta a los usuarios de ese proxy específico.
- Mayor disponibilidad: Si la IP principal está restringida, los proxies permiten continuar operando.
- Distribución de carga: Reduce la presión sobre una sola dirección IP.
Funcionamiento del Proxy
Un proxy funciona como un intermediario inteligente en la comunicación entre aplicaciones:
- Cliente → API Gateway: El cliente envía la consulta a API Gateway.
- API Gateway → Proxy: API Gateway envía la consulta al proxy.
- Proxy → SII: El proxy reenvía la consulta al SII.
- SII → Proxy: El SII responde al proxy.
- Proxy → API Gateway: El proxy entrega la respuesta a API Gateway.
- API Gateway → Cliente: API Gateway entrega la respuesta al cliente.
El proxy debe estar ubicado en una red pública accesible desde API Gateway. En este tutorial utilizaremos Squid, un proxy HTTP/HTTPS robusto y ampliamente utilizado, pero puedes implementar cualquier solución compatible.
Opciones de despliegue:
- Servidores propios: Infraestructura on-premise.
- Servicios en la nube: Google Cloud Platform (tiene región en Chile), AWS, Azure, etc.
- Proveedores locales: Otros servicios con presencia en Santiago de Chile.
Configuración de Squid con Docker
Utilizaremos Docker para simplificar la implementación del proxy Squid. Crea un directorio para tu proyecto y sigue estos pasos:
1. Archivo Docker Compose
Crea un archivo docker-compose.yml
con la siguiente configuración:
services:
squid:
image: ubuntu/squid:latest
container_name: squid
restart: unless-stopped
volumes:
- "./squid.conf:/etc/squid/squid.conf:ro"
- "./passwords:/etc/squid/passwords:ro"
ports:
- "3128:3128"
Nota importante: El puerto 3128 es el puerto estándar de Squid. Si necesitas usar un puerto diferente, asegúrate de modificarlo tanto en el docker-compose.yml
como en el archivo de configuración squid.conf
. Este puerto debe ser accesible desde Internet o al menos desde los servidores de API Gateway.
2. Configuración de Squid
Crea el archivo squid.conf
en el mismo directorio:
# Configuración de autenticación.
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm Proxy
# Definir ACL para usuarios autenticados.
acl authenticated proxy_auth REQUIRED
# Definir ACL para dominios del SII (recomendado para seguridad).
acl sii_domains dstdomain .sii.cl
# Permitir acceso solo a usuarios autenticados y solo a dominios del SII.
http_access allow authenticated sii_domains
# Denegar todas las demás solicitudes.
http_access deny all
# Escuchar en el puerto 3128.
http_port 3128
Nota de seguridad: La configuración anterior incluye una restricción que limita el uso del proxy únicamente a dominios del SII (.sii.cl
). Esto es altamente recomendado para evitar el uso no autorizado del proxy para otros fines. Si necesitas acceder a otros dominios a través del proxy, puedes modificar o eliminar la línea acl sii_domains dstdomain .sii.cl
y cambiar http_access allow authenticated sii_domains
por http_access allow authenticated
.
3. Creación de Credenciales
Genera el archivo de contraseñas usando el comando htpasswd
:
htpasswd -c passwords <nombre_usuario> <contraseña>
Ejemplo:
htpasswd -c passwords admin mi_contraseña_segura
Recomendaciones de seguridad:
- Usa contraseñas fuertes (mínimo 12 caracteres).
- Combina mayúsculas, minúsculas, números y símbolos.
- Evita información personal en las credenciales.
4. Iniciar el Servicio
Ejecuta el siguiente comando para iniciar el proxy:
docker compose up -d
Verifica que el servicio esté funcionando correctamente:
docker compose ps
Configuración en API Gateway
Una vez que tu proxy esté funcionando, necesitas configurarlo en API Gateway:
1. Acceder a la Configuración
Ve a la configuración de tu perfil en API Gateway.
2. Configurar la URL del Proxy
En el campo Proxy URL, ingresa la siguiente información:
http://<nombre_usuario>:<contraseña>@<ip_proxy>:3128
Ejemplo:
http://admin:mi_contraseña_segura@example.com:3128
Parámetros:
<nombre_usuario>
: El usuario que creaste conhtpasswd
.<contraseña>
: La contraseña correspondiente.<ip_proxy>
: La dirección IP pública de tu servidor proxy.3128
: El puerto de Squid (cambia si usaste uno diferente).
3. Verificar la Configuración
Después de guardar la configuración, API Gateway comenzará a utilizar tu proxy para todas las consultas al SII. Esto significa que las consultas se realizarán desde la IP de tu proxy en lugar de la IP principal de API Gateway.
Para verificar que la configuración es correcta, realiza una consulta a la API y revisa la cabecera X-Stats-HttpClientProxy
en la respuesta. Si su valor es 1
, significa que el proxy está siendo utilizado. Si el valor es 0
, el proxy no se está usando; en ese caso, revisa la sección de problemas comunes más abajo.
Solución de Problemas
Problemas Comunes
1. Error de autenticación
- Verifica que las credenciales en API Gateway coincidan con las del archivo
passwords
. - Confirma que el archivo
passwords
esté correctamente montado en el contenedor.
2. Proxy no accesible
- Verifica que el puerto 3128 esté abierto en el firewall.
- Confirma que la IP del proxy sea accesible desde Internet.
- Revisa los logs de Docker:
docker compose logs squid
.
3. Consultas lentas
- Monitorea el uso de recursos del servidor proxy.
- Considera aumentar los recursos asignados al contenedor.
- Verifica la latencia de red entre API Gateway y tu proxy.
Comandos Útiles
# Reiniciar el proxy.
docker compose restart squid
# Ver logs en tiempo real.
docker compose logs -f squid
# Verificar estado del contenedor.
docker compose ps
# Acceder al contenedor para debugging.
docker compose exec squid bash
Con esta configuración, API Gateway utilizará tu proxy para todas las consultas al SII, distribuyendo la carga y reduciendo significativamente el riesgo de restricciones por IP. Esto garantiza un servicio más estable y confiable.