El conjunto de documentos para este producto aspira al uso de un lenguaje no discriminatorio. A los fines de esta documentación, "no discriminatorio" se refiere al lenguaje que no implica discriminación por motivos de edad, discapacidad, género, identidad de raza, identidad étnica, orientación sexual, nivel socioeconómico e interseccionalidad. Puede haber excepciones en la documentación debido al lenguaje que se encuentra ya en las interfaces de usuario del software del producto, el lenguaje utilizado en función de la documentación de la RFP o el lenguaje utilizado por un producto de terceros al que se hace referencia. Obtenga más información sobre cómo Cisco utiliza el lenguaje inclusivo.
Cisco ha traducido este documento combinando la traducción automática y los recursos humanos a fin de ofrecer a nuestros usuarios en todo el mundo contenido en su propio idioma. Tenga en cuenta que incluso la mejor traducción automática podría no ser tan precisa como la proporcionada por un traductor profesional. Cisco Systems, Inc. no asume ninguna responsabilidad por la precisión de estas traducciones y recomienda remitirse siempre al documento original escrito en inglés (insertar vínculo URL).
Este documento describe cómo utilizar un proxy inverso para acceder al escritorio de Cisco Finesse sin conectarse a una VPN basada en las versiones 12.6 ES03 de Cisco Finesse, Cisco Unified Intelligence Center (CUIC) y Cisco Identity Service (IdS).
Nota: Cisco no admite la instalación y configuración de Nginx. Las consultas relacionadas con este tema se pueden discutir en los foros de la comunidad de Cisco.
Nota: Para implementaciones ES03 de VPN-less, vea el léame de los componentes individuales para planificar las actualizaciones y verificar las restricciones de compatibilidad.
Léame de Cisco Finesse 12.6 ES03
Léame de CUIC / IdS 12.6 ES03
Cisco recomienda que tenga conocimiento sobre estos temas:
La información que contiene este documento se basa en las siguientes versiones de software y hardware.
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. Si tiene una red en vivo, asegúrese de entender el posible impacto de cualquier comando.
Nota: La configuración proporcionada en este documento se ha configurado, endurecido y se ha probado la carga con el proxy inverso de Nginx (OpenResty) implementado en CentOS 8.0, frente a una implementación UCCE de 2000 usuarios de muestra. La información de referencia del perfil de rendimiento está disponible en este documento.
Este modelo de implementación es compatible con las soluciones UCCE/PCCE y HCS para UCCE.
Se admite la implementación de un proxy inverso (disponible desde 12.6 ES01) como opción para acceder al escritorio de Cisco Finesse sin conectarse a una VPN. Esta función proporciona la flexibilidad necesaria para que los agentes accedan al escritorio Finesse desde cualquier lugar a través de Internet.
Para habilitar esta función, se debe implementar un par de proxy inverso en la zona desmilitarizada (DMZ).
El acceso a los medios permanece inalterado en las implementaciones de proxy inversas. Para conectarse a los medios, los agentes pueden utilizar la solución Cisco Jabber sobre acceso remoto y móvil (MRA) o la función de agente móvil de UCCE con una red telefónica pública conmutada (PSTN) o un terminal móvil. Este diagrama muestra cómo será la implementación de la red cuando se accede a dos clústeres Finesse y dos nodos CUIC a través de un único par de nodos proxy inversos de alta disponibilidad (HA).
Se admite el acceso simultáneo desde agentes en Internet y agentes que se conectan desde la LAN, como se muestra en esta imagen.
Nota: Consulte la guía de funciones para conocer los criterios de selección de proxy de terceros en lugar de Nginx para admitir esta implementación.
- Guía de Funciones de UCCE 12.6 - Proporciona una descripción general de la función, diseño, así como detalles de configuración para la Función VPN-less.
- Guía de seguridad de UCCE 12.6: proporciona directrices de configuración de seguridad para la implementación de proxy inverso.
Se recomienda revisar la sección VPN-less de la guía de funciones y la guía de seguridad antes de leer este documento.
Nota: Se recomienda quitar la configuración Nginx basada en ES01 existente antes de instalar las configuraciones Nginx ES03.
Nota: Los scripts de configuración ES03 también requieren la instalación de CoP ES03 correspondiente en Cisco Finesse, CUIC e IdS.
Finesse 12.6 ES03 introduce la autenticación en el proxy. La autenticación es compatible con implementaciones de inicio de sesión único (SSO) y no SSO.
La autenticación se aplica a todas las solicitudes y protocolos que se aceptan en el proxy antes de que se reenvíen a los servidores de componentes ascendentes, donde también se realiza la autenticación aplicada por los servidores de componentes localmente. Toda la autenticación utiliza las credenciales de inicio de sesión comunes de Finesse para autenticar las solicitudes.
Las conexiones persistentes, como los websockets que se basan en protocolos de aplicación como el protocolo de mensajería y presencia extensible (XMPP) para la autenticación y la conexión posterior, se autentican en el proxy validando la dirección IP desde la que se ha realizado una autenticación de aplicación correcta antes de establecer la conexión del socket.
La autenticación que no es de SSO no requiere ninguna configuración adicional y funcionará con los scripts de configuración de Nginx una vez que se realicen los reemplazos de script necesarios. La autenticación se basa en el nombre de usuario y la contraseña utilizados para iniciar sesión en Finesse. El acceso a todos los terminales se validará con los servicios de autenticación Finesse.
La lista de usuarios válidos se almacena en caché en el proxy localmente (actualiza la caché cada 15 minutos), que se utiliza para validar el usuario en una solicitud. Las credenciales del usuario se validan reenviando la solicitud al URI de Finesse configurado y, posteriormente, el hash de credenciales se almacena en caché localmente (en caché 15 minutos) para autenticar las nuevas solicitudes de forma local. Si hay algún cambio en el nombre de usuario o la contraseña, se aplicará solamente después de 15 minutos.
La autenticación SSO requiere que el administrador configure la clave de encripción del token de IdS en el servidor Nginx dentro del archivo de configuración. La clave de cifrado del token de IdS se puede obtener del servidor de IdS con el show ids secret
CLI. La clave debe configurarse como parte de uno de los reemplazos #Must-change que el administrador debe realizar en los scripts antes de que la autenticación SSO pueda funcionar.
Consulte la guía del usuario de SSO para las configuraciones de IdS SAML que se realizarán para que la resolución de proxy funcione para IdS.
Una vez configurada la autenticación SSO, se puede utilizar un par válido de tokens para acceder a cualquiera de los terminales del sistema. La configuración de proxy valida las credenciales interceptando las solicitudes de recuperación de tokens realizadas a IdS o descifrando tokens válidos y almacenándolos posteriormente en el caché local para futuras validaciones.
Las conexiones de Websocket no se pueden autenticar con el encabezado de autorización estándar, ya que los encabezados personalizados no son compatibles con las implementaciones nativas de websocket en el explorador. Los protocolos de autenticación de nivel de aplicación, donde la información de autenticación contenida en la carga útil no impide el establecimiento de la conexión de socket web, y por lo tanto, las entidades malintencionadas pueden provocar ataques DOS o DDOS creando innumerables conexiones para saturar el sistema.
Para mitigar esta posibilidad, las configuraciones de proxy inverso nginx proporcionadas tienen verificaciones específicas para permitir que las conexiones de websocket sean aceptadas SOLAMENTE desde aquellas direcciones IP que han realizado con éxito una solicitud REST autenticada antes del establecimiento de la conexión de websocket. Esto significa que los clientes que intentan crear conexiones de websocket antes de que se emita una solicitud REST, ahora recibirán un error de autorización fallida y no es un escenario de uso soportado.
Los scripts de autenticación 12.6 ES02 de Finesse previenen activamente los ataques de fuerza bruta que se pueden utilizar para adivinar la contraseña de usuario. Para ello, bloquea la dirección IP utilizada para acceder al servicio, después de un número determinado de intentos fallidos en poco tiempo. Estas solicitudes serán rechazadas por el error 418 del cliente. Se puede acceder a los detalles de las direcciones IP bloqueadas desde los archivos <nginx-install-directory>/logs/blocking.log y <nginx-install-directory>/logs/error.log.
Se puede configurar el número de solicitudes fallidas, el intervalo de tiempo y la duración del bloqueo. Las configuraciones están presentes en el archivo <nginx-install-directory>/conf/conf.d/maps.conf.
## These two constants indicate five auth failures from a client can be allowed in thirty seconds. ## if the threshold is crossed,client ip will be blocked. map $host $auth_failure_threshold_for_lock { ## Must-change Replace below two parameters as per requirement default 5 ; } map $host $auth_failure_counting_window_secs { ## Must-change Replace below two parameters as per requirement default 30; } ## This indicates duration of blocking a client to avoid brute force attack map $host $ip_blocking_duration { ## Must-change Replace below parameter as per requirement default 1800; }
Para encontrar las direcciones IP que están bloqueadas, ejecute los siguientes comandos desde el directorio <nginx-install-directory>/logs.
grep "will be blocked for" blocking.log
grep "IP is already blocked." error.log
2021/10/29 17:30:59 [emerg] 1181750#1181750: *19 [lua] block_unauthorized_users.lua:153: _redirectAndSendError(): 10.68.218.190 will be blocked for 30 minutes for exceeding retry limit., client: 10.68.218.190, server: saproxy.cisco.com, request: "GET /finesse/api/SystemInfo?nocache=1636456574482 HTTP/2.0", host: "saproxy.cisco.com:8445", referrer: "https://saproxy.cisco.com:8445/desktop/container/?locale=en_US&"
2021/10/29 19:21:00 [error] 943068#943068: *43 [lua] block_unauthorized_users.lua:53: 10.70.235.30 :: IP is already blocked..., client: 10.70.235.30, server: saproxy.cisco.com, request: "GET /finesse/api/SystemInfo?nocache=1635591686497 HTTP/2.0", host: "saproxy.cisco.com:8445", referrer: "https://saproxy.cisco.com:8445/desktop/container/?locale=en_US"
Se recomienda que los clientes se integren con Fail2ban o similar para agregar la prohibición a la tabla IP/reglas de firewall.
Fail2ban analiza los archivos de registro y prohíbe las IP que muestran los signos maliciosos: demasiadas fallas de contraseña, buscando vulnerabilidades, etc. En general, Fail2Ban se utiliza para actualizar las reglas de firewall para rechazar las direcciones IP durante un período de tiempo especificado, aunque también se puede configurar cualquier otra acción arbitraria (por ejemplo, enviar un correo electrónico). Para obtener más información, visite https://www.fail2ban.org/.
Fail2ban se puede configurar para monitorear el bloqueo.log para identificar las direcciones IP que son bloqueadas por Nginx en la detección de ataques de fuerza bruta y prohibirlas durante un tiempo configurable. Los pasos para instalar y configurar fail2ban en un proxy inverso de CentOS son los siguientes:
yum update && yum install epel-release
yum install fail2ban
Las configuraciones de la cárcel permiten al administrador configurar varias propiedades, como los puertos a los que se prohibirá el acceso por cualquier dirección IP bloqueada, la duración durante la cual la dirección IP permanece bloqueada, la configuración del filtro utilizada para identificar la dirección IP bloqueada del archivo de registro monitoreado, etc. Los pasos para agregar una configuración personalizada para prohibir las direcciones IP que están bloqueadas para acceder a los servidores ascendentes son los siguientes:
cd /etc/fail2ban
cp jail.conf jail.local
# Jail configurations for HTTP connections.
[finesse-http-auth]
enabled = true
# The ports to be blocked. Add any additional ports.
port = http,https,<finesse-ports>,<cuic-ports>,<any-other-ports-to-be-blocked>
# Path to nginx blocking logs.
logpath = /usr/local/openresty/nginx/logs/blocking.log
# The filter configuration.
filter = finesseban
# Block the IP from accessing the port, once the IP is blocked by lua.
maxretry= 1
# Duration for retry set to 3 mins. Doesn't count as the maxretry is 1
findtime= 180
# Lock time is set to 3 mins. Change as per requirements.
bantime = 180
Un filtro indica a Fail2ban qué buscar en los registros para identificar el host que se va a prohibir. Los pasos para crear un filtro son los siguientes:
touch filter.d/finesseban.conf
[Definition]
# The regex match that would cause blocking of the host.
failregex = <HOST> will be blocked for
Ejecute el siguiente comando para iniciar fail2ban.
fail2ban-client start
Abra los archivos de registro fail2ban y verifique que no haya errores. De forma predeterminada, los registros para fail2ban entran en el archivo /var/log/fail2ban.log.
Todos los terminales válidos a los que se puede acceder de forma no autenticada se llevan a cabo de forma activa en los scripts ES03.
Las solicitudes a estas trayectorias no autenticadas se rechazan activamente, si se solicita un URI no válido, sin enviar estas solicitudes al servidor ascendente.
Cuando la solicitud de las primeras opciones es exitosa, los encabezados de respuesta access-control-allow-header, access-control-allow-origin, access-control-allow-method, access-control-exposición-header y access-control-allow-credentials se almacenan en caché en el proxy durante cinco minutos. Estos encabezados se almacenan en la memoria caché para cada servidor ascendente respectivo.
Este documento describe la configuración de Nginx como el proxy inverso que se utilizará para habilitar el acceso Finesse VPN-less. Se proporcionan las versiones del componente de la solución UCCE, del proxy y del SO utilizadas para verificar las instrucciones proporcionadas. Las instrucciones relevantes deben adaptarse al SO/proxy que elija.
Nota: La configuración de Nginx descrita se puede descargar de la página de descarga de software de Finesse Release 12.6(1)ES3.
Esta sección detalla los pasos de instalación del proxy basado en OpenResty. El proxy inverso se configura normalmente como un dispositivo dedicado en la zona desmilitarizada de red (DMZ), como se muestra en el diagrama de implementación mencionado anteriormente.
Cualquier tipo de sabor de Nginx puede utilizarse para este fin, siempre y cuando se base en Nginx 1.19+ y apoye a Lua:
Nota: La configuración proporcionada se ha probado con OpenResty 1.19 y se espera que funcione con otras distribuciones con solo actualizaciones menores, si las hubiera.
Como parte de la instalación de OpenResty, Nginx se instalará en esta ubicación y agregará la ruta de acceso OpenResty a la variable PATH agregando en el archivo ~/.bashrc.
export PATH=/usr/local/openresty/bin:$PATH
openresty
.openresty -s stop
.La configuración se explica para una instalación de Nginx basada en OpenResty. Los directorios predeterminados para OpenResty son:
Nota: La configuración proporcionada es para una implementación de muestra de 2000 y debe ampliarse adecuadamente para una implementación más grande.
De forma predeterminada, las rutas de acceso de caché del proxy se almacenan en el sistema de archivos. Recomendamos cambiarlos a unidades en memoria creando una ubicación de caché en tmpfs como se muestra aquí.
Por ejemplo, estos directorios se deben crear para el Finesse primario. Se deben seguir los mismos pasos para los servidores Finesse secundarios y CUIC.
mkdir -p /home/primaryFinesse/rest mkdir -p /home/primaryFinesse/desktop mkdir -p /home/primaryFinesse/shindig mkdir -p /home/primaryFinesse/openfire mkdir -p /home/primaryCUIC/cuic mkdir -p /home/primaryCUIC/cuicdoc mkdir -p /home/client_temp mkdir -p /home/proxy_temp
echo "tmpfs /home/primaryFinesse/rest tmpfs size=1510M,rw,auto,noexec,nodev,nosuid,gid=root,uid=root,mode=1700 0 0" >>
/etc/fstab echo "tmpfs /home/primaryFinesse/desktop tmpfs size=20M,rw,auto,noexec,nodev,nosuid,gid=root,uid=root,mode=1700 0 0" >>
/etc/fstab echo "tmpfs /home/primaryFinesse/shindig tmpfs size=500M,rw,auto,noexec,nodev,nosuid,gid=root,uid=root,mode=1700 0 0" >>
/etc/fstab echo "tmpfs /home/primaryFinesse/openfire tmpfs size=10M,rw,auto,noexec,nodev,nosuid,gid=root,uid=root,mode=1700 0 0" >>
/etc/fstab echo "tmpfs /home/primaryCUIC/cuic tmpfs size=100M,rw,auto,noexec,nodev,nosuid,gid=root,uid=root,mode=1700 0 0" >>
/etc/fstab echo "tmpfs /home/primaryCUIC/cuicdoc tmpfs size=100M,rw,auto,noexec,nodev,nosuid,gid=root,uid=root,mode=1700 0 0" >>
/etc/fstab echo "tmpfs /home/client_temp tmpfs size=2048M,rw,auto,noexec,nodev,nosuid,gid=root,uid=root,mode=1700 0 0" >>
/etc/fstab echo "tmpfs /home/proxy_temp tmpfs size=2048M,rw,auto,noexec,nodev,nosuid,gid=root,uid=root,mode=1700 0 0" >> /etc/fstab
Nota: Aumente las memorias caché del cliente y proxy_temp en 1 GB para cada nuevo clúster de Finesse agregado a la configuración.
mount -av
.df -h
comando.Por ejemplo, para cambiar las trayectorias para el primario de Finesse, vaya a <nginx-install-directory>conf/conf.d/finesse/caches y cambie la ubicación de caché existente /usr/local/openresty/nginx/cache/finesse25/ a la ubicación del sistema de archivos recién creado /home/primaryFinesse.##Must-change /usr/local/openresty/nginx/cache/finesse25 location would change depending on folder extraction proxy_cache_path /home/primaryFinesse/desktop levels=1:2 use_temp_path=on keys_zone=desktop_cache_fin25:10m max_size=15m inactive=3y use_temp_path=off; proxy_cache_path /home/primaryFinesse/shindig levels=1:2 use_temp_path=on keys_zone=shindig_cache_fin25:10m max_size=500m inactive=3y use_temp_path=off; proxy_cache_path /home/primaryFinesse/openfire levels=1:2 use_temp_path=on keys_zone=openfire_cache_fin25:10m max_size=10m inactive=3y use_temp_path=off; proxy_cache_path /home/primaryFinesse/rest levels=1:2 use_temp_path=on keys_zone=rest_cache_fin25:10m max_size=1500m inactive=40m use_temp_path=off;
Nota: Asegúrese de que la suma de todos los tamaños de unidad tmpfs creados en todos los pasos anteriores se agregue al tamaño de memoria final para la implementación, ya que estas unidades son bloques de memoria configurados para parecerse a discos para la aplicación y consumen tanto espacio de memoria.
Los certificados autofirmados sólo se deben utilizar hasta que el proxy inverso esté listo para ser implementado en producción. En una implementación de producción, utilice sólo un certificado firmado por la Autoridad de Certificación (CA).
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /usr/local/openresty/nginx/ssl/nginx.key -out /usr/local/openresty/nginx/ssl/nginx.crt
(pasar nombre de host como: <reverseproxy_primary_fqdn>)sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /usr/local/openresty/nginx/ssl/nginxnode2.key -out /usr/local/openresty/nginx/ssl/nginxnode2.crt
(pasar nombre de host como :<reverseproxy_secondary_fqdn>)Nota: La configuración proporcionada es para una implementación de muestra de 2000 y debe ampliarse adecuadamente para una implementación más grande.
Se puede instalar un certificado firmado por CA en el proxy inverso con estos pasos:
Para generar la CSR y la clave privada, introduzcaopenssl req -new -newkey rsa:4096 -keyout nginx.key -out nginx.csr
después de iniciar sesión en el proxy. Siga el mensaje y proporcione los detalles. Esto genera el CSR (nginx.csr en el ejemplo) y la clave privada RSA (nginx.key en el ejemplo) de 4096 bits de fuerza.
Por ejemplo:[root@reverseproxyhost.companyname.com ssl]# openssl req -new -newkey rsa:4096 -keyout nginx.key -out nginx.csr Generating a RSA private key .....+++++ ...................................................................................................................................................+++++ writing new private key to 'nginx.key' Enter PEM pass phrase:passphrase Verifying - Enter PEM pass phrase:passphrase ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:US State or Province Name (full name) []:CA Locality Name (eg, city) [Default City]:Orange County Organization Name (eg, company) [Default Company Ltd]:CompanyName Organizational Unit Name (eg, section) []:BusinessUnit Common Name (eg, your name or your server's hostname) []:reverseproxyhostname.companydomain.com Email Address []:john.doe@comapnydomain.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:challengePWD An optional company name []:CompanyName
Anote la frase de paso PEM, ya que se utilizará para descifrar la clave privada durante la implementación.
Envíe el CSR a la autoridad certificadora y obtenga el certificado firmado.
Nota: Si el certificado recibido de la CA no es una cadena de certificados que contenga todos los certificados respectivos, componga todos los certificados pertinentes en un único archivo de cadena de certificados.
Descifrar la clave generada anteriormente como parte del primer paso con elopenssl rsa -in nginx.key -out nginx_decrypted.key
comando. Coloque el certificado firmado por CA y la clave descifrada dentro de la carpeta /usr/local/openresty/nginx/ssl en la máquina proxy inversa. Actualice/agregue configuraciones SSL relacionadas con el certificado en las configuraciones de Nginx en el archivo de configuración /usr/local/openresty/nginx/conf/conf.d/ssl/ssl.conf.
ssl_certificate /usr/local/openresty/nginx/ssl/ca_signed_cert.crt; ssl_certificate_key /usr/local/openresty/nginx/ssl/nginx_decrypted.key;
ingrese chmod 400 /usr/local/openresty/nginx/ssl/ca_signed_cert.crt
ychmod 400 /usr/local/openresty/nginx/ssl/nginx_decrypted.key
, para que el certificado tenga permiso de sólo lectura y esté restringido al propietario.
Cree un parámetro Diffie-Hellman personalizado con estos comandos: openssl dhparam -out /usr/local/openresty/nginx/ssl/dhparam.pem 2048 chmod 400 /usr/local/openresty/nginx/ssl/dhparam.pem
Cambie la configuración del servidor para utilizar los nuevos parámetros en el archivo /usr/local/openresty/nginx/conf/conf.d/ssl/ssl.conf:ssl_dhparam /usr/local/openresty/nginx/ssl/dhparam.pem;
Nota: Para habilitar esto, el servidor debe utilizar un certificado firmado por CA y el servidor debe tener acceso a la CA que firmó el certificado.
Agregue/actualice esta configuración en file/usr/local/openresty/nginx/conf/conf.d/ssl/ssl.conf:ssl_stapling on; ssl_stapling_verify on;
El archivo de configuración predeterminado de Nginx (/usr/local/openresty/nginx/conf/nginx.conf) debe modificarse para que contenga estas entradas a fin de garantizar la seguridad y proporcionar rendimiento. Este contenido se debe utilizar para modificar el archivo de configuración predeterminado creado por la instalación de Nginx.
# Increasing number of worker processes will not increase the processing the request. The number of worker process will be same as number of cores # in system CPU. Nginx provides "auto" option to automate this, which will spawn one worker for each CPU core. worker_processes auto; # Process id file location pid /usr/local/openresty/nginx/logs/nginx.pid; # Binds each worker process to a separate CPU worker_cpu_affinity auto; #Defines the scheduling priority for worker processes. This should be calculated by "nice" command. In our proxy set up the value is 0 worker_priority 0; error_log /usr/local/openresty/nginx/logs/error.log info; #user root root; # current limit on the maximum number of open files by worker processes, keeping 10 times of worker_connections worker_rlimit_nofile 102400; events { multi_accept on; # Sets the maximum number of simultaneous connections that can be opened by a worker process. # This should not be more the current limit on the maximum number of open files i.e. hard limit of the maximum number of open files for the user (ulimit -Hn) # The appropriate setting depends on the size of the server and the nature of the traffic, and can be discovered through testing. worker_connections 10240; #debug_connection 10.78.95.21 } http { include mime.types; default_type text/plain; ## Must-change Change with DNS resolver ip in deployment resolver 192.168.1.3; ## Must-change change lua package path to load lua libraries lua_package_path "/usr/local/openresty/lualib/resty/?.lua;/usr/local/openresty/nginx/lua/?.lua;;" ## Must-change change proxy_temp folder as per cache directory configurations proxy_temp_path /usr/local/openresty/nginx/cache/proxy_temp 1 2 ; ## Must-change change client_temp folder as per cache directory configurations client_body_temp_path /usr/local/openresty/nginx/cache/client_temp 1 2 ; lua_shared_dict userlist 50m; lua_shared_dict credentialsstore 100m; lua_shared_dict userscount 100k; lua_shared_dict clientstorage 100m; lua_shared_dict blockingresources 100m; lua_shared_dict tokencache_saproxy 10M; lua_shared_dict tokencache_saproxy125 10M; lua_shared_dict ipstore 10m; lua_shared_dict desktopurllist 10m; lua_shared_dict desktopurlcount 100k; lua_shared_dict thirdpartygadgeturllist 10m; lua_shared_dict thirdpartygadgeturlcount 100k; lua_shared_dict corsheadersstore 100k; init_worker_by_lua_block { local UsersListManager = require('users_list_manager') local UnauthenticatedDesktopResourcesManager = require("unauthenticated_desktopresources_manager") local UnauthenticatedResourcesManager = require("unauthenticated_thirdpartyresources_manager") -- Must-change Replace saproxy.cisco.com with reverseproxy fqdn if ngx.worker.id() == 0 then UsersListManager.getUserList("saproxy.cisco.com", "https://saproxy.cisco.com:8445/finesse/api/Users") UnauthenticatedDesktopResourcesManager.getDesktopResources("saproxy.cisco.com", "https://saproxy.cisco.com:8445/desktop/api/urls?type=desktop") UnauthenticatedResourcesManager.getThirdPartyGadgetResources("saproxy.cisco.com", "https://saproxy.cisco.com:8445/desktop/api/urls?type=3rdParty") end } include conf.d/*.conf; sendfile on; tcp_nopush on; server_names_hash_bucket_size 512;
De forma predeterminada, la configuración Nginx escucha en el puerto 8445 para las solicitudes Finesse. A la vez, sólo se puede habilitar un puerto desde un proxy inverso para soportar solicitudes Finesse, por ejemplo, 8445. Si el puerto 443 necesita ser soportado, edite el archivo <nginx-install-directory>conf/conf.d/finesse.conf para habilitar la escucha en 443 y desactivar la escucha en 8445.
La autenticación del certificado SSL del cliente para las conexiones de los hosts proxy inversos se puede habilitar en los componentes ascendentes de CCBU CUIC/Finesse/IdS/Livedata a través de la nueva opción CLI de CVOS que es
utils system reverse-proxy client-auth enable/disable/status.
De forma predeterminada, esto está desactivado y el administrador debe habilitarlo explícitamente ejecutando CLI en cada servidor ascendente de forma independiente. Una vez que se habilita esta opción, el servicio de proxy web de Cisco que se ejecuta en el host ascendente comenzará a autenticar certificados de cliente en intercambio de señales TLS para las conexiones que se originan en hosts de proxy inverso de confianza agregados como parte de las utilidades del sistema de proxy inverso permitido-hosts add <proxy-host>.
A continuación se muestra el bloque de configuración para el mismo en los archivos de configuración de proxy, a saber, ssl.conf y ssl2.conf
#Must-change /usr/local/openresty/nginx/ssl/nginx.crt change this location accordingly proxy_ssl_certificate /usr/local/openresty/nginx/ssl/nginx.crt; #Must-change /usr/local/openresty/nginx/ssl/nginx.key change this location accordingly proxy_ssl_certificate_key /usr/local/openresty/nginx/ssl/nginx.key;
El certificado SSL utilizado para el tráfico saliente (de proxy a ascendente) puede ser el mismo que el certificado ssl configurado para el tráfico entrante(conector SSL para los bloques de servidor de componentes). Si el certificado autofirmado se utiliza como proxy_ssl_certificate que se debe cargar en los componentes ascendentes (Finesse/IdS/CUIC/Livedata) del almacén de confianza de tomcat para que se autentique correctamente.
La validación del certificado de servidor ascendente mediante proxy inverso es opcional y está desactivada de forma predeterminada. Si desea lograr una autenticación mutua de TLS completa entre el proxy inverso y los hosts ascendentes, la configuración siguiente debe ser no comentada desde los archivos ssl.conf y ssl2.conf.#Enforce upstream server certificate validation at proxy -> #this is not mandated as per CIS buit definitely adds to security. #It requires the administrator to upload all upstream server certificates to the proxy certificate store #Must-Change Uncomment below lines IF need to enforce upstream server certificate validation at proxy #proxy_ssl_verify on; #proxy_ssl_trusted_certificate /usr/local/openresty/nginx/ssl/finesse25.crt; proxy_ssl_trusted_certificate: This file should contain the all upstream certificate enteries concatenated together
Advertencias para configurar la autenticación TLS mutua:
La memoria caché del proxy inverso se puede borrar con el
comando.
En esta sección se describen brevemente las pautas estándar que deben seguirse al configurar Nginx como servidor proxy.
Estas directrices se derivan del Centro para la Seguridad de Internet. Para obtener más detalles sobre cada directriz, consulte la misma.
La implementación de proxy inverso del escritorio Finesse requiere un archivo de asignación para configurar la lista de combinaciones de nombre de host/puerto visibles externamente y su asignación a los nombres de servidor y puertos reales que utilizan los servidores Finesse, IdS y CUIC. Este archivo de asignación que se configura en servidores internos es la configuración clave que permite redirigir los clientes conectados a través de Internet a los hosts y puertos requeridos que se utilizan en Internet.
El archivo de asignación debe implementarse en un servidor web al que puedan acceder los servidores de componentes y su URI debe configurarse para que la implementación funcione. Se recomienda configurar el archivo de asignación mediante un servidor web dedicado disponible dentro de la red. Si tal servidor no está disponible, se puede utilizar el proxy inverso en su lugar, lo que requerirá que el proxy sea accesible desde la red y también presenta el riesgo de exponer la información a clientes externos que pueden realizar acceso no autorizado a la DMZ. En la siguiente sección se detalla cómo se puede lograr esto.
Consulte la guía de funciones para ver los pasos exactos para configurar el URI del archivo de asignación en todos los servidores de componentes y para obtener más detalles sobre cómo crear los datos del archivo de asignación.
Estos pasos sólo se requieren si el proxy inverso también se utiliza como host del archivo de asignación de proxy.
nginx -s reload
comando.curl
comando.Si el sistema operativo elegido es CentOS 8, se recomienda que el ajuste/endurecimiento del kernel se realice con el uso de estas configuraciones del sistema para las instalaciones que utilizan un servidor dedicado para alojar el proxy.
## Configurations for kernel hardening - CentOS8. The file path is /etc/sysctl.conf ## Note that the commented configurations denote that CentOS 8's default value matches ## the recommended/tested value, and are not security related configurations. # Avoid a smurf attack net.ipv4.icmp_echo_ignore_broadcasts = 1 # Turn on protection for bad icmp error messages net.ipv4.icmp_ignore_bogus_error_responses = 1 # Turn on syncookies for SYN flood attack protection net.ipv4.tcp_syncookies = 1 # Turn on and log spoofed, source routed, and redirect packets net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 # Turn off routing net.ipv4.ip_forward = 0 net.ipv4.conf.all.forwarding = 0 net.ipv6.conf.all.forwarding = 0 net.ipv4.conf.all.mc_forwarding = 0 net.ipv6.conf.all.mc_forwarding = 0 # Block routed packets net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0 net.ipv6.conf.default.accept_source_route = 0 # Block ICMP redirects net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 # Filter routing packets with inward-outward path mismatch(reverse path filtering) net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # Router solicitations & advertisements related. net.ipv6.conf.default.router_solicitations = 0 net.ipv6.conf.default.accept_ra_rtr_pref = 0 net.ipv6.conf.default.accept_ra_pinfo = 0 net.ipv6.conf.default.accept_ra_defrtr = 0 net.ipv6.conf.default.autoconf = 0 net.ipv6.conf.default.dad_transmits = 0 net.ipv6.conf.default.max_addresses = 1 net.ipv6.conf.all.accept_ra = 0 net.ipv6.conf.default.accept_ra = 0 # Backlog - increased from default 1000 to 5000. net.core.netdev_max_backlog = 5000 # Setting syn/syn-ack retries to zero, so that they don't stay in the queue. net.ipv4.tcp_syn_retries = 0 net.ipv4.tcp_synack_retries = 0 # Max tcp listen backlog. Setting it to 511 to match nginx config net.core.somaxconn = 511 # Reduce the duration of connections held in TIME_WAIT(seconds) net.ipv4.tcp_fin_timeout = 6 # Maximum resources allotted # fs.file-max = 2019273 # kernel.pid_max = 4194304 # net.ipv4.ip_local_port_range = 32768 60999 # TCP window size tuning # net.ipv4.tcp_window_scaling = 1 # net.core.rmem_default = 212992 # net.core.rmem_max = 212992 # net.ipv4.tcp_rmem = 4096 87380 6291456 # net.ipv4.udp_rmem_min = 4096 # net.core.wmem_default = 212992 # net.core.wmem_max = 212992 # net.ipv4.tcp_wmem = 4096 16384 4194304 # net.ipv4.udp_wmem_min = 4096 # vm.lowmem_reserve_ratio = 256 256 32 0 0 # net.ipv4.tcp_mem = 236373 315167 472746 # Randomize virtual address space kernel.randomize_va_space = 2 # Congestion control # net.core.default_qdisc = fq_codel # net.ipv4.tcp_congestion_control = cubic # Disable SysReq kernel.sysrq = 0 # Controls the maximum size of a message, in bytes kernel.msgmnb = 65536 # Controls the default maximum size of a message queue kernel.msgmax = 65536 # Controls the eagerness of the kernel to swap. vm.swappiness = 1
Se recomienda reiniciar después de realizar los cambios recomendados.
IPtables es una aplicación que permite al administrador del sistema configurar las tablas, cadenas y reglas IPv4 e IPv6 proporcionadas por el firewall del núcleo de Linux.
Estas reglas de IPtables se configuran para proteger la aplicación proxy de ataques de fuerza bruta restringiendo el acceso en el firewall del núcleo de Linux.
Los comentarios de la configuración indican qué servicio se está limitando la velocidad mediante las reglas.
Nota: Si los administradores utilizan un puerto diferente o amplían el acceso a varios servidores utilizando los mismos puertos, se debe realizar el tamaño adecuado para estos puertos en función de estos números.
## Configuration for iptables service
## The file path is /etc/sysconfig/iptables
## Make a note for must-change values to be replaced.
## Restart of the iptable service is required after applying following rules
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] # Ensure loopback traffic is configured -A INPUT -i lo -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A INPUT -s 127.0.0.0/8 -j DROP # Ensure ping openeded only for the particular source and blocked for rest # Must-Change: Replace the x.x.x.x with valid ip address -A INPUT -p ICMP --icmp-type 8 -s x.x.x.x -j ACCEPT # Ensure outbound and established connections are configured -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT # Block ssh for external interface # Must-Change: Replace the ens224 with valid ethernet interface -A INPUT -p tcp -i ens224 --dport 22 -j DROP # Open inbound ssh(tcp port 22) connections -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT # Configuration for finesse 8445 port -A INPUT -p tcp -m tcp --dport 8445 --tcp-flags SYN SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 --connlimit-saddr -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " Connections to 8445 exceeded connlimit " -A INPUT -p tcp -m tcp --dport 8445 --tcp-flags SYN SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 --connlimit-saddr -j DROP -A INPUT -p tcp -m tcp --dport 8445 --tcp-flags SYN SYN -m hashlimit --hashlimit-upto 6/sec --hashlimit-burst 8 --hashlimit-mode srcip,dstport --hashlimit-name TCP_8445_DOS -j ACCEPT -A INPUT -p tcp -m tcp --dport 8445 --tcp-flags SYN SYN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " Exceeded 8445 hashlimit " -A INPUT -p tcp -m tcp --dport 8445 --tcp-flags SYN SYN -j DROP # Configuration for IdS 8553 port -A INPUT -p tcp -m tcp --dport 8553 --tcp-flags SYN SYN -m connlimit --connlimit-above 6 --connlimit-mask 32 --connlimit-saddr -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " IdS connection limit exceeded" -A INPUT -p tcp -m tcp --dport 8553 --tcp-flags SYN SYN -m connlimit --connlimit-above 6 --connlimit-mask 32 --connlimit-saddr -j DROP -A INPUT -p tcp -m tcp --dport 8553 --tcp-flags SYN SYN -m hashlimit --hashlimit-upto 2/sec --hashlimit-burst 4 --hashlimit-mode srcip,dstport --hashlimit-name TCP_8553_DOS -j ACCEPT -A INPUT -p tcp -m tcp --dport 8553 --tcp-flags SYN SYN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " Exceeded 8553 hashlimit " -A INPUT -p tcp -m tcp --dport 8553 --tcp-flags SYN SYN -j DROP # Configuration for IdP 443 port -A INPUT -p tcp -m tcp --dport 443 --tcp-flags SYN SYN -m connlimit --connlimit-above 8 --connlimit-mask 32 --connlimit-saddr -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " IdP connection limit exceeded" -A INPUT -p tcp -m tcp --dport 443 --tcp-flags SYN SYN -m connlimit --connlimit-above 8 --connlimit-mask 32 --connlimit-saddr -j DROP -A INPUT -p tcp -m tcp --dport 443 --tcp-flags SYN SYN -m hashlimit --hashlimit-upto 4/sec --hashlimit-burst 6 --hashlimit-mode srcip,dstport --hashlimit-name TCP_443_DOS -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 --tcp-flags SYN SYN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " Exceeded 443 hashlimit " -A INPUT -p tcp -m tcp --dport 443 --tcp-flags SYN SYN -j DROP # Must-Change: A2A file transfer has not been considered for below IMNP configuration. # For A2A for support, these configuration must be recalculated to cater different file transfer scenarios. # Configuration for IMNP 5280 port -A INPUT -p tcp -m tcp --dport 5280 --tcp-flags SYN SYN -m connlimit --connlimit-above 30 --connlimit-mask 32 --connlimit-saddr -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " IMNP connection limit exceeded" -A INPUT -p tcp -m tcp --dport 5280 --tcp-flags SYN SYN -m connlimit --connlimit-above 30 --connlimit-mask 32 --connlimit-saddr -j DROP -A INPUT -p tcp -m tcp --dport 5280 --tcp-flags SYN SYN -m hashlimit --hashlimit-upto 20/sec --hashlimit-burst 25 --hashlimit-mode srcip,dstport --hashlimit-name TCP_5280_DOS -j ACCEPT -A INPUT -p tcp -m tcp --dport 5280 --tcp-flags SYN SYN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " Exceeded 5280 hashlimit " -A INPUT -p tcp -m tcp --dport 5280 --tcp-flags SYN SYN -j DROP # Configuration for IMNP 15280 port -A INPUT -p tcp -m tcp --dport 15280 --tcp-flags SYN SYN -m connlimit --connlimit-above 30 --connlimit-mask 32 --connlimit-saddr -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " IMNP connection limit exceeded" -A INPUT -p tcp -m tcp --dport 15280 --tcp-flags SYN SYN -m connlimit --connlimit-above 30 --connlimit-mask 32 --connlimit-saddr -j DROP -A INPUT -p tcp -m tcp --dport 15280 --tcp-flags SYN SYN -m hashlimit --hashlimit-upto 20/sec --hashlimit-burst 25 --hashlimit-mode srcip,dstport --hashlimit-name TCP_15280_DOS -j ACCEPT -A INPUT -p tcp -m tcp --dport 15280 --tcp-flags SYN SYN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " Exceeded 15280 hashlimit " -A INPUT -p tcp -m tcp --dport 15280 --tcp-flags SYN SYN -j DROP # Configuration for IMNP 25280 port -A INPUT -p tcp -m tcp --dport 25280 --tcp-flags SYN SYN -m connlimit --connlimit-above 30 --connlimit-mask 32 --connlimit-saddr -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " IMNP connection limit exceeded" -A INPUT -p tcp -m tcp --dport 25280 --tcp-flags SYN SYN -m connlimit --connlimit-above 30 --connlimit-mask 32 --connlimit-saddr -j DROP -A INPUT -p tcp -m tcp --dport 25280 --tcp-flags SYN SYN -m hashlimit --hashlimit-upto 20/sec --hashlimit-burst 25 --hashlimit-mode srcip,dstport --hashlimit-name TCP_25280_DOS -j ACCEPT -A INPUT -p tcp -m tcp --dport 25280 --tcp-flags SYN SYN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " Exceeded 25280 hashlimit " -A INPUT -p tcp -m tcp --dport 25280 --tcp-flags SYN SYN -j DROP # Configuration for CUIC 8444 port -A INPUT -p tcp -m tcp --dport 8444 --tcp-flags SYN SYN -m connlimit --connlimit-above 6 --connlimit-mask 32 --connlimit-saddr -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " CUIC connection limit exceeded" -A INPUT -p tcp -m tcp --dport 8444 --tcp-flags SYN SYN -m connlimit --connlimit-above 6 --connlimit-mask 32 --connlimit-saddr -j DROP -A INPUT -p tcp -m tcp --dport 8444 --tcp-flags SYN SYN -m hashlimit --hashlimit-upto 2/sec --hashlimit-burst 4 --hashlimit-mode srcip,dstport --hashlimit-name TCP_8444_DOS -j ACCEPT -A INPUT -p tcp -m tcp --dport 8444 --tcp-flags SYN SYN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " Exceeded 8444 hashlimit " -A INPUT -p tcp -m tcp --dport 8444 --tcp-flags SYN SYN -j DROP # Configuration for CUIC 8447 port -A INPUT -p tcp -m tcp --dport 8447 --tcp-flags SYN SYN -m connlimit --connlimit-above 6 --connlimit-mask 32 --connlimit-saddr -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " CUIC connection limit exceeded" -A INPUT -p tcp -m tcp --dport 8447 --tcp-flags SYN SYN -m connlimit --connlimit-above 6 --connlimit-mask 32 --connlimit-saddr -j DROP -A INPUT -p tcp -m tcp --dport 8447 --tcp-flags SYN SYN -m hashlimit --hashlimit-upto 2/sec --hashlimit-burst 4 --hashlimit-mode srcip,dstport --hashlimit-name TCP_8447_DOS -j ACCEPT -A INPUT -p tcp -m tcp --dport 8447 --tcp-flags SYN SYN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " Exceeded 8447 hashlimit " -A INPUT -p tcp -m tcp --dport 8447 --tcp-flags SYN SYN -j DROP # Configuration for LiveData 12005 port -A INPUT -p tcp -m tcp --dport 12005 --tcp-flags SYN SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 --connlimit-saddr -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " LD connection limit exceeded" -A INPUT -p tcp -m tcp --dport 12005 --tcp-flags SYN SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 --connlimit-saddr -j DROP -A INPUT -p tcp -m tcp --dport 12005 --tcp-flags SYN SYN -m hashlimit --hashlimit-upto 6/sec --hashlimit-burst 8 --hashlimit-mode srcip,dstport --hashlimit-name TCP_12005_DOS -j ACCEPT -A INPUT -p tcp -m tcp --dport 12005 --tcp-flags SYN SYN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " Exceeded 12005 hashlimit " -A INPUT -p tcp -m tcp --dport 12005 --tcp-flags SYN SYN -j DROP # Configuration for LiveData 12008 port -A INPUT -p tcp -m tcp --dport 12008 --tcp-flags SYN SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 --connlimit-saddr -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " LD connection limit exceeded" -A INPUT -p tcp -m tcp --dport 12008 --tcp-flags SYN SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 --connlimit-saddr -j DROP -A INPUT -p tcp -m tcp --dport 12008 --tcp-flags SYN SYN -m hashlimit --hashlimit-upto 6/sec --hashlimit-burst 8 --hashlimit-mode srcip,dstport --hashlimit-name TCP_12008_DOS -j ACCEPT -A INPUT -p tcp -m tcp --dport 12008 --tcp-flags SYN SYN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix " Exceeded 12008 hashlimit " -A INPUT -p tcp -m tcp --dport 12008 --tcp-flags SYN SYN -j DROP # Block all other ports -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
Estas reglas se podrían aplicar directamente editando /etc/sysconfig/iptables manualmente o bien guardar la configuración en un archivo como iptables.conf y ejecutar cat iptables.conf >>/etc/sysconfig/iptables para aplicar las reglas.
Se requiere un reinicio del servicio IPtables después de aplicar las reglas. ingrese systemctl restart iptables
para reiniciar el servicio IPtables.
Además de la configuración anterior de las tablas IP, se recomienda que las instalaciones que conocen el rango de direcciones para los clientes que utilizan el proxy utilicen este conocimiento para asegurar las reglas de acceso proxy. Esto puede proporcionar enormes beneficios cuando se trata de proteger el proxy de botnets de redes maliciosas que a menudo se crean en el rango de direcciones IP de países que tienen reglas más laxas con respecto a la seguridad en línea. Por lo tanto, se recomienda restringir los rangos de direcciones IP a rangos IP basados en país /estado o ISP si está seguro de los patrones de acceso.
También es útil saber cómo bloquear un rango específico de direcciones cuando se identifica un ataque que se realiza desde una dirección IP o un rango de direcciones IP. En estos casos, las solicitudes de esas direcciones IP pueden ser bloqueadas con reglas imposibles.
Para bloquear varias direcciones IP distintas, agregue una línea al archivo de configuración IPTables para cada dirección IP.
Por ejemplo, para bloquear las direcciones 192.0.2.3 y 192.0.2.4, ingrese:
iptables -A INPUT -s 192.0.2.3 -j DROP iptables -A INPUT -s 192.0.2.4 - j DROP.
Bloquee varias direcciones IP en un rango y agregue una sola línea al archivo de configuración IPTables con el rango de IP.
Por ejemplo, para bloquear direcciones de 192.0.2.3 a 192.0.2.35, introduzca:
iptables -A INPUT -m iprange --src-range 192.0.2.3-192.0.2.35 -j DROP.
Bloquee todas las direcciones IP en una subred completa agregando una sola línea al archivo de configuración IPTables con el uso de la notación de ruteo entre dominios sin clase para el rango de direcciones IP. Por ejemplo, para bloquear todas las direcciones de clase C, introduzca:
iptables -A INPUT -s 192.0.0.0/16 -j DROP.
SELinux es un marco de seguridad de plataforma integrado como una mejora en el sistema operativo Linux. El procedimiento para instalar y agregar políticas SELinux para ejecutar OpenResty como proxy inverso se proporciona a continuación.
openresty -s stop
comando.systemctl
para que durante el arranque el proceso OpenResty se inicie automáticamente. Ingrese estos comandos como usuario raíz.
[Unit] Description=The OpenResty Application Platform After=syslog.target network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/usr/local/openresty/nginx/logs/nginx.pid ExecStartPre=/usr/local/openresty/nginx/sbin/nginx -t ExecStart=/usr/local/openresty/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
sudo systemctl enable openresty
.systemctl start openresty / systemctl stop openresty
y asegúrese de que el proceso se inicia/se detiene como usuario raíz.El paquete policy-coreutils-devel y sus dependencias deben ser instalados para generar la política SELinux.
Ingrese este comando para instalar policy coreutils-devel
yum install policycoreutils-devel
sepolicy
funciona. usage: sepolicy [-h] [-P POLICY] {booleans,communicate,generate,gui,interface,manpage,network,transition} ... SELinux Policy Inspection Tool
Crear un nuevo usuario y mapa de Linux con el usuario de SElinux
ingrese semanage login -l
para ver el mapeo entre usuarios de Linux y usuarios de SELinux.
[root@loadproxy-cisco-com ~]# semanage login -l Login Name SELinux User MLS/MCS Range Service __default__ unconfined_u s0-s0:c0.c1023 * * root unconfined_u s0-s0:c0.c1023 *
Como root, cree un nuevo usuario Linux (usuario nginx) que esté asignado al usuario_user_u de SELinux.
useradd -Z user_u nginxuser [root@loadproxy-cisco-com ~]# passwd nginxuser Changing password for user nginxuser. New password: Retype new password: passwd: all authentication tokens updated successfully.
Para ver la correspondencia entre nginxuser y user_u, ingrese este comando como root:
[root@loadproxy-cisco-com ~]# semanage login -l Login Name SELinux User MLS/MCS Range Service __default__ unconfined_u s0-s0:c0.c1023 * nginxuser user_u s0 * root unconfined_u s0-s0:c0.c1023 *
SELinux __default__ login de forma predeterminada asignado al usuario no confinado SELinux. Se requiere hacer que user_u se limite de forma predeterminada con este comando:
semanage login -m -s user_u -r s0 __default__
Para verificar si el comando funcionó correctamente, ingrese semanage login -l
. Debería producir este resultado:
Modifique nginx.conf y realice el cambio de propiedad para nginxuser.
chown -R nginxuser:nginxuser
* en el directorio <Openresty-install-directory>.Modifique el archivo nginx.conf para incluir nginxuser como el usuario para ejecutar procesos de trabajo.
........ user nginxuser nginxuser; ..........
Escribir la política SELinux para Nginx
sepolicy generate --init /usr/bin/nginx
, se prefiere comenzar con una política existente.make
comando.semodule
comando. semodule -i nginx.pp
semodule --list-modules=full
ps -aefZ | grep nginx
Utilize esta sección para confirmar que su configuración funcione correctamente.
Para validar la configuración de IdS, realice estos pasos:
El análisis de datos de la captura de rendimiento equivalente superior, realizado con la herramienta nmon, está disponible en la página de descarga de software de la versión 12.6(1) ES03 de Finesse (load_output.zip). Los datos representan el estado del proxy para las operaciones de escritorio y de supervisor, en una implementación de UCCE de muestra 2000 mediante los inicios de sesión de SSO y los informes de LD de CUIC tal y como se configuró en el diseño predeterminado para 2000 usuarios durante un período de ocho horas. Se puede utilizar para derivar los requisitos informáticos, de disco y de red para una instalación utilizando Nginx en un hardware comparable.
ssl_stapling on; ssl_stapling_verify on;
SELinux
setenforce 0
systemctl restart nginx
comando.cat /var/log/audit/audit.log | audit2allow -m nginx1 > nginx1.te. # this will create nginx1.te file or ausearch -c 'nginx' --raw | audit2allow -M my-nginx # this will create my-nginx.te file
make
comando.semodule -i nginx.pp
setenforce
Revisión | Fecha de publicación | Comentarios |
---|---|---|
5.0 |
24-Dec-2021 |
Pasos corregidos para OpenResty. Modificó los pasos de generación de certificados SSL y aplicación. Se actualizó el documento con enlaces ES03. |
4.0 |
10-Dec-2021 |
Actualizaciones ES03. |
3.0 |
10-Nov-2021 |
Se actualizaron las guías de la solución y la descripción de la autenticación. |
2.0 |
09-Nov-2021 |
Versión inicial |
1.0 |
09-Nov-2021 |
Versión inicial |