Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
ansible-ssh-hardening — هذا الدور الخاص بـ Ansible يوفر العديد من إعدادات ssh المتعلقة بالأمان، مما يوفر حماية أساسية شاملة. | Kitploit
أدوات/GitHubGitHub/dev-sec/ansible-ssh-hardening
أمن البنية التحتية السحابيةتدقيق التكوينأمن الشبكاتDevSecOpsالمصادقةArchived
GitHubdev-sec/ansible-ssh-hardening

ansible-ssh-hardening

هذا الدور الخاص بـ Ansible يوفر العديد من إعدادات ssh المتعلقة بالأمان، مما يوفر حماية أساسية شاملة.

عرض المستودع
786190منذ 5 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
الموقع الإلكتروني
مشاركة

ssh-hardening (دور Ansible)

تنبيه: تم ترحيل هذا الدور إلى مجموعة التصلب الخاصة بنا:

  • https://github.com/dev-sec/ansible-os-hardening/
  • https://galaxy.ansible.com/devsec/hardening

يرجى فتح أي مشكلات وطلبات سحب هناك!

المتطلبات

  • Ansible > 2.5

متغيرات الدور

  • network_ipv6_enable
    • الافتراضي: false
    • الوصف: true إذا كان IPv6 مطلوبًا. يجب أيضًا ضبط ssh_listen_to للاستماع إلى عناوين IPv6 (على سبيل المثال [::]).
  • ssh_server_ports
    • الافتراضي: ['22']
    • الوصف: المنافذ التي يجب أن يستمع عليها خادم ssh
  • ssh_client_port
    • الافتراضي: '22'
    • الوصف: المنفذ الذي يجب أن يتصل به عميل ssh
  • ssh_listen_to
    • الافتراضي: ['0.0.0.0']
    • الوصف: عنوان IP واحد أو أكثر يجب أن يستمع عليها خادم ssh. الافتراضي هو جميع عناوين IPv4، ولكن يجب تكوينه لعناوين محددة لأسباب أمنية!
  • ssh_host_key_files
    • الافتراضي: []
    • الوصف: مفاتيح المضيف لـ sshd. إذا كانت فارغة، سيتم استخدام ['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_ecdsa_key', '/etc/ssh/ssh_host_ed25519_key'] بقدر ما يدعمها إصدار sshd المثبت
  • ssh_host_key_algorithms
    • الافتراضي: []
    • الوصف: خوارزميات مفاتيح المضيف التي يقدمها الخادم. إذا كانت فارغة، سيتم استخدام القائمة الافتراضية، وإلا يتم تجاوز الإعداد بقائمة الخوارزميات المحددة
  • ssh_client_alive_interval
    • الافتراضي: 600
    • الوصف: يحدد فترة زمنية لإرسال رسائل البقاء على قيد الحياة
  • ssh_client_alive_count
    • الافتراضي: 3
    • الوصف: يحدد عدد مرات إرسال رسائل البقاء على قيد الحياة
  • ssh_permit_tunnel
    • الافتراضي: false
    • الوصف: true إذا كان نفق منفذ SSH مطلوبًا
  • ssh_remote_hosts
    • الافتراضي: []
    • الوصف: مضيف واحد أو أكثر وخياراتهم المخصصة لعميل ssh. الافتراضي فارغ. راجع الأمثلة في defaults/main.yml.
  • ssh_permit_root_login
    • الافتراضي: no
    • الوصف: تعطيل تسجيل الدخول كجذر. اضبط على without-password أو yes لتمكين تسجيل الدخول كجذر
  • ssh_allow_tcp_forwarding
    • الافتراضي: no
    • الوصف: 'no' لتعطيل إعادة توجيه TCP. اضبط على 'yes' للسماح بإعادة توجيه TCP. إذا كنت تستخدم إصدار OpenSSH >= 6.2، يمكنك تحديد 'yes' أو 'no' أو 'all' أو 'local'.
      ملاحظة: يجب أن تكون القيم التي تم تمريرها إلى هذا المتغير سلاسل نصية، لذا يجب تمرير القيم 'yes' و 'no' مع علامات الاقتباس.
  • ssh_gateway_ports
    • الافتراضي: false
    • الوصف: false لتعطيل ربط المنافذ المعاد توجيهها بعناوين غير loopback. اضبط على true لفرض الربط على عنوان wildcard. اضبط على clientspecified للسماح للعميل بتحديد العنوان الذي سيتم الربط به.
  • ssh_allow_agent_forwarding
    • الافتراضي: false
    • الوصف: false لتعطيل إعادة توجيه الوكيل. اضبط على true للسماح بإعادة توجيه الوكيل.
  • ssh_x11_forwarding
    • الافتراضي: false
    • الوصف: false لتعطيل إعادة توجيه X11. اضبط على true للسماح بإعادة توجيه X11.
  • ssh_pam_support
    • الافتراضي: true
    • الوصف: true إذا كان SSH يدعم PAM.
  • ssh_use_pam
    • الافتراضي: true
    • الوصف: false لتعطيل مصادقة pam.
  • ssh_gssapi_support
    • الافتراضي: false
    • الوصف: true إذا كان SSH يدعم GSSAPI.
  • ssh_kerberos_support
    • الافتراضي: true
    • الوصف: true إذا كان SSH يدعم Kerberos.
  • ssh_deny_users
    • الافتراضي: ''
    • الوصف: إذا تم تحديده، يتم منع تسجيل الدخول لأسماء المستخدمين التي تطابق أحد الأنماط.
  • ssh_allow_users
    • الافتراضي: ''
    • الوصف: إذا تم تحديده، يُسمح بتسجيل الدخول فقط لأسماء المستخدمين التي تطابق أحد الأنماط.
  • ssh_deny_groups
    • الافتراضي: ''
    • الوصف: إذا تم تحديده، يتم منع تسجيل الدخول للمستخدمين الذين تطابق مجموعتهم الأساسية أو قائمة المجموعات الإضافية أحد الأنماط.
  • ssh_allow_groups
    • الافتراضي: ''
    • الوصف: إذا تم تحديده، يُسمح بتسجيل الدخول فقط للمستخدمين الذين تطابق مجموعتهم الأساسية أو قائمة المجموعات الإضافية أحد الأنماط.
  • ssh_authorized_keys_file
    • الافتراضي: ''
    • الوصف: تغيير الملف الافتراضي الذي يحتوي على المفاتيح العامة التي يمكن استخدامها لمصادقة المستخدم.
  • ssh_trusted_user_ca_keys_file
    • الافتراضي: ''
    • الوصف: يحدد الملف الذي يحتوي على المفاتيح العامة لسلطات التصديق الموثوقة المستخدمة لتوقيع شهادات المستخدم.
  • ssh_trusted_user_ca_keys
    • الافتراضي: []
    • الوصف: تعيين المفاتيح العامة لسلطات التصديق الموثوقة المستخدمة لتوقيع شهادات المستخدم. يُستخدم فقط إذا تم تعيين ssh_trusted_user_ca_keys_file.
  • ssh_authorized_principals_file
    • الافتراضي: ''
    • الوصف: يحدد الملف الذي يحتوي على المبادئ المسموح بها. يُستخدم فقط إذا تم تعيين ssh_trusted_user_ca_keys_file.
  • ssh_authorized_principals
    • الافتراضي: []
    • الوصف: قائمة من التجزئات التي تحتوي على مسارات الملفات والمبادئ المصرح بها، راجع default_custom.yml لجميع الخيارات. يُستخدم فقط إذا تم تعيين ssh_authorized_principals_file.
  • ssh_print_motd
    • الافتراضي: false
    • الوصف: false لتعطيل طباعة MOTD
  • ssh_print_pam_motd
    • الافتراضي: false
    • الوصف: false لتعطيل طباعة MOTD عبر pam (Debian و Ubuntu)
  • ssh_print_last_log
    • الافتراضي: false
    • الوصف: false لتعطيل عرض معلومات آخر تسجيل دخول
  • sftp_enabled
    • الافتراضي: false
    • الوصف: true لتمكين تكوين sftp
  • sftp_umask
    • الافتراضي: '0027'
    • الوصف: يحدد umask لـ sftp
  • sftp_chroot
    • الافتراضي: true
    • الوصف: false لتعطيل chroot لـ sftp
  • sftp_chroot_dir
    • الافتراضي: /home/%u
    • الوصف: تغيير موقع chroot الافتراضي لـ sftp
  • ssh_client_roaming
    • الافتراضي: false
    • الوصف: تمكين التجوال التجريبي للعميل
  • sshd_moduli_file
    • الافتراضي: '/etc/ssh/moduli'
    • الوصف: المسار إلى ملف moduli الخاص بـ SSH
  • sshd_moduli_minimum
    • الافتراضي: 2048
    • الوصف: إزالة معاملات Diffie-Hellman الأصغر من الحجم المحدد للتخفيف من logjam
  • ssh_challengeresponseauthentication
    • الافتراضي: false
    • الوصف: يحدد ما إذا كانت مصادقة التحدي والاستجابة مسموحة (على سبيل المثال عبر PAM)
  • ssh_client_password_login
    • الافتراضي: false
    • الوصف: true للسماح بالمصادقة القائمة على كلمة المرور مع عميل ssh
  • ssh_server_password_login
    • الافتراضي: false
    • الوصف: true للسماح بالمصادقة القائمة على كلمة المرور مع خادم ssh
  • ssh_banner
    • الافتراضي: false
    • الوصف: true لطباعة لافتة عند تسجيل الدخول
  • ssh_banner_path
    • الافتراضي: '/etc/sshd/banner.txt'
    • الوصف: المسار إلى ملف لافتة SSH
  • ssh_client_hardening
    • الافتراضي: true
    • الوصف: false لإيقاف تصلب العميل
  • ssh_client_port
    • الافتراضي: '22'
    • الوصف: يحدد رقم المنفذ للاتصال بالمضيف البعيد.
  • ssh_client_compression
    • الافتراضي: false
    • الوصف: يحدد ما إذا كان العميل يطلب الضغط.
  • ssh_compression
    • الافتراضي: false
    • الوصف: يحدد ما إذا كان الضغط من جانب الخادم مفعلًا بعد مصادقة المستخدم بنجاح.
  • ssh_login_grace_time
    • الافتراضي: 30s
    • الوصف: يحدد الوقت المسموح به للمصادقة الناجحة على خادم SSH
  • ssh_max_auth_retries
    • الافتراضي: 2
    • الوصف: يحدد الحد الأقصى لعدد محاولات المصادقة المسموح بها لكل اتصال.
  • ssh_max_sessions
    • الافتراضي: 10
    • الوصف: يحدد الحد الأقصى لعدد الجلسات المفتوحة المسموح بها من اتصال معين.
  • ssh_print_debian_banner
    • الافتراضي: false
    • الوصف: true لطباعة لافتة خاصة بـ Debian
  • ssh_server_enabled
    • الافتراضي: true
    • الوصف: false لتعطيل خادم opensshd
  • ssh_server_hardening
    • الافتراضي: true
    • الوصف: false لإيقاف تصلب الخادم
  • ssh_server_match_address
    • الافتراضي: ''
    • الوصف: يقدم كتلة شرطية. إذا تم استيفاء جميع المعايير في سطر Match، فإن الكلمات الرئيسية في الأسطر التالية تتجاوز تلك المحددة في القسم العام من ملف التكوين، حتى سطر Match آخر أو نهاية الملف.
  • ssh_server_match_group
    • الافتراضي: ''
    • الوصف: يقدم كتلة شرطية. إذا تم استيفاء جميع المعايير في سطر Match، فإن الكلمات الرئيسية في الأسطر التالية تتجاوز تلك المحددة في القسم العام من ملف التكوين، حتى سطر Match آخر أو نهاية الملف.
  • ssh_server_match_user
    • الافتراضي: ''
    • الوصف: يقدم كتلة شرطية. إذا تم استيفاء جميع المعايير في سطر Match، فإن الكلمات الرئيسية في الأسطر التالية تتجاوز تلك المحددة في القسم العام من ملف التكوين، حتى سطر Match آخر أو نهاية الملف.
  • ssh_server_match_local_port
    • الافتراضي: ''
    • الوصف: يقدم كتلة شرطية. إذا تم استيفاء جميع المعايير في سطر Match، فإن الكلمات الرئيسية في الأسطر التالية تتجاوز تلك المحددة في القسم العام من ملف التكوين، حتى سطر Match آخر أو نهاية الملف.
  • ssh_server_permit_environment_vars
    • الافتراضي: no
    • الوصف: yes لتحديد أن ~/.ssh/environment وخيارات environment= في ~/.ssh/authorized_keys تتم معالجتها بواسطة sshd. مع إصدار openssh 7.8، من الممكن تحديد قائمة بيضاء لأسماء متغيرات البيئة بالإضافة إلى إعدادات "yes" أو "no" العامة
  • ssh_server_accept_env_vars
    • الافتراضي: ''
    • الوصف: يحدد متغيرات البيئة التي يرسلها العميل والتي سيتم نسخها إلى بيئة الجلسة، ويمكن فصل متغيرات البيئة المتعددة بمسافات
  • ssh_use_dns
    • الافتراضي: false
    • الوصف: يحدد ما إذا كان sshd يجب أن يبحث عن اسم المضيف البعيد، والتحقق من أن اسم المضيف الذي تم حله لعنوان IP البعيد يعود إلى نفس عنوان IP تمامًا.
  • ssh_server_revoked_keys
    • الافتراضي: []
    • الوصف: قائمة بالمفاتيح العامة الملغاة التي سيرفضها خادم ssh دائمًا، مفيدة لإلغاء المفاتيح الضعيفة أو المخترقة المعروفة.
  • ssh_max_startups
    • الافتراضي: '10:30:100'
    • الوصف: يحدد الحد الأقصى لعدد الاتصالات غير المصادق عليها المتزامنة مع خادم SSH.
  • ssh_macs
    • الافتراضي: []
    • الوصف: غيّر هذه القائمة لتجاوز macs. الافتراضيات موجودة في defaults/main.yml
  • ssh_kex
    • الافتراضي: []
    • الوصف: غيّر هذه القائمة لتجاوز kexs. الافتراضيات موجودة في defaults/main.yml
  • ssh_ciphers
    • الافتراضي: []
    • الوصف: غيّر هذه القائمة لتجاوز ciphers. الافتراضيات موجودة في defaults/main.yml
  • ssh_custom_options
    • الافتراضي: []
    • الوصف: أسطر مخصصة لتكوين عميل SSH
  • sshd_custom_options
    • الافتراضي: []
    • الوصف: أسطر مخصصة لتكوين خادم SSH
  • sshd_syslog_facility
    • الافتراضي: 'AUTH'
    • الوصف: رمز التسهيل المستخدم عند تسجيل الرسائل من sshd
  • sshd_log_level
    • الافتراضي: 'VERBOSE'
    • الوصف: مستوى التفصيل المستخدم عند تسجيل الرسائل من sshd
  • sshd_strict_modes
    • الافتراضي: true
    • الوصف: التحقق من أوضاع الملفات وملكيتها لملفات المستخدم ودليل المنزل قبل قبول تسجيل الدخول
  • sshd_authenticationmethods
    • الافتراضي: publickey
    • الوصف: يحدد طرق المصادقة التي يجب إكمالها بنجاح لمنح المستخدم الوصول. تأكد من تعيين جميع المتغيرات المطلوبة لطريقة المصادقة المحددة. الافتراضيات موجودة في defaults/main.yml

