پارامترهای Boot-Time در لینوکس













پیکربندی‌های ضروری SSH و نکات امنیتی برای لینوکس

پیکربندی‌های ضروری SSH و نکات امنیتی برای لینوکس

مقدمه: اهمیت امنیت SSH

SSH (Secure Shell) یکی از مهم‌ترین ابزارها برای مدیران سیستم و توسعه‌دهندگان لینوکس محسوب می‌شود، زیرا به شما امکان می‌دهد به صورت امن به ماشین‌های راه‌دور وارد شوید، برنامه‌های خط فرمان را اجرا کنید، فایل‌ها را مدیریت کنید، داده‌ها را انتقال دهید، پورت‌ها را فوروارد کنید و حتی برنامه‌های GUI را به صورت راه‌دور اجرا نمایید.

اما نکته مهم این است → استفاده از SSH با تنظیمات پیش‌فرض همیشه ایمن نیست، زیرا هکرها به طور مداوم اینترنت را برای پورت‌های SSH باز و لاگین‌های ضعیف اسکن می‌کنند. به همین دلیل یادگیری نحوه پیکربندی و ایمن‌سازی صحیح SSH یک ضرورت است.

در این راهنما، پیکربندی‌های ضروری SSH و نکات امنیتی را پوشش می‌دهیم که هر مبتدی لینوکس باید بداند تا سرورهای خود را ایمن، کارآمد و روان نگه دارد.

1. نحوه تغییر شماره پورت پیش‌فرض SSH

به طور پیش‌فرض، SSH روی پورت 22 گوش می‌دهد که آن را به هدفی رایج برای حملات رباتی خودکار تبدیل می‌کند. یک راه ساده برای کاهش چنین حملاتی، تغییر SSH به یک پورت غیراستاندارد است.

برای این کار، فایل پیکربندی SSH را با یک ویرایشگر متن باز کنید:

sudo nano /etc/ssh/sshd_config

به دنبال خط زیر بگردید:

#Port 22

