La documentazione per questo prodotto è stata redatta cercando di utilizzare un linguaggio senza pregiudizi. Ai fini di questa documentazione, per linguaggio senza di pregiudizi si intende un linguaggio che non implica discriminazioni basate su età, disabilità, genere, identità razziale, identità etnica, orientamento sessuale, status socioeconomico e intersezionalità. Le eventuali eccezioni possono dipendere dal linguaggio codificato nelle interfacce utente del software del prodotto, dal linguaggio utilizzato nella documentazione RFP o dal linguaggio utilizzato in prodotti di terze parti a cui si fa riferimento. Scopri di più sul modo in cui Cisco utilizza il linguaggio inclusivo.
Cisco ha tradotto questo documento utilizzando una combinazione di tecnologie automatiche e umane per offrire ai nostri utenti in tutto il mondo contenuti di supporto nella propria lingua. Si noti che anche la migliore traduzione automatica non sarà mai accurata come quella fornita da un traduttore professionista. Cisco Systems, Inc. non si assume alcuna responsabilità per l’accuratezza di queste traduzioni e consiglia di consultare sempre il documento originale in inglese (disponibile al link fornito).
Questo documento descrive come utilizzare un proxy inverso per accedere al desktop Cisco Finesse senza connettersi a una VPN basata sulle versioni 12.6 ES03 di Cisco Finesse, Cisco Unified Intelligence Center (CUIC) e Cisco Identity Service (IdS).
Nota: l'installazione e la configurazione di Nginx non sono supportate da Cisco. Le richieste relative a questo argomento possono essere discusse sui forum della community Cisco.
Nota: per le implementazioni ES03 di VPN-Less, consultare il file Leggimi dei singoli componenti per pianificare gli aggiornamenti e controllare le restrizioni di compatibilità. Leggimi di Cisco Finesse 12.6 ES03, CUIC/IdS 12.6 ES03
Cisco raccomanda la conoscenza dei seguenti argomenti:
Le informazioni fornite in questo documento si basano sulle seguenti versioni software e hardware:
Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.
Nota: la configurazione fornita in questo documento è stata configurata, rafforzata e testata con il proxy inverso Nginx (OpenResty) distribuito in CentOS 8.0, rispetto a un'implementazione UCCE di esempio di 2000 utenti. Le informazioni di riferimento sul profilo delle prestazioni sono disponibili in questo documento.
Questo modello di distribuzione è supportato per le soluzioni UCCE/PCCE e HCS for UCCE.
È supportata la distribuzione di un proxy inverso (disponibile dalla versione 12.6 di ES01) come opzione per accedere al desktop Cisco Finesse senza connettersi a una VPN. Questa funzionalità offre agli agenti la flessibilità necessaria per accedere al desktop Finesse da qualsiasi luogo tramite Internet.
Per abilitare questa funzione, è necessario distribuire una coppia di proxy inverso nella zona demilitarizzata (DMZ).
L'accesso ai supporti rimane invariato nelle distribuzioni proxy inversa. Per connettersi ai supporti, gli agenti possono utilizzare Cisco Jabber su una soluzione MRA (Mobile and Remote Access Solution) o la funzionalità di agente mobile di UCCE con una rete PSTN (Public Switched Telephone Network) o un endpoint mobile. Questo diagramma mostra l'aspetto della distribuzione di rete quando si accede a due cluster Finesse e a due nodi CUIC tramite una singola coppia di nodi proxy inverso ad alta disponibilità (HA, High Availability).
È supportato l'accesso simultaneo da agenti su Internet e da agenti che si connettono dalla LAN, come mostrato in questa immagine.
Nota: per il supporto di questa distribuzione, vedere la guida alle funzioni per i criteri di selezione dei proxy di terze parti anziché Nginx.
- Guida alle funzionalità di UCCE 12.6 - Fornisce una panoramica delle funzionalità, la progettazione e i dettagli di configurazione per la funzionalità VPN-Less.
- UCCE 12.6 Security Guide - Fornisce le linee guida per la configurazione della sicurezza per la distribuzione di proxy inverso.
Si consiglia di consultare la sezione VPN-Less della guida alle funzionalità e alla guida alla sicurezza prima di leggere questo documento.
Nota: si consiglia di rimuovere la configurazione esistente di Nginx basata su ES01 prima di installare le configurazioni ES03 Nginx.
Nota: gli script di configurazione ES03 richiedono anche l'installazione di ES03 COP corrispondente in Cisco Finesse, CUIC e IdS.
Finesse 12.6 ES03 introduce l'autenticazione al proxy. L'autenticazione è supportata per le distribuzioni Single Sign-On (SSO) e non SSO.
L'autenticazione viene applicata per tutte le richieste e i protocolli accettati nel proxy prima di essere inoltrati ai server componenti upstream, dove viene eseguita anche l'autenticazione applicata localmente dai server componenti. Tutte le autenticazioni utilizzano le credenziali di accesso comuni di Finesse per autenticare le richieste.
Le connessioni permanenti, come i websockets che si basano su protocolli applicativi come Extensible Messaging and Presence Protocol (XMPP) per l'autenticazione e la post-connessione, vengono autenticate sul proxy convalidando l'indirizzo IP da cui è stata effettuata l'autenticazione dell'applicazione prima di stabilire la connessione socket.
L'autenticazione non SSO non richiede configurazioni aggiuntive e funziona con gli script di configurazione Nginx predefiniti una volta effettuate le sostituzioni di script richieste. L'autenticazione si basa sul nome utente e sulla password utilizzati per accedere a Finesse. L'accesso a tutti gli endpoint verrà convalidato con i servizi di autenticazione Finesse.
L'elenco degli utenti validi viene memorizzato nella cache locale del proxy (aggiorna la cache ogni 15 minuti), che viene utilizzato per convalidare l'utente in una richiesta. Le credenziali utente vengono convalidate inoltrando la richiesta all'URI Finesse configurato e quindi l'hash delle credenziali viene memorizzato nella cache locale (15 minuti) per autenticare le nuove richieste localmente. In caso di modifica del nome utente o della password, la modifica sarà effettiva solo dopo 15 minuti.
L'autenticazione SSO richiede che l'amministratore configuri la chiave di crittografia del token IdS nel server Nginx all'interno del file di configurazione. La chiave di crittografia del token IdS può essere ottenuta dal server IdS con il comando show ids secret CLI. La chiave deve essere configurata come parte di una delle sostituzioni di #Must-change che l'amministratore deve eseguire negli script prima che l'autenticazione SSO possa funzionare.
Fare riferimento alla guida per l'utente SSO per le configurazioni SAML IdS da eseguire affinché la risoluzione proxy funzioni per IdS.
Una volta configurata l'autenticazione SSO, è possibile utilizzare una coppia di token valida per accedere a qualsiasi endpoint nel sistema. La configurazione proxy convalida le credenziali intercettando le richieste di recupero del token effettuate agli IdS o decrittografando i token validi e quindi memorizzandoli nella cache locale per ulteriori convalide.
Le connessioni Websocket non possono essere autenticate con l'intestazione di autorizzazione standard, poiché le intestazioni personalizzate non sono supportate dalle implementazioni websocket native nel browser. Protocolli di autenticazione a livello di applicazione, in cui le informazioni di autenticazione contenute nel payload non impediscono la connessione al socket Web e, di conseguenza, entità dannose possono eseguire attacchi DOS o DDOS semplicemente creando innumerevoli connessioni per sopraffare il sistema.
Per ridurre questa possibilità, le configurazioni di proxy inverso fornite da Inginx prevedono controlli specifici per consentire l'accettazione delle connessioni al socket Web SOLO dagli indirizzi IP che hanno effettuato una richiesta REST autenticata prima di stabilire la connessione al socket Web. Ciò significa che i client che tentano di creare connessioni a socket Web prima di inviare una richiesta REST riceveranno ora un errore di autorizzazione non riuscita e non è uno scenario di utilizzo supportato.
Gli script di autenticazione Finesse 12.6 ES02 prevengono attivamente gli attacchi di forza bruta che possono essere utilizzati per indovinare la password dell'utente. A tale scopo, blocca l'indirizzo IP utilizzato per accedere al servizio, dopo un certo numero di tentativi non riusciti in breve tempo. Queste richieste verranno rifiutate da un errore client 418. I dettagli degli indirizzi IP bloccati sono accessibili dai file <nginx-install-directory>/logs/blocking.log e <nginx-install-directory>/logs/error.log.
È possibile configurare il numero di richieste non riuscite, l'intervallo di tempo e la durata del blocco. Le configurazioni sono presenti nel file <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; }
Per trovare gli indirizzi IP bloccati, eseguire i comandi seguenti dalla directory <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"
Per aggiungere il blocco alle regole IPtable/firewall, si consiglia l'integrazione con Fail2ban o simili.
Fail2ban analizza i file di log e gli IP di blocco che mostrano i segnali dannosi - troppi errori di password, ricerca di exploit, ecc. In genere, Fail2Ban viene quindi utilizzato per aggiornare le regole del firewall per rifiutare gli indirizzi IP per un determinato periodo di tempo, anche se è possibile configurare qualsiasi altra azione arbitraria (ad esempio l'invio di un messaggio di posta elettronica). Per ulteriori informazioni, visitare il sito https://www.fail2ban.org/.
Fail2ban può essere configurato per monitorare il blocking.log per identificare gli indirizzi IP bloccati da Nginx al rilevamento di attacchi bruteforce e per bloccarli per una durata configurabile. Per installare e configurare fail2ban su un proxy inverso CentOS, procedere come segue:
1. Installare Fail2ban utilizzando yum.
yum update && yum install epel-release
yum install fail2ban
2. Creare una prigione locale.
Le configurazioni delle carceri consentono all'amministratore di configurare varie proprietà, come le porte a cui non è consentito l'accesso da parte di qualsiasi indirizzo IP bloccato, la durata del blocco dell'indirizzo IP, la configurazione del filtro utilizzata per identificare l'indirizzo IP bloccato dal file di registro monitorato, ecc. Per aggiungere una configurazione personalizzata che impedisca l'accesso ai server upstream agli indirizzi IP bloccati, procedere come segue:
2.1. Andare alla directory di installazione Fail2ban (in questo esempio /etc/fail2ban)
cd /etc/fail2ban
2.2. Fare una copia di jail.conf in jail.local per mantenere le modifiche locali isolate.
cp jail.conf jail.local
2.3. Aggiungere queste configurazioni di carceri alla fine del file jail.local e sostituire le porte nel modello con quelle effettive. Aggiornare le configurazioni dei tempi di interdizione in base alle esigenze.
# 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. Configurare un filtro.
Un filtro indica a Fail2ban gli elementi da cercare nei log per identificare l'host da escludere. Per creare un filtro, procedere come segue:
3.1. Creare filter.d/finesseban.conf.
touch filter.d/finesseban.conf
3.2. Aggiungere queste righe nel file filter.d/finesseban.conf.
[Definition]
# The regex match that would cause blocking of the host.
failregex = <HOST> will be blocked for
4. Avviare Fail2ban.
Eseguire questo comando per avviare fail2ban.
fail2ban-client start
Aprire i file di log fail2ban e verificare che non siano presenti errori. Per impostazione predefinita, i log per fail2ban vengono inseriti nel file /var/log/fail2ban.log.
Tutti gli endpoint validi a cui è possibile accedere in modo non autenticato vengono attivamente registrati negli script ES03.
Le richieste a questi percorsi non autenticati vengono attivamente rifiutate, se viene richiesto un URI non valido, senza inviare tali richieste al server upstream.
Quando la prima richiesta di opzioni ha esito positivo, le intestazioni di risposta access-control-allow-headers, access-control-allow-origin, access-control-allow-method, access-control-expose-headers e access-control-allow-credentials vengono memorizzate nella cache del proxy per cinque minuti. Queste intestazioni vengono memorizzate nella cache per ogni server upstream corrispondente.
Questo documento descrive la configurazione di Nginx come proxy inverso da utilizzare per abilitare l'accesso Finesse VPN-Less. Versioni del componente della soluzione UCCE, del proxy e del sistema operativo utilizzate per verificare le istruzioni fornite. Le istruzioni pertinenti devono essere adattate al sistema operativo/proxy prescelto.
Nota: la configurazione Nginx descritta può essere scaricata dalla pagina di download del software Finesse release 12.6(1)ES3.
Dopo aver configurato il proxy, configurare i componenti della soluzione (Finesse/ CUIC / IdS) per l'accesso VPN Less con il nome host e l'IP pianificati del proxy/servizi utilizzati per accedere alla soluzione con questi comandi.
utils system reverse-proxy allowed-hosts add utils system reverse-proxy config-uri <uri> add
Per ulteriori informazioni su questi comandi, consultare la UCCE 12.6 Feature Guide (Guida alle funzionalità di UCCE 12.6) prima di consultare il presente documento.
In questa sezione vengono illustrati in dettaglio i passaggi per l'installazione del proxy basato su OpenResty. Il proxy inverso è in genere configurato come dispositivo dedicato nella zona demilitarizzata di rete (DMZ, Network Demilitarized Zone), come illustrato nel diagramma di distribuzione menzionato in precedenza.
Qualsiasi sapore di Nginx può essere utilizzato per questo scopo, purché siano basati su Nginx 1.19+ e supportino Lua:
Nota: la configurazione fornita è stata testata con OpenResty 1.19 e dovrebbe funzionare con altre distribuzioni con solo aggiornamenti minori, se presenti.
export PATH=/usr/local/openresty/bin:$PATH
openresty
.openresty -s stop
.La configurazione viene spiegata per un'installazione Nginx basata su OpenResty. Le directory predefinite per OpenResty sono:
Nota: la configurazione fornita è per un'implementazione di esempio 2000 e deve essere espansa in modo appropriato per un'implementazione più ampia.
Per impostazione predefinita, i percorsi della cache proxy vengono memorizzati nel file system. È consigliabile sostituirli con unità in memoria creando un percorso di cache in tmpfs, come mostrato di seguito.
Ad esempio, queste directory devono essere create per Finesse primario. Gli stessi passaggi devono essere seguiti per i server secondari 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
Nota: aumentare il client e le cache proxy_temp di 1 GB per ogni nuovo cluster Finesse aggiunto alla configurazione.
mount -av
.df -h
comando.Ad esempio, per modificare i percorsi per il file primario Finesse, passare a <nginx-install-directory>conf/conf.d/finesse/caches e modificare il percorso della cache esistente /usr/local/openresty/nginx/cache/finesse25/ nel nuovo percorso del file system creato /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: assicurarsi che la somma di tutte le dimensioni delle unità tmpfs create in tutti i passi precedenti venga aggiunta al dimensionamento finale della memoria per la distribuzione, poiché queste unità sono blocchi di memoria configurati per assomigliare ai dischi dell'applicazione e consumano lo stesso spazio di memoria.
I certificati autofirmati devono essere utilizzati solo fino a quando il proxy inverso non è pronto per l'implementazione in produzione. In una distribuzione di produzione, utilizzare solo un certificato firmato da un'Autorità di certificazione (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
(passare il nome host come: <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
(passare il nome host come :<reverseproxy_secondary_fqdn>)Nota: la configurazione fornita è per un'implementazione di esempio 2000 e deve essere espansa in modo appropriato per un'implementazione più ampia.
È possibile installare un certificato firmato dall'autorità di certificazione sul proxy inverso eseguendo la procedura seguente:
Per generare la CSR e la chiave privata,openssl req -new -newkey rsa:4096 -keyout nginx.key -out nginx.csr
immetterla dopo aver effettuato l'accesso al proxy. Seguire il prompt e fornire i dettagli. In questo modo vengono generati il CSR (nginx.csr nell'esempio) e la chiave privata RSA (nginx.key nell'esempio) con una forza di 4096 bit.
Ad esempio:[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
Prendere nota della passphrase PEM, in quanto verrà utilizzata per decrittografare la chiave privata durante la distribuzione.
Inviare il CSR all'autorità di certificazione e ottenere il certificato firmato.
Nota: se il certificato ricevuto dall'autorità di certificazione non è una catena di certificati contenente tutti i rispettivi certificati, comporre tutti i certificati pertinenti in un unico file della catena di certificati.
Decrittografare la chiave generata in precedenza come parte del primo passaggio conopenssl rsa -in nginx.key -out nginx_decrypted.key
il comando. Posizionare il certificato firmato dalla CA e la chiave decrittografata nella cartella /usr/local/openresty/ginx/ssl nel computer proxy inverso. Aggiornare/aggiungere le configurazioni SSL relative al certificato nelle configurazioni Nginx nel file di configurazione /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
Immettere andchmod 400 /usr/local/openresty/nginx/ssl/nginx_decrypted.key
, in modo che il certificato disponga di autorizzazioni di sola lettura e sia limitato al proprietario.
Creare un parametro Diffie-Hellman personalizzato con i seguenti comandi: openssl dhparam -out /usr/local/openresty/nginx/ssl/dhparam.pem 2048 chmod 400 /usr/local/openresty/nginx/ssl/dhparam.pem
Modificare la configurazione del server per utilizzare i nuovi parametri nel file /usr/local/openresty/nginx/conf/conf.d/ssl/ssl.conf:ssl_dhparam /usr/local/openresty/nginx/ssl/dhparam.pem;
Nota: per abilitare questa funzionalità, è necessario che il server utilizzi un certificato firmato dalla CA e che abbia accesso alla CA che ha firmato il certificato.
Aggiungere/aggiornare questa configurazione nella cartella file/usr/local/openresty/nginx/conf/conf.d/ssl/ssl.conf:ssl_stapling on; ssl_stapling_verify on;
Il file di configurazione Nginx predefinito (/usr/local/openresty/nginx/conf/nginx.conf) deve essere modificato in modo da contenere queste voci per applicare la protezione e fornire prestazioni. Questo contenuto deve essere utilizzato per modificare il file di configurazione predefinito creato dall'installazione di 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;
Per impostazione predefinita, la configurazione Nginx resta in ascolto sulla porta 8445 per le richieste Finesse. È possibile abilitare una sola porta alla volta da un proxy inverso per supportare le richieste Finesse, ad esempio 8445. Se la porta 443 deve essere supportata, modificare il file <nginx-install-directory>conf/conf.d/finesse.conf per abilitare l'ascolto su 443 e disabilitare l'ascolto su 8445.
L'autenticazione del certificato SSL del client per le connessioni dagli host proxy inverso può essere abilitata sui componenti upstream CCBU CUIC/Finesse/IdS/Livedata tramite la nuova opzione CVOS CLI che è
utilizza system reverse-proxy client-auth enable/disable/status.
Per impostazione predefinita, questa opzione è disabilitata e deve essere abilitata in modo esplicito dall'amministratore tramite l'esecuzione della CLI su ciascun server upstream in modo indipendente. Se questa opzione è abilitata, il servizio proxy Web Cisco in esecuzione sull'host a monte inizierà l'autenticazione dei certificati client nell'handshake TLS per le connessioni originate da host di proxy inverso trusted aggiunti come parte dell'utilità CLI system reverse proxy allowed-hosts add <proxy-host>.
Di seguito è riportato il blocco di configurazione per lo stesso nei file di configurazione proxy, ossia 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;
Il certificato SSL utilizzato per il traffico in uscita (da proxy a upstream) può essere uguale al certificato SSL configurato per il traffico in entrata (connettore SSL per blocchi di server componenti). Se come proxy_ssl_certificate viene utilizzato un certificato autofirmato che deve essere caricato nei componenti upstream (Finesse/IdS/CUIC/Livedata) per poter autenticare correttamente l'archivio di attendibilità.
La convalida del certificato del server upstream tramite proxy inverso è facoltativa e disabilitata per impostazione predefinita. Se si desidera ottenere l'autenticazione reciproca TLS completa tra host reverse proxy e upstream, è necessario rimuovere il commento dalla configurazione sottostante dai file 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
Avvertenze per la configurazione dell'autenticazione TLS reciproca:
La cache del proxy inverso può essere cancellata con il
comando.
Questa sezione descrive brevemente le linee guida standard da seguire quando si configura Nginx come server proxy.
Queste linee guida derivano da Center for Internet Security. Per ulteriori dettagli su ciascuna linea guida, fare riferimento alla stessa.
La distribuzione reverse proxy del desktop Finesse richiede un file di mapping per configurare l'elenco delle combinazioni di nome host/porta visibili esternamente e il relativo mapping ai nomi e alle porte effettivi del server utilizzati dai server Finesse, IdS e CUIC. Questo file di mappatura configurato sui server interni è la configurazione chiave che consente ai client connessi tramite Internet di essere reindirizzati agli host e alle porte necessari utilizzati su Internet.
Il file di mapping deve essere distribuito in un server Web accessibile ai server componenti e il relativo URI deve essere configurato affinché la distribuzione funzioni. Si consiglia di configurare il file di mappatura utilizzando un server Web dedicato disponibile in rete. Se tale server non è disponibile, è possibile utilizzare il proxy inverso, che richiede che il proxy sia accessibile dall'interno della rete e presenta anche un rischio di esposizione delle informazioni a client esterni che possono effettuare l'accesso non autorizzato alla DMZ. Nella sezione successiva viene illustrato in dettaglio come eseguire questa operazione.
Fare riferimento alla guida alle funzionalità per i passaggi esatti per configurare l'URI del file di mapping su tutti i server componenti e per ulteriori dettagli su come creare i dati del file di mapping.
Questi passaggi sono necessari solo se il proxy inverso viene utilizzato anche come host dei file di mappatura proxy.
nginx -s reload
comando.curl
comando.Se il sistema operativo scelto è CentOS 8, si consiglia di utilizzare queste configurazioni sysctl per le installazioni che utilizzano un server dedicato per ospitare il 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
Dopo aver apportato le modifiche consigliate, si consiglia di riavviare il sistema.
IPtables è un'applicazione che consente a un amministratore di sistema di configurare le tabelle, le catene e le regole IPv4 e IPv6 fornite dal firewall del kernel Linux.
Queste regole IPtables sono configurate per proteggere l'applicazione proxy dagli attacchi di forza bruta limitando l'accesso nel firewall del kernel Linux.
I commenti nella configurazione indicano quale servizio è soggetto a limitazioni di velocità utilizzando le regole.
Nota: se gli amministratori utilizzano una porta diversa o espandono l'accesso a più server utilizzando le stesse porte, è necessario eseguire il ridimensionamento appropriato di queste porte in base a questi numeri.
## 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
Queste regole possono essere applicate direttamente modificando manualmente /etc/sysconfig/iptables oppure salvando la configurazione in un file come iptables.conf ed eseguendo cat iptables.conf >>/etc/sysconfig/iptables per applicarle.
Dopo l'applicazione delle regole, è necessario riavviare il servizio IPtables. Immettere systemctl restart iptables
per riavviare il servizio IPtables.
Oltre alla precedente configurazione delle tabelle IP, le installazioni che conoscono l'intervallo di indirizzi per i client che utilizzano il proxy sono consigliate di utilizzare questa conoscenza per proteggere le regole di accesso al proxy. Ciò può fornire enormi vantaggi quando si tratta di proteggere il proxy da botnet di reti maligne che sono spesso creati nella gamma di indirizzi IP di paesi che hanno regole più lassiste per quanto riguarda la sicurezza online. Si consiglia pertanto di limitare gli intervalli di indirizzi IP agli intervalli di indirizzi IP basati su paese/stato o ISP, se si è certi dei modelli di accesso.
È inoltre utile sapere come bloccare un intervallo specifico di indirizzi quando si identifica un attacco proveniente da un indirizzo IP o da un intervallo di indirizzi IP. In questi casi, le richieste provenienti da questi indirizzi IP possono essere bloccate con regole modificabili.
Per bloccare più indirizzi IP distinti, aggiungere una riga al file di configurazione IPTables per ogni indirizzo IP.
Ad esempio, per bloccare gli indirizzi 192.0.2.3 e 192.0.2.4, immettere:
iptables -A INPUT -s 192.0.2.3 -j DROP iptables -A INPUT -s 192.0.2.4 - j DROP.
Bloccare più indirizzi IP in un intervallo e aggiungere una singola riga al file di configurazione IPTables con l'intervallo IP.
Ad esempio, per bloccare gli indirizzi da 192.0.2.3 a 192.0.2.35, immettere:
iptables -A INPUT -m iprange --src-range 192.0.2.3-192.0.2.35 -j DROP.
Bloccare tutti gli indirizzi IP di un'intera subnet aggiungendo una singola riga al file di configurazione IPTables con la notazione di routing tra domini senza classe per l'intervallo di indirizzi IP. Ad esempio, per bloccare tutti gli indirizzi di classe C, immettere:
iptables -A INPUT -s 192.0.0.0/16 -j DROP.
SELinux è una struttura di sicurezza della piattaforma integrata come miglioramento nel sistema operativo Linux. La procedura per installare e aggiungere i criteri SELinux per eseguire OpenResty come proxy inverso è fornita di seguito.
openresty -s stop
comando.systemctl
comando in modo che durante l'avvio il processo OpenResty venga avviato automaticamente. Immettere questi comandi come utente 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 verificare che il processo venga avviato/arrestato come utente root.Per generare la policy SELinux è necessario installare il pacchetto policycoreutils-devel e le relative dipendenze.
Immettere questo comando per installare policycoreutils-devel
yum install policycoreutils-devel
sepolicy
comando funzioni. usage: sepolicy [-h] [-P POLICY] {booleans,communicate,generate,gui,interface,manpage,network,transition} ... SELinux Policy Inspection Tool
Creazione di un nuovo utente Linux e mappatura con l'utente SElinux
Immettere semanage login -l
per visualizzare il mapping tra gli utenti Linux e gli utenti 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 *
Come utente root, creare un nuovo utente Linux (utente Linux) mappato all'utente user_u 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.
Per visualizzare il mapping tra nginxuser e user_u, immettere questo comando come 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__ accesso mappato per impostazione predefinita all'utente SELinux unconfined_u. Per impostazione predefinita, user_u deve essere limitato da questo comando:
semanage login -m -s user_u -r s0 __default__
Per verificare che il comando funzioni correttamente, immettere semanage login -l
. Dovrebbe produrre questo output:
Modificare nginx.conf ed eseguire la modifica della proprietà per nginxuser.
chown -R nginxuser:nginxuser
* nella directory <Openresty-install-directory>.Modificare il file nginx.conf per includere nginxuser come utente per l'esecuzione dei processi di lavoro.
........ user nginxuser nginxuser; ..........
Scrivi la policy SELinux per Nginx
sepolicy generate --init /usr/bin/nginx
comando, è preferibile iniziare con un criterio esistente.
make
comando.semodule
comando. semodule -i nginx.pp
semodule --list-modules=full
ps -aefZ | grep nginx
Fare riferimento a questa sezione per verificare che la configurazione funzioni correttamente.
Per convalidare la configurazione IdS, attenersi alla seguente procedura:
L'analisi dei dati relativi all'acquisizione di prestazioni di livello superiore equivalente, eseguita con lo strumento nmon, è disponibile nella pagina di download del software Finesse release 12.6(1) ES03 (load_result.zip). I dati rappresentano lo stato del proxy per le operazioni di desktop e supervisor su un'implementazione UCCE di esempio di 2000 utilizzando login SSO e rapporti LD CUIC come configurato nel layout predefinito per 2000 utenti per un periodo di otto ore. Può essere utilizzato per determinare i requisiti di computer, disco e rete per un'installazione che utilizza Nginx su hardware paragonabile.
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
Revisione | Data di pubblicazione | Commenti |
---|---|---|
5.0 |
24-Dec-2021 |
Passaggi corretti per OpenResty. La generazione del certificato SSL e i passaggi dell'applicazione sono stati modificati. Documento aggiornato con collegamenti ES03. |
4.0 |
10-Dec-2021 |
Aggiornamenti ES03. |
3.0 |
10-Nov-2021 |
Guide alla soluzione e descrizione dell'autenticazione aggiornate. |
2.0 |
09-Nov-2021 |
Release iniziale |
1.0 |
09-Nov-2021 |
Versione iniziale |