تكوين الإعدادات غير المدرجة في متغيرات الدور

إذا كنت تريد تكوين خيارات ssh غير المدرجة أعلاه، يمكنك استخدام ssh_custom_options (لـ /etc/ssh/ssh_config) أو sshd_custom_options (لـ /etc/ssh/sshd_config) لتعيينها. سيتم تعيين هذه الخيارات في بداية الملف حتى تتمكن من تجاوز الخيارات في الأسفل من الملف.

مثال على playbook:

root@kitploit:~
- hosts: localhost
  roles:
    - dev-sec.ssh-hardening
  vars:
    ssh_custom_options:
      - "Include /etc/ssh/ssh_config.d/*"
    sshd_custom_options:
      - "AcceptEnv LANG"

تغيير المنفذ الافتراضي والثبات (Idempotency)

يستخدم هذا الدور المنفذ الافتراضي 22 أو المنفذ المكون في inventory للاتصال بالخادم. إذا تم تغيير منفذ ssh الافتراضي عبر ssh_server_ports، فبمجرد إعادة تشغيل خادم ssh، سيظل يحاول الاتصال باستخدام المنفذ السابق. لتشغيل هذا الدور مرة أخرى على نفس الخادم، يجب تحديث inventory لاستخدام منفذ ssh الجديد.

