منوی دسته بندی
passwordless authentication ssh in linux

تو این پست میخوام در مورد امن کردن سرور ها با ssh صحبت کنم.همینطور که میدونید ssh یک راه ارتباطی امن بین کلاینت و سروره.

خب حالا که داریم میگیم امنه، پس چرا میخوایم در مورد امن کردن ssh صحبت کنیم؟

وقتی که یک سرور رو راه اندازی یا خریداری میکنید و سرویس openssh-server روی اون سرور نصبه ، داره روی پورت پیشفرض 22 به شما سرویس میده.

از طریق دستور زیر میتونین وضعیت سرویس ssh چک کنین :

sudo systemctl status sshd

همچنین از طریق کامند های زیر میتونین وضعیت پورت ssh که روی سرور بازه رو ببینین :

netstat -tulpn | grep 22
sudo lsof -nP -i:22
ss -tulpn | grep 22
sudo ufw status

حالا شما میتونین از طریق ssh server_address به اون سرور دسترسی داشته باشین که بدیش اینه که یه هکر میتونه از طریق یوزر و پسوورد به سرور شما دسترسی پیدا کنه، مثلا هکر میاد با ابزار hydra یک لیستی از یوزر و پسوورد رو روی سرور شما امتحان میکنه تا بتونه وارد بشه که من یه نمونه کامندش رو این زیر براتون میزارم:

hydra -L users.txt -P rockyou.txt server_address ssh

این دستور میاد از طریق ابزار hydra یک لیستی از یوزر که در فایل user.txt قرار داره مثل یوزر های root, admin, ubuntu, … رو با یک لیستی از پسوورد که در فایل rockyou.txt قرار داره روی سرور شما امتحان میکنه تا بتونه به سرور شما دسترسی پیدا کنه (فایل rockyou.txt رو میتونین از طریق گیت هاب به این [آدرس](https://github.com/teamstealthsec/wordlists)  و اگه از کالی لینوکس استفاده کنین در دایرتوری /usr/share/wordlists/rockyou.txt ببینین)

تا اینجا گفتم که چه خطراتی میتونه داشته باشه و از این به بعد میخوام بگم چطور میشه سرویس ssh رو امن تر کرد

در مرحله اول باید در سرور برین تو مسیر /etc/ssh بشین و فایل sshd_config رو بازکنین:

sudo nano /etc/ssh/ssd_config
or
sudo vim /etc/ssh/sshd_config

حالا باید پورت ssh رو از کامنت در بیاریم و تغییر بدیم:

 

یکی دیگه از کار ها اینه که دسترسی root رو ببندیم تا نتونن با یوزر root لاگین کنن.البته اینجا یک یوزر جدید برای لاگین کردن باید بسازین:

#PermitRootLogin

PermitRootLogin no

برای اضافه کردن یوزر و دسترسی sudo به user از دستورات زیر استفاده میکنیم (یه جای username نام دلخواه رو وارد میکنیم):

sudo useradd username

#enter password
sudo usermod -aG sudo username

شاید داخل سرور یوزری داشته باشیم که پسوورد نداشته باشه پس میام کاری میکنیم که نتونن بدون پسوورد لاگین کنن:

PermitEmptyPasswords no

 

اگه تو سرور چندین یوزر داریم و فقط قراره که یکسری از یوزر ها بتونن به سرور لاگین کنن میایم محدود میکنیم به همون یوزر ها:

AllowUsers User1 User2

 

یا یه گروه ssh_group میسازیم و به اون یوزر ها رو جوین گروه کرده و به اون گروه دسترسی میدیم:

AllowGroups ssh_group

 

از همه مهمتر اینه که کاربر ها بدون وارد کردن پسوورد و از طریق کلید لاگین کنیم.

برای اینکار اول باید یه کلید بسازیم:

ssh -keygen

 

با زدن این دستور خروجی زیر رو مشاهده میکنین که میاد از طریق الگوریتم rsa یک کلید به طول 3072 bit میسازه و میتونین یک نام و پسوورد هم بهش بدین

Generating public/private rsa key pair.Enter file in which to save the key (/home/username/.ssh/id_rsa)

با فلگ -t هم میتونین الگوریتم ساخت کلید رو تغییر بدین که الگوریتم هایی که مرسومن یکیشون همون rsa ولی به طول 4096 و بعدی Ed25519

(فرق بین rsa 4096 و Ed25519 هم اینه که rsa 4096 طول کلیدش زیاده و خیلی امنه اما از طرفی سرعتش به خاطر همون طول زیادش پایینتره اما Ed25519 به خاطر استفاده از منحنی کوتاه تر و بهتر هم امنیتش خیلی بالاست و هم طولش 68 کاراکتره و سرعت خیلی بالاتری داره)

البته استفاده از هرکدومشون خوبه.با دستور های زیر میتونین هر کدوم که خواستین رو بسازین:

ssh-keygen -t rsa -b 4096

ssh-keygen -t ed25519 “name”

 

وقتی که کلید رو ساختین تو دایرکتوری  `/home/username/.ssh/` دو فایل id_name و id_name.pub ساخته میشه که که فایل id_name کلید private شما و id_name.pub کلید public شما هستش و برای ارتباط با سرور باید فایل id_name.pub رو در

دایرکتوری /home/username/.ssh/authorized_keys قرار بدین.برای اینکار میتونین فایل رو cat کنین و محتویات رو copy و سپس در قسمت authorized_keys سرور past کنین و همچنین میتونین از طریق دستورات زیر این کار رو انجام بدین:

ssh-copy-id  username@remote_host
or
cat ~/.ssh/id_name.pub | ssh  username@remote_host  “mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys”

و حالا باید کلا دسترسی لاگین با پسوورد رو بر داریم:

nano /etc/ssh/sshd_config

PasswordAuthentication no

و در آخر هم یکبار سرویس ssh را در سرور ریستارت می کنیم.

sudo systemctl restart ssh

امیدوارم همیشه پیروز و سربلند باشین و امنیت سرورتون رو جدی بگیرین 😉

 

sudo systemctl restart ssh
sudo systemctl restart ssh

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *