فهرست مطالب
- مقدمه
- نصب و راهاندازی OpenSSH
- مفاهیم پایه SSH
- احراز هویت با کلید عمومی و خصوصی
- سختسازی فایل کانفیگ sshd_config
- تغییر پورت پیشفرض و محافظت در برابر حملات Brute Force
- پیادهسازی فایروال و تنظیم UFW/IPTables
- راهاندازی Fail2Ban برای جلوگیری از حملات
- بهرهگیری از SELinux و AppArmor
- چرخش کلید و مدیریت کاربران
- احراز هویت چندمرحلهای (MFA)
- تونلزنی و Port Forwarding
- لاگگیری و مانیتورینگ پیشرفته
- نکات کاربردی و مثالهای عملی
- معرفی خدمات درفک IT
- جمعبندی
- سؤالات متداول
1. مقدمه
SSH (Secure Shell) پروتکلی رمزنگاریشده برای دسترسی امن به سیستمهای از راه دور است. مدیران سیستم و توسعهدهندگان معمولاً برای انجام امور روزمرهٔ سرور از SSH استفاده میکنند. با رشد حملات سایبری، نیاز به یادگیری تکنیکهای پیشرفته برای افزایش امنیت SSH بیش از پیش احساس میشود.
در این مقاله به صورت تخصصی و در لحنی نسبتاً عامیانه، شما را با روشهای بهینه شده برای تأمین امنیت SSH در توزیعهای مختلف لینوکس آشنا خواهیم کرد.
2. نصب و راهاندازی OpenSSH
ابتدا باید بستهی OpenSSH را روی سرور نصب کنیم. در اکثر توزیعهای معاصر، دستور زیر کافی است:
# در اوبونتو و دبیان
sudo apt update
sudo apt install openssh-server
# در CentOS و RHEL
sudo yum install openssh-server
# در Fedora
sudo dnf install openssh-server
پس از نصب، سرویس SSH را فعال و اجرا کنید:
sudo systemctl enable ssh
sudo systemctl start ssh
برای بررسی وضعیت سرویس:
sudo systemctl status ssh
3. مفاهیم پایه SSH
- شنود (Listening): SSH بهطور پیشفرض روی پورت 22 شنود میکند.
- کلیدهای کریپتوگرافی: کلید عمومی (public key) و کلید خصوصی (private key) برای احراز هویت استفاده میشوند.
- تونلزنی (Tunneling): امکان ایجاد مسیرهای رمزنگاریشده برای سایر پروتکلها.
- Forwarding: Local و remote port forwarding برای عبور از فایروال یا NAT.
4. احراز هویت با کلید عمومی و خصوصی
4.1 تولید کلید SSH
روی ماشین کلاینت دستور زیر را اجرا کنید:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa
نوع کلید را مشخص میکند.-b 4096
طول کلید را تعیین میکند.-C
کامنت دلخواه.
4.2 نصب کلید عمومی روی سرور
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip
اگر این ابزار در دسترس نبود:
cat ~/.ssh/id_rsa.pub | ssh user@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
4.3 غیرفعالسازی احراز هویت با پسورد
در فایل /etc/ssh/sshd_config
مقدار زیر را پیدا و تنظیم کنید:
PasswordAuthentication no
و سپس سرویس را ریاستارت کنید:
sudo systemctl restart ssh
5. سختسازی فایل کانفیگ sshd_config
در ادامهی کاربردیترین تنظیمات امنیتی:
- PermitRootLogin:
PermitRootLogin no
برای جلوگیری از لاگین مستقیم کاربر روت.
MaxAuthTries:
MaxAuthTries 3
کاهش تعداد تلاشهای ناموفق لاگین.
AllowUsers / AllowGroups:
AllowUsers alice bob
یا
AllowGroups sshusers
محدود کردن دسترسی به کاربران یا گروههای مشخص.
ClientAliveInterval / ClientAliveCountMax:
ClientAliveInterval 300
ClientAliveCountMax 2
برای قطع خودکار نشستهای غیرفعال.
X11Forwarding:
X11Forwarding no
- اگر نیازی به فوروارد گرافیک ندارید.
6. تغییر پورت پیشفرض و محافظت در برابر حملات Brute Force
6.1 تغییر پورت SSH
در sshd_config
:
Port 2222
سپس:
sudo systemctl restart ssh
6.2 جلوگیری از حملات Brute Force
- استفاده از Fail2Ban
- تنظیم فایروال
7. پیادهسازی فایروال و تنظیم UFW/IPTables
7.1 UFW در اوبونتو
sudo ufw allow 2222/tcp
sudo ufw enable
sudo ufw status
7.2 IPTables
sudo iptables -A INPUT -p tcp --dport 2222 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
sudo iptables-save | sudo tee /etc/iptables/rules.v4
8. راهاندازی Fail2Ban برای جلوگیری از حملات
sudo apt install fail2ban
در /etc/fail2ban/jail.local
:
[sshd]
enabled = true
port = 2222
maxretry = 5
bantime = 3600
سرویس را ریاستارت کنید:
sudo systemctl restart fail2ban
9. بهرهگیری از SELinux و AppArmor
- در توزیعهایی که SELinux فعال است، پروفایل SSH را سختگیرانهتر کنید:
semanage port -a -t ssh_port_t -p tcp 2222
- در اوبونتو با AppArmor، پروفایل
/etc/apparmor.d/usr.sbin.ss hd
را ویرایش نمایید.
10. چرخش کلید و مدیریت کاربران
- تاریخچه دسترسی: برای هر کاربر فولدر
.ssh/authorized_keys
را مرتباً بازبینی کنید. - چرخش کلید: هر ۶ ماه یکبار کلیدها را بازسازی کنید.
- مدیریت کاربران: هنگام حذف کاربر، کلیدهای مربوطه را پاک کنید:
sudo userdel -r username
11. احراز هویت چندمرحلهای (MFA)
با Google Authenticator یا Duo:
sudo apt install libpam-google-authenticator
google-authenticator
در /etc/pam.d/sshd
اضافه کنید:
auth required pam_google_authenticator.so
در sshd_config
:
ChallengeResponseAuthentication yes
12. تونلزنی و Port Forwarding
12.1 Local Forwarding
ssh -L 8080:internal.server:80 user@bastion.host
12.2 Remote Forwarding
ssh -R 9090:localhost:3000 user@remote.host
12.3 Dynamic Forwarding (SOCKS Proxy)
ssh -D 1080 user@server.host
13. لاگگیری و مانیتورینگ پیشرفته
- استفاده از syslog/nginx و ELK Stack برای تجمیع لاگها.
- فعالسازی
LogLevel VERBOSE
درsshd_config
:
LogLevel VERBOSE
- آنالیز لاگها با ابزارهایی نظیر
goaccess
یاGraylog
.
14. نکات کاربردی و مثالهای عملی
- مثال پیکربندی چندین سرویس SSH روی پورتهای مختلف.
- نمونه اسکریپت Bash برای بکاپگیری از فایلهای کانفیگ.
- اتصال خودکار با SSH Agent و بهرهگیری از
ssh-agent
وssh-add
.
15. معرفی خدمات درفک IT
برای مشاوره و بهرهمندی از خدمات تخصصی در زمینه امنیت سرور و شبکه، میتوانید به وبسایت Dorfakit.ir مراجعه کرده و از کارشناسان درفک IT بهرهمند شوید.
16. جمعبندی
در این مقاله با جنبههای پیشرفته SSH در لینوکس آشنا شدیم. از راهاندازی و احراز هویت تا تکنیکهای سختسازی و مانیتورینگ کامل را پوشش دادیم. با اجرای نکات فوق میتوانید سطح امنیت ارتباطات خود را به طور قابل توجهی افزایش دهید.
17. سؤالات متداول
- چگونه پورت SSH را بدون قطعی سرویس تغییر دهم؟ ابتدا پورت جدید را در
sshd_config
اضافه کرده و سرویس را ریاستارت کنید، سپس قوانین فایروال را بهروزرسانی و پورت قدیم را ببندید. - آیا استفاده از RSA 4096 بیت کافی است؟ بله؛ RSA با طول 4096 بیت تا مدتها امن خواهد ماند، اما میتوانید از ED25519 نیز بهره ببرید.
- چگونه لاگهای SSH را به ELK ارسال کنم؟ لاگهای syslog را به سمت لاگاستیشن Logstash هدایت کنید و در Kibana داشبورد تعریف کنید.
- آیا احراز هویت با کلید عمومی امنتر از پسورد است؟ قطعاً؛ کلید عمومی/خصوصی از حملات Brute Force و دیکشنری جلوگیری میکند.
- Fail2Ban را چگونه با پورت غیرپیشفرض پیکربندی کنم؟ در فایل
jail.local
بخش [sshd]، مقدارport
را روی پورت جدید قرار دهید و سرویس را ریاستارت کنید.