إذا كان الثبات مهمًا، يرجى التفكير في استخدام الدور ssh-hardening-fallback، وهو غلاف حول هذا الدور يعود إلى المنفذ 22 إذا كان المنفذ المكون غير قابل للوصول.

مثال على Playbook

root@kitploit:~
- hosts: localhost
  roles:
    - dev-sec.ssh-hardening

الاختبار المحلي

الطريقة المفضلة للاختبار المحلي للدور هي استخدام Docker. ستحتاج إلى تثبيت Docker على نظامك. راجع ابدأ للحصول على حزمة Docker مناسبة لنظامك.

يمكنك أيضًا استخدام vagrant و Virtualbox أو VMWare لتشغيل الاختبارات محليًا. ستحتاج إلى تثبيت Virtualbox و Vagrant على نظامك. راجع تنزيلات Vagrant للحصول على حزمة vagrant مناسبة لنظامك. لجميع اختباراتنا نستخدم test-kitchen. إذا لم تكن معتادًا على test-kitchen، يرجى إلقاء نظرة على دليلهم.

بعد ذلك قم بتثبيت test-kitchen:

root@kitploit:~
# تثبيت التبعيات
gem install bundler
bundle install

الاختبار مع Docker

root@kitploit:~
# اختبار سريع على جهاز واحد
bundle exec kitchen test ssh-ubuntu1804-ansible-latest

