O conjunto de documentação deste produto faz o possível para usar uma linguagem imparcial. Para os fins deste conjunto de documentação, a imparcialidade é definida como uma linguagem que não implica em discriminação baseada em idade, deficiência, gênero, identidade racial, identidade étnica, orientação sexual, status socioeconômico e interseccionalidade. Pode haver exceções na documentação devido à linguagem codificada nas interfaces de usuário do software do produto, linguagem usada com base na documentação de RFP ou linguagem usada por um produto de terceiros referenciado. Saiba mais sobre como a Cisco está usando a linguagem inclusiva.
A Cisco traduziu este documento com a ajuda de tecnologias de tradução automática e humana para oferecer conteúdo de suporte aos seus usuários no seu próprio idioma, independentemente da localização. Observe que mesmo a melhor tradução automática não será tão precisa quanto as realizadas por um tradutor profissional. A Cisco Systems, Inc. não se responsabiliza pela precisão destas traduções e recomenda que o documento original em inglês (link fornecido) seja sempre consultado.
Este documento descreve como usar um proxy reverso para acessar o desktop do Cisco Finesse sem se conectar a uma VPN baseada nas versões 12.6 ES03 do Cisco Finesse, Cisco Unified Intelligence Center (CUIC) e Cisco Identity Service (IdS).
Observação: a instalação e a configuração do Nginx não são suportadas pela Cisco. As consultas sobre esse assunto podem ser discutidas nos fóruns da comunidade Cisco.
Observação: para as implantações ES03 de VPN-less, consulte o arquivo readme dos componentes individuais para planejar as atualizações e verificar as restrições de compatibilidade. Leiame do Cisco Finesse 12.6 ES03, CUIC / IdS 12.6 ES03 Readme
A Cisco recomenda que você tenha conhecimento destes tópicos:
As informações neste documento são baseadas nestas versões de software e hardware:
As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. Se a rede estiver ativa, certifique-se de que você entenda o impacto potencial de qualquer comando.
Observação: a configuração fornecida neste documento foi configurada, reforçada e testada com carga com proxy reverso Nginx (OpenResty) implantado no CentOS 8.0, em comparação com uma implantação UCCE de usuário de exemplo 2000. As informações de referência do perfil de desempenho estão disponíveis neste documento.
Esse modelo de implantação é compatível com as soluções UCCE/PCCE e HCS para UCCE.
A implantação de um proxy reverso é suportada (disponível a partir da 12.6 ES01) como uma opção para acessar o desktop Cisco Finesse sem se conectar a uma VPN. Esse recurso oferece a flexibilidade para que os agentes acessem o desktop Finesse de qualquer lugar pela Internet.
Para habilitar esse recurso, um par de proxy reverso deve ser implantado na zona desmilitarizada (DMZ).
O acesso à mídia permanece inalterado nas implantações de proxy reverso. Para se conectar à mídia, os agentes podem usar a solução Cisco Jabber over Mobile and Remote Access (MRA) ou o recurso do agente móvel do UCCE com uma rede telefônica pública comutada (PSTN) ou endpoint móvel. Este diagrama mostra como será a implantação de rede quando você acessar dois clusters Finesse e dois nós CUIC por meio de um único par de nós proxy reversos de alta disponibilidade (HA).
O acesso simultâneo de agentes na Internet e agentes que se conectam pela LAN é suportado como mostrado nesta imagem.
Observação: consulte o guia de recursos para obter os critérios de seleção de proxy de terceiros no lugar do Nginx para oferecer suporte a essa implantação.
- Guia de recursos do UCCE 12.6 - Fornece uma visão geral de recursos, design, bem como detalhes de configuração para o recurso sem VPN.
- Guia de segurança UCCE 12.6 - Fornece diretrizes de configuração de segurança para a implantação de proxy reverso.
É recomendável rever a seção Sem VPN do guia de recursos e do guia de segurança antes de ler este documento.
Observação: é recomendável remover a configuração Nginx baseada em ES01 existente antes de instalar as configurações Nginx ES03.
Observação: os scripts de configuração ES03 também exigem a instalação COP ES03 correspondente no Cisco Finesse, CUIC e IdS.
O Finesse 12.6 ES03 introduz a autenticação no proxy. A autenticação é suportada para implantações de Logon Único (SSO) e não-SSO.
A autenticação é imposta para todas as solicitações e protocolos que são aceitos no proxy antes de serem encaminhados para os servidores de componentes upstream, onde a autenticação imposta pelos servidores de componentes localmente também ocorre. Toda a autenticação usa as credenciais de login comuns do Finesse para autenticar as solicitações.
As conexões persistentes, como os websockets, que dependem de protocolos de aplicação como Extensible Messaging and Presence Protocol (XMPP) para autenticação e pós-conexão, são autenticadas no proxy validando o endereço IP do qual uma autenticação de aplicação bem-sucedida foi feita antes de estabelecer a conexão do soquete.
A autenticação sem SSO não requer configurações extras e funcionará com scripts de configuração do Nginx prontos para uso assim que as substituições de script necessárias forem feitas. A autenticação se baseia no nome de usuário e senha usados para fazer login no Finesse. O acesso a todos os endpoints será validado com os serviços de autenticação Finesse.
A lista de usuários válidos é armazenada em cache localmente no proxy (atualiza o cache a cada 15 minutos), que é usado para validar o usuário em uma solicitação. As credenciais do usuário são validadas pelo encaminhamento da solicitação ao URI do Finesse configurado e, posteriormente, o hash da credencial é armazenado em cache localmente (15 minutos em cache) para autenticar novas solicitações localmente. Se houver qualquer alteração no nome de usuário ou na senha, ela entrará em vigor somente após 15 minutos.
A autenticação SSO requer que o administrador configure a chave de criptografia do token IdS no servidor Nginx dentro do arquivo de configuração. A chave de criptografia do token IdS pode ser obtida do servidor IdS com o comando CLI show ids secret. A chave deve ser configurada como parte de uma das #Must-change substituições que o administrador precisa executar nos scripts antes que a autenticação do SSO possa funcionar.
Consulte o guia do usuário do SSO para obter as configurações de IdS SAML a serem executadas para que a resolução de proxy funcione para IdS.
Uma vez configurada a autenticação SSO, um par válido de tokens pode ser usado para acessar qualquer um dos pontos finais no sistema. A configuração de proxy valida as credenciais interceptando as solicitações de recuperação de token feitas a IdS ou descriptografando tokens válidos e, em seguida, armazenando-os localmente em cache para outras validações.
As conexões de websocket não podem ser autenticadas com o cabeçalho de autorização padrão, pois os cabeçalhos personalizados não são suportados por implementações de websocket nativas no navegador. Protocolos de autenticação de nível de aplicação, em que as informações de autenticação contidas no payload não impedem o estabelecimento de conexões de websocket e, portanto, entidades mal-intencionadas podem processar ataques de DOS ou DDOS apenas criando inúmeras conexões para sobrecarregar o sistema.
Para reduzir essa possibilidade, as configurações de proxy reverso nginx fornecidas têm verificações específicas para permitir que conexões de websocket sejam aceitas SOMENTE a partir dos endereços IP que fizeram com sucesso uma solicitação REST autenticada antes do estabelecimento da conexão de websocket. Isso significa que os clientes que tentarem criar conexões de websocket, antes de uma solicitação REST ser emitida, agora receberão um erro de falha de autorização e não é um cenário de uso com suporte.
Os scripts de autenticação Finesse 12.6 ES02 evitam ativamente ataques de força bruta que podem ser usados para adivinhar a senha do usuário. Ele faz isso bloqueando o endereço IP usado para acessar o serviço, após um determinado número de tentativas falhas em um curto período de tempo. Essas solicitações serão rejeitadas pelo erro 418 do cliente. Os detalhes dos endereços IP bloqueados podem ser acessados nos arquivos <nginx-install-diretory>/logs/blocking.log e <nginx-install-diretory>/logs/error.log.
O número de solicitações com falha, o intervalo de tempo e a duração do bloqueio são configuráveis. As configurações estão presentes no arquivo <nginx-install-diretory>/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 localizar os endereços IP bloqueados, execute os seguintes comandos no diretório <nginx-install-diretory>/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"
Recomenda-se que os clientes se integrem com Fail2ban ou similar para adicionar o banimento às regras de tabela IP/firewall.
O Fail2ban examina arquivos de log e IPs proibidos que mostram sinais maliciosos - muitas falhas de senha, busca por explorações, etc. Geralmente, o Fail2Ban é usado para atualizar as regras de firewall para rejeitar os endereços IP por um período de tempo especificado, embora qualquer outra ação arbitrária (por exemplo, enviar um e-mail) também possa ser configurada. Para obter mais informações, visite https://www.fail2ban.org/.
Fail2ban pode ser configurado para monitorar o blocking.log para identificar os endereços IP que são bloqueados pelo Nginx na detecção de ataques bruteforce, e proibi-los por uma duração configurável. As etapas para instalar e configurar fail2ban em um proxy reverso CentOS são as seguintes:
1. Instale o Fail2ban usando o yum.
yum update && yum install epel-release
yum install fail2ban
2. Crie uma prisão local.
As configurações de prisão permitem que o administrador configure várias propriedades, como as portas que devem ser proibidas de serem acessadas por qualquer endereço IP bloqueado, a duração pela qual o endereço IP permanece bloqueado, a configuração de filtro usada para identificar o endereço IP bloqueado no arquivo de registro monitorado etc. As etapas para adicionar uma configuração personalizada para proibir endereços IP que são bloqueados para acessar os servidores upstream são as seguintes:
2.1. Vá para o diretório de instalação Fail2ban (neste exemplo /etc/fail2ban)
cd /etc/fail2ban
2.2. Faça uma cópia de jail.conf em jail.local para manter as mudanças locais isoladas.
cp jail.conf jail.local
2.3. Adicione essas configurações de cadeia ao final do arquivo chain.local e substitua as portas do modelo pelas reais. Atualize as configurações de tempo de proibição conforme necessário.
# 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
3. Configure um filtro.
Um filtro informa ao Fail2ban o que procurar nos logs para identificar o host a ser banido. As etapas para criar um filtro são as seguintes:
3.1. Crie filter.d/finesseban.conf.
touch filter.d/finesseban.conf
3.2. Adicione essas linhas ao filtro de arquivo.d/finesseban.conf.
[Definition]
# The regex match that would cause blocking of the host.
failregex = <HOST> will be blocked for
4. Inicie Fail2ban.
Execute este comando para iniciar fail2ban.
fail2ban-client start
Abra os arquivos de log fail2ban e verifique se não há erros. Por padrão, os logs de fail2ban vão para o arquivo /var/log/fail2ban.log.
Todos os endpoints válidos que podem ser acessados de forma não autenticada são rastreados ativamente nos scripts ES03.
As solicitações para esses caminhos não autenticados são ativamente rejeitadas, se um URI inválido for solicitado, sem enviar essas solicitações ao servidor upstream.
Quando a primeira solicitação de opções é bem-sucedida, os cabeçalhos de resposta access-control-allow-headers, access-control-allow-, access-control-allow-methods, access-control-expose-headers e access-control-allow-credentials são armazenados em cache no proxy por cinco minutos. Esses cabeçalhos são armazenados em cache para cada servidor upstream respectivo.
Este documento descreve a configuração do Nginx como o proxy reverso a ser usado para ativar o acesso sem VPN Finesse. O componente da solução UCCE, o proxy e as versões do sistema operacional usados para verificar as instruções fornecidas são fornecidos. As instruções relevantes devem ser adaptadas ao sistema operacional ou ao proxy de sua escolha.
Observação: a configuração Nginx descrita pode ser baixada da página de download do software Finesse Release 12.6(1)ES3.
Após a configuração do proxy, configure os componentes da solução (Finesse/ CUIC / IdS) para VPN Menos acesso com o nome do host e IP planejados do proxy/serviços usados para acessar a solução com estes comandos.
utils system reverse-proxy allowed-hosts add utils system reverse-proxy config-uri <uri> add
Os detalhes desses comandos podem ser encontrados no Guia de recursos do UCCE 12.6 e devem ser consultados antes de você usar este documento.
Esta seção detalha as etapas de instalação do proxy com base no OpenResty. O proxy reverso é normalmente configurado como um dispositivo dedicado na zona desmilitarizada (DMZ) da rede, como mostrado no diagrama de implantação mencionado anteriormente.
Quaisquer sabores de Nginx podem ser usados para este fim, desde que sejam baseados em Nginx 1.19+ e suportem Lua:
Observação: a configuração fornecida foi testada com o OpenResty 1.19 e espera-se que funcione com outras distribuições com apenas pequenas atualizações, se houver.
export PATH=/usr/local/openresty/bin:$PATH
openresty
.openresty -s stop
.A configuração é explicada para uma instalação Nginx baseada em OpenResty. Os diretórios padrão do OpenResty são:
Observação: a configuração fornecida destina-se a uma implantação de exemplo do 2000 e deve ser expandida adequadamente para uma implantação maior.
Por padrão, os caminhos de cache do proxy são armazenados no sistema de arquivos. Recomendamos alterá-los para unidades na memória, criando um local de cache em tmpfs, como mostrado aqui.
Por exemplo, esses diretórios devem ser criados para o Finesse primário. As mesmas etapas devem ser seguidas para os servidores secundários Finesse e 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
Observação: aumente os caches client e proxy_temp em 1 GB para cada novo cluster Finesse adicionado à configuração.
mount -av
.df -h
comando.Por exemplo, para alterar os caminhos para o principal Finesse, vá para <nginx-install-diretory>conf/conf.d/finesse/caches e altere o local do cache existente /usr/local/openresty/nginx/cache/finesse25/ para o local do sistema de arquivos recém-criado /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;
Observação: certifique-se de que a soma de todos os tamanhos de unidade tmpfs criados em todas as etapas anteriores seja adicionada ao tamanho de memória final para a implantação, uma vez que essas unidades são blocos de memória configurados para parecer discos para o aplicativo e consomem tanto espaço de memória.
Certificados autoassinados só devem ser usados até que o proxy reverso esteja pronto para ser implantado na produção. Em uma implantação de produção, use apenas um certificado assinado por uma CA (Autoridade de Certificação).
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
(passe o nome do 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
(passe o nome do host como:<reverseproxy_secondary_fqdn>)Observação: a configuração fornecida destina-se a uma implantação de exemplo do 2000 e deve ser expandida adequadamente para uma implantação maior.
Um certificado assinado por uma autoridade de certificação pode ser instalado no proxy reverso com estas etapas:
Para gerar o CSR e a chave privada,openssl req -new -newkey rsa:4096 -keyout nginx.key -out nginx.csr
insira depois de fazer login no proxy. Siga o prompt e forneça os detalhes. Isso gera o CSR (nginx.csr no exemplo) e a chave privada RSA (nginx.key no exemplo) de força de 4096 bits.
Por exemplo:[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 a senha PEM, pois ela será usada para descriptografar a chave privada durante a implantação.
Envie o CSR à autoridade de certificação e obtenha o certificado assinado.
Observação: se o certificado recebido da CA não for uma cadeia de certificados que contenha todos os respectivos certificados, compõe todos os certificados relevantes em um único arquivo de cadeia de certificados.
Descriptografe a chave gerada anteriormente como parte da primeira etapa comopenssl rsa -in nginx.key -out nginx_decrypted.key
o comando. Coloque o certificado assinado pela autoridade de certificação e a chave descriptografada dentro da pasta /usr/local/openresty/nginx/ssl na máquina proxy inversa. Atualize/adicione as configurações SSL relacionadas ao certificado nas configurações do Nginx no arquivo de configuração /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;
chmod 400 /usr/local/openresty/nginx/ssl/ca_signed_cert.crt
Digitechmod 400 /usr/local/openresty/nginx/ssl/nginx_decrypted.key
and para que o certificado tenha permissão somente leitura e seja restrito ao proprietário.
Crie um parâmetro Diffie-Hellman personalizado com estes comandos: openssl dhparam -out /usr/local/openresty/nginx/ssl/dhparam.pem 2048 chmod 400 /usr/local/openresty/nginx/ssl/dhparam.pem
Altere a configuração do servidor para usar os novos parâmetros no arquivo /usr/local/openresty/nginx/conf/conf.d/ssl/ssl.conf:ssl_dhparam /usr/local/openresty/nginx/ssl/dhparam.pem;
Observação: para habilitar isso, o servidor deve usar um certificado assinado pela CA e deve ter acesso à CA que assinou o certificado.
Adicione/atualize essa configuração no diretório file/usr/local/openresty/nginx/conf/conf.d/ssl/ssl.conf:ssl_stapling on; ssl_stapling_verify on;
O arquivo de configuração Nginx padrão (/usr/local/openresty/nginx/conf/nginx.conf) deve ser modificado para conter essas entradas para garantir a segurança e o desempenho. Este conteúdo deve ser usado para modificar o arquivo de configuração padrão que é criado pela instalação do 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;
Por padrão, a configuração do Nginx ouve as solicitações do Finesse na porta 8445. De cada vez, apenas uma porta pode ser habilitada de um proxy reverso para suportar solicitações Finesse, por exemplo, 8445. Se a porta 443 precisar de suporte, edite o arquivo <nginx-install-diretory>conf/conf.d/finesse.conf para ativar a escuta no 443 e desativar a escuta no 8445.
A autenticação de certificado SSL do cliente para conexões de hosts de proxy reverso pode ser habilitada nos componentes de upstream do CCBU CUIC/Finesse/IdS/Livedata através da nova opção CLI do CVOS, que é
utils system reverse-proxy client-auth enable/disable/status.
Por padrão, isso está desabilitado e deve ser explicitamente habilitado pelo administrador, executando a CLI em cada servidor upstream independentemente. Quando esta opção estiver habilitada, o Cisco Web proxy Service em execução no host upstream iniciará a autenticação de certificados de clientes no handshake TLS para conexões originárias de hosts de proxy reverso confiáveis adicionados como parte de utilitários CLI sistema proxy reverso hosts permitidos adicionar <host proxy>.
Abaixo está o bloco de configuração para o mesmo nos arquivos de configuração de proxy, ssl.conf e 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;
O certificado SSL usado para tráfego de saída (proxy para upstream) pode ser o mesmo certificado SSL configurado para tráfego de entrada (conector SSL para blocos de servidor de componentes). Se o certificado autoassinado for usado como proxy_ssl_certificate, ele terá que ser carregado para o repositório de confiança upstream (Finesse/IdS/CUIC/Livedata) para ser autenticado com êxito.
A validação do certificado do servidor upstream pelo proxy reverso é opcional e desabilitada por padrão. Se você deseja obter a autenticação mútua TLS completa entre o proxy reverso e os hosts de upstream, a configuração abaixo precisa ter os comentários removidos dos arquivos ssl.conf e 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
Avisos para configurar a autenticação TLS mútua:
O cache de proxy reverso pode ser limpo com o
comando.
Esta seção descreve brevemente as diretrizes padrão que precisam ser seguidas quando você configura o Nginx como um servidor proxy.
Essas diretrizes são derivadas do Centro de Segurança da Internet. Para obter mais detalhes sobre cada diretriz, consulte a mesma.
A implantação de proxy reverso da área de trabalho do Finesse requer um arquivo de mapeamento para configurar a lista de combinações de nome de host/porta visíveis externamente e seu mapeamento para os nomes de servidor e portas reais que são usados pelos servidores Finesse, IdS e CUIC. Esse arquivo de mapeamento, que é configurado em servidores internos, é a configuração-chave que permite que os clientes conectados pela Internet sejam redirecionados para os hosts e portas necessários que são usados na Internet.
O arquivo de mapeamento deve ser implantado em um servidor Web acessível aos servidores de componentes e seu URI precisa ser configurado para que a implantação funcione. Recomenda-se que o arquivo de mapeamento seja configurado usando um servidor Web dedicado disponível na rede. Se esse servidor não estiver disponível, o proxy reverso poderá ser usado, o que exigirá que o proxy esteja acessível de dentro da rede e também apresentará um risco de exposição das informações a clientes externos que podem fazer acesso não autorizado à DMZ. A próxima seção detalha como isso pode ser feito.
Consulte o guia de recursos para obter as etapas exatas para configurar o URI do arquivo de mapeamento em todos os servidores de componentes e para obter mais detalhes sobre como criar os dados do arquivo de mapeamento.
Essas etapas são necessárias apenas se o proxy reverso também for usado como host do arquivo de mapeamento de proxy.
nginx -s reload
comando.curl
comando.Se o sistema operacional escolhido for o CentOS 8, recomenda-se que o endurecimento/ajuste do kernel seja feito com o uso dessas configurações sysctl para instalações que usam um servidor dedicado para hospedar o 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
Uma reinicialização é recomendada depois que você faz as alterações recomendadas.
O IPtables é um aplicativo que permite ao administrador do sistema configurar as tabelas, cadeias e regras IPv4 e IPv6 fornecidas pelo firewall do kernel do Linux.
Essas regras de tabelas IP são configuradas para proteger o aplicativo proxy de ataques de força bruta, restringindo o acesso no firewall do kernel do Linux.
Os comentários na configuração indicam qual serviço está sendo limitado por taxa usando as regras.
Observação: se os administradores usarem uma porta diferente ou expandirem o acesso a vários servidores usando as mesmas portas, o dimensionamento apropriado dessas portas deverá ser feito de acordo com esses 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
Essas regras podem ser aplicadas diretamente editando o /etc/sysconfig/iptables manualmente ou, como alternativa, salve a configuração em um arquivo como iptables.conf e execute cat iptables.conf >>/etc/sysconfig/iptables para aplicar as regras.
É necessário reiniciar o serviço IPtables após a aplicação das regras. Insira systemctl restart iptables
para reiniciar o serviço IPtables.
Além da configuração anterior das tabelas IP, as instalações que conhecem o intervalo de endereços para clientes que usam o proxy são recomendadas para usar esse conhecimento para proteger as regras de acesso ao proxy. Isso pode fornecer grandes retornos quando se trata de proteger o proxy de botnets de redes maliciosas que são muitas vezes criadas no intervalo de endereços IP de países que têm regras mais frouxas com relação à segurança on-line. É altamente recomendável, portanto, restringir os intervalos de endereços IP a país/estado ou intervalos de IP baseados em ISP se você tiver certeza dos padrões de acesso.
Também é útil saber como bloquear um intervalo específico de endereços quando um ataque é identificado como sendo feito a partir de um endereço IP ou de um intervalo de endereços IP. Nesses casos, as solicitações desses endereços IP podem ser bloqueadas com regras iptable.
Para bloquear vários endereços IP distintos, adicione uma linha ao arquivo de configuração IPTables para cada endereço IP.
Por exemplo, para bloquear os endereços 192.0.2.3 e 192.0.2.4, insira:
iptables -A INPUT -s 192.0.2.3 -j DROP iptables -A INPUT -s 192.0.2.4 - j DROP.
Bloqueie vários endereços IP em um intervalo e adicione uma única linha ao arquivo de configuração IPTables com o intervalo IP.
Por exemplo, para bloquear endereços de 192.0.2.3 a 192.0.2.35, insira:
iptables -A INPUT -m iprange --src-range 192.0.2.3-192.0.2.35 -j DROP.
Bloqueie todos os endereços IP em uma sub-rede inteira adicionando uma única linha ao arquivo de configuração IPTables com o uso da notação de roteamento entre domínios classless para o intervalo de endereços IP. Por exemplo, para bloquear todos os endereços de classe C, insira:
iptables -A INPUT -s 192.0.0.0/16 -j DROP.
O SELinux é uma estrutura de segurança de plataforma integrada como um aprimoramento no sistema operacional Linux. O procedimento para instalar e adicionar políticas SELinux para executar OpenResty como o proxy reverso é fornecido em seguida.
openresty -s stop
comando.systemctl
comando para que durante a inicialização o processo OpenResty inicie automaticamente. Digite esses comandos como usuário root.
[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
comando e verifique se o processo é iniciado/interrompido como usuário raiz.O pacote policycoreutils-devel e suas dependências devem ser instalados para gerar a política SELinux.
Insira este comando para instalar policycoreutils-devel
yum install policycoreutils-devel
sepolicy
comando funcione. usage: sepolicy [-h] [-P POLICY] {booleans,communicate,generate,gui,interface,manpage,network,transition} ... SELinux Policy Inspection Tool
Crie um novo usuário do Linux e mapeie com o usuário do SElinux
Digite semanage login -l
para ver o mapeamento entre usuários do Linux e usuários do 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, crie um novo usuário do Linux (nginx user) que seja mapeado para o usuário user_u do 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 visualizar o mapeamento entre nginxuser e user_u, insira 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 *
O login do SELinux __default_ por padrão é mapeado para o usuário do SELinux unconfined_u. É necessário fazer com que user_u seja confinado por padrão com este comando:
semanage login -m -s user_u -r s0 __default__
Para verificar se o comando funcionou corretamente, insira semanage login -l
. Ele deve produzir esta saída:
Modifique nginx.conf e execute a alteração de propriedade para nginxuser.
chown -R nginxuser:nginxuser
* no diretório <Openresty-install-diretory>.Modifique o arquivo nginx.conf para incluir nginxuser como o usuário para executar processos de trabalho.
........ user nginxuser nginxuser; ..........
Escreva a política do SELinux para Nginx
sepolicy generate --init /usr/bin/nginx
comando, é preferível começar com uma política existente.
make
comando.semodule
comando. semodule -i nginx.pp
semodule --list-modules=full
ps -aefZ | grep nginx
Use esta seção para confirmar se a sua configuração funciona corretamente.
Para validar a configuração de IdS, execute estas etapas:
A análise de dados da captura de desempenho superior equivalente, feita com a ferramenta nmon, está disponível na página de download do software Finesse Release 12.6(1) ES03 (load_result.zip). Os dados representam o estado do proxy para operações de desktop e supervisor, em um exemplo de implantação de 2000 UCCE usando logons SSO e relatórios CUIC LD, conforme configurado no layout padrão para 2000 usuários por um período de oito horas. Ele pode ser usado para derivar os requisitos de computação, disco e rede para uma instalação usando o Nginx em hardware comparável.
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
Revisão | Data de publicação | Comentários |
---|---|---|
5.0 |
24-Dec-2021 |
Etapas corrigidas para o OpenResty. Etapas de geração de certificado SSL e de aplicativo modificadas. Documento atualizado com links ES03. |
4.0 |
10-Dec-2021 |
Atualizações ES03. |
3.0 |
10-Nov-2021 |
Guias de solução e descrição de autenticação atualizados. |
2.0 |
09-Nov-2021 |
Versão inicial |
1.0 |
09-Nov-2021 |
Versão inicial |