تسعى مجموعة الوثائق لهذا المنتج جاهدة لاستخدام لغة خالية من التحيز. لأغراض مجموعة الوثائق هذه، يتم تعريف "خالية من التحيز" على أنها لغة لا تعني التمييز على أساس العمر، والإعاقة، والجنس، والهوية العرقية، والهوية الإثنية، والتوجه الجنسي، والحالة الاجتماعية والاقتصادية، والتمييز متعدد الجوانب. قد تكون الاستثناءات موجودة في الوثائق بسبب اللغة التي يتم تشفيرها بشكل ثابت في واجهات المستخدم الخاصة ببرنامج المنتج، أو اللغة المستخدمة بناءً على وثائق RFP، أو اللغة التي يستخدمها منتج الجهة الخارجية المُشار إليه. تعرّف على المزيد حول كيفية استخدام Cisco للغة الشاملة.
ترجمت Cisco هذا المستند باستخدام مجموعة من التقنيات الآلية والبشرية لتقديم محتوى دعم للمستخدمين في جميع أنحاء العالم بلغتهم الخاصة. يُرجى ملاحظة أن أفضل ترجمة آلية لن تكون دقيقة كما هو الحال مع الترجمة الاحترافية التي يقدمها مترجم محترف. تخلي Cisco Systems مسئوليتها عن دقة هذه الترجمات وتُوصي بالرجوع دائمًا إلى المستند الإنجليزي الأصلي (الرابط متوفر).
يصف هذا المستند كيفية إستخدام وكيل عكسي للوصول إلى سطح المكتب Cisco Finesse دون الاتصال بشبكة VPN تستند إلى إصدارات 12.6 ES03 من Cisco Finesse، و Cisco Unified Intelligence Center (CUIC)، و Cisco Identity Service (IDs).
ملاحظة: لا تدعم Cisco تثبيت NGINX وتكوينه. يمكن مناقشة الاستعلامات المتعلقة بهذا الموضوع على منتديات مجتمع Cisco.
ملاحظة: بالنسبة لعمليات نشر الطراز ES03 التي تتميز بأنها لا تحتوي على شبكات VPN، يمكنك الاطلاع على قائمة المكونات الفردية لتخطيط عمليات الترقية والتحقق من قيود التوافق. Cisco Finesse 12.6 ES03 Readme، CUIC / IDs 12.6 ES03 Readme
توصي Cisco بأن تكون لديك معرفة بالمواضيع التالية:
تستند المعلومات الواردة في هذا المستند إلى إصدارات البرامج والمكونات المادية التالية:
تم إنشاء المعلومات الواردة في هذا المستند من الأجهزة الموجودة في بيئة معملية خاصة. بدأت جميع الأجهزة المُستخدمة في هذا المستند بتكوين ممسوح (افتراضي). إذا كانت شبكتك قيد التشغيل، فتأكد من فهمك للتأثير المحتمل لأي أمر.
ملاحظة: تم تكوين التكوين المتوفر في هذا المستند وتصليحه واختبار التحميل باستخدام وكيل NGINX العكسي (OpenRest) الذي تم نشره على CentOS 8.0، مقابل نشر نموذج 2000 لمستخدم UCCE. تتوفر معلومات مرجع ملف تعريف الأداء في هذا المستند.
نموذج النشر هذا مدعوم ل UCCE/PCCE و HCS لحلول UCCE.
يتم دعم نشر وكيل عكسي (متوفر من 12.6 ES01) كخيار للوصول إلى سطح المكتب Cisco Finesse دون الاتصال بشبكة VPN. توفر هذه الميزة المرونة للعملاء في الوصول إلى سطح المكتب Finesse من أي مكان عبر الإنترنت.
لتمكين هذه الميزة، يجب نشر زوج وكيل عكسي في المنطقة المجردة من السلاح (DMZ).
يظل الوصول إلى الوسائط دون تغيير في عمليات نشر الوكيل العكسي. للاتصال بالوسائط، يمكن للعملاء إستخدام Cisco Jabber عبر حل الوصول عن بعد وعن بعد (MRA) أو قدرة البرنامج العميل المحمول UCCE باستخدام شبكة هاتف محولة عامة (PSTN) أو نقطة نهاية متنقلة. يوضح هذا المخطط كيف سيبدو نشر الشبكة عند الوصول إلى مجموعتي Finesse وعقدتين من CUIC من خلال زوج واحد عالي التوفر (HA) من عقد الوكيل العكسي.
يتم دعم الوصول المتزامن من الوكلاء على الإنترنت والوكلاء الذين يتصلون من شبكة LAN كما هو موضح في هذه الصورة.
ملاحظة: انظر دليل الميزات الخاص بمعايير تحديد وكيل جهة خارجية بدلا من Nginx لدعم هذا النشر.
- دليل ميزة UCCE 12.6 - يوفر نظرة عامة على الميزات وتصميما، بالإضافة إلى تفاصيل التكوين لميزة عدم وجود شبكة خاصة ظاهرية (VPN).
- دليل أمان UCCE 12.6 - يوفر إرشادات تكوين الأمان لنشر وكيل العكسي.
من المستحسن مراجعة قسم لا يحتوي على شبكات VPN من دليل الميزات ودليل الأمان قبل قراءة هذا المستند.
ملاحظة: يوصى بإزالة تكوين NGINX القائم على ES01 قبل تثبيت تكوينات ES03 NGINX.
ملاحظة: تتطلب برامج تكوين ES03 أيضا تثبيت ES03 COP المتوافق في Cisco Finesse و CUIC و IDs.
تقدم Finesse 12.6 ES03 المصادقة في الوكيل. يتم دعم المصادقة لتسجيل الدخول الأحادي (SSO) وعمليات النشر بخلاف SSO.
يتم فرض المصادقة لجميع الطلبات والبروتوكولات التي يتم قبولها في الوكيل قبل إعادة توجيهها إلى خوادم مكونات الخادم، حيث يتم إجراء المصادقة التي يتم فرضها بواسطة خوادم المكونات محليا أيضا. تستخدم جميع المصادقة بيانات اعتماد تسجيل الدخول إلى Finesse الشائعة لمصادقة الطلبات.
تتم مصادقة الاتصالات المتواصلة، مثل مقابس الويب التي تعتمد على بروتوكولات التطبيق مثل المراسلة الممتدة وبروتوكول التواجد (XMPP) للمصادقة واتصال الإرسال، في الوكيل عن طريق التحقق من صحة عنوان IP الذي تم إجراء مصادقة تطبيق ناجحة منه قبل إنشاء اتصال مأخذ التوصيل.
لا تتطلب المصادقة بخلاف SSO أي تكوينات إضافية وستعمل مع البرامج النصية للتكوين Nginx بمجرد إجراء إستبدال البرامج النصية المطلوبة. تعتمد المصادقة على اسم المستخدم وكلمة المرور المستخدمين لتسجيل الدخول إلى Finesse. سيتم التحقق من صحة الوصول إلى جميع نقاط النهاية باستخدام خدمات مصادقة Finesse.
يتم تخزين قائمة المستخدمين الصحيحين مؤقتا في الوكيل محليا (يتم تحديث ذاكرة التخزين المؤقت كل 15 دقيقة)، والتي يتم إستخدامها للتحقق من صحة المستخدم في الطلب. يتم التحقق من صحة بيانات اعتماد المستخدم عن طريق إعادة توجيه الطلب إلى URI الذي تم تكوينه من Finesse وبعد ذلك يتم تخزين تجزئة بيانات الاعتماد مؤقتا محليا (مخزنة مؤقتا لمدة 15 دقيقة) لمصادقة الطلبات الجديدة محليا. في حالة حدوث أي تغيير على اسم المستخدم أو كلمة المرور، سيتم تنفيذها فقط بعد 15 دقيقة.
تتطلب مصادقة SSO أن يقوم المسؤول بتكوين مفتاح تشفير رمز IDs المميز في خادم Nginx داخل ملف التكوين. يمكن الحصول على مفتاح تشفير رمز IdS المميز من خادم IdS باستخدام أمر CLI show ids secret. يجب تكوين المفتاح كجزء من أحد المحولات #Must-change التي يجب أن يؤديها المسؤول في البرامج النصية قبل أن تعمل مصادقة SSO.
ارجع إلى دليل مستخدم SSO لتكوينات SAML للمعرفات التي سيتم إجراؤها لدقة الوكيل للعمل مع المعرفات.
وبمجرد تكوين مصادقة SSO، يمكن إستخدام زوج من العلامات المميزة الصالحة للوصول إلى أي من نقاط النهاية في النظام. يتحقق تكوين الوكيل من بيانات الاعتماد من خلال اعتراض طلبات إسترداد الرمز المميز التي تم إجراؤها على المعرفات أو من خلال فك تشفير الرموز المميزة الصالحة ثم تخزينها مؤقتا محليا لمزيد من عمليات التحقق من الصحة.
لا يمكن مصادقة إتصالات WebSocket باستخدام رأس التخويل القياسي، نظرا لأن الرؤوس المخصصة غير معتمدة من قبل عمليات تنفيذ WebSocket الأصلية في المستعرض. بروتوكولات مصادقة مستوى التطبيق، حيث لا تمنع معلومات المصادقة الواردة في الحمولة إنشاء اتصال WebSocket، وبالتالي يمكن للكيانات الضارة تقديم هجمات رفض الخدمة (DoS) أو رفض الخدمة (DDoS) فقط من خلال إنشاء إتصالات لا تعد ولا تحصى لإرباك النظام.
من أجل تقليل هذا الاحتمال، تحتوي تكوينات الوكيل العكسي ل NGINX التي تم توفيرها على عمليات تحقق محددة للسماح بقبول إتصالات مأخذ ويب فقط من عناوين IP هذه التي قامت بنجاح بإجراء طلب REST تمت مصادقته قبل إنشاء اتصال مأخذ ويب. وهذا يعني أن العملاء الذين يحاولون إنشاء إتصالات مأخذ ويب، قبل إصدار طلب 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; }
للعثور على عناوين IP المحظورة، قم بتشغيل الأوامر التالية من الدليل <nginx-install-directory>/log.
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 أو ما شابه ذلك لإضافة الحظر إلى قواعد IPtable/جدار الحماية.
يمسح Fail2ban ملفات السجل ويحظر IPs أن يظهر العلامات الضارة - الكثير جدا من مرات فشل كلمة المرور، يبحث عن مخارج، وما إلى ذلك. وبشكل عام، يتم إستخدام Fail2Ban بعد ذلك لتحديث قواعد جدار الحماية لرفض عناوين IP لفترة محددة من الوقت، مع أنه يمكن تكوين أي إجراء آخر تعسفي (على سبيل المثال، إرسال بريد إلكتروني). لمزيد من المعلومات، تفضل بزيارة موقع https://www.fail2ban.org/.
يمكن تكوين Fail2ban لمراقبة الحظر.log لتحديد عناوين IP التي تم حظرها بواسطة Nginx عند اكتشاف الهجمات العنيفة، وحظرها لمدة قابلة للتكوين. خطوات تثبيت Fail2ban وتكوينه على CentOS BackProxy هي كما يلي:
1. تثبيت Fail2ban باستخدام yum.
yum update && yum install epel-release
yum install fail2ban
2. إنشاء سجن محلي.
تتيح تكوينات السجن للمسؤول تكوين خصائص مختلفة مثل المنافذ التي سيتم منعها من الوصول إليها بواسطة أي عنوان IP محظور، والمدة التي يظل فيها عنوان IP محظورا، وتكوين عامل التصفية المستخدم لتعريف عنوان IP المحظور من ملف السجل المراقب، وما إلى ذلك. الخطوات الخاصة بإضافة تكوين مخصص لحظر عناوين IP التي يتم حظرها من الوصول إلى خوادم البث هي كما يلي:
2.1. انتقل إلى دليل تثبيت Fail2ban (في هذا المثال /etc/fail2ban)
cd /etc/fail2ban
2.2. قم بعمل نسخة من prison.conf في السجن.local لإبقاء التغييرات المحلية معزولة.
cp jail.conf jail.local
2.3. أضف تكوينات السجن هذه إلى نهاية سجن الملف.محلي، واستبدل المنافذ الموجودة في القالب بأخرى فعلية. تحديث تكوينات وقت الحظر حسب الحاجة.
# 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. تكوين عامل تصفية.
عامل تصفية يقول ل Fail2ban ما يجب البحث عنه في السجلات لتحديد المضيف الذي يجب حظره. الخطوات الخاصة بإنشاء عامل تصفية هي كما يلي:
3.1. إنشاء عامل تصفية.d/finesseban.conf.
touch filter.d/finesseban.conf
3.2. أضف هذه الأسطر إلى عامل تصفية الملف.d/finesseban.conf.
[Definition]
# The regex match that would cause blocking of the host.
failregex = <HOST> will be blocked for
4. بدء Fail2ban.
قم بتشغيل هذا الأمر لبدء Fail2ban.
fail2ban-client start
فتح ملفات سجل Fail2ban والتحقق من عدم وجود أخطاء. بشكل افتراضي، تنتقل السجلات الخاصة ب failed2ban إلى الملف /var/log/fail2ban.log.
ويتم بنشاط تتبع جميع نقاط النهاية الصالحة التي يمكن الوصول إليها بطريقة غير مصدق عليها في النصوص التنفيذية لنظام ES03.
يتم رفض الطلبات لهذه المسارات غير المصدق عليها بشكل نشط، في حالة طلب URI غير صالح، بدون إرسال هذه الطلبات إلى خادم الخادم.
عندما يكون طلب الخيارات الأولى ناجحا، يتم تخزين رؤوس الاستجابة لبيانات اعتماد السماح بالتحكم في الوصول، وبيانات التحكم في الوصول في الأصل، وأساليب التحكم في الوصول، ورؤوس التعريض للتحكم في الوصول، وبيانات اعتماد السماح بالتحكم في الوصول مؤقتا لمدة خمس دقائق في الوكيل. يتم تخزين هذه الرؤوس مؤقتا لكل خادم دفق خاص.
يصف هذا المستند تكوين NGINX كوكيل عكسي المراد إستخدامه لتمكين الوصول غير المحدود VPN. يتم توفير مكون حل UCCE والوكيل وإصدارات نظام التشغيل المستخدمة للتحقق من الإرشادات المقدمة. يجب تكييف التعليمات ذات الصلة مع نظام التشغيل/الوكيل الذي تختاره.
ملاحظة: يمكن تنزيل تكوين NGINX الموضح من صفحة تنزيل برنامج Finesse، الإصدار 12.6(1)ES3.
بعد تكوين الوكيل، قم بتكوين مكونات الحل (Finesse/ CUIC / IDs) للوصول الأقل إلى VPN باستخدام اسم المضيف المخطط و IP للوكيل/الخدمات المستخدمة للوصول إلى الحل باستخدام هذه الأوامر.
utils system reverse-proxy allowed-hosts add utils system reverse-proxy config-uri <uri> add
يمكن العثور على تفاصيل هذه الأوامر في دليل ميزة UCCE 12.6 ويجب الإشارة إليها قبل إستخدام هذا المستند.
يوضح هذا القسم خطوات تثبيت الوكيل المستندة إلى OpenRest. عادة ما يتم تكوين الوكيل العكسي كجهاز مخصص في المنطقة المنزوعة السلاح للشبكة (DMZ) كما هو موضح في مخطط النشر الذي تمت الإشارة إليه سابقا.
يمكن إستخدام أي منكهات من NGINX لهذا الغرض، طالما أنها تستند إلى NGINX 1. 19+ وتدعم LUA:
ملاحظة: تم إختبار التكوين المتوفر باستخدام OpenRest 1.19 ومن المتوقع أن يعمل مع التوزيعات الأخرى التي تحتوي على تحديثات طفيفة فقط، إن وجدت.
export PATH=/usr/local/openresty/bin:$PATH
openresty
.openresty -s stop
.يتم شرح التكوين لتثبيت Nginx المستند إلى OpenRest. الدلالات الافتراضية ل 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
ملاحظة: قم بزيادة ذاكرة التخزين المؤقت للعميل و proxy_temp بمقدار 1 غيغابايت لكل مجموعة Finesse جديدة مضافة إلى التكوين.
mount -av
.df -h
.على سبيل المثال، لتغيير المسارات لدليل Finesse الأساسي، انتقل إلى <nginx-install-directory>conf/conf.d/finesse/cache وقم بتغيير موقع ذاكرة التخزين المؤقت الحالي /usr/local/openresty/nginx/cache/finesse25/ إلى موقع Filesystem (نظام الملفات) الذي تم إنشاؤه حديثا /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
أدخل بعد تسجيل الدخول إلى الوكيل. اتبع التعليمات الفورية، وقدم التفاصيل. وهذا يؤدي إلى إنشاء CSR (nginx.csr في المثال) ومفتاح RSA الخاص (nginx.key في المثال) لوحدات بت القوة 4096.
على سبيل المثال:[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 إلى المرجع المصدق والحصول على الشهادة الموقعة.
ملاحظة: إذا كانت الشهادة المتلقاة من المرجع المصدق ليست سلسلة شهادات تحتوي على جميع الشهادات ذات الصلة، فعليك تألف جميع الشهادات ذات الصلة في ملف سلسلة شهادات واحد.
قم بفك تشفير المفتاح الذي تم إنشاؤه مسبقا كجزء من الخطوة الأولى باستخدامopenssl rsa -in nginx.key -out nginx_decrypted.key
الأمر. ضع شهادة CA الموقعة والمفتاح الذي تم فك تشفيره داخل المجلد /usr/local/openresty/nginx/ssl في جهاز الوكيل العكسي. تحديث/إضافة تكوينات SSL المتعلقة بالشهادة في تكوينات Nginx في ملف التكوين /usr/local/openresty/nginx/conf/conf.d/ssl/ssl.conf.
ssl_certificate /usr/local/openresty/nginx/ssl/ca_signed_cert.crt; ssl_certificate_key /usr/local/openresty/nginx/ssl/nginx_decrypted.key;
chmod 400 /usr/local/openresty/nginx/ssl/ca_signed_cert.crt
Enterandchmod 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. في وقت ما، يمكن تمكين منفذ واحد فقط من وكيل عكسي لدعم طلبات Finesse، على سبيل المثال 8445. إذا كان المنفذ 443 بحاجة إلى دعم، فعليك بتحرير ملف <nginx-install-directory>conf/conf.d/finesse.conf لتمكين الاستماع على 443 وتعطيل الاستماع على 8445.
يمكن تمكين مصادقة شهادة SSL للعميل للاتصالات من مضيفي الوكيل العكسي على مكونات CCBU الأمامية CUIC/Finesse/IDs/LiveAta عبر خيار CLI ل CVOS الجديد والذي
يستخدم النظام الوكيل العكسي للعميل-المصادقة enable/disable/status.
وبشكل افتراضي، يتم تعطيل هذا الأمر ويجب تمكينه بشكل صريح بواسطة المسؤول من خلال تنفيذ CLI على كل خادم للتحميل بشكل مستقل. بمجرد تمكين هذا الخيار، تبدأ خدمة وكيل ويب من Cisco التي تعمل على مضيف الخادم الخادم الخادم بدء مصادقة شهادات العميل في مصافحة TLS للاتصالات التي تنشأ من مضيفين وكيل عكسي موثوق بهم تمت إضافتهم كجزء من الوكيل العكسي ل CLI النظام، إضافة <proxy-host>ل CLI.
أدناه هو كتلة التكوين لنفس الشيء في ملفات تكوين الوكيل على وجه التحديد 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/Id/CUIC/LiveAta)، يجب أن يتم مصادقتها بنجاح.
يعد التحقق من صحة شهادة الخادم عند التشغيل العكسي إختياريا ويتم تعطيله بشكل افتراضي. إذا كنت ترغب في تحقيق مصادقة 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 والمعرفات و CUIC. ملف التعيين هذا الذي تم تكوينه على الخوادم الداخلية هو تكوين المفتاح الذي يسمح بإعادة توجيه العملاء المتصلين عبر الإنترنت إلى الأجهزة المضيفة والمنافذ المطلوبة التي يتم إستخدامها على الإنترنت.
يجب نشر ملف التعيين على خادم ويب يمكن الوصول إليه من قبل الخوادم المكونة، ويجب تكوين URI الخاص به لكي يعمل النشر. يوصى بتكوين ملف التعيين باستخدام خادم ويب مخصص متوفر داخل الشبكة. وفي حالة عدم توفر خادم من هذا القبيل، يمكن إستخدام الوكيل العكسي بدلا من ذلك، وهو ما سيتطلب إمكانية الوصول إلى الوكيل من داخل الشبكة كما يمثل مخاطرة بتعريض المعلومات للعملاء الخارجيين الذين يمكنهم الوصول غير المصرح به إلى المنطقة المجردة من السلاح. ويورد الجزء التالي بالتفصيل كيف يمكن تحقيق ذلك.
ارجع إلى دليل الميزات للحصول على الخطوات الصحيحة لتكوين URI ملف التعيين على جميع الخوادم المكونة ولمزيد من التفاصيل حول كيفية إنشاء بيانات ملف التعيين.
تكون هذه الخطوات مطلوبة فقط إذا كان الوكيل العكسي مستخدم أيضا كمضيف ملف تعيين الوكيل.
nginx -s reload
الأمر.curl
.إذا كان نظام التشغيل المختار هو CentOS 8، يوصى بإجراء التعزيز/الضبط kernel باستخدام تكوينات 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 هو تطبيق يسمح لمسؤول النظام بتكوين جداول IPv4 و IPv6 والسلاسل والقواعد التي يوفرها جدار حماية نواة Linux.
يتم تكوين قواعد IPtables هذه لتأمين تطبيق الوكيل من الهجمات العنيفة بالقوة عن طريق تقييد الوصول في جدار حماية نواة لينوكس.
تشير التعليقات الموجودة في التكوين إلى الخدمة التي يتم حصرها باستخدام القواعد.
ملاحظة: إذا كان المسؤولون يستخدمون منفذا مختلفا أو يوسعون الوصول إلى خوادم متعددة باستخدام نفس المنافذ، فيجب القيام بالحجم المناسب لهذه المنافذ وفقا لهذه الأرقام.
## 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 لنطاقات IP المستندة إلى IP (البلد/الولاية أو ISP) إذا كنت متأكدا من أنماط الوصول.
ومن المفيد أيضا معرفة كيفية حظر نطاق معين من العناوين عند تحديد هجوم ليتم تنفيذه من عنوان IP أو نطاق من عناوين IP. في مثل هذه الحالات، يمكن حظر الطلبات من عناوين IP هذه باستخدام قواعد جدول البيانات.
لحظر عناوين IP مميزة متعددة، أضف خطا إلى ملف تكوين IPTables لكل عنوان IP.
على سبيل المثال، لحظر العناوين 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 المتعددة في نطاق وإضافة سطر واحد إلى ملف تكوين IPTables باستخدام نطاق IP.
على سبيل المثال، لحظر العناوين من 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 هو إطار عمل لأمان المنصات مدمج كتعزيز في نظام تشغيل لينوكس. يتم توفير الإجراء الخاص بتثبيت سياسات SELinux وإضافتها لتشغيل OpenRest حيث يتم توفير الوكيل العكسي التالي.
openresty -s stop
الأمر.systemctl
حتى تبدأ عملية OpenResty تلقائيا أثناء التمهيد. أدخل هذه الأوامر كمستخدم جذري.
[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
قم بتشغيل / إيقاف خدمة OpenRest باستخدام الأمر وتأكد من بدء / إيقاف العملية كمستخدم جذري.يلزم تثبيت حزمة النهج المعيارية-Devel وتبعياتها لإنشاء سياسة SelInux.
دخلت هذا أمر in order to ركبت policyResourceLs-devel
yum install policycoreutils-devel
sepolicy
الأمر يعمل. usage: sepolicy [-h] [-P POLICY] {booleans,communicate,generate,gui,interface,manpage,network,transition} ... SELinux Policy Inspection Tool
أنشئ مستخدم جديد لنظام التشغيل Linux وخريطة بينية باستخدام مستخدم لنظام التشغيل 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 *
كجذر، قم بإنشاء مستخدم Linux جديد (مستخدم nginx) الذي تم تعيينه إلى مستخدم SELinux user_u.
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@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 غير المحصور_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; ..........
اكتب سياسة SelInux ل Nginx
sepolicy generate --init /usr/bin/nginx
من المفترض البدء بنهج موجود.
make
الأمر.semodule
الأمر. semodule -i nginx.pp
semodule --list-modules=full
ps -aefZ | grep nginx
استخدم هذا القسم لتأكيد عمل التكوين بشكل صحيح.
للتحقق من صحة تكوين المعرفات، قم بتنفيذ الخطوات التالية:
يتوفر تحليل البيانات الخاص بالتقاط أفضل أداء مكافئ، والذي تم إجراؤه باستخدام أداة nmon، من صفحة تنزيل برنامج Finesse، الإصدار 12.6(1) ES03 (load_result.zip). تمثل البيانات حالة الوكيل لعمليات سطح المكتب والمشرف، على نموذج نشر 2000 UCCE باستخدام تسجيلات الدخول إلى نظام SSO وتقارير CUIC LD كما تم تكوينها في التخطيط الافتراضي ل 2000 مستخدم لمدة ثماني ساعات. يمكن إستخدامه لاستخلاص متطلبات الحوسبة والقرص والشبكة للتثبيت باستخدام Nginx على الأجهزة المماثلة.
سيلينكس
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 |
الإصدار الأولي |