# اختبار على جميع الأجهزة
bundle exec kitchen test

# للتطوير
bundle exec kitchen create ssh-ubuntu1804-ansible-latest
bundle exec kitchen converge ssh-ubuntu1804-ansible-latest
bundle exec kitchen verify ssh-ubuntu1804-ansible-latest

# التنظيف
bundle exec kitchen destroy ssh-ubuntu1804-ansible-latest

الاختبار مع Virtualbox

root@kitploit:~
# اختبار سريع على جهاز واحد
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test ssh-ubuntu-1804

# اختبار على جميع الأجهزة
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test

# للتطوير
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create ssh-ubuntu-1804
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge ssh-ubuntu-1804

لمزيد من المعلومات راجع test-kitchen

الأسئلة الشائعة / المزالق

لا أستطيع تسجيل الدخول إلى حسابي. لقد سجلت مفتاح العميل، لكنه ما زال لا يسمح لي بالدخول.

إذا استنفدت جميع المشكلات النموذجية (جدار الحماية، الشبكة، المفتاح المفقود، المفتاح الخاطئ، الحساب المعطل، إلخ)، فقد يكون حسابك مقفلاً. أسرع طريقة لمعرفة ذلك هي النظر إلى تجزئة كلمة المرور لمستخدمك:

root@kitploit:~
sudo grep myuser /etc/shadow

