In dem Dokumentationssatz für dieses Produkt wird die Verwendung inklusiver Sprache angestrebt. Für die Zwecke dieses Dokumentationssatzes wird Sprache als „inklusiv“ verstanden, wenn sie keine Diskriminierung aufgrund von Alter, körperlicher und/oder geistiger Behinderung, Geschlechtszugehörigkeit und -identität, ethnischer Identität, sexueller Orientierung, sozioökonomischem Status und Intersektionalität impliziert. Dennoch können in der Dokumentation stilistische Abweichungen von diesem Bemühen auftreten, wenn Text verwendet wird, der in Benutzeroberflächen der Produktsoftware fest codiert ist, auf RFP-Dokumentation basiert oder von einem genannten Drittanbieterprodukt verwendet wird. Hier erfahren Sie mehr darüber, wie Cisco inklusive Sprache verwendet.
Cisco hat dieses Dokument maschinell übersetzen und von einem menschlichen Übersetzer editieren und korrigieren lassen, um unseren Benutzern auf der ganzen Welt Support-Inhalte in ihrer eigenen Sprache zu bieten. Bitte beachten Sie, dass selbst die beste maschinelle Übersetzung nicht so genau ist wie eine von einem professionellen Übersetzer angefertigte. Cisco Systems, Inc. übernimmt keine Haftung für die Richtigkeit dieser Übersetzungen und empfiehlt, immer das englische Originaldokument (siehe bereitgestellter Link) heranzuziehen.
In diesem Dokument wird die Verwendung eines Reverse-Proxys für den Zugriff auf den Cisco Finesse-Desktop beschrieben, ohne eine Verbindung zu einem VPN herzustellen, das auf den 12.6 ES03-Versionen von Cisco Finesse, Cisco Unified Intelligence Center (CUIC) und Cisco Identity Service (IdS) basiert.
Hinweis: Die Installation und Konfiguration von Nginx wird von Cisco nicht unterstützt. Fragen zu diesem Thema können in den Cisco Community-Foren diskutiert werden.
Hinweis: Bei ES03-Bereitstellungen von VPN-Less finden Sie die Readme-Datei der einzelnen Komponenten, um die Upgrades zu planen und Kompatibilitätseinschränkungen zu überprüfen. Cisco Finesse 12.6 ES03 Readme, CUIC / IdS 12.6 ES03 Readme
Cisco empfiehlt, dass Sie über Kenntnisse in folgenden Bereichen verfügen:
Die Informationen in diesem Dokument basierend auf folgenden Software- und Hardware-Versionen:
Die Informationen in diesem Dokument beziehen sich auf Geräte in einer speziell eingerichteten Testumgebung. Alle Geräte, die in diesem Dokument benutzt wurden, begannen mit einer gelöschten (Nichterfüllungs) Konfiguration. Wenn Ihr Netzwerk in Betrieb ist, stellen Sie sicher, dass Sie die möglichen Auswirkungen aller Befehle kennen.
Hinweis: Die in diesem Dokument beschriebene Konfiguration wurde mit Nginx Reverse Proxy (OpenResty) auf CentOS 8.0 konfiguriert, gehärtet und hinsichtlich der Auslastung mit einer UCCE-Beispielbereitstellung für 2.000 Benutzer getestet. Informationen zu Leistungsprofilen finden Sie in diesem Dokument.
Dieses Bereitstellungsmodell wird für UCCE-/PCCE- und HCS-Lösungen für UCCE unterstützt.
Die Bereitstellung eines Reverse-Proxys wird unterstützt (erhältlich ab 12.6 ES01) und ermöglicht den Zugriff auf den Cisco Finesse Desktop ohne VPN-Verbindung. Diese Funktion bietet den Agenten die Flexibilität, von überall über das Internet auf den Finesse-Desktop zuzugreifen.
Um diese Funktion zu aktivieren, muss ein Reverse Proxy-Paar in der DMZ (Demilitarized Zone) bereitgestellt werden.
Bei Reverse-Proxy-Bereitstellungen bleibt der Medienzugriff unverändert. Zur Verbindung mit den Medien können Mitarbeiter die Cisco Jabber over Mobile and Remote Access-Lösung (MRA) oder die Mobile Agent-Funktion von UCCE mit einem öffentlichen Telefonnetz (Public Switched Telefone Network, PSTN) oder einem mobilen Endgerät verwenden. Dieses Diagramm zeigt, wie die Netzwerkbereitstellung aussehen wird, wenn Sie über ein einzelnes hochverfügbares Paar von Reverse Proxy-Knoten auf zwei Finesse-Cluster und zwei CUIC-Knoten zugreifen.
Der gleichzeitige Zugriff von Agenten im Internet und Agenten, die sich über das LAN verbinden, wird unterstützt, wie in diesem Bild gezeigt.
Hinweis: Informationen zur Unterstützung dieser Bereitstellung finden Sie im Funktionsleitfaden für die Auswahl von Drittanbieter-Proxys anstelle von Nginx.
- UCCE 12.6-Funktionshandbuch - Bietet eine Funktionsübersicht, ein Design sowie Konfigurationsdetails für die Funktion ohne VPN.
- UCCE 12.6 Security Guide (Sicherheitsleitfaden) - Stellt Sicherheitskonfigurationsrichtlinien für die Reverse Proxy-Bereitstellung bereit.
Es wird empfohlen, den Abschnitt "VPN-Less" im Funktionsleitfaden und im Sicherheitsleitfaden zu lesen, bevor Sie dieses Dokument lesen.
Hinweis: Es wird empfohlen, die vorhandene ES01-basierte Nginx-Konfiguration zu entfernen, bevor Sie die ES03 Nginx-Konfigurationen installieren.
Hinweis: ES03-Konfigurationsskripte erfordern auch die entsprechende ES03 COP-Installation in Cisco Finesse, CUIC und IdS.
Finesse 12.6 ES03 führt die Authentifizierung am Proxy ein. Die Authentifizierung wird für Single Sign On (SSO)- und Nicht-SSO-Bereitstellungen unterstützt.
Die Authentifizierung wird für alle Anforderungen und Protokolle erzwungen, die vom Proxy akzeptiert werden, bevor sie an die Upstream-Komponentenserver weitergeleitet werden, wo die von den Komponentenservern lokal erzwungene Authentifizierung ebenfalls erfolgt. Bei der Authentifizierung werden die allgemeinen Finesse-Anmeldeinformationen verwendet, um die Anforderungen zu authentifizieren.
Persistente Verbindungen, wie z. B. Websockets, die für die Authentifizierung und Nachverbindung auf Anwendungsprotokollen wie Extensible Messaging and Presence Protocol (XMPP) basieren, werden am Proxy authentifiziert, indem die IP-Adresse validiert wird, von der eine erfolgreiche Anwendungsauthentifizierung vor dem Herstellen der Socketverbindung durchgeführt wurde.
Für die Nicht-SSO-Authentifizierung sind keine zusätzlichen Konfigurationen erforderlich. Sie funktioniert auch mit sofort einsatzbereiten Nginx-Konfigurationsskripten, sobald die erforderlichen Skriptersetzungen vorgenommen wurden. Die Authentifizierung erfolgt über den Benutzernamen und das Kennwort für die Anmeldung bei Finesse. Der Zugriff auf alle Endgeräte wird mithilfe von Finesse-Authentifizierungsservices validiert.
Die Liste der gültigen Benutzer wird lokal auf dem Proxy zwischengespeichert (aktualisiert den Cache alle 15 Minuten), der verwendet wird, um den Benutzer in einer Anforderung zu validieren. Die Benutzeranmeldeinformationen werden validiert, indem die Anforderung an den konfigurierten Finesse-URI weitergeleitet wird. Anschließend wird der Hash der Anmeldeinformationen lokal zwischengespeichert (15 Minuten zwischengespeichert), um neue Anforderungen lokal zu authentifizieren. Änderungen am Benutzernamen oder Passwort werden erst nach 15 Minuten wirksam.
Für die SSO-Authentifizierung muss der Administrator den IDs-Token-Verschlüsselungsschlüssel auf dem Nginx-Server in der Konfigurationsdatei konfigurieren. Der Schlüssel für die IdS-Tokenverschlüsselung kann vom IdS-Server mit dem CLI-Befehl show ids secret abgerufen werden. Der Schlüssel muss als Teil einer der #Must-change-Ersetzungen konfiguriert werden, die der Administrator in den Skripten durchführen muss, bevor die SSO-Authentifizierung funktionieren kann.
Informationen zu den IdS-SAML-Konfigurationen, die ausgeführt werden müssen, damit die Proxyauflösung für IdS funktioniert, finden Sie im SSO-Benutzerhandbuch.
Nach der Konfiguration der SSO-Authentifizierung kann ein gültiges Paar Token verwendet werden, um auf einen beliebigen Endpunkt im System zuzugreifen. Die Proxykonfiguration validiert die Anmeldeinformationen, indem die an IdS gesendeten Tokenabrufanforderungen abgefangen oder gültige Token entschlüsselt und anschließend lokal für weitere Validierungen zwischengespeichert werden.
Websocket-Verbindungen können nicht mit dem standardmäßigen Autorisierungsheader authentifiziert werden, da benutzerdefinierte Header von nativen Websocket-Implementierungen im Browser nicht unterstützt werden. Authentifizierungsprotokolle auf Anwendungsebene, bei denen die in der Nutzlast enthaltenen Authentifizierungsinformationen den Aufbau einer Websocket-Verbindung nicht verhindern. Daher können böswillige Einheiten DOS- oder DDOS-Angriffe auslösen, indem sie unzählige Verbindungen herstellen, um das System zu überlasten.
Um diese Möglichkeit zu entschärfen, werden in den vorgesehenen nginx-Reverse-Proxy-Konfigurationen spezifische Prüfungen durchgeführt, um zu ermöglichen, dass Websocket-Verbindungen NUR von denjenigen IP-Adressen akzeptiert werden, die vor der Herstellung der Websocket-Verbindung erfolgreich eine authentifizierte REST-Anforderung gestellt haben. Das bedeutet, dass Clients, die vor der Ausgabe einer REST-Anforderung Websocket-Verbindungen herstellen, nun einen Fehler bei der Autorisierung erhalten, der nicht mehr unterstützt wird.
Finesse 12.6 ES02-Authentifizierungs-Skripte verhindern Brute-Force-Angriffe, mit denen das Benutzerkennwort erraten werden kann. Hierzu wird die für den Zugriff auf den Dienst verwendete IP-Adresse nach einer bestimmten Anzahl fehlgeschlagener Versuche in kurzer Zeit blockiert. Diese Anfragen werden mit dem 418-Clientfehler abgelehnt. Auf die Details der gesperrten IP-Adressen können Sie aus den Dateien <nginx-install-directory>/logs/blocking.log und <nginx-install-directory>/logs/error.log zugreifen.
Die Anzahl der fehlgeschlagenen Anforderungen, das Zeitintervall und die Blockierungsdauer können konfiguriert werden. Konfigurationen sind in der Datei <nginx-install-directory>/conf/conf.d/maps.conf vorhanden.
## 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; }
Um die blockierten IP-Adressen zu finden, führen Sie die folgenden Befehle aus dem Verzeichnis <nginx-install-directory>/logs aus.
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"
Es wird empfohlen, dass Kunden Fail2ban oder Ähnliches integrieren, um das Verbot zu den IP-Tabellen/Firewall-Regeln hinzuzufügen.
Fail2ban scannt Protokolldateien und sperrt IPs, die schädliche Zeichen anzeigen - zu viele Passwortfehler, Exploits usw. Im Allgemeinen wird Fail2Ban dann verwendet, um Firewall-Regeln zu aktualisieren, um die IP-Adressen für einen bestimmten Zeitraum abzulehnen. Es können jedoch auch beliebige andere Aktionen (z. B. das Senden einer E-Mail) konfiguriert werden. Weitere Informationen finden Sie unter https://www.fail2ban.org/.
Fail2ban kann so konfiguriert werden, dass die Datei "blocking.log" überwacht wird, um die IP-Adressen zu identifizieren, die von Nginx bei der Erkennung von Bruteforce-Angriffen blockiert werden, und sie für einen konfigurierbaren Zeitraum zu sperren. Die Schritte zum Installieren und Konfigurieren von fail2ban auf einem CentOS-Reverseproxy sind wie folgt:
1. Installieren Sie Fail2ban mit yum.
yum update && yum install epel-release
yum install fail2ban
2. Erstelle ein lokales Gefängnis.
Jail-Konfigurationen ermöglichen es dem Administrator, verschiedene Eigenschaften zu konfigurieren, z. B. die Ports, für die der Zugriff durch eine blockierte IP-Adresse verboten werden soll, die Dauer der Blockierung der IP-Adresse, die Filterkonfiguration zur Identifizierung der blockierten IP-Adresse aus der überwachten Protokolldatei usw. So fügen Sie eine benutzerdefinierte Konfiguration hinzu, um den Zugriff auf die Upstream-Server für blockierte IP-Adressen zu unterbinden:
2.1. Wechseln Sie zum Fail2ban-Installationsverzeichnis (in diesem Beispiel /etc/fail2ban).
cd /etc/fail2ban
2.2. Erstellen Sie eine Kopie von jail.conf in jail.local, um die lokalen Änderungen zu isolieren.
cp jail.conf jail.local
2.3. Fügen Sie diese Jail-Konfigurationen zum Ende der Datei jail.local hinzu, und ersetzen Sie die Ports in der Vorlage durch die tatsächlichen Ports. Aktualisieren Sie ggf. die Konfigurationen für die Sperrzeit.
# 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. Konfigurieren Sie einen Filter.
Ein Filter teilt Fail2ban mit, wonach in den Protokollen gesucht werden muss, um den zu sperrenden Host zu identifizieren. So erstellen Sie einen Filter:
3.1. Erstellen Sie filter.d/finesseban.conf.
touch filter.d/finesseban.conf
3.2. Fügen Sie diese Zeilen der Datei filter.d/finesseban.conf hinzu.
[Definition]
# The regex match that would cause blocking of the host.
failregex = <HOST> will be blocked for
4. Starten Sie Fail2ban.
Führen Sie diesen Befehl aus, um fail2ban zu starten.
fail2ban-client start
Öffnen Sie fail2ban-Protokolldateien, und stellen Sie sicher, dass keine Fehler vorliegen. Standardmäßig werden Protokolle für fail2ban in die Datei /var/log/fail2ban.log aufgenommen.
Alle gültigen Endpunkte, auf die nicht authentifiziert zugegriffen werden kann, werden in den ES03-Skripten aktiv nachverfolgt.
Anforderungen an diese nicht authentifizierten Pfade werden aktiv abgelehnt, wenn ein ungültiger URI angefordert wird, ohne diese Anforderungen an den Upstream-Server zu senden.
Wenn die Anforderung der ersten Optionen erfolgreich war, werden die Antwort-Header "access-control-allow-headers", "access-control-allow-origine", "access-control-allow-methods", "access-control-expose-headers" und "access-control-allow-dentials" fünf Minuten lang im Proxy zwischengespeichert. Diese Header werden für jeden entsprechenden Upstream-Server zwischengespeichert.
In diesem Dokument wird die Konfiguration von Nginx als Reverse-Proxy beschrieben, der für den VPN-losen Zugriff von Finesse verwendet wird. Es werden die UCCE-Lösungskomponente, der Proxy und die Betriebssystemversionen zur Verifizierung der bereitgestellten Anweisungen bereitgestellt. Die entsprechenden Anweisungen müssen an das Betriebssystem/den Proxy Ihrer Wahl angepasst werden.
Hinweis: Die beschriebene Nginx-Konfiguration kann von der Software-Download-Seite von Finesse Release 12.6(1)ES3 heruntergeladen werden.
Konfigurieren Sie nach der Konfiguration des Proxys die Lösungskomponenten (Finesse/CUIC/IdS) für den VPN Less-Zugriff mit dem geplanten Hostnamen und der IP-Adresse des Proxys/der Dienste, die für den Zugriff auf die Lösung mit diesen Befehlen verwendet werden.
utils system reverse-proxy allowed-hosts add utils system reverse-proxy config-uri <uri> add
Die Details zu diesen Befehlen finden Sie im UCCE 12.6-Funktionshandbuch. Auf diese Befehle sollte vor der Verwendung dieses Dokuments näher eingegangen werden.
In diesem Abschnitt werden die Schritte zur OpenResty-basierten Proxy-Installation beschrieben. Der Reverse Proxy wird in der Regel als dediziertes Gerät in der demilitarisierten Netzwerkzone (DMZ) konfiguriert, wie im oben erwähnten Bereitstellungsdiagramm gezeigt.
Alle Aromen von Nginx können für diesen Zweck verwendet werden, solange sie auf Nginx 1.19+ basieren und Lua unterstützen:
Hinweis: Die bereitgestellte Konfiguration wurde mit OpenResty 1.19 getestet und wird voraussichtlich mit anderen Distributionen mit nur geringfügigen Updates funktionieren, falls vorhanden.
export PATH=/usr/local/openresty/bin:$PATH
openresty
ein.openresty -s stop
ein.Die Konfiguration wird für eine OpenResty-basierte Nginx-Installation erläutert. Die Standardverzeichnisse für OpenResty sind:
Hinweis: Die bereitgestellte Konfiguration ist für eine Beispielbereitstellung im Jahr 2000 und muss für eine größere Bereitstellung entsprechend erweitert werden.
Standardmäßig werden die Proxycachepfade im Dateisystem gespeichert. Wir empfehlen, sie in In-Memory-Laufwerke zu ändern, indem Sie einen Cache-Speicherort in tmpfs erstellen, wie hier gezeigt.
Als Beispiel müssen diese Verzeichnisse für die primäre Finesse erstellt werden. Die gleichen Schritte müssen für die sekundären Finesse- und CUIC-Server ausgeführt werden.
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
Hinweis: Erhöhen Sie die Cache-Größe von client und proxy_temp um 1 GB für jedes neue Finesse-Cluster, das der Konfiguration hinzugefügt wird.
mount -av
.df -h
Befehl eingehängt hat.Um beispielsweise die Pfade für das primäre Finesse zu ändern, gehen Sie zu <nginx-install-directory>conf/conf.d/finesse/caches und ändern Sie den vorhandenen Cache-Speicherort /usr/local/openresty/nginx/cache/finesse25/ zum neu erstellten Dateisystem-Speicherort. /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;
Hinweis: Stellen Sie sicher, dass die Summe aller tmpfs-Laufwerksgrößen, die in den vorherigen Schritten erstellt wurden, zur endgültigen Speichergröße für die Bereitstellung hinzugefügt wird, da diese Laufwerke Speicherblöcke sind, die so konfiguriert sind, dass sie für die Anwendung wie Datenträger aussehen und so viel Speicherplatz belegen.
Selbstsignierte Zertifikate sollten nur verwendet werden, bis der Reverse Proxy einsatzbereit ist. Verwenden Sie in einer Produktionsbereitstellung nur ein von der Zertifizierungsstelle (Certificate Authority, CA) signiertes Zertifikat.
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
(Hostname übergeben an : <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
(Hostname übergeben als :<reverseproxy_second_fqdn>)Hinweis: Die bereitgestellte Konfiguration ist für eine Beispielbereitstellung im Jahr 2000 und muss für eine größere Bereitstellung entsprechend erweitert werden.
Ein CA-signiertes Zertifikat kann auf dem Reverse Proxy mit folgenden Schritten installiert werden:
Um die CSR-Anfrage und den privaten Schlüssel zu generieren, gebenopenssl req -new -newkey rsa:4096 -keyout nginx.key -out nginx.csr
Sie nach der Anmeldung beim Proxy ein. Folgen Sie der Eingabeaufforderung, und geben Sie die Details an. Dadurch werden der CSR (im Beispiel nginx.csr) und der private RSA-Schlüssel (im Beispiel nginx.key) mit 4096 Bit Stärke generiert.
Beispiele:[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
Notieren Sie sich die PEM-Passphrase, da diese zum Entschlüsseln des privaten Schlüssels während der Bereitstellung verwendet wird.
Senden Sie die CSR-Anfrage an die Zertifizierungsstelle, und holen Sie das signierte Zertifikat ein.
Hinweis: Wenn das von der Zertifizierungsstelle empfangene Zertifikat keine Zertifikatskette ist, die alle entsprechenden Zertifikate enthält, fassen Sie alle relevanten Zertifikate in einer einzigen Zertifikatskettendatei zusammen.
Entschlüsseln Sie den zuvor generierten Schlüssel im ersten Schritt mitopenssl rsa -in nginx.key -out nginx_decrypted.key
dem Befehl. Platzieren Sie das CA-signierte Zertifikat und den entschlüsselten Schlüssel im Ordner /usr/local/openresty/nginx/ssl auf dem Reverse-Proxy-Rechner. Aktualisieren Sie SSL-Konfigurationen für das Zertifikat, bzw. fügen Sie sie in den Nginx-Konfigurationen der Konfigurationsdatei /usr/local/openresty/nginx/conf/conf.d/ssl/ssl.conf hinzu.
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
Eingebenchmod 400 /usr/local/openresty/nginx/ssl/nginx_decrypted.key
, sodass das Zertifikat schreibgeschützt ist und auf den Besitzer beschränkt ist.
Erstellen Sie einen benutzerdefinierten Diffie-Hellman-Parameter mit den folgenden Befehlen: openssl dhparam -out /usr/local/openresty/nginx/ssl/dhparam.pem 2048 chmod 400 /usr/local/openresty/nginx/ssl/dhparam.pem
Ändern Sie die Serverkonfiguration, um die neuen Parameter in der Datei /usr/local/openresty/nginx/conf/conf.d/ssl/ssl.conf:ssl_dhparam /usr/local/openresty/nginx/ssl/dhparam.pem;
Hinweis: Um dies zu aktivieren, sollte der Server ein CA-signiertes Zertifikat verwenden und der Server sollte Zugriff auf die CA haben, die das Zertifikat signiert hat.
Fügen Sie diese Konfiguration im Verzeichnis file/usr/local/openresty/nginx/conf/conf.d/ssl/ssl.conf:ssl_stapling on; ssl_stapling_verify on;
Die Standard-Nginx-Konfigurationsdatei (/usr/local/openresty/nginx/conf/nginx.conf) muss geändert werden, um diese Einträge zu enthalten, um Sicherheit und Leistung durchzusetzen. Dieser Inhalt sollte verwendet werden, um die Standardkonfigurationsdatei zu ändern, die von der Nginx-Installation erstellt wird.
# 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;
Standardmäßig wartet die Nginx-Konfiguration auf Port 8445 auf Finesse-Anfragen. Von einem Reverse Proxy kann jeweils nur ein Port aktiviert werden, um Finesse-Anfragen zu unterstützen, z. B. 8445. Wenn Port 443 unterstützt werden muss, bearbeiten Sie die Datei <nginx-install-directory>conf/conf.d/finesse.conf, um Listening auf 443 zu aktivieren und Listening auf 8445 zu deaktivieren.
Die Client-SSL-Zertifikatsauthentifizierung für Verbindungen von Reverse-Proxy-Hosts kann für die vorgelagerten CCBU-Komponenten CUIC/Finesse/IdS/Livedata mithilfe der neuen CVOS CLI-Option aktiviert werden, die lautet:
utils system reverse-proxy client-auth enable/disable/status.
Standardmäßig ist diese Option deaktiviert und muss vom Administrator explizit aktiviert werden, indem CLI auf jedem Upstream-Server separat ausgeführt wird. Wenn diese Option aktiviert ist, beginnt der auf dem Upstream-Host ausgeführte Cisco Web-Proxy-Dienst mit der Authentifizierung von Client-Zertifikaten im TLS-Handshake für Verbindungen, die von vertrauenswürdigen Reverse Proxy-Hosts stammen, die als Teil von CLI utils system reverse-proxy allowed-hosts add <proxy-host> hinzugefügt wurden.
Unten sehen Sie den Konfigurationsblock für dasselbe Verzeichnis in den Proxykonfigurationsdateien ssl.conf und 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;
Das SSL-Zertifikat, das für ausgehenden Datenverkehr (Proxy an Upstream) verwendet wird, kann mit dem SSL-Zertifikat übereinstimmen, das für eingehenden Datenverkehr konfiguriert wurde (SSL-Connector für Komponenten-Serverblöcke). Wenn ein selbstsigniertes Zertifikat als proxy_ssl_certificate verwendet wird, muss es an Upstream-Komponenten (Finesse/IdS/CUIC/Livedata) hochgeladen werden, damit es erfolgreich authentifiziert werden kann.
Die Validierung von Upstream-Serverzertifikaten durch Reverse Proxy ist optional und standardmäßig deaktiviert. Wenn Sie eine vollständige gegenseitige TLS-Authentifizierung zwischen Reverse Proxy und Upstream-Hosts erreichen möchten, muss die unten gezeigte Konfiguration aus den Dateien ssl.conf und ssl2.conf entfernt werden.#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
Einschränkungen für die Konfiguration gegenseitiger TLS-Authentifizierung:
Der Reverse-Proxy-Cache kann mit dem
Befehl gelöscht werden.
Dieser Abschnitt beschreibt kurz die Standardrichtlinien, die eingehalten werden müssen, wenn Sie Nginx als Proxy-Server einrichten.
Diese Richtlinien wurden vom Center for Internet Security abgeleitet. Weitere Informationen zu den einzelnen Richtlinien finden Sie im gleichen Dokument.
Für die Reverse-Proxy-Bereitstellung des Finesse-Desktops ist eine Zuordnungsdatei erforderlich, um die Liste der von außen sichtbaren Hostnamen/Port-Kombinationen und deren Zuordnung zu den tatsächlichen Servernamen und Ports zu konfigurieren, die von den Finesse-, IdS- und CUIC-Servern verwendet werden. Diese Zuordnungsdatei, die auf internen Servern konfiguriert wird, ist die Schlüsselkonfiguration, mit der die über das Internet verbundenen Clients zu den erforderlichen Hosts und Ports umgeleitet werden können, die im Internet verwendet werden.
Die Zuordnungsdatei muss auf einem Webserver bereitgestellt werden, auf den die Komponentenserver zugreifen können, und ihr URI muss konfiguriert werden, damit die Bereitstellung funktioniert. Es wird empfohlen, die Zuordnungsdatei mit einem dedizierten Webserver zu konfigurieren, der im Netzwerk verfügbar ist. Steht ein solcher Server nicht zur Verfügung, kann stattdessen der Reverse Proxy verwendet werden. Dies setzt voraus, dass der Proxy innerhalb des Netzwerks zugänglich ist, und birgt außerdem das Risiko, dass die Informationen externen Clients zugänglich gemacht werden, die unbefugten Zugriff auf die DMZ haben können. Im nächsten Abschnitt wird beschrieben, wie dies erreicht werden kann.
Im Funktionshandbuch finden Sie die genauen Schritte zum Konfigurieren des Zuordnungsdatei-URI auf allen Komponentenservern sowie weitere Informationen zum Erstellen der Zuordnungsdateidaten.
Diese Schritte sind nur erforderlich, wenn der Reverse Proxy auch als Host für die Proxy-Zuordnungsdatei verwendet wird.
nginx -s reload
Befehl neu.curl
kann.Wenn das gewählte Betriebssystem CentOS 8 ist, wird empfohlen, die Kernel-Härtung/-Optimierung mit diesen sysctl-Konfigurationen für Installationen durchzuführen, die einen dedizierten Server zum Hosten des Proxys verwenden.
## 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
Ein Neustart wird empfohlen, nachdem Sie die empfohlenen Änderungen vorgenommen haben.
IPtables ist eine Anwendung, mit der ein Systemadministrator die IPv4- und IPv6-Tabellen, -Ketten und -Regeln konfigurieren kann, die von der Linux-Kernel-Firewall bereitgestellt werden.
Diese IP-Tabellen-Regeln sind so konfiguriert, dass sie die Proxy-Anwendung vor Brute-Force-Angriffen schützen, indem sie den Zugriff in der Linux-Kernel-Firewall einschränken.
Die Kommentare in der Konfiguration zeigen an, für welchen Service eine Durchsatzratenbeschränkung gemäß den Regeln erfolgt.
Hinweis: Wenn Administratoren einen anderen Port verwenden oder den Zugriff auf mehrere Server erweitern, die dieselben Ports verwenden, muss die entsprechende Dimensionierung für diese Ports basierend auf diesen Nummern vorgenommen werden.
## 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
Diese Regeln können direkt angewendet werden, indem Sie /etc/sysconfig/iptables manuell bearbeiten oder alternativ die Konfiguration in einer Datei wie iptables.conf speichern und cat iptables.conf >>/etc/sysconfig/iptables ausführen, um die Regeln anzuwenden.
Ein Neustart des IPtables-Dienstes ist erforderlich, nachdem Sie die Regeln angewendet haben. Geben Sie ein, systemctl restart iptables
um den IPtables-Dienst neu zu starten.
Zusätzlich zur vorherigen Konfiguration der IP-Tabellen wird empfohlen, dass Installationen, die den Adressbereich für Clients kennen, die den Proxy verwenden, dieses Wissen zum Schutz der Proxy-Zugriffsregeln verwenden. Dies kann enorme Vorteile mit sich bringen, wenn es darum geht, den Proxy vor Botnets bösartiger Netzwerke zu schützen, die häufig im IP-Adressbereich von Ländern erstellt werden, die laxere Regeln in Bezug auf die Online-Sicherheit haben. Es wird daher dringend empfohlen, die IP-Adressbereiche auf Länder-/bzw. ISP-basierte IP-Bereiche zu beschränken, wenn Sie sich der Zugriffsmuster sicher sind.
Es ist auch nützlich zu wissen, wie ein bestimmter Adressbereich blockiert wird, wenn ein Angriff anhand einer IP-Adresse oder eines IP-Adressbereichs erkannt wird. In solchen Fällen können die Anfragen von diesen IP-Adressen mit iptable Regeln blockiert werden.
Um mehrere eindeutige IP-Adressen zu blockieren, fügen Sie der IPTables-Konfigurationsdatei für jede IP-Adresse eine Zeile hinzu.
Um beispielsweise die Adressen 192.0.2.3 und 192.0.2.4 zu blockieren, geben Sie Folgendes ein:
iptables -A INPUT -s 192.0.2.3 -j DROP iptables -A INPUT -s 192.0.2.4 - j DROP.
Blockieren Sie mehrere IP-Adressen in einem Bereich, und fügen Sie der IPTables-Konfigurationsdatei mit dem IP-Bereich eine einzelne Zeile hinzu.
Um beispielsweise Adressen von 192.0.2.3 bis 192.0.2.35 zu blockieren, geben Sie Folgendes ein:
iptables -A INPUT -m iprange --src-range 192.0.2.3-192.0.2.35 -j DROP.
Blockieren Sie alle IP-Adressen in einem gesamten Subnetz, indem Sie der IPTables-Konfigurationsdatei eine einzelne Zeile hinzufügen, und verwenden Sie dabei die klassenlose Routing-Schreibweise zwischen den Domänen für den IP-Adressbereich. Um beispielsweise alle Adressen der Klasse C zu blockieren, geben Sie Folgendes ein:
iptables -A INPUT -s 192.0.0.0/16 -j DROP.
SELinux ist ein Plattform-Sicherheits-Framework, das als Erweiterung in das Linux-Betriebssystem integriert ist. Das Verfahren zum Installieren und Hinzufügen von SELinux-Richtlinien zum Ausführen von OpenResty als Reverse Proxy wird als Nächstes bereitgestellt.
openresty -s stop
Befehl.systemctl
Befehl, sodass der OpenResty-Prozess während des Bootvorgangs automatisch gestartet wird. Geben Sie diese Befehle als root ein.
[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
ein.systemctl start openresty / systemctl stop openresty
Befehl und stellen Sie sicher, dass der Prozess als Root-Benutzer startet / stoppt.Das Paket policycoreutils-devel und seine Abhängigkeiten müssen installiert werden, um die SELinux-Richtlinie zu generieren.
Geben Sie diesen Befehl ein, um policycoreutils-devel zu installieren.
yum install policycoreutils-devel
sepolicy
Befehl funktioniert. usage: sepolicy [-h] [-P POLICY] {booleans,communicate,generate,gui,interface,manpage,network,transition} ... SELinux Policy Inspection Tool
Neuen Linux-Benutzer erstellen und mit SElinux-Benutzer zuordnen
Geben Sie ein, semanage login -l
um die Zuordnung zwischen Linux-Benutzern und SELinux-Benutzern anzuzeigen.
[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 *
Erstellen Sie als root einen neuen Linux-Benutzer (nginx user), der dem SELinux user_u-Benutzer zugeordnet ist.
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.
Um die Zuordnung zwischen nginxuser und user_u anzuzeigen, geben Sie den folgenden Befehl als root ein:
[root@loadproxy-cisco-com ~]# semanage login -l Login Name SELinux User MLS/MCS Range Service __default__ unconfined_u s0-s0:c0.c1023 * nginxuser user_u s0 * root unconfined_u s0-s0:c0.c1023 *
SELinux __default__ login ist standardmäßig dem SELinux unrestricted_u-Benutzer zugeordnet. Es ist erforderlich, user_u standardmäßig mit dem folgenden Befehl einzuschränken:
semanage login -m -s user_u -r s0 __default__
Um zu überprüfen, ob der Befehl ordnungsgemäß funktioniert, geben Sie semanage login -l
ein. Es sollte folgende Ausgabe erzeugen:
Ändern Sie nginx.conf, und führen Sie die Eigentümeränderung für nginxuser durch.
chown -R nginxuser:nginxuser
* im Verzeichnis <Openresty-install-directory> ein.Ändern Sie die Datei nginx.conf so, dass sie nginxuser als Benutzer für ausgeführte Arbeitsprozesse einbezieht.
........ user nginxuser nginxuser; ..........
Schreiben Sie die SELinux-Richtlinie für Nginx.
sepolicy generate --init /usr/bin/nginx
Befehl zu generieren, sollten Sie mit einer vorhandenen Richtlinie beginnen.
make
Befehl .semodule
Befehl. semodule -i nginx.pp
semodule --list-modules=full
ps -aefZ | grep nginx
Verwenden Sie diesen Abschnitt, um zu überprüfen, ob Ihre Konfiguration ordnungsgemäß funktioniert.
Um die IDs-Konfiguration zu validieren, gehen Sie wie folgt vor:
Die mit dem nmon-Tool erstellte Datenanalyse der äquivalenten Spitzenleistungserfassung ist auf der Software-Download-Seite von Finesse Release 12.6(1) ES03 (load_result.zip) verfügbar. Die Daten stellen den Status des Proxys für Desktop- und Supervisor-Vorgänge in einer Beispielbereitstellung von 2.000 UCCE mit SSO-Anmeldungen und CUIC LD-Berichten dar, wie im Standardlayout für 2.000 Benutzer für einen Zeitraum von acht Stunden konfiguriert. Er kann verwendet werden, um die Computing-, Festplatten- und Netzwerkanforderungen für eine Installation abzuleiten, bei der Nginx auf vergleichbarer Hardware verwendet wird.
SELinux
setenforce 0
systemctl restart nginx
Befehl neu zu starten.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
Befehl.semodule -i nginx.pp
setenforce
Überarbeitung | Veröffentlichungsdatum | Kommentare |
---|---|---|
5.0 |
24-Dec-2021 |
Korrigierte Schritte für OpenResty. SSL-Zertifikatgenerierung und Anwendungsschritte geändert. Dokument mit ES03-Links aktualisiert. |
4.0 |
10-Dec-2021 |
ES03-Aktualisierungen. |
3.0 |
10-Nov-2021 |
Lösungsleitfäden und Authentifizierungsbeschreibung aktualisiert. |
2.0 |
09-Nov-2021 |
Erstveröffentlichung |
1.0 |
09-Nov-2021 |
Erstveröffentlichung |