この製品のドキュメントセットは、偏向のない言語を使用するように配慮されています。このドキュメントセットでの偏向のない言語とは、年齢、障害、性別、人種的アイデンティティ、民族的アイデンティティ、性的指向、社会経済的地位、およびインターセクショナリティに基づく差別を意味しない言語として定義されています。製品ソフトウェアのユーザインターフェイスにハードコードされている言語、RFP のドキュメントに基づいて使用されている言語、または参照されているサードパーティ製品で使用されている言語によりドキュメントに例外が存在する場合があります。シスコのインクルーシブ ランゲージの取り組みの詳細は、こちらをご覧ください。
シスコは世界中のユーザにそれぞれの言語でサポート コンテンツを提供するために、機械と人による翻訳を組み合わせて、本ドキュメントを翻訳しています。ただし、最高度の機械翻訳であっても、専門家による翻訳のような正確性は確保されません。シスコは、これら翻訳の正確性について法的責任を負いません。原典である英語版(リンクからアクセス可能)もあわせて参照することを推奨します。
このドキュメントでは、リバースプロキシを使用して、Cisco Finesse、Cisco Unified Intelligence Center(CUIC)、およびCisco Identity Service(IdS)の12.6 ES03バージョンに基づくVPNに接続せずにCisco Finesseデスクトップにアクセスする方法について説明します。
注:Nginxのインストールと設定は、シスコではサポートされていません。この内容に関する質問は、シスココミュニティフォーラムで説明できます。
注:VPN-LessのES03導入については、アップグレードを計画し、互換性の制限を確認するために、各コンポーネントのreadmeを参照してください。
Cisco Finesse 12.6 ES03 Readme
CUIC/IdS 12.6 ES03 Readme
次の項目に関する知識があることが推奨されます。
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、初期(デフォルト)設定の状態から起動しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
注:このドキュメントで提供されている設定は、CentOS 8.0に導入されたNginx reverse proxy(OpenResty)を使用して、サンプルの2000ユーザUCCE導入に対して設定、強化、および負荷テストされています。このドキュメントでは、パフォーマンスプロファイルのリファレンス情報を提供しています。
この導入モデルは、UCCEソリューションのUCCE/PCCEおよびHCSでサポートされています。
VPNに接続せずにCisco Finesseデスクトップにアクセスするオプションとして、リバースプロキシの導入(12.6 ES01から利用可能)がサポートされています。この機能により、エージェントはインターネット経由でどこからでもFinesseデスクトップにアクセスできます。
この機能を有効にするには、リバースプロキシペアを非武装地帯(DMZ)に導入する必要があります。
逆プロキシ展開では、メディアアクセスは変更されません。メディアに接続するために、エージェントはCisco Jabber over Mobile and Remote Accessソリューション(MRA)またはUCCEのモバイルエージェント機能を公衆電話交換網(PSTN)またはモバイルエンドポイントで使用できます。次の図は、リバースプロキシノードの単一のハイアベイラビリティ(HA)ペアを介して2つのFinesseクラスタと2つのCUICノードにアクセスする場合のネットワーク展開の様子を示しています。
次の図に示すように、インターネット上のエージェントとLANから接続するエージェントからの同時アクセスがサポートされます。
注:この導入をサポートするには、Nginxの代わりにサードパーティ製プロキシ選択基準の機能ガイドを参照してください。
- UCCE 12.6機能ガイド- VPNレス機能の機能の概要、設計、設定の詳細を示しています。
- UCCE 12.6セキュリティガイド:リバースプロキシ導入のセキュリティ設定のガイドラインを提供します。
このドキュメントを読む前に、機能ガイドとセキュリティガイドの「VPNなし」のセクションを確認することを推奨します。
注:ES03 Nginx設定をインストールする前に、既存のES01ベースのNginx設定を削除することを推奨します。
注:ES03設定スクリプトには、Cisco Finesse、CUIC、およびIdSでの対応するES03 COPのインストールも必要です。
Finesse 12.6 ES03では、プロキシでの認証が導入されています。認証は、シングルサインオン(SSO)および非SSO展開でサポートされます。
認証は、プロキシで受け入れられるすべての要求とプロトコルに対して適用され、上流のコンポーネントサーバに転送されます。コンポーネントサーバによってローカルで適用される認証も行われます。すべての認証は、共通のFinesseログインクレデンシャルを使用して要求を認証します。
認証と接続後にExtensible Messaging and Presence Protocol(XMPP)などのアプリケーションプロトコルに依存するWebソケットなどの固定接続は、ソケット接続の確立前にアプリケーション認証が成功したIPアドレスを検証することによって、プロキシで認証されます。
SSO以外の認証では追加の設定は必要なく、必要なスクリプトを置換すると、すぐにNginx設定スクリプトで動作します。認証は、Finesseへのログインに使用するユーザ名とパスワードに依存します。すべてのエンドポイントへのアクセスは、Finesse認証サービスで検証されます。
有効なユーザのリストは、プロキシでローカルにキャッシュされます(15分ごとにキャッシュが更新されます)。これは、要求でユーザを検証するために使用されます。ユーザのクレデンシャルは、設定されたFinesse URIに要求を転送することによって検証され、その後、クレデンシャルハッシュがローカルにキャッシュ(キャッシュされた15分)され、新しい要求がローカルに認証されます。ユーザ名またはパスワードに変更があった場合は、15分後に有効になります。
SSO認証では、管理者が設定ファイル内のNginxサーバでIdSトークン暗号化キーを設定する必要があります。IdSトークン暗号化キーは、IdSサーバから show ids secret
CLI コマンド.これらのキーは、SSO認証が機能する前に管理者がスクリプトで実行する必要がある#Must-change置換の1つの一部として設定する必要があります。
プロキシ解決がIdSで動作するために実行するIdS SAML設定については、SSOユーザガイドを参照してください。
SSO認証を設定すると、有効なトークンのペアを使用して、システム内の任意のエンドポイントにアクセスできます。プロキシ設定は、IdSに対して行われたトークン取得要求を傍受するか、有効なトークンを復号化し、それ以降の検証のためにローカルでキャッシュすることによって、クレデンシャルを検証します。
カスタムヘッダーはブラウザのネイティブwebsocket実装でサポートされていないため、Websocket接続は標準認証ヘッダーで認証できません。アプリケーションレベルの認証プロトコル。ペイロードに含まれる認証情報によってwebsocket接続の確立が妨げられず、悪意のあるエンティティがシステムを圧倒する無数の接続を作成するだけでDOSまたはDDOS攻撃を引き起こす可能性があります。
この可能性を軽減するために、提供されるnginxリバースプロキシ設定では、websocket接続の確立前に認証されたREST要求を正常に行ったIPアドレスからのみwebsocket接続を受け入れることができるように、特定のチェックが行われています。これは、REST要求が発行される前にWebソケット接続を作成しようとするクライアントが認可失敗エラーを受け取り、サポートされている使用シナリオではないことを意味します。
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; }
ブロックされているIPアドレスを検索するには、ディレクトリ<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"
お客様はFail2banまたは同様の機能を使用して、IPテーブル/ファイアウォールルールにbanを追加することを推奨します。
Fail2banはログファイルをスキャンし、悪意のあるサインを示すIPを禁止します。パスワードのエラーが多すぎる、悪用を求めるなど。一般に、Fail2Banはファイアウォールルールを更新して、指定した時間IPアドレスを拒否するように使用されます。ただし、他の任意のアクション(電子メールの送信など)も設定できます。詳細については、https://www.fail2ban.org/を参照してください。
Fail2banは、blocking.logを監視するように設定することで、NginxによってブロックされたIPアドレスをbruteforce攻撃の検出時に識別し、設定可能な期間だけブロックすることができます。CentOSリバースプロキシにfail2banをインストールして設定する手順は、次のとおりです。
yum update && yum install epel-release
yum install fail2ban
Jail設定を使用すると、管理者は、ブロックされたIPアドレスによるアクセスを禁止されるポート、IPアドレスがブロックされる期間、監視されるログファイルからブロックされたIPアドレスを識別するために使用されるフィルタ設定などを設定できます。アップストリームサーバへのアクセスをブロックするIPアドレスを禁止するためのカスタム設定を追加する手順は、次のとおりです。
cd /etc/fail2ban
cp jail.conf jail.local
# Jail configurations for HTTP connections.
[finesse-http-auth]
enabled = true
# The ports to be blocked. Add any additional ports.
port = http,https,<finesse-ports>,<cuic-ports>,<any-other-ports-to-be-blocked>
# Path to nginx blocking logs.
logpath = /usr/local/openresty/nginx/logs/blocking.log
# The filter configuration.
filter = finesseban
# Block the IP from accessing the port, once the IP is blocked by lua.
maxretry= 1
# Duration for retry set to 3 mins. Doesn't count as the maxretry is 1
findtime= 180
# Lock time is set to 3 mins. Change as per requirements.
bantime = 180
フィルタは、Fail2banに、禁止するホストを特定するためにログで何を探すかを指示します。フィルタを作成する手順は、次のとおりです。
touch filter.d/finesseban.conf
[Definition]
# The regex match that would cause blocking of the host.
failregex = <HOST> will be blocked for
次のコマンドを実行して、fail2banを起動します。
fail2ban-client start
fail2banログファイルを開き、エラーがないことを確認します。デフォルトでは、fail2banのログは/var/log/fail2ban.logファイルに移動します。
認証されていない方法でアクセスできる有効なエンドポイントはすべて、ES03スクリプトでアクティブに追跡されます。
これらの非認証パスへの要求は、無効なURIが要求された場合、アップストリームサーバにこれらの要求を送信せずに、アクティブに拒否されます。
最初のオプション要求が成功すると、応答ヘッダーaccess-control-allow-headers、access-control-allow-origin、access-control-allow-methods、access-control-expose-headers、およびaccess-control-allow-credentialsが5分間プロキシにキャッシュされます。これらのヘッダーは、それぞれのアップストリームサーバごとにキャッシュされます。
このドキュメントでは、Finesse VPNレスアクセスをイネーブルにするために使用されるリバースプロキシとしてのNginxの設定について説明します。提供されている手順を確認するために使用されるUCCEソリューションコンポーネント、プロキシ、およびOSのバージョンが提供されます。関連する手順は、選択したOS/プロキシに適合させる必要があります。
注:説明されているNginxの設定は、Finesse Release 12.6(1)ES3ソフトウェアダウンロードページからダウンロードできます。
このセクションでは、OpenRestyベースのプロキシインストール手順について詳しく説明します。リバースプロキシは通常、前述の展開図に示すように、ネットワーク非武装地帯(DMZ)の専用デバイスとして設定されます。
Nginx 1.19+に基づいており、Luaをサポートしている限り、Nginxの種類を使用できます。
注:提供された設定はOpenResty 1.19でテストされており、マイナーアップデートがある場合は、他のディストリビューションと一緒に動作することが期待されます。
OpenRestyのインストールの一部として、Nginxはこの場所にインストールされ、~/.bashrcファイルに追加することでPATH変数にOpenRestyパスを追加します。
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キャッシュを1 GB増やします。
mount -av
.df -h
コマンドが表示されない場合もあります。たとえば、Finesseプライマリのパスを変更するには、<nginx-install-directory>conf/conf.d/finesse/cachesに移動し、既存のキャッシュの場所/usr/local/openresty/nginx/cache/finesse25/を新しく作成したファイルシステムの場所に変更します /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;
注:これらのドライブはアプリケーションに対してディスクのように設定され、メモリ領域を消費するように構成されたメモリブロックであるため、前のすべての手順で作成されたすべてのtmpfsドライブのサイズ合計が最終的なメモリ容量に追加されていることを確認します。
自己署名証明書は、リバースプロキシを実稼働に展開する準備が整うまで使用する必要があります。実稼働環境では、認証局(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
(次のようにホスト名を渡します。<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.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
PEMパスフレーズを書き留めます。これは、展開中に秘密キーを復号化するために使用されます。
CSRを認証局に送信し、署名付き証明書を取得します。
注:CAから受け取った証明書がそれぞれの証明書を含む証明書チェーンではない場合、関連するすべての証明書を1つの証明書チェーンファイルに作成します。
最初のステップの一部として生成されたキーを、openssl rsa -in nginx.key -out nginx_decrypted.key
コマンドが表示されない場合もあります。CA署名付き証明書と復号化されたキーを、リバースプロキシマシンの/usr/local/openresty/nginx/sslフォルダ内に配置します。コンフィギュレーションファイル/usr/local/openresty/nginx/conf/conf.d/ssl/ssl.confのNginx設定の証明書に関連するSSL設定を更新/追加します。
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
/usr/local/openresty/nginx/conf/conf.d/ssl/ssl.confファイルの新しいパラメータを使用するように、サーバ設定を変更します。ssl_dhparam /usr/local/openresty/nginx/ssl/dhparam.pem;
注:これを有効にするには、サーバがCA署名付き証明書を使用し、サーバが証明書に署名したCAにアクセスできる必要があります。
次の設定をfile/usr/local/openresty/nginx/conf/conf.d/ssl/ssl.confディレクトリに追加/更新します。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要求をリッスンします。8445など、リバースプロキシからFinesse要求をサポートするために一度に有効にできるポートは1つだけです。ポート443をサポートする必要がある場合は、<nginx-install-directory>conf/conf.d/finesse.confファイルを編集して443でのリスニングを有効にし、8445でのリスニングを無効にします。
リバースプロキシホストからの接続に対するクライアントSSL証明書認証は、CCBUアップストリームコンポーネントのCUIC/Finesse/IdS/Livedataで、新しいCVOS CLIオプション
utils system reverse-proxy client-auth enable/disable/status。
デフォルトでは、これは無効になっており、管理者が各アップストリームサーバでCLIを個別に実行して明示的に有効にする必要があります。このオプションを有効にすると、アップストリームホストで実行されているCisco Webプロキシサービスは、CLI utils system reverse-proxy allowed-hosts add <proxy-host>の一部として追加された信頼されたリバースプロキシホストからの接続のTLSハンドシェイクでクライアント証明書の認証を開始します。
次に示すのは、プロキシ設定ファイルのssl.confと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;
発信トラフィック(アップストリームへのプロキシ)に使用されるSSL証明書は、着信トラフィックに設定されるssl証明書(コンポーネントサーバブロック用のSSLコネクタ)と同じにすることができます。 自己署名証明書がproxy_ssl_certificateとして使用されている場合は、アップストリームコンポーネント(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: This file should contain the all upstream certificate enteries concatenated together
相互TLS認証を設定するための注意事項:
リバースプロキシキャッシュは、
コマンドが表示されない場合もあります。
このセクションでは、Nginxをプロキシサーバとして設定する際に従う必要がある標準ガイドラインについて簡単に説明します。
これらのガイドラインは、インターネットセキュリティのセンターに基づいています。各ガイドラインの詳細については、同じドキュメントを参照してください。
Finesseデスクトップの逆プロキシ展開では、外部から見えるホスト名/ポートの組み合わせのリストと、Finesse、IdS、およびCUICサーバで使用される実際のサーバ名およびポートへのマッピングを設定するマッピングファイルが必要です。内部サーバに設定されるこのマッピングファイルは、インターネット経由で接続されたクライアントが、インターネット上で使用される必要なホストとポートにリダイレクトできるようにするキー設定です。
マッピングファイルは、コンポーネントサーバにアクセス可能なWebサーバに配置する必要があり、配置を機能させるには、そのURIを設定する必要があります。ネットワーク内で使用可能な専用Webサーバを使用してマッピングファイルを設定することを推奨します。このようなサーバが使用できない場合は、逆プロキシを使用できます。逆プロキシを使用すると、ネットワーク内からアクセス可能なプロキシが必要になり、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のテーブル、チェーン、およびルールを設定できるようにするアプリケーションです。
これらのIPtableルールは、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サービスを再起動します。
以前のIPtable設定に加えて、プロキシを使用するクライアントのアドレス範囲を知っているインストールでは、この知識を使用してプロキシアクセスルールを保護することを推奨します。これは、オンラインセキュリティに関するルールがより緩い国々の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設定ファイルに1行を追加します。
たとえば、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設定ファイルに1行を追加することで、サブネット全体のすべてのIPアドレスをブロックします。たとえば、すべてのクラスCアドレスをブロックするには、次のように入力します。
iptables -A INPUT -s 192.0.0.0/16 -j DROP.
SELinuxは、Linux OSの機能拡張として統合されたプラットフォームセキュリティフレームワークです。SELinuxポリシーをインストールして追加し、リバースプロキシとしてOpenRestyを実行する手順を次に示します。
openresty -s stop
コマンドが表示されない場合もあります。systemctl
コマンドを発行して、起動時にOpenRestyプロセスが自動的に開始されるようにします。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
コマンドを発行し、プロセスがrootユーザとして開始/停止することを確認します。SELinuxポリシーを生成するには、policcoreutils-develパッケージとその依存関係をインストールする必要があります。
policcoreutils-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
を参照してください。
[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 *
rootとして、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__loginは、SELinux unrestricted_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リリース12.6(1) ES03ソフトウェアダウンロードページ(load_result.zip)から入手できます。 このデータは、SSOログインとCUIC LDレポートを使用した2000 UCCEの導入例で、デスクトップおよびスーパーバイザの動作のプロキシの状態を表します。これは、2000ユーザのデフォルトレイアウトで8時間にわたって設定されます。これは、同等のハードウェアでNginxを使用してインストールのコンピューティング、ディスク、およびネットワーク要件を導出するために使用できます。
ssl_stapling on; ssl_stapling_verify on;
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
改定 | 発行日 | コメント |
---|---|---|
5.0 |
24-Dec-2021 |
OpenRestyの手順を修正。SSL証明書の生成とアプリケーションの手順を変更しました。ES03リンクでドキュメントを更新。 |
4.0 |
10-Dec-2021 |
ES03の更新 |
3.0 |
10-Nov-2021 |
ソリューションガイドと認証の説明を更新。 |
2.0 |
09-Nov-2021 |
初版リリース |
1.0 |
09-Nov-2021 |
初版 |