
هذا الكوكبوك الخاص بـ Chef يوفر إعدادات آمنة لكل من ssh-client و ssh-server.
يوفر هذا الـ cookbook إعدادات آمنة لكل من ssh-client و ssh-server. لا يوفر هذا الـ cookbook إمكانيات لإدارة المستخدمين و/أو مفاتيح ssh، يرجى استخدام cookbooks أخرى لهذا الغرض.
فيما يلي يمكنك العثور على توثيق الخصائص وقيمها الافتراضية.
ملاحظة: بعض القيم الافتراضية لخصائص هذا الـ cookbook يتم تعيينها في الـ recipes. يجب عليك استخدام مستوى أولوية خصائص أعلى لتجاوز هذه الخصائص. يتم تمييز هذه الخصائص بـ #override attribute# في القائمة أدناه. مثال لتجاوز مثل هذه الخاصية:
override['ssh-hardening']['ssh']['server']['listen_to'] = node['ipaddress']
['ssh-hardening']['network']['ipv6']['enable'] - false. اضبط على true إذا كان IPv6 مطلوبًا['ssh-hardening']['ssh']['ports'] - 22. المنافذ التي يجب أن يستمع إليها ssh-server ويتصل بها ssh-client['ssh-hardening']['ssh'][{'client', 'server'}]['kex'] - nil لحساب أفضل تبادل مفاتيح (KEX) بناءً على إصدار الخادم، وإلا حدد سلسلة من قيم Kex['ssh-hardening']['ssh'][{'client', 'server'}]['mac'] - nil لحساب أفضل رموز مصادقة الرسائل (MACs) بناءً على إصدار الخادم، وإلا حدد سلسلة من قيم Mac['ssh-hardening']['ssh'][{'client', 'server'}]['cipher'] - nil لحساب أفضل التشفيرات بناءً على إصدار الخادم، وإلا حدد سلسلة من قيم Cipher['ssh-hardening']['ssh'][{'client', 'server'}]['cbc_required'] - . اضبط على إذا كان CBC مطلوبًا للتشفيرات. هذا عادةً ضروري فقط إذا كانت آليات M2M الأقدم بحاجة للتواصل مع SSH، والتي لا تحتوي على أي من التشفيرات الآمنة المكوّنة مفعّلة. CBC هو بديل ضعيف. يجب تجنب أي شيء أضعف وبالتالي فهو غير متاح.أضف الـ recipes إلى run_list:
"recipe[ssh-hardening]"
سيؤدي هذا إلى تثبيت ssh-server و ssh-client. يمكنك بدلاً من ذلك اختيار واحد فقط عبر:
"recipe[ssh-hardening::server]"
"recipe[ssh-hardening::client]"
قم بتكوين الخصائص:
"ssh-hardening": {
"ssh" : {
"server" : {
"listen_to" : "10.2.3.4"
}
}
}
القيمة الافتراضية لـ listen_to هي 0.0.0.0. يُنصح بشدة بتغيير القيمة.
لتفعيل تكوين SFTP أضف أحد الـ recipes التالية إلى run_list:
"recipe[ssh-hardening]"
أو
"recipe[ssh-hardening::server]"
قم بتكوين الخصائص:
"ssh-hardening": {
"ssh" : {
"server": {
"sftp" : {
"enable" : true,
"chroot" : "/home/sftp/%u",
"group" : "sftusers"
}
}
}
}
سيؤدي هذا إلى تفعيل خادم SFTP وتقييد (chroot) كل مستخدم في مجموعة sftpusers إلى دليل /home/sftp/%u.
يمكن إلحاق خيارات تكوين إضافية بملفات تكوين العميل أو الخادم. يمكن استخدام هذا لتجاوز القيم المحددة بشكل ثابت، أو إضافة خيارات تكوين غير متاحة عبر الخصائص.
الصيغة كما يلي:
# => تكوين خادم إضافي
default['ssh-hardening']['ssh']['server']['extras'].tap do |extra|
extra['#Some Comment'] = 'Heres the Comment'
extra['AuthenticationMethods'] = 'publickey,keyboard-interactive'
end
# => تكوين عميل إضافي
default['ssh-hardening']['ssh']['client']['extras'].tap do |extra|
extra['PermitLocalCommand'] = 'no'
extra['Tunnel'] = 'no'
end
يجب وضع كتل Match في نهاية sshd_config. يمكن تحقيق ذلك باستخدام شجرة الخصائص match_blocks:
default['ssh-hardening']['ssh']['server']['match_blocks'].tap do |match|
match['User root'] = <<~ROOT
AuthorizedKeysFile .ssh/authorized_keys
ROOT
match['User git'] = <<~GIT
Banner none
AuthorizedKeysCommand /bin/false
AuthorizedKeysFile .ssh/authorized_keys
GSSAPIAuthentication no
PasswordAuthentication no
GIT
end
يرجى تثبيت chef-dk، VirtualBox أو VMware Workstation و Vagrant.
يتم فحص الـ Linting باستخدام rubocop و foodcritic:
$ chef exec rake lint
.....
يتم إجراء اختبارات الوحدة/المواصفات باستخدام chefspec:
$ chef exec rake spec
.....
يتم إجراء اختبارات التكامل باستخدام test-kitchen و inspec:
$ chef exec rake kitchen
.....
# أو يمكنك استخدام kitchen مباشرة
$ kitchen test
لا أستطيع تسجيل الدخول إلى حسابي. لقد سجلت مفتاح العميل، لكنه ما زال لا يسمح لي بالدخول.
إذا كنت قد استنفدت جميع المشكلات النموذجية (جدار الحماية، الشبكة، المفتاح المفقود، المفتاح الخاطئ، الحساب المعطل وما إلى ذلك)، فقد يكون حسابك مقفلاً. أسرع طريقة لمعرفة ذلك هي النظر إلى تجزئة كلمة المرور الخاصة بمستخدمك:
sudo grep myuser /etc/shadow
إذا كانت التجزئة تتضمن !، فإن حسابك مقفل:
myuser:!:16280:7:60:7:::
الطريقة الصحيحة لحل هذا هي فتح قفل الحساب (passwd -u myuser). إذا لم يكن لدى المستخدم كلمة مرور، يمكنك فتح قفله عبر:
usermod -p "*" myuser
بدلاً من ذلك، إذا كنت تنوي استخدام PAM، فقد قمت بتفعيله عبر ['ssh-hardening']['ssh']['use_pam'] = true. سيسمح PAM للمستخدمين المقفلين بالدخول بالمفاتيح.
لماذا لا يتصل تطبيقي عبر SSH بعد الآن؟
انظر دائمًا إلى ملفات السجلات أولاً وإذا أمكن انظر إلى التفاوض بين العميل والخادم الذي يتم عند الاتصال.
لقد رأينا بعض المشكلات في التطبيقات (المبنية على python و ruby) والتي ترجع إلى استخدامها لمجموعة تشفير قديمة. يتعارض هذا مع وحدة التقوية هذه، التي قللت قائمة التشفيرات ورموز مصادقة الرسائل (MACs) وخوارزميات تبادل المفاتيح (KEX) إلى مجموعة أكثر أمانًا.
إذا وجدت أن هذا غير كافٍ، فلا تتردد في تفعيل الخصائص cbc_requires للتشفيرات، و weak_hmac لـ MACs و weak_kex لـ KEX في مساحات الأسماء ['ssh-hardening']['ssh']['client'] أو ['ssh-hardening']['ssh']['server'] بناءً على المكان الذي تريد دعمها فيه.
لماذا لا أستطيع تسجيل الدخول إلى خادم SFTP بعد إضافة مستخدم إلى مجموعة SFTP الخاصة بي؟
هذه مشكلة ملكية ChrootDirectory. سيرفض sshd اتصالات SFTP للحسابات التي تم ضبطها على التقييد (chroot) في أي دليل تعتبر ملكيته/أذوناته غير آمنة من قبل sshd. تتطلب متطلبات الملكية/الأذونات الصارمة في sshd أن يكون كل دليل في مسار chroot مملوكًا للجذر وقابلاً للكتابة فقط من قبل المالك. لذا، على سبيل المثال، إذا كانت بيئة chroot هي /home فيجب أن تكون مملوكة للجذر.
انظر https://wiki.archlinux.org/index.php/SFTP_chroot
يعتمد هذا الـ cookbook بشكل أساسي على أدلة من:
شكرًا لكم جميعًا!!
انظر إرشادات المساهم.
مرخص بموجب رخصة Apache، الإصدار 2.0 (the "License")؛ لا يجوز لك استخدام هذا الملف إلا بالامتثال للرخصة. يمكنك الحصول على نسخة من الرخصة على
http://www.apache.org/licenses/LICENSE-2.0
ما لم يكن مطلوبًا بموجب القانون المعمول به أو متفقًا عليه كتابيًا، يتم توزيع البرنامج المرخص بموجب هذه الرخصة على أساس "AS IS"، دون ضمانات أو شروط من أي نوع، سواء كانت صريحة أو ضمنية. راجع الرخصة للغة المحددة التي تحكم الأذونات والقيود بموجب الرخصة.
falsetrue['ssh-hardening']['ssh'][{'client', 'server'}]['weak_hmac'] - false. اضبط على true إذا كانت آليات HMAC الأضعف مطلوبة. هذا عادةً ضروري فقط إذا كانت آليات M2M الأقدم بحاجة للتواصل مع SSH، والتي لا تحتوي على أي من HMACs الآمنة المكوّنة مفعّلة.['ssh-hardening']['ssh'][{'client', 'server'}]['weak_kex'] - false. اضبط على true إذا كانت آليات تبادل المفاتيح (KEX) الأضعف مطلوبة. هذا عادةً ضروري فقط إذا كانت آليات M2M الأقدم بحاجة للتواصل مع SSH، والتي لا تحتوي على أي من KEXs الآمنة المكوّنة مفعّلة.['ssh-hardening']['ssh']['client']['remote_hosts'] - [] - مضيف واحد أو أكثر، يمكن لـ ssh-client الاتصال بها.['ssh-hardening']['ssh']['client']['password_authentication'] - false. اضبط على true إذا كان يجب تفعيل مصادقة كلمة المرور.['ssh-hardening']['ssh']['client']['roaming'] - false. اضبط على true إذا كان يجب تفعيل التجوال التجريبي للعميل. من المعروف أن هذا يسبب مشكلات محتملة مع كشف الأسرار لخوادم ضارة ويكون معطلاً افتراضيًا.['ssh-hardening']['ssh']['client']['extras'] - {}. أضف خيارات تكوين إضافية، انظر أدناه للتفاصيل['ssh-hardening']['ssh']['server']['host_key_files'] - nil لحساب أفضل تكوين لمفاتيح المضيف بناءً على إصدار الخادم، وإلا حدد مصفوفة بمسارات الملفات (مثل /etc/ssh/ssh_host_rsa_key)['ssh-hardening']['ssh']['server']['dh_min_prime_size'] - 2048 - الحد الأدنى المقبول لطول الأعداد الأولية بالبت في /etc/ssh/moduli. سيتم إزالة الأعداد الأولية الأقل من هذا الرقم. (انظر هذا لمزيد من المعلومات والخلفية)['ssh-hardening']['ssh']['server']['dh_build_primes'] - false - إذا كان يجب بناء أعداد أولية خاصة. عملية إعادة البناء هذه تحدث مرة واحدة فقط وتستغرق وقتًا طويلاً (~ 1.5 - 2 ساعة على الأجهزة الحديثة لطول 4096).['ssh-hardening']['ssh']['server']['dh_build_primes_size'] - 4096 - طول العدد الأولي الذي يجب توليده. هذا الخيار صالح فقط إذا كان dh_build_primes مفعّلاً.['ssh-hardening']['ssh']['server']['listen_to'] #override attribute# - عنوان IP واحد أو أكثر، يجب أن يستمع إليها ssh-server. الافتراضي هو الاستماع على جميع الواجهات. يجب تكوينه لأسباب أمنية!['ssh-hardening']['ssh']['server']['allow_root_with_key'] - false لتعطيل تسجيل دخول الجذر تمامًا. اضبط على true للسماح للجذر بتسجيل الدخول عبر آلية تعتمد على المفاتيح['ssh-hardening']['ssh']['server']['allow_tcp_forwarding'] - false. اضبط على true للسماح بإعادة توجيه TCP['ssh-hardening']['ssh']['server']['allow_agent_forwarding'] - false. اضبط على true للسماح بإعادة توجيه الوكيل (Agent)['ssh-hardening']['ssh']['server']['allow_x11_forwarding'] - false. اضبط على true للسماح بإعادة توجيه X11['ssh-hardening']['ssh']['server']['permit_tunnel'] - false لتعطيل إعادة توجيه جهاز tun. اضبط على true للسماح بإعادة توجيه جهاز tun. قيم مقبولة أخرى: 'yes', 'no', 'point-to-point', 'ethernet'. راجع man sshd_config للسلوكيات الدقيقة. ملاحظة: ستحتاج أيضًا إلى تفعيل allow_tcp_forwarding.['ssh-hardening']['ssh']['server']['use_pam'] - true. اضبط على false لتعطيل مصادقة pam الخاصة بـ sshd['ssh-hardening']['ssh']['server']['challenge_response_authentication'] - false. اضبط على true لتفعيل مصادقة الاستجابة للتحدي.['ssh-hardening']['ssh']['server']['deny_users'] - [] لتكوين DenyUsers، إذا تم تحديده، يُمنع تسجيل الدخول لأسماء المستخدمين التي تطابق أحد الأنماط.['ssh-hardening']['ssh']['server']['allow_users'] - [] لتكوين AllowUsers، إذا تم تحديده، يُسمح بتسجيل الدخول فقط لأسماء المستخدمين التي تطابق أحد الأنماط.['ssh-hardening']['ssh']['server']['deny_groups'] - [] لتكوين DenyGroups، إذا تم تحديده، يُمنع تسجيل الدخول للمستخدمين الذين تطابق مجموعتهم الأساسية أو قائمة مجموعاتهم الإضافية أحد الأنماط.['ssh-hardening']['ssh']['server']['allow_groups'] - [] لتكوين AllowGroups، إذا تم تحديده، يُسمح بتسجيل الدخول فقط للمستخدمين الذين تطابق مجموعتهم الأساسية أو قائمة مجموعاتهم الإضافية أحد الأنماط.['ssh-hardening']['ssh']['server']['print_motd'] - false. اضبط على true لتفعيل طباعة الـ MOTD['ssh-hardening']['ssh']['server']['print_last_log'] - false. اضبط على true لتفعيل طباعة معلومات آخر تسجيل دخول['ssh-hardening']['ssh']['server']['banner'] - nil. اضبط مسارًا مثل '/etc/issue.net' لتفعيل اللافتة (banner)['ssh-hardening']['ssh']['server']['os_banner'] - false لتعطيل معلومات الإصدار أثناء المصافحة البروتوكولية (عائلة debian فقط). اضبط على true لتفعيلها['ssh-hardening']['ssh']['server']['use_dns'] - nil لاستخدام الافتراضي الخاص بـ openssh. اضبط على true أو false لتفعيل/تعطيل بحث DNS والتحقق من المضيف البعيد['ssh-hardening']['ssh']['server']['use_privilege_separation'] - nil لحساب أفضل قيمة بناءً على إصدار الخادم، وإلا اضبط على true أو false['ssh-hardening']['ssh']['server']['login_grace_time'] - 30s. الوقت الذي يجب أن يتم فيه تسجيل الدخول بنجاح، وإلا يتم فصل المستخدم.['ssh-hardening']['ssh']['server']['max_auth_tries'] - 2. عدد محاولات المصادقة لكل اتصال['ssh-hardening']['ssh']['server']['max_sessions'] - 10 عدد الجلسات لكل اتصال['ssh-hardening']['ssh']['server']['password_authentication'] - false. اضبط على true إذا كان يجب تفعيل مصادقة كلمة المرور['ssh-hardening']['ssh']['server']['log_level'] - verbose. مستوى تسجيل sshd. راجع LogLevel في man 5 sshd_config للقيم الممكنة.['ssh-hardening']['ssh']['server']['sftp']['enable'] - false. اضبط على true لتفعيل ميزة SFTP الخاصة بخادم OpenSSH['ssh-hardening']['ssh']['server']['sftp']['group'] - sftponly. يضبط خيار Match Group الخاص بـ SFTP للسماح بـ SFTP فقط للمستخدمين المخصصين['ssh-hardening']['ssh']['server']['sftp']['chroot'] - /home/%u. يضبط الدليل الذي يجب أن يُقيّد فيه مستخدم SFTP (chroot)['ssh-hardening']['ssh']['server']['sftp']['authorized_keys_path'] - nil. إذا لم يكن nil، مسار كامل لملف أو عدة ملفات مفاتيح مصرح بها مفصولة بمسافات سيتم تعيينها داخل Match Group للوصول عبر SFTP فقط['ssh-hardening']['ssh']['server']['sftp']['password_authentication'] - false. اضبط على true إذا كان يجب تفعيل مصادقة كلمة المرور['ssh-hardening']['ssh']['server']['authorized_keys_path'] - nil. إذا لم يكن nil، يُتوقع مسار كامل لملف أو عدة ملفات مفاتيح مصرح بها مفصولة بمسافات.['ssh-hardening']['ssh']['server']['extras'] - {}. أضف خيارات تكوين إضافية، انظر أدناه للتفاصيل['ssh-hardening']['ssh']['server']['match_blocks'] - {}. كتلة تكوين Match، انظر أدناه للتفاصيل