본 제품에 대한 문서 세트는 편견 없는 언어를 사용하기 위해 노력합니다. 본 설명서 세트의 목적상, 편견 없는 언어는 나이, 장애, 성별, 인종 정체성, 민족 정체성, 성적 지향성, 사회 경제적 지위 및 교차성에 기초한 차별을 의미하지 않는 언어로 정의됩니다. 제품 소프트웨어의 사용자 인터페이스에서 하드코딩된 언어, RFP 설명서에 기초한 언어 또는 참조된 서드파티 제품에서 사용하는 언어로 인해 설명서에 예외가 있을 수 있습니다. 시스코에서 어떤 방식으로 포용적인 언어를 사용하고 있는지 자세히 알아보세요.
Cisco는 전 세계 사용자에게 다양한 언어로 지원 콘텐츠를 제공하기 위해 기계 번역 기술과 수작업 번역을 병행하여 이 문서를 번역했습니다. 아무리 품질이 높은 기계 번역이라도 전문 번역가의 번역 결과물만큼 정확하지는 않습니다. Cisco Systems, Inc.는 이 같은 번역에 대해 어떠한 책임도 지지 않으며 항상 원본 영문 문서(링크 제공됨)를 참조할 것을 권장합니다.
이 문서에서는 Cisco Finesse, Cisco CUIC(Unified Intelligence Center) 및 Cisco IdS(Identity Service)의 12.6 ES02 버전을 기반으로 VPN에 연결하지 않고 역방향 프록시를 사용하여 Cisco Finesse 데스크톱에 액세스하는 방법에 대해 설명합니다.
참고: Nginx 설치 및 구성은 Cisco에서 지원하지 않습니다. 이 주제에 대한 질의는 Cisco 커뮤니티 포럼에서 다룰 수 있습니다.
참고: VPN-Less의 ES02 구축의 경우 업그레이드 계획을 세우고 호환성 제한을 확인하려면 개별 구성 요소의 릴리스 정보를 참조하십시오.
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 이해해야 합니다.
참고: 이 문서에 제공된 컨피그레이션은 샘플 2000 사용자 UCCE 구축에 대해 CentOS 8.0에 구축된 Nginx reverse proxy(OpenResty)를 사용하여 구성, 강화 및 로드되었습니다. 이 문서에서는 성능 프로파일 참조 정보를 사용할 수 있습니다.
이 구축 모델은 UCCE 솔루션용 UCCE/PCCE 및 HCS에서 지원됩니다.
VPN에 연결하지 않고도 Cisco Finesse 데스크톱에 액세스할 수 있는 옵션으로 역방향 프록시를 구축할 수 있습니다(12.6 ES01에서 사용 가능). 이 기능은 상담원이 인터넷을 통해 어디서나 Finesse 데스크톱에 액세스할 수 있는 유연성을 제공합니다.
이 기능을 활성화하려면 리버스 프록시 쌍을 DMZ(Demilitarized Zone)에 구축해야 합니다.
리버스 프록시 구축에서는 미디어 액세스가 변경되지 않습니다. 미디어에 연결하기 위해 에이전트는 MRA(Mobile and Remote Access Solution)를 통한 Cisco Jabber를 사용하거나 PSTN(Public Switched Telephone Network) 또는 모바일 엔드포인트에서 UCCE의 Mobile Agent 기능을 사용할 수 있습니다. 이 다이어그램은 리버스 프록시 노드의 단일 HA(고가용성) 쌍을 통해 두 개의 Finesse 클러스터와 두 개의 CUIC 노드에 액세스할 때 네트워크 구축의 모양을 보여줍니다.
이 이미지에 표시된 대로 인터넷 상담원과 LAN에서 연결하는 상담원의 동시 액세스가 지원됩니다.
참고: 이 구축을 지원하려면 Nginx 대신 서드파티 프록시 선택 기준에 대한 기능 가이드를 참조하십시오.
- UCCE 12.6 기능 가이드 - VPN-Less 기능에 대한 기능 개요, 설계 및 컨피그레이션 세부사항을 제공합니다.
- UCCE 12.6 보안 가이드 - 리버스 프록시 구축을 위한 보안 컨피그레이션 지침을 제공합니다.
이 문서를 읽기 전에 기능 설명서 및 보안 설명서의 VPN-Less 섹션을 검토하는 것이 좋습니다.
참고: ES02 Nginx 컨피그레이션을 설치하기 전에 기존 ES01 기반 Nginx 컨피그레이션을 제거하는 것이 좋습니다.
참고: ES02 컨피그레이션 스크립트에는 Cisco Finesse, CUIC 및 IdS에 해당하는 ES02 COP를 설치해야 합니다.
Finesse 12.6 ES02는 프록시에서 인증을 도입합니다. SSO(Single Sign On) 및 비 SSO 구축에서는 인증이 지원됩니다.
인증은 프록시에서 수락한 모든 요청 및 프로토콜에 대해 시행되며, 이 프로토콜은 업스트림 구성 요소 서버로 전달되기 전에 적용됩니다. 여기서 구성 요소 서버에서 로컬로 시행하는 인증도 수행됩니다. 모든 인증에서는 일반적인 Finesse 로그인 자격 증명을 사용하여 요청을 인증합니다.
인증 및 사후 연결을 위해 XMPP(Extensible Messaging and Presence Protocol)와 같은 애플리케이션 프로토콜을 사용하는 웹 소켓과 같은 영구 연결은 소켓 연결을 설정하기 전에 애플리케이션 인증이 성공한 IP 주소를 검증하여 프록시에서 인증됩니다.
비SSO 인증에는 추가 컨피그레이션이 필요하지 않으며 필요한 스크립트 교체가 완료되면 즉시 Nginx 컨피그레이션 스크립트를 사용할 수 있습니다. 인증은 Finesse에 로그인하는 데 사용되는 사용자 이름과 비밀번호를 사용합니다. 모든 엔드포인트에 대한 액세스는 Finesse 인증 서비스로 검증됩니다.
유효한 사용자 목록은 프록시에서 로컬로 캐시됩니다(15분마다 캐시를 업데이트). 이 목록은 요청에서 사용자를 확인하는 데 사용됩니다. 사용자 자격 증명이 구성된 Finesse URI에 요청을 전달하여 유효성을 검사하고 있으며, 그런 다음 자격 증명 해시가 로컬에 캐시되어(15분 캐시) 새 요청을 로컬로 인증합니다. 사용자 이름 또는 비밀번호가 변경되면 15분 후에만 적용됩니다.
SSO 인증에서는 관리자가 구성 파일 내의 Nginx 서버에서 IdS 토큰 암호화 키를 구성해야 합니다. IdS 토큰 암호화 키는 show ids secret
CLI 명령. SSO 인증이 작동하기 전에 관리자가 스크립트에서 수행해야 하는 #Must-change 교체 중 하나로 키를 구성해야 합니다.
프록시 확인이 IdS에 대해 작동하려면 수행할 IdS SAML 컨피그레이션에 대한 SSO 사용 설명서를 참조하십시오.
SSO 인증이 구성되면 유효한 토큰 쌍을 사용하여 시스템의 엔드포인트에 액세스할 수 있습니다. 프록시 컨피그레이션은 IdS에 대한 토큰 검색 요청을 가로채거나 유효한 토큰을 해독한 다음 추가 검증을 위해 이를 로컬로 캐싱하여 자격 증명을 검증합니다.
사용자 지정 헤더는 브라우저의 기본 websocket 구현에서 지원되지 않으므로 표준 권한 부여 헤더로 웹 소켓 연결을 인증할 수 없습니다. 페이로드에 포함된 인증 정보가 웹 소켓 연결 설정을 방지하지 않는 애플리케이션 수준 인증 프로토콜입니다. 따라서 악의적인 엔터티는 시스템을 압도하기 위해 수많은 연결을 생성하여 DOS 또는 DDOS 공격을 렌더링할 수 있습니다.
이러한 가능성을 완화하기 위해 제공된 nginx 역방향 프록시 컨피그레이션에서는 websocket 연결을 설정하기 전에 인증된 REST 요청을 성공적으로 수행한 IP 주소로부터 웹 소켓 연결을 수락할 수 있도록 특정 검사를 수행합니다. 즉, REST 요청이 발행되기 전에 웹 소켓 연결을 생성하려고 시도하는 클라이언트는 권한 부여 실패 오류를 가져오고 지원되는 사용 시나리오가 아닙니다.
Finesse 12.6 ES02 인증 스크립트는 사용자 비밀번호를 추측하는 데 사용할 수 있는 무작위 대입 공격을 능동적으로 방지합니다. 이렇게 하려면 짧은 시간에 몇 번의 실패 시도 후에 서비스에 액세스하는 데 사용되는 IP 주소를 차단합니다. 이러한 요청은 418 클라이언트 오류로 거부됩니다. 차단된 IP 주소의 세부 정보는 <nginx-install-directory>/logs/blocking.log 및 <nginx-install-directory>/logs/error.log 파일에서 액세스할 수 있습니다.
실패한 요청 수, 시간 간격 및 차단 기간을 구성할 수 있습니다. 구성은 <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; }
grep -r "IP is already blocked." error.log
=========================================
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"
tail -f blocking.log
====================
2021/10/29 17:30:59 [error] 939738#939738: *1857 [lua] content_by_lua(rest_cache:189 2: [10.70.235.30] will be blocked for [ 30 minutes ] for exceeding retry limit., client: 10.70.235.30, server: saproxy.cisco.com, request: "GET /finesse/api/SystemInfo HTTP/1.1", host: "saproxy.cisco.com:8445"
고객은 Fail2Ban 또는 이와 유사한 방식으로 통합하여 IPtable/방화벽 규칙에 금지를 추가하는 것이 좋습니다.
인증되지 않은 방식으로 액세스할 수 있는 모든 유효한 엔드포인트는 ES02 스크립트에서 추적됩니다.
이러한 인증되지 않은 경로에 대한 요청은 업스트림 서버로 요청을 보내지 않고 잘못된 URI가 요청되면 적극적으로 거부됩니다.
첫 번째 옵션 요청이 성공하면 응답 헤더 access-control-allow-headers, access-control-allow-origin, access-control-allow-methods, access-control-expose-headers 및 access-control-allow-credentials가 프록시에 5분 동안 캐시됩니다. 이러한 헤더는 각 업스트림 서버에 대해 캐시됩니다.
이 문서에서는 Nginx를 Finesse VPN-Less 액세스를 활성화하는 데 사용할 리버스 프록시로 구성하는 방법에 대해 설명합니다. 제공된 지침을 확인하는 데 사용되는 UCCE 솔루션 구성 요소, 프록시 및 OS 버전이 제공됩니다. 관련 지침은 선택한 OS/프록시에 맞게 조정되어야 합니다.
참고: 설명된 Nginx 컨피그레이션은 Finesse Release 12.6(1)ES2 소프트웨어 다운로드 페이지에서 다운로드할 수 있습니다.
이 섹션에서는 OpenRestore 기반 프록시 설치 단계를 자세히 설명합니다. 리버스 프록시는 일반적으로 앞서 언급한 구축 다이어그램에 표시된 대로 DMZ(network demilitarized zone)에서 전용 디바이스로 구성됩니다.
Nginx 1.19+를 기반으로 하고 Lua를 지원하는 경우 이 용도로 Nginx의 모든 종류를 사용할 수 있습니다.
참고: 제공된 컨피그레이션은 OpenResty 1.19에서 테스트되었으며 간단한 업데이트만 있는 다른 배포에서 작동할 것으로 예상됩니다(있는 경우).
OpenRestore 설치의 일부로 Nginx가 이 위치에 설치되고 ~/.bashrc 파일에 추가하여 PATH 변수에 OpenRestore 경로를 추가합니다.
export PATH=/usr/local/openresty/bin:$PATH
openresty
.openresty -s stop
.이 컨피그레이션은 OpenResty 기반 Nginx 설치에 대해 설명합니다. OpenResty의 기본 디렉토리는 다음과 같습니다.
참고: 제공된 컨피그레이션은 샘플 2000 구축을 위한 것이며 대규모 구축을 위해 적절하게 확장되어야 합니다.
기본적으로 프록시 캐시 경로는 파일 시스템에 저장됩니다. 여기에 표시된 것처럼 tmpfs에서 캐시 위치를 생성하여 메모리 내 드라이브로 변경하는 것이 좋습니다.
예를 들어, 기본 Finesse에 대해 이러한 디렉토리를 만들어야 합니다. 보조 Finesse 및 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
참고: 구성에 추가된 새 Finesse 클러스터 각각에 대해 클라이언트 및 proxy_temp 캐시를 1GB씩 늘립니다.
mount -av
.df -h
명령을 실행합니다.예를 들어 Finesse 1의 경로를 변경하려면 <nginx-install-directory>conf/conf.d/finesse/cache로 이동하여 기존 캐시 위치/usr/local/openresty/nginx/cache/finesse25/를 새로 생성된 파일 시스템 위치/home/primaryFinesse로 변경합니다.
##Must-change /usr/local/openresty/nginx/cache/ location would change depending on folder extraction ##
Nginx config file to cache the desktop/shindig and notification service related static files.
proxy_cache_path /home/primaryFinesse/desktop levels=1:2 use_temp_path=on keys_zone=desktop_cache_primary: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_primary: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_primary: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:10m max_size=1500m inactive=40m use_temp_path=off;
참고: 모든 이전 단계에서 생성된 모든 MPFS 드라이브 크기의 합계가 구축의 최종 메모리 크기 조정에 추가되어야 합니다. 이러한 드라이브는 애플리케이션에 디스크처럼 보이도록 구성된 메모리 블록으로 메모리 공간을 최대한 많이 소비하기 때문입니다.
자체 서명 인증서는 리버스 프록시를 프로덕션 환경으로 롤아웃할 준비가 될 때까지 사용해야 합니다. 프로덕션 구축에서는 CA(Certificate Authority) 서명 인증서만 사용합니다.
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
(으)로 호스트 이름 전달: <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
(호스트 이름 전달:<reverseproxy_secondary_fqdn>)참고: 제공된 컨피그레이션은 샘플 2000 구축을 위한 것이며 대규모 구축을 위해 적절하게 확장되어야 합니다.
CA 서명 인증서는 다음 단계를 통해 역방향 프록시에 설치할 수 있습니다.
CSR 및 개인 키를 생성하려면 openssl req -new -newkey rsa:4096 -keyout nginx.key -out nginx.csr
프록시에 로그인한 후 프롬프트에 따라 세부사항을 입력합니다. 그러면 강도 4096비트의 CSR(예제의 nginx.csr) 및 RSA 개인 키(예제의 nginx.key)가 생성됩니다.
예를 들면 다음과 같습니다.
[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.comEmail 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
PEM 암호 구문을 기록해 둡니다. 구축 중에 개인 키를 해독하는 데 사용됩니다.
CSR을 인증 기관에 보내고 서명된 인증서를 가져옵니다.
에서 첫 번째 단계의 일부로 생성된 키를 해독합니다. openssl rsa -in nginx.key -out nginx_decrypted.key
명령을 실행합니다. CA 서명 인증서 및 암호 해독된 키를 역방향 프록시 시스템의 폴더( 예에서 /usr/local/openresty/nginx/ssl)에 배치합니다. Nginx 컨피그레이션의 인증서와 관련된 SSL 컨피그레이션을 업데이트/추가합니다.
server { server_name <proxy-name>; listen 8445 ssl reuseport http2; listen [::]:8445 ssl reuseport http2; ..... 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
및 chmod 400 /usr/local/openresty/nginx/ssl/nginx_decrypted.key
- 인증서가 읽기 전용 권한을 가지며 소유자로 제한됩니다.
다음 명령을 사용하여 사용자 지정 Diffie-Hellman 매개변수를 생성합니다.
openssl dhparam -out /usr/local/openresty/nginx/ssl/dhparam.pem 2048
chmod 400 /usr/local/openresty/nginx/ssl/dhparam.pem
새 매개변수를 사용하도록 서버 컨피그레이션을 변경합니다.
server { ..... ssl_dhparam /usr/local/openresty/nginx/ssl/dhparam.pem; ..... }
참고: 이를 활성화하려면 서버가 CA 서명 인증서를 사용해야 하며, 서버는 인증서를 서명한 CA에 액세스할 수 있어야 합니다.
구성에 추가:
server { ..... ssl_stapling on; ssl_stapling_verify on; ..... }
보안을 적용하고 성능을 제공하기 위해 기본 Nginx 구성 파일(/usr/local/openresty/nginx/conf/nginx.conf)을 수정해야 합니다. 이 콘텐츠는 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;
기본적으로 Nginx 컨피그레이션은 포트 8445에서 Finesse 요청을 수신합니다. 한 번에 Finesse 요청을 지원하기 위해 리버스 프록시에서 포트 하나만 활성화할 수 있습니다(예: 8445). 포트 443을 지원해야 하는 경우 443에서 수신을 활성화하고 8445에서 수신을 비활성화하려면 <nginx-install-directory>conf/conf.d/finesse.conf 파일을 편집합니다.
ES02에서는 기본적으로 모든 업스트림 구성 요소가 allowed-hosts CLI utils system reverse-proxy allowed-hosts add <proxy-host> 명령의 일부로 추가된 모든 호스트를 검증하도록 구성됩니다. 따라서 역방향 프록시 호스트와 업스트림 구성 요소(Finesse/IdS/CUIC/Livedata) 간에 성공적으로 통신하려면 역방향 프록시 인증서를 모든 업스트림 구성 요소의 tomcat 트러스트 저장소에 업로드해야 합니다. 인증서가 업로드되면 노드를 다시 시작합니다.
역방향 프록시에 의한 업스트림 서버 인증서 검증은 선택 사항이며 기본적으로 비활성화되어 있습니다. 역방향 프록시와 업스트림 호스트 간에 전체 TLS 상호 인증을 수행하려면 이 컨피그레이션을 ssl.conf 및 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 파일은 연결된 모든 업스트림 인증서 엔트리를 포함해야 합니다.
리버스 프록시 캐시는
명령을 실행합니다.
이 섹션에서는 Nginx를 프록시 서버로 설정할 때 따라야 할 표준 지침에 대해 간략하게 설명합니다.
이러한 지침은 Center for Internet Security에서 파생됩니다. 각 지침에 대한 자세한 내용은 같은 항목을 참조하십시오.
Finesse 데스크톱의 역방향 프록시 구축에는 외부에 표시되는 호스트 이름/포트 조합 목록과 Finesse, IdS 및 CUIC 서버에서 사용하는 실제 서버 이름 및 포트에 대한 매핑을 구성하기 위한 매핑 파일이 필요합니다. 내부 서버에 구성된 이 매핑 파일은 인터넷을 통해 연결된 클라이언트가 인터넷에서 사용되는 필수 호스트 및 포트로 리디렉션되도록 하는 핵심 컨피그레이션입니다.
구성 요소 서버에서 액세스할 수 있는 웹 서버에 매핑 파일을 구축해야 하며 구축이 작동하려면 해당 URI를 구성해야 합니다. 네트워크 내에서 사용 가능한 전용 웹 서버를 사용하여 매핑 파일을 구성하는 것이 좋습니다. 이러한 서버를 사용할 수 없는 경우 역방향 프록시를 대신 사용할 수 있습니다. 그러면 네트워크 내에서 프록시에 액세스할 수 있어야 하며 DMZ에 무단 액세스를 수행할 수 있는 외부 클라이언트에 정보를 노출할 위험이 있습니다. 다음 섹션에서는 이 작업을 수행하는 방법을 자세히 설명합니다.
모든 구성 요소 서버에서 매핑 파일 URI를 구성하는 정확한 단계 및 매핑 파일 데이터를 만드는 방법에 대한 자세한 내용은 기능 가이드를 참조하십시오.
이러한 단계는 역방향 프록시가 프록시 매핑 파일 호스트로도 사용되는 경우에만 필요합니다.
nginx -s reload
명령을 실행합니다.curl
명령을 실행합니다.선택한 운영 체제가 CentOS 8인 경우, 프록시 호스팅을 위해 전용 서버를 사용하는 설치에 대해 이러한 sysctl 구성을 사용하여 커널 강화/조정을 수행하는 것이 좋습니다.
## 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
권장 사항을 변경한 후 재부팅하는 것이 좋습니다.
IPtables는 시스템 관리자가 Linux 커널 방화벽에서 제공하는 IPv4 및 IPv6 테이블, 체인 및 규칙을 구성할 수 있는 애플리케이션입니다.
이러한 IPtables 규칙은 Linux 커널 방화벽에서 액세스를 제한하여 무작위 대입 공격으로부터 프록시 애플리케이션을 보호하도록 구성됩니다.
컨피그레이션의 코멘트는 규칙을 사용하여 어떤 서비스가 속도 제한을 받고 있는지 나타냅니다.
참고: 관리자가 다른 포트를 사용하거나 동일한 포트를 사용하여 여러 서버에 대한 액세스를 확장할 경우 이러한 번호에 따라 적절한 크기 조정을 수행해야 합니다.
## 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
이러한 규칙은 /etc/sysconfig/iptables를 수동으로 편집하거나 iptables.conf와 같은 파일에 컨피그레이션을 저장하고 cat iptables.conf >>/etc/sysconfig/iptables를 실행하여 규칙을 적용할 수 있습니다.
규칙을 적용한 후 IPtables 서비스를 다시 시작해야 합니다. 입력 systemctl restart iptables
IPtables 서비스를 재시작합니다.
이전 IPtables 컨피그레이션 외에도 프록시를 사용하는 클라이언트의 주소 범위를 알고 있는 설치는 이 지식을 사용하여 프록시 액세스 규칙을 보호하는 것이 좋습니다. 이는 온라인 보안과 관련하여 좀 더 느슨한 규칙을 가지고 있는 국가의 IP 주소 범위에 자주 생성되는 악성 네트워크의 봇넷으로부터 프록시를 보호하는 데 있어 큰 비용을 지불할 수 있습니다. 따라서 액세스 패턴이 확실하다면 IP 주소 범위를 국가/주 또는 ISP 기반 IP 범위로 제한하는 것이 좋습니다.
또한 IP 주소 또는 IP 주소 범위에서 공격을 식별하여 특정 주소 범위를 차단하는 방법을 아는 것이 유용합니다. 이러한 경우 해당 IP 주소의 요청을 iptable 규칙으로 차단할 수 있습니다.
여러 고유 IP 주소를 차단하려면 각 IP 주소의 IPTables 컨피그레이션 파일에 라인을 추가합니다.
예를 들어 주소 192.0.2.3 및 192.0.2.4를 차단하려면 다음을 입력합니다.
iptables -A INPUT -s 192.0.2.3 -j DROP iptables -A INPUT -s 192.0.2.4 - j DROP.
한 범위의 여러 IP 주소를 차단하고 IP 범위의 IPTables 컨피그레이션 파일에 한 줄을 추가합니다.
예를 들어 192.0.2.3에서 192.0.2.35으로 주소를 차단하려면 다음을 입력합니다.
iptables -A INPUT -m iprange --src-range 192.0.2.3-192.0.2.35 -j DROP.
IP 주소 범위에 대해 클래스 없는 도메인 간 라우팅 표기법을 사용하여 IPTables 컨피그레이션 파일에 단일 라인을 추가하여 전체 서브넷의 모든 IP 주소를 차단합니다. 예를 들어 모든 클래스 C 주소를 차단하려면 다음을 입력합니다.
iptables -A INPUT -s 192.0.0.0/16 -j DROP.
SELinux는 Linux OS에 향상된 기능으로 통합된 플랫폼 보안 프레임워크입니다. OpenResty를 실행하는 SELinux 정책을 설치하고 추가하는 절차는 다음에 제공됩니다.
openresty -s stop
명령을 실행합니다.systemctl
명령을 사용하여 부팅 중에 OpenRestore 프로세스가 자동으로 시작됩니다. 이러한 명령을 루트 사용자로 입력합니다.
[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
명령을 실행하여 프로세스가 루트 사용자로 시작/중지되었는지 확인합니다.SELinux 정책을 생성하려면 policyCoreutils-devel 패키지 및 해당 종속성을 설치해야 합니다.
policycorutils-devel을 설치하려면 이 명령을 입력합니다.
yum install policycoreutils-devel
sepolicy
명령이 작동합니다. usage: sepolicy [-h] [-P POLICY] {booleans,communicate,generate,gui,interface,manpage,network,transition} ... SELinux Policy Inspection Tool
SElinux 사용자로 새 Linux 사용자 및 맵 생성
입력 semanage login -l
Linux 사용자와 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 *
루트로 SELinux user_u 사용자에 매핑된 새 Linux 사용자(nginx 사용자)를 생성합니다.
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.
nginxuser와 user_u 간의 매핑을 보려면 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__기본적으로 SELinux unemoted_u 사용자에 매핑됩니다. user_u를 기본적으로 다음 명령으로 제한해야 합니다.
semanage login -m -s user_u -r s0 __default__
명령이 제대로 작동하는지 확인하려면 semanage login -l
. 다음과 같은 출력이 생성됩니다.
nginx.conf를 수정하고 nginxuser에 대한 소유권 변경을 수행합니다.
chown -R nginxuser:nginxuser
* <Openresty-install-directory> 디렉토리에 있습니다.nginx.conf 파일을 수정하여 작업자 프로세스를 실행하기 위한 사용자로 nginxuser를 포함합니다.
........ user nginxuser nginxuser; ..........
Nginx에 대한 SELinux 정책 쓰기
sepolicy generate --init /usr/bin/nginx
기존 정책으로 시작하는 것이 좋습니다.make
명령을 실행합니다.semodule
명령을 실행합니다. semodule -i nginx.pp
semodule --list-modules=full
ps -aefZ | grep nginx
이 섹션을 사용하여 컨피그레이션이 제대로 작동하는지 확인합니다.
IdS 컨피그레이션을 검증하려면 다음 단계를 수행합니다.
nmon 툴로 만든 동급 최고의 성능 캡처에 대한 데이터 분석은 Finesse Release 12.6(1)ES2 소프트웨어 다운로드 페이지(load_result.zip)에서 확인할 수 있습니다. 데이터는 데스크톱 및 수퍼바이저 작업에 대한 프록시 상태를 나타내며, 샘플 2000 UCCE 구축에서 SSO 로그인을 사용하는 경우, 사용자 2000명을 위한 기본 레이아웃에 구성된 대로 8시간 동안 CUIC LD 보고서를 나타냅니다. 비교 가능한 하드웨어에서 Nginx를 사용하여 설치에 필요한 컴퓨팅, 디스크 및 네트워크 요구 사항을 도출하는 데 사용할 수 있습니다.
SELinux
setenforce 0
systemctl restart nginx
명령을 실행합니다.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
명령을 실행합니다.semodule -i nginx.pp
setenforce
개정 | 게시 날짜 | 의견 |
---|---|---|
3.0 |
10-Nov-2021 |
솔루션 가이드 및 인증 설명을 업데이트했습니다. |
2.0 |
09-Nov-2021 |
초기 릴리스 |
1.0 |
09-Nov-2021 |
최초 릴리스 |