إذا كانت التجزئة تتضمن !، فإن حسابك مقفل:

root@kitploit:~
myuser:!:16280:7:60:7:::

الطريقة الصحيحة لحل ذلك هي فتح قفل الحساب (passwd -u myuser). إذا لم يكن لدى المستخدم كلمة مرور، يمكنك فتحه عبر:

root@kitploit:~
usermod -p "*" myuser

بدلاً من ذلك، إذا كنت تنوي استخدام PAM، فقد قمت بتمكينه عبر ssh_use_pam: true. سيسمح PAM للمستخدمين المقفلين بالدخول بالمفاتيح.

لماذا لا يتصل تطبيقي عبر SSH بعد الآن؟

انظر دائمًا إلى ملفات السجلات أولاً وإذا أمكن انظر إلى التفاوض بين العميل والخادم الذي يتم إكماله عند الاتصال.

لقد رأينا بعض المشكلات في التطبيقات (المبنية على python و ruby) بسبب استخدامها لمجموعة تشفير قديمة. يتعارض هذا مع وحدة التصلب هذه، التي قللت قائمة التشفيرات ورسائل مصادقة التكامل (MACs) وخوارزميات تبادل المفاتيح (KEX) إلى مجموعة أكثر أمانًا.

بعد استخدام الدور، لم تعد وحدة template/copy/file في Ansible تعمل!