آن را آنکامنت کنید (علامت # را حذف کنید) و به یک شماره پورت سفارشی تغییر دهید، برای مثال:

Port 2200

پس از ذخیره فایل، سرویس SSH را برای اعمال تغییرات restart کنید:

sudo systemctl restart ssh # دبیان/اوبونتو
sudo systemctl restart sshd # RHEL/CentOS

مهم: در دبیان/اوبونتو سرویس SSH با نام ssh شناخته می‌شود و در RHEL/CentOS با نام sshd. همیشه از نام صحیح هنگام restart کردن یا بررسی سرویس استفاده کنید.

سپس، قوانین فایروال خود را برای اجازه ترافیک روی پورت جدید به‌روز کنید.

—————— روی FirewallD ——————
sudo firewall-cmd –permanent –zone=public –add-port=2200/tcp
sudo firewall-cmd –reload

—————— روی UFW ——————
sudo ufw allow 2200/tcp

مدیریت پورت در systemd (برای نسخه‌های جدید OpenSSH)

در نسخه‌های جدید OpenSSH، تغییر پورت در sshd_config ممکن است کار نکند زیرا SSH از طریق سوکت‌های systemd مدیریت می‌شود.

sudo mkdir -p /etc/systemd/system/ssh.socket.d
sudo bash -c ‘cat > /etc/systemd/system/ssh.socket.d/listen.conf <

سپس systemd را reload کرده و سرویس SSH را restart کنید:

sudo systemctl daemon-reload
sudo systemctl restart ssh # دبیان/اوبونتو
sudo systemctl restart sshd # RHEL/CentOS

2. نحوه غیرفعال کردن لاگین روت SSH

اجازه دادن به لاگین مستقیم روت از طریق SSH خطرناک است زیرا به مهاجمان یک هدف واحد برای حملات brute-force می‌دهد. یک رویکرد ایمن‌تر این است که به عنوان یک کاربر عادی وارد شوید و سپس از sudo برای کارهای مدیریتی استفاده کنید.

برای غیرفعال کردن لاگین روت، خط زیر را در فایل پیکربندی SSH پیدا کنید:

PermitRootLogin yes

و آن را به این صورت تغییر دهید:

PermitRootLogin no

فایل را ذخیره کرده و سرویس SSH را restart کنید:

sudo systemctl restart sshd

3. نحوه ورود به سرور لینوکس بدون رمز عبور SSH

لاگین‌های SSH مبتنی بر رمز عبور می‌توانند راحت باشند اما کمتر ایمن هستند و می‌توانند برای دسترسی مکرر دست و پا گیر باشند.

یک رویکرد ایمن‌تر و کارآمدتر، احراز هویت مبتنی بر کلید SSH است که به شما امکان می‌دهد بدون وارد کردن رمز عبور وارد سیستم شوید.

ابتدا یک جفت کلید SSH روی ماشین محلی خود generate کنید:

ssh-keygen -t rsa -b 4096

سپس، کلید عمومی خود را به سرور راه‌دور کپی کنید:

ssh-copy-id user@remote-server

پس از نصب کلید، می‌توانید بدون رمز عبور به سرور وارد شوید:

ssh user@remote-server

4. نحوه اجازه دادن فقط به کاربران خاص برای SSH در لینوکس

برای بهبود امنیت SSH، می‌توانید دسترسی را محدود کنید تا فقط کاربران یا گروه‌های خاصی بتوانند وارد سیستم شوند که برای جلوگیری از تلاش اتصال SSH توسط حساب‌های غیرمجاز مفید است.

برای اجازه دادن به کاربران خاص، خط زیر را به فایل پیکربندی SSH اضافه کنید:

AllowUsers alice bob

یا برای اجازه دادن به کل گروه‌ها، استفاده کنید:

AllowGroups admins devops

پس از ایجاد این تغییرات، سرویس SSH را restart کنید:

sudo systemctl restart sshd

از این پس، فقط کاربران مشخص شده (alice و bob) یا گروه‌ها (admins و devops) قادر خواهند بود از طریق SSH وارد سیستم شوند که به افزایش امنیت سرور کمک می‌کند.

5. نحوه نمایش پیام خوش‌آمدگویی یا هشدار در لاگین SSH

نمایش یک پیام هنگامی که کاربران از طریق SSH وارد سیستم می‌شوند می‌تواند برای خوش‌آمدگویی به کاربران یا نمایش هشدارهای قانونی/امنیتی مفید باشد.

یک گزینه ساده، ویرایش فایل Message of the Day (MOTD) است:

sudo nano /etc/motd

برای یک هشدار رسمی یا قانونی، می‌توانید یک بنر در /etc/issue.net ایجاد کنید:

sudo nano /etc/issue.net

سپس، با اضافه یا ویرایش خط زیر در فایل پیکربندی SSH، به SSH بگویید این بنر را نمایش دهد:

Banner /etc/issue.net

در نهایت، سرویس SSH را برای اعمال تغییرات restart کنید:

sudo systemctl restart sshd

اکنون، هرگاه کسی از طریق SSH وارد سیستم شود، پیام خوش‌آمدگویی یا هشدار سفارشی شما را خواهد دید.

6. نحوه ردیابی تلاش‌های ناموفق لاگین SSH

مانیتورینگ تلاش‌های ناموفق لاگین SSH برای تشخیص تلاش‌های دسترسی غیرمجاز و بهبود امنیت سرور ضروری است.

در توزیع‌های مبتنی بر دبیان، می‌توانید لاگ‌ها را با این دستور بررسی کنید:

sudo grep “Failed password” /var/log/auth.log

در توزیع‌های مبتنی بر RHEL، استفاده کنید:

sudo grep “Failed password” /var/log/secure

برای مانیتورینگ real-time فعالیت لاگین SSH، می‌توانید از دستور journalctl استفاده کنید:

sudo journalctl -u sshd -f

7. نحوه محدود کردن دسترسی SSH بر اساس آدرس IP در لینوکس

محدود کردن دسترسی SSH به آدرس‌های IP خاص یک لایه امنیتی اضافه اضافه می‌کند که فقط به ماشین‌های مورد اعتماد اجازه اتصال می‌دهد.

می‌توانید این را مستقیماً در فایل پیکربندی SSH با مشخص کردن یک کاربر و آدرس IP مجاز آن پیکربندی کنید:

AllowUsers user@192.168.1.100

متناوباً، می‌توانید محدودیت‌های IP را در سطح فایروال اعمال کنید. برای مثال، با UFW، دسترسی فقط از یک آدرس IP خاص به پورت 22 را اجازه دهید:

—————— روی FirewallD ——————
sudo firewall-cmd –permanent –zone=public –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.100″ port protocol=”tcp” port=”22″ accept’
sudo firewall-cmd –reload

—————— روی UFW ——————
sudo ufw allow from 192.168.1.100 to any port 22

8. نحوه تنظیم Timeout برای sessions SSH بیکار

sessions SSH بیکار می‌توانند یک ریسک امنیتی ایجاد کنند اگر کاربر فراموش کند خارج شود، connection را باز گذاشته و برای استفاده سوء بالقوه باقی می‌گذارد.

می‌توانید به طور خودکار sessions غیرفعال را با تنظیم یک timeout بیکار در فایل پیکربندی SSH قطع کنید.

ClientAliveInterval 300
ClientAliveCountMax 0

ClientAliveInterval 300 → یک پیام “keep-alive” هر 300 ثانیه (5 دقیقه) ارسال می‌کند.

ClientAliveCountMax 0 → session را قطع می‌کند اگر هیچ پاسخی دریافت نشود.

با این تنظیمات، هر session SSH بیکار پس از 5 دقیقه به طور خودکار خاتمه می‌یابد که ریسک sessions باز بدون نظارت را کاهش می‌دهد.

9. نحوه فعال‌سازی احراز هویت دو مرحله‌ای (2FA) برای لاگین SSH

اضافه کردن احراز هویت دو مرحله‌ای (2FA) به SSH به طور قابل توجهی امنیت را با نیاز به یک مرحله تأیید دوم علاوه بر رمز عبور شما افزایش می‌دهد.

در سیستم‌های دبیان/اوبونتو، می‌توانید از Google Authenticator استفاده کنید.

sudo apt install libpam-google-authenticator

سپس، 2FA را برای حساب کاربری خود با اجرای این دستور تنظیم کنید:

google-authenticator

سپس، ماژول PAM را برای SSH با ویرایش فایل زیر فعال کنید:

sudo nano /etc/pam.d/sshd

خط زیر را اضافه کنید:

auth required pam_google_authenticator.so

در نهایت، اجازه احراز هویت challenge-response را در فایل پیکربندی SSH بدهید:

ChallengeResponseAuthentication yes

سرویس SSH را برای اعمال تغییرات restart کنید:

sudo systemctl restart sshd

اکنون، هر لاگین SSH هم به رمز عبور شما و هم یک کد تأیید مبتنی بر زمان نیاز خواهد داشت که امنیت سرور شما را به شدت بهبود می‌بخشد.

10. نحوه محدود کردن connectionهای SSH با Fail2ban

Fail2ban یک ابزار قدرتمند است که با موقتاً banning کردن آدرس‌های IP که چندین بار تلاش لاگین ناموفق دارند، به محافظت از سرور شما در برابر حملات brute-force کمک می‌کند.

برای تنظیم آن، ابتدا Fail2ban را روی سیستم‌های دبیان/اوبونتو نصب کنید:

sudo apt install fail2ban

سپس، jail SSH را با ایجاد یا ویرایش فایل پیکربندی محلی فعال کنید:

sudo nano /etc/fail2ban/jail.local

خطوط زیر را برای پیکربندی محافظت برای SSH اضافه کنید:

[sshd]
enabled = true
port = ssh
maxretry = 3

در نهایت، Fail2ban را برای اعمال تغییرات restart کنید:

sudo systemctl restart fail2ban

با فعال بودن Fail2ban، تلاش‌های مکرر لاگین ناموفق به طور خودکار باعث banning موقت خواهد شد که ریسک حملات brute-force را به شدت کاهش می‌دهد.

11. نحوه پیکربندی احراز هویت مبتنی بر کلید SSH در لینوکس

احراز هویت مبتنی بر کلید یک روش ایمن برای وارد شدن به SSH بدون استفاده از رمزهای عبور است. این روش بر یک جفت کلید رمزنگاری تکیه می‌کند که حملات brute-force را تقریباً غیرممکن می‌سازد.

ابتدا یک جفت کلید روی ماشین محلی خود generate کنید. استفاده از الگوریتم مدرن و ایمن Ed25519 توصیه می‌شود:

ssh-keygen -t ed25519

سپس، کلید عمومی خود را به سرور راه‌دور کپی کنید:

ssh-copy-id user@server

پس از کار کردن احراز هویت مبتنی بر کلید، می‌توانید امنیت را بیشتر با غیرفعال کردن لاگین‌های رمز عبوری در فایل پیکربندی SSH بهبود دهید.

PasswordAuthentication no

سرویس SSH را برای اعمال تغییر restart کنید:

sudo systemctl restart sshd

پس از این، فقط کاربران با کلید خصوصی صحیح می‌توانند وارد سیستم شوند که یک لایه قوی محافظت در برابر دسترسی غیرمجاز ارائه می‌دهد.

12. نحوه اجازه یا رد دسترسی SSH با استفاده از hosts.allow و hosts.deny

لینوکس یک راه ساده برای کنترل دسترسی به سرویس‌ها با استفاده از TCP wrappers ارائه می‌دهد که بر فایل‌های /etc/hosts.allow و /etc/hosts.deny تکیه دارد.

ابتدا، IPهای مورد اعتماد را در /etc/hosts.allow اجازه دهید:

sshd: 192.168.1.100

سپس، همه IPهای دیگر را با ویرایش /etc/hosts.deny رد کنید:

sshd: ALL

با این setup، فقط آدرس IP 192.168.1.100 می‌تواند از طریق SSH وصل شود، در حالی که همه تلاش‌های دیگر block می‌شوند.

13. نحوه بررسی و مانیتورینگ sessions SSH فعال در لینوکس

مانیتورینگ sessions SSH فعال به شما کمک می‌کند track کنید چه کسی وارد سیستم شده و هر دسترسی غیرمجازی را تشخیص دهید. برای دیدن لیست کاربران در حال حاضر وارد شده، می‌توانید از دستورات ساده استفاده کنید:

who

یا

w

اگر نیاز به خاتمه session یک کاربر خاص دارید، می‌توانید از pkill با نام کاربری آن‌ها استفاده کنید:

sudo pkill -u username

بررسی منظم sessions فعال اطمینان می‌دهد که شما کنترل روی افرادی که به سرور شما وصل شده‌اند دارید و به حفظ امنیت کمک می‌کند.

14. نحوه تنظیم SSH Tunneling (Port Forwarding) در لینوکس

SSH tunneling یا port forwarding به شما امکان می‌دهد ترافیک شبکه را از ماشین محلی خود به یک سرور راه‌دور به صورت امن مسیریابی کنید که برای دسترسی به سرویس‌های پشت فایروال یا رمزگذاری connectionهای ناامن مفید است.

برای local port forwarding، می‌توانید یک پورت روی ماشین محلی خود را به یک پورت روی سرور راه‌دور فوروارد کنید.

ssh -L 8080:localhost:80 user@remote-server

8080 → پورت محلی روی ماشین شما.

localhost:80 → مقصد روی سرور راه‌دور.

user@remote-server → اطلاعات لاگین SSH شما.

پس از اجرای این دستور، هر ترافیکی که به localhost:8080 روی ماشین محلی شما فرستاده شود به صورت امن به پورت 80 روی سرور راه‌دور فوروارد خواهد شد.

15. نحوه فعال‌سازی لاگ‌گیری verbose برای عیب‌یابی SSH

هنگام عیب‌یابی مشکلات connection SSH، لاگ‌های دقیق می‌توانند به شناسایی علت ریشه‌ای کمک کنند، مانند مشکلات احراز هویت یا تأخیرهای شبکه. SSH یک حالت verbose داخلی ارائه می‌دهد که اطلاعات مرحله به مرحله درباره فرآیند connection نشان می‌دهد.

برای فعال‌سازی لاگ‌گیری verbose، به سادگی اجرا کنید:

ssh -vvv user@server

flag -vvv سطح verbosity را افزایش می‌دهد، جزئیات جامعی درباره هر مرحله از connection SSH ارائه می‌دهد.

می‌توانید از vsهای کمتر (-v یا -vv) برای خروجی کمتر دقیق استفاده کنید.

حالت verbose برای تشخیص مشکلات SSH ارزشمند است، به شما کمک می‌کند به سرعت خطاهای پیکربندی، مشکلات شبکه یا شکست‌های احراز هویت را pinpoint کنید.

16. نحوه ایمن‌سازی SSH با Cipherها و پروتکل‌های قوی

ایمن‌سازی connectionهای SSH شامل اطمینان از این است که فقط الگوریتم‌ها و پروتکل‌های رمزگذاری قوی استفاده می‌شوند. به طور پیش‌فرض، SSH از چندین پروتکل و cipher پشتیبانی می‌کند، که برخی از آن‌ها قدیمی و آسیب‌پذیر هستند.

می‌توانید سرور SSH خود را با مشخص کردن explicit گزینه‌های ایمن در فایل پیکربندی سخت‌تر کنید:

Protocol 2
Ciphers aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512,hmac-sha2-256
KexAlgorithms curve25519-sha256@libssh.org

Protocol 2 → اطمینان می‌دهد فقط پروتکل ایمن SSHv2 استفاده شود.

Ciphers → الگوریتم‌های رمزگذاری قوی برای انتقال داده مشخص می‌کند.

MACs → کدهای احراز هویت پیام ایمن برای تأیید یکپارچگی داده تنظیم می‌کند.

KexAlgorithms → الگوریتم‌های تبادل کلید ایمن انتخاب می‌کند.

پس از ایجاد این تغییرات، SSH را برای اعمال آن‌ها restart کنید:

sudo systemctl restart sshd

17. نحوه محدود کردن دسترسی SSH به یک محدوده پورت خاص

محدود کردن دسترسی SSH به یک محدوده پورت خاص یک لایه امنیتی دیگر اضافه می‌کند با کنترل اینکه کدام پورت‌ها برای connectionها مجاز هستند، که می‌تواند به کاهش exposure به حملات خودکار روی پورت‌های استفاده نشده کمک کند.

در سیستم‌هایی که از UFW (Uncomplicated Firewall) استفاده می‌کنند، می‌توانید یک محدوده پورت را با دستور زیر اجازه دهید:

sudo ufw allow 1024:1040/tcp

برای کاربران FirewallD، معادل آن خواهد بود:

sudo firewall-cmd –permanent –add-port=1024-1040/tcp
sudo firewall-cmd –reload

این پیکربندی فقط connectionهای SSH روی پورت‌های 1024 تا 1040 را اجازه می‌دهد، دسترسی روی همه پورت‌های دیگر را block می‌کند.

18. نحوه تغییر Timeout Connection SSH در لینوکس

محدود کردن زمانی که SSH برای ورود کاربر به سیستم منتظر می‌ماند به جلوگیری از حملات brute-force کمک می‌کند و پنجره برای تلاش‌های دسترسی غیرمجاز را کاهش می‌دهد، که می‌تواند با استفاده از تنظیم LoginGraceTime در فایل پیکربندی سرور SSH پیکربندی شود.

خط زیر را اضافه یا تغییر دهید، که حداکثر زمان (در ثانیه) را که SSH برای یک لاگین موفق قبل از قطع connection منتظر می‌ماند تنظیم می‌کند.

LoginGraceTime 30

پس از ذخیره فایل، سرویس SSH را برای اعمال تغییر restart کنید:

sudo systemctl restart sshd

19. نحوه فعال‌سازی فشرده‌سازی SSH برای connectionهای سریع‌تر

فعال‌سازی فشرده‌سازی در SSH می‌تواند سرعت connection را بهبود بخشد، به ویژه هنگام انتقال مقادیر زیادی داده روی شبکه‌های کندتر. SSH می‌تواند داده را قبل از ارسال فشرده کند، مقدار ترافیک ارسالی روی شبکه را کاهش دهد.

برای استفاده از فشرده‌سازی روی پایه per-connection، به سادگی flag -C را هنگام connecting اضافه کنید:

ssh -C user@server

برای یک راه‌حل دائمی، می‌توانید فشرده‌سازی را در فایل پیکربندی کلاینت SSH فعال کنید.

Compression yes

پس از فعال شدن، SSH به طور خودکار داده را برای همه connectionها فشرده می‌کند، انتقال‌ها را سریع‌تر می‌کند در حالی که هنوز رمزگذاری و امنیت را حفظ می‌کند.

20. نحوه پیکربندی SSH Aliases برای دسترسی آسان‌تر

مدیریت چندین connection SSH می‌تواند دست و پا گیر باشد اگر مجبور باشید آدرس‌های IP، پورت‌ها و نام‌های کاربری را برای هر سرور به خاطر بسپارید. استفاده از SSH aliases این فرآیند را با اجازه دادن به شما برای ایجاد میانبر برای سرورهای frequently accessed ساده می‌کند.

برای تنظیم یک alias، فایل پیکربندی کلاینت SSH خود را ویرایش کنید و یک entry مانند این اضافه کنید:

Host myserver
HostName 192.168.1.50
User alice
Port 2200

پس از ذخیره فایل، می‌توانید به سادگی با اجرای این دستور وصل شوید:

ssh myserver

21. نحوه فوروارد کردن برنامه‌های GUI روی SSH (X11 Forwarding)

SSH می‌تواند بیشتر از فقط دسترسی خط فرمان انجام دهد؛ همچنین می‌تواند برنامه‌های گرافیکی را از یک سرور راه‌دور به ماشین محلی شما با استفاده از X11 forwarding فوروارد کند، که به شما امکان می‌دهد برنامه‌های GUI را روی سرور اجرا کنید گویی که به صورت محلی اجرا می‌شوند.

برای فعال‌سازی X11 forwarding، با option -X وصل شوید:

ssh -X user@server

پس از connecting، می‌توانید برنامه‌های GUI مانند زیر را launch کنید:

gedit

پنجره برنامه روی ماشین محلی شما ظاهر خواهد شد، در حالی که همه پردازش روی سرور راه‌دور اتفاق می‌افتد.

نکته: اطمینان حاصل کنید X11 forwarding در فایل پیکربندی سرور SSH اجازه داده شده است.

X11Forwarding yes

نتیجه‌گیری نهایی

SSH یک ابزار ضروری برای هر کسی است که سرورهای لینوکس را مدیریت می‌کند، و استفاده صحیح از آن می‌تواند کار شما را هم آسان‌تر و هم ایمن‌تر کند.

با دنبال کردن نکات این راهنما، می‌توانید سرورهای خود را از دسترسی غیرمجاز محافظت کنید، لاگین‌های خود را با احراز هویت مبتنی بر کلید و aliases ساده کنید، و فعالیت را با ابزارهایی مانند fail2ban و timeoutهای session مانیتور کنید.

با اصول اولیه شروع کنید، مانند تغییر پورت پیش‌فرض، غیرفعال کردن لاگین روت، و تنظیم لاگین مبتنی بر کلید، و سپس به تدریج ویژگی‌های پیشرفته مانند احراز هویت دو مرحله‌ای، SSH tunneling و لاگ‌گیری verbose را کاوش کنید.

مسلط شدن بر این روش‌ها به شما کمک می‌کند سرورها را به طور کارآمد مدیریت کنید، از حملات در امان بمانید و مانند یک مدیر لینوکس با اعتماد به نفس کار کنید.



✍️ نویسنده: حسین سیلانی

🔗 درباره من: seilany.ir

📢 نویسندگی و مشارکت در وبلاگ: t.me/seilany