[PrivacyTools] [Free Software Foundation] [GNU Operating System]

التقسيه الامنيه ل SSH (Secure Shell)

بسم الله، والحمد لله، والصلاة والسلام على رسول الله وعلى آله وصحبه ومن اهتدى بهداه. السلام عليكم ورحمه الله وبركاته تحيه طيبه أما بعد:

اليوم سنتحدث عن تسطيب وتقويه ssh بالنسبه للعميل client والخادم server (لن ادخل في تفاصيل كيفيه الاتصال وماذا يحدث …الخ يمكنك البحث عن ذلك بنفسك)

ملاحظه: الشرح سيكون للتوزيعات الديبيانيه.

:diamond_shape_with_a_dot_inside: OpenSSH-Client العميل او يسمى بssh

sudo apt install openssh-client

نقوم بتوليد مفاتيح التشفير:

ssh-keygen -o -a 100 -t ed25519

:blue_square: -o: تقوم بانتاج مفتاح متوافق مع openssh بدلا من .pem القديم
:blue_square: -a: وهي خاصيه اشتقاق المفتاح KDF كلما ازدادت كلما زادت قوه المفاتيح ضد هجمات الBrute-force في حال سرق المفتاح الخاص. ولكن انتبه كلما زدت العدد كلما ازداد استهلاك للرامات والمعالج وضغط العمل على حاسوبك عند الولوج login فلذلك يعتبر العدد من 75 الى 100 كاف.
:blue_square: -t: يحدد نوع المفتاح وفي هذه الحاله سنستخدم ed25519 وهو الخيار الامثل (RSA و ECDSA خيارات قديمه)

:one: هو المكان الذي ستحفظ فيه المفاتيح (العام والخاص) , اضغط على Enter اذا كنت لا تريد تغيير مكان الحفظ
:two: يفضل لامن اكثر ان تقوم بعمل عباره مرور له ويفضل ان تقوم بتوليدها عن طريق KeePassXC (اذا كنت لا تريد ذلك فقط اضغط على Enter)
:three: هنا سنجد موضع المفاتيح المتمثل بid_ed25519.pub وهو المفتاح العام , id_ed25519 وهو المفتاح الخاص

على فرض ان openssh-server منصب في الخادم (واذا كان لا فساقوم بشرحه بعد هذه الخطوه فيمكنك رؤيه الخطوات في الاسفل والرجوع لهذه الخطوه في حال كان openssh-server غير منصب على الخادم)

سنقوم بنقل مفاتيح الssh العامه الى الخادم, الخادم اما يكون متمثل بالIP كxxx.xxx.xxx.xxx الخاص به او بأسم النظام مثل host

ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]

هنا قمنا بنقل المفاتيح العامه للسيرفر (سيطلب منك كلمه المرور للخادم لاننا ما زلنا لم نضف المفاتيح) ثم بعد ذلك تستطيع الخروج بexit او logout ثم الاتصال مره اخرى بالسيرفر دون الحاجه الى كلمه سر:

ssh [email protected]

ملاحظه: سيطلب منك وضع الpassphras او عباره المرور التي وضعناها في الخطوه رقم 2 (في حال استخدمت عباره مرور)

لماذا استخدمنا المصادقه عن طريق المفاتيح وليس كلمه السر:

  • السهوله: حيث لا تحتاج بان تكتب كلمه السر في كل مره تتصل بالخادم
  • الامن: كلمه السر تتعرض الى الاعتراض/الطرق اما عن طريق mitm او عن طريق الbrute-force… واذا عرفت كلمه السر يستطيع المهاجم استخدامها للسيطره على الخادم

التقسيه الامنيه:

  • نقوم بحذف الخيارات التلقائيه التي تاتي مع عميل ssh

echo "" | sudo tee /etc/ssh/ssh_config

  • ثم نقوم بالذهاب الى /etc/ssh/ssh_config

sudo nano /etc/ssh/ssh_config

  • ثم نقوم بنسخ/لصق هذه الخيارات: (ابحث عن الخيار لترى تفاصيل اكثر عنه في الانترنت)
Host *

## ipv4
AddressFamily inet

IdentityFile ~/.ssh/id_ed25519

Port 22
Protocol 2
ForwardX11 no
PubkeyAuthentication yes
StrictHostKeyChecking ask
VisualHostKey yes
HashKnownHosts yes
User user
Host host
SendEnv LANG LC_*

## Strongest ciphers:
Ciphers [email protected]

## Most secure MACs:
MACs [email protected]

## Secure Kex algos:
KexAlgorithms [email protected]

Tunnel no
#TunnelDevice any:any
#PermitLocalCommand no
#ProxyCommand ssh -q -W %h:%p gateway.example.com

ملاحظه: ما يجب الانتباه اليه هو User و Host فانا وضعت امامهم الاسماء التي انا استخدمتها في الشرح , فاذا كان اسم المستخدم او اسم النظام مختلف فغير ما يلزم تغييره.

:diamond_shape_with_a_dot_inside: OpenSSH-Server الخادم او يسمى ب sshd

لتنصيبه على الخادم (في حال كنت تتصل على الخادم طريق VNC او بشكل فيزيائي في المنزل او العمل)

sudo apt install openssh-server

التقسيه الامنيه:

ملاحظات يجب الانتباه اليها قبل الاستمرار:

  • التغيير في sshd (اذا وضع شيء خطأ) يؤدي الى عدم المقدره الى الولوج للخادم مره اخرى
  • من الافضليه ان تقوم بهذه العمليه على سيرفر مسطب جديد حيث لا تمانع اعاده تسطيبه في حال عدم المقدره على الاتصال مره اخرى
  • لمن لديه المعرفه يفضل عمل نسخ احتياطيه للsshd_config (ابحث عن ذلك ان اردت هذا)

للتاكد من اننا لن نخسر الاتصال اذا حدث خطأ افتح اكثر من تيرمينال , تستطيع عمل ذلك بفتح التيرمينال ثم اضغط على File ثم على Open Tab وقم بالولوج الى الخادم عن طريق ssh من كليهما ونقوم بعمل الخطوات في الاسفل عن طريق استخدام واحد منهم فقط

  • نقوم بحذف الخيارات التلقائيه التي تاتي مع sshd الخادم

echo "" | sudo tee /etc/ssh/sshd_config

  • ثم نقوم بالذهاب الى /etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

  • ثم نقوم بنسخ/لصق هذه الخيارات: (ابحث عن الخيار لترى تفاصيل اكثر عنه في الانترنت)
## Protocol 1 is dangerously outdated!
Protocol 2

## 22 is standard, you can make it anything.
## On commandline, when connecting as client,
## use the “-p” option if not port 22;
## example port 3243; ssh [email protected] -p 3243
Port 22

## means only ipv4, no v6 allowed
AddressFamily inet

## For an I2P/Onion server, comment out listenaddress 127.0.0.1 as well
#ListenAddress 127.0.0.1
ListenAddress 0.0.0.0


## comment out if ipv6 is disabled via sysctl or iptables or both
## comment in if ipv6 should be enabled 
#ListenAddress ::

## location of server private key
HostKey /etc/ssh/ssh_host_ed25519_key

## Strongest ciphers:
Ciphers [email protected]

## Most secure MACs:
MACs [email protected]

## Secure Kex algos:
KexAlgorithms [email protected]

## Logging - optional - okay to leave commented out
#SyslogFacility AUTH

# unless you need logging, leave commented out
#LogLevel INFO

# how long does the prompt stay if client has a passphrase to enter
LoginGraceTime 2m

# With keypairs, the "prohibit-password" option accomplishes the same thing so root is denied

PermitRootLogin prohibit-password

# Safer to deny root obviously
#PermitRootLogin no

## This option refers to old style password-only authentication (not secure)
PasswordAuthentication no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

## number of allowed login attempts, if there is a passphrase associated with the key
MaxAuthTries 3

## number of allowed sessions with the same client
#MaxSessions 4

## Specifies whether public key authentication is allowed. The default is yes.
## always use public keys, not passwords
#PubkeyAuthentication yes

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
# The default is no.
UsePAM no

## circumstance specific.
## This refers to the ssh-agent.
## Useful when running a local instance and client/server exist on same machine
AllowAgentForwarding no

## Be careful with this. Avoid forwarding if you can.
## If you do not forward tcp, leave this commented out.
## Default is yes.
AllowTcpForwarding no

## dependent on connection and network.
## Sometimes useful, sometimes not.
## And okay default is to say “no” and if it turns out you need it, then do “yes.”
TCPKeepAlive yes

## Forwarding X11 is not a good idea
X11Forwarding no

PrintMotd no

## this prints the "Last login: Mon Dec 5 08:21:15 2019 from 192.33.4444" message
#PrintLastLog yes

#UseLogin no

#PermitUserEnvironment no

## second amount to keep connection alive
#ClientAliveInterval 0

UseDNS no

## this is a white space separated list of allowed user login names. Only user names on this list will be allowed to login
AllowUsers user

#Banner /etc/issue.net

AcceptEnv LANG LC_*

#Subsystem sftp /usr/lib/openssh/sftp-server

#PermitTunnel no

#ChrootDirectory none

هناك متغيرات قد تختلف لديك مثل:

AllowUsers user

اذا كان الاسم لديك ليس user فغيره

اذا كان السيرفر هو عباره عن خدمات مخفيه مبنيه على I2P او Tor فقط بحذف # من

#ListenAddress 127.0.0.1
  • نقوم بعمل اعاده تشغيل لsshd (لن ينقطع الاتصال لديك , لكن لا يعني ان كل شيء سار بشكل صحيح فلا تقطع اتصال جلسه الssh)

sudo systemctl restart sshd

  • الان نقوم بالتاكد ان كل شيء على ما يرام , اما نقوم بفتح Tab جديد (ثالث) في التيرمنال ومحاوله الاتصال بالخادم او نقوم بالخروج من الTab الثاني ثم نحاول الولوج للسيرفر اذا تم ذلك بنجاح مبروك , واذا لا فجلسه ssh مفتوحه لديك تستطيع تعديل ما يحتاج الى تعديله

ملاحظه: يفضل تغيير المنفذ التلقائي وهو 22 , فاذا قمت بذلك في الخادم والعميل سيكون الامر للاتصال: (اضف -p قبل عدد المنفذ الذي اخترته)

ssh -p xxxx [email protected]

2 Likes