يقوم هذا الدور افتراضيًا بتعطيل SFTP. يستخدم Ansible افتراضيًا SFTP لنقل الملفات إلى المضيفين البعيدين. يجب عليك تعيين scp_if_ssh = True في ملف ansible.cfg الخاص بك. بهذه الطريقة يستخدم Ansible SCP لنسخ الملفات. بدلاً من ذلك، يمكنك إعادة تمكين SFTP عن طريق تعيين sftp_enabled إلى true.

لا يمكن إعادة تشغيل خدمة sshd بسبب نقص الصلاحيات

إذا حصلت على الخطأ التالي عند تشغيل المعالج "restart sshd"

root@kitploit:~
Unable to restart service ssh: Failed to restart ssh.service: Access denied

أو

root@kitploit:~
failure 1 running systemctl show for 'ssh': Failed to connect to bus: No such file or directory

إما قم بتشغيل playbook كـ root (بدون become: yes على مستوى playbook)، أو أضف become: yes إلى المعالج.

هذا خطأ في Ansible: راجع هنا و هنا لمزيد من المعلومات.

المساهمة

راجع إرشادات المساهم.

الترخيص والمؤلف

  • المؤلف:: Sebastian Gumprich
  • المؤلف:: Christoph Hartmann [email protected]

مرخص بموجب رخصة Apache، الإصدار 2.0 (ال"ترخيص")؛ لا يجوز لك استخدام هذا الملف إلا وفقًا للترخيص. يمكنك الحصول على نسخة من الترخيص على

root@kitploit:~
http://www.apache.org/licenses/LICENSE-2.0

ما لم يقتضِ القانون المعمول به أو يتم الاتفاق عليه كتابيًا، يتم توزيع البرنامج المرخص بموجب الترخيص على أساس "كما هو"، دون ضمانات أو شروط من أي نوع، سواء كانت صريحة أو ضمنية. راجع الترخيص للحصول على اللغة المحددة التي تحكم الأذونات والقيود بموجب الترخيص.

تنزيل الأداة