El Nodo de Interoperabilidad entregado por Gobierno Digital posee dos puertos de acceso, uno externo diseñado para responder peticiones desde otros organismos públicos y uno interno para recibir las peticiones de su propio organismo.
Ese puerto interno tiene varias opciones de seguridad que le permitirán administrarlo y ajustarlo mejor a su organización y casos de uso.
Toda las directivas de seguridad del Nodo se definen en el archivo config.json el cual viene preconfigurado pero se le pueden agregar secciones específicas para agregar diferentes formas de protegerlo de accesos no autorizados.
A continuación se detallan 5 opciones de seguridad que se pueden aplicar al puerto interno del Nodo de la Red de interoperabilidad PISEE.
En el archivo config.json del Nodo se debe crear la sección ipPermitidas, donde se puede agregar la lista blanca de IPs que pueden acceder al servidor interno del Nodo.
Esta sección se agrega en: servidores -> interno -> seguridad
Si la sección “seguridad” no existe, la debe crear.
{
"nodo": {
"id": "Nodo-Ejemplo",
"allowHiddenFeatures": false
},
"servidores": {
"interno": {
"puerto":"8084",
"tps": 20,
"backlog": 4,
"seguridad": {
"ipPermitidas": ["172.20.10.1", “172.20.10.27”]
}
},
Cuando se requiere que una aplicación consulte datos al Nodo directamente desde un navegador web se debe activar en el Nodo la posibilidad de permitir peticiones cruzadas CORS (ver más sobre CORS).
En el archivo config.json del Nodo se debe crear la sección “cors”, donde se puede agregar los orígenes que se permitirá que consulten. Si se desea permitir cualquier origen se coloca el wildcard “*”
Esta sección se agrega en: servidores -> interno -> seguridad
Si la sección “seguridad” no existe, la debe crear.
{
"nodo": {
"id": "Nodo-Ejemplo",
"allowHiddenFeatures": false
},
"servidores": {
"interno": {
"puerto":"8084",
"tps": 20,
"backlog": 4,
"seguridad": {
"cors": "*"
}
},
La interfaz web del Nodo está principalmente diseñada para hacer consultas locales desde la misma red local o desde la misma máquina donde se instale el Nodo, pero existen casos donde puede ser necesario que accedan desde fuera de la red.
Para permitir esto es necesario hacerle saber al Nodo cual es la IP externa, para que la interfaz pueda hacer las consultas al nodo con la ruta correcta.
Esto no es recomendado pero queda a criterio del TI a cargo de cada organismo y dependerá de si cuenta con otras medidas de seguridad (firewalls).
Se debe agregar una sección “selfpath” que indique cual es la IP externa o DNS al cual llegar al servidor local del Nodo .
Esta sección se agrega en: servidores -> interno
{
"nodo": {
"id": "Nodo-Ejemplo",
"allowHiddenFeatures": false
},
"servidores": {
"interno": {
"puerto":"8084",
"tps": 20,
"backlog": 4,
"selfpath": "45.239.120.205"
},
El puerto interno del Nodo es donde se recibirán todos los mensajes de su institución y como se presume que está en un ambiente sin acceso a terceros no exige credenciales de seguridad, pero si su organismo lo considera necesario puede hacer que el nodo exija credenciales de seguridad en cada petición local entrante.
Para hacer esto se debe agregar una sección “passwordHTTPBasico” donde van el usuario y su credencial separados por un “:”. Esta credencial es única y es la misma para todos los servicios locales que pueda consultar ese nodo.
Esta sección se agrega en: servidores -> interno -> seguridad
{
"nodo": {
"id": "Nodo-Ejemplo",
"allowHiddenFeatures": false
},
"servidores": {
"interno": {
"puerto":"8084",
"tps": 20,
"backlog": 4,
"seguridad": {
"passwordHTTPBasico": "miusuario:miclave"
}
},
Y ahora toda petición que se le haga al Nodo al puerto interno debe ir con la cabecera “X-PISEE-LocalAuthorization” y en ella el valor “miusuario@miclave” donde usuario y password van separados por un @.
Sin en valor correcto en esa cabecera entregará un error código http 401 - Forbidden
El servidor local del Nodo puede controlar la cantidad de transacciones por segundo que las aplicaciones de su organismo le realicen para limitar el consumo de los servicios externos a los que accede el Nodo.
Si se quiere modificar ese valor se debe cambiar la sección “tps” que indica cual es la cantidad permitida de transacciones por segundo del servidor local.
Esta sección se encuentra en: servidores -> interno
{
"nodo": {
"id": "Nodo-Ejemplo",
"allowHiddenFeatures": false
},
"servidores": {
"interno": {
"puerto":"8084",
"tps": 20,
"backlog": 4,
},
El parámetro “backlog” le permite al Nodo recibir una carga superior a las indicadas en “tps” encolandolas momentáneamente, pero debe ser un valor no muy grande, sirviendo solo para evitar errores puntuales de sobrecarga, pero si requiere mayor encolamiento se debe implementar un sistema más robusto para esto.