نکات و اصول مهم در hardening پروتکل SSH
این مقاله ۴۰ نکته ای شامل تنظیمات پیشرفته و best practice هایی برای hardening و امن کردن SSH server هستند که می توانند به طور قابل توجهی امنیت سرور را افزایش دهند...
برای اعمال تنظیمات، کافیست فایل /etc/ssh/sshd_config
را توسط یک ویرایشگر با کاربر root باز کنید و سپس مقادیر زیر را داخلش اعمال کنید:
(هر سیستم عاملی ممکن است نیاز به تفاوت های جزئی در اعمال تنظیمات داشته باشد)
1- Disable root login
غیرفعال کردن ورود مستقیم با کاربر root، جهت جلوگیری از دسترسی مستقیم به حساب root که میتواند خطرناک باشد.
پس خط زیر را اضافه کنید:
PermitRootLogin no
2- Use key-based authn
استفاده از Public key authn به جای رمزهای عبور... چون رمزهای عبور می توانند هک/bruteforce شوند، اما کلیدهای SSH ای بسیار امن تر هستند.
ابتدا یک کلید تولید کنید: ssh-keygen -t rsa -b 4096
سپس کلید pub را در مسیر ~/.ssh/authorized_keys قرار دهید.
3- Change default SSH port
تغییر پورت پیش فرض SSH server (22) جهت کاهش حملات scan پورت:
Port 2222
نکته: فایروال را هم باید تنظیم کنید.
4- Limit user access
محدود کردن کاربرانی که می توانند از SSH server استفاده کنند، بدلیل جلوگیری از دسترسی غیرمجاز:
AllowUsers user1 user
5- Disable password authn
غیرفعال کردن ورود با رمز عبور برای اجبار به استفاده از کلیدهای SSH ای:
PasswordAuthentication no
6- Enable Fail2Ban
نصب و فعال سازی Fail2Ban جهت بلاک کردن IP هایی که برای login تعداد زیادی retry می کنند.
Debiansudo apt install fail2ban
RedHatsudo yum install fail2ban
Slackwarewget https://slackbuilds.org/slackbuilds/15.0/network/fail2ban.tar.gz
tar -xvf fail2ban.tar.gz
cd fail2ban
chmod +x fail2ban.SlackBuild
./fail2ban.SlackBuild
installpkg /tmp/fail2ban-*.tgz
7- Use strong ciphers
استفاده از الگوریتم های رمزنگاری قوی جهت افزایش امنیت حین انتقال داده:Ciphers aes256-ctr,aes192-ctr,aes128-ctr
این ها الگوریتم های رمزنگاری AES با حالت CTR هستند که برای رمزگذاری داده ها در ارتباطات امن مانند SSH استفاده می شوند.
حالت CTR به دلیل عملکرد بالا و امکان رمزگذاری Parallel، در پروتکل هایی مانند SSH و VPN ها محبوب است. اگر سرعت مهم باشد، AES-128-CTR گزینه خوبی است، اما برای امنیت بیشتر، AES-256-CTR پیشنهاد می شود.
8- Disable X11 Forwarding
X11 Forwarding قابلیتی است که امکان می دهد UI برنامه های درحال اجرا روی یک سرور Remote را از طریق SSH روی سیستم خود/Client نمایش دهید.
غیرفعال کردن X11 Forwarding جهت کاهش خطرات امنیتی مرتبط با GUI:X11Forwarding no
9- Set idle timeout
تنظیم مدت زمان idle قبل از قطع اتصال جهت جلوگیری از session های باز طولانی:ClientAliveInterval 300
ClientAliveCountMax 0
10- Use TCP wrappers
استفاده از TCP wrappers برای محدود کردن دسترسی بر اساس IP.
ثبت IP ها در فایل /etc/hosts.allow و /etc/hosts.deny.
11- Enable two-factor authn (2FA)
افزودن احراز هویت دو مرحلهای جهت افزایش امنیت بکمک Google Authenticator یا PAM.
Debiansudo apt install libpam-google-authenticator
google-authenticator
auth required pam_google_authenticator.so
برای استفاده از Google Authenticator فایل /etc/pam.d/sshd را ویرایش کنید و این خط را اضافه کنید:auth required pam_google_authenticator.so
و برای فعال سازی 2FA در تنظیمات SSH فایل /etc/ssh/sshd_config را ویرایش کنید:ChallengeResponseAuthentication yes
و نهایتاً: sudo systemctl restart sshd
12- Disable host-based authn
Host-Based authn به سرور اجازه می دهد که بدون درخواست رمز عبور یا کلید، به دستگاه های خاص اعتماد کند... برای افزایش امنیت، بهتر است این قابلیت را غیرفعال کنید:HostbasedAuthentication no
13- Use chroot for SFTP
محدود کردن کاربران SFTP به دایرکتوری خاص جهت جلوگیری از دسترسی به سایر بخشهای سیستم:Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory /home/%u
ForceCommand internal-sftp
14- Update OpenSSH package
همیشه پکیج OpenSSH سرور را بروزرسانی کنید تا آسیب پذیری های امنیتی منتشر و رفع شده روی سرور شما هم اعمال شوند.
با استفاده از دستورات apt, yum, یا slackpkg می توایند این پکیج را بروز کنید.
15- Restrict SSH access by IP
محدود کردن دسترسی SSH به بازه ای از IP های خاص با استفاده از ابزار iptables یا firewalld.
16- Use SELinux
فقط RedHat: فعال سازی SELinux با تنظیم SELINUX=enforcing
در فایل /etc/selinux/config.
17- Use AppArmor
فقط Debian: فعال سازی AppArmor با نصب پروفایل های AppArmor.
18- Disable rhosts authn
Rhosts authentication یک روش قدیمی برای احراز هویت در سیستم های UNIX است که به کاربران اجازه می دهد بدون وارد کردن رمز عبور، از طریق فایل های /etc/hosts.equiv و ~/.rhosts به سیستم های remote متصل شوند. این روش بر اساس اعتماد به نام host و username کار می کند، اما به دلیل امنیت پایین و امکان جعل هویت، اصلاً توصیه نمی شود!
غیرفعال کردن Rhosts authn جهت کاهش خطرات امنیتی:IgnoreRhosts yes
19- Use strong MACs
این گزینه ها در تنظیمات SSH برای بررسی صحت و یکپارچگی داده های ارسال شده در اتصال امن استفاده می شوند.
پس استفاده از الگوریتم قوی جهت افزایش امنیت بسیار ضروریه:MACs hmac-sha2-512,hmac-sha2-256
20- Log SSH activity
لاگ گیری فعالیت های SSH جهت ردیابی حملات با تنظیم LogLevel INFO
در فایل /etc/ssh/sshd_config.
21- Disable empty passwords
غیرفعال کردن ورود با رمز عبور خالی، جهت جلوگیری از دسترسی به حساب های بدون رمز:PermitEmptyPasswords no
22- Use privilege separation
فعالسازی Privilege Separation جهت کاهش دسترسی root به فرآیندهای SSH:UsePrivilegeSeparation sandbox
23- Limit max startups
محدود کردن تعداد connection های همزمان برای جلوگیری از حملات DoS:MaxStartups 2:30:10
24- Enable PAM
فعالسازی سیستم PAM جهت افزودن مراحل بیشتر احراز هویت:UsePAM yes
25- Restrict access with firewall
محدود کردن دسترسی SSH با فایروال برای کاهش خطرات حملات شبکه:
Debian/RedHatsudo ufw allow 2222/tcp
Slackware استفاده از ابزار iptables.
26- Disable SSH protocol v1
غیرفعال کردن پروتکل قدیمی SSHv1 برای کاهش آسیب پذیری های امنیتی:Protocol 2
27- Use stronger key exchange algorithms
استفاده از الگوریتم های قوی تر برای زمان تبادل کلید:KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
28- Disable agent forwarding
Agent Forwarding اجازه می دهد کلید های SSH شما از طریق یک سرور واسط استفاده شوند... با غیرفعال کردن آن، خطر دسترسی غیرمجاز به کلیدهای SSH کاهش می یابد:AllowAgentForwarding no
29- Use strong host keys
استفاده از کلیدهای private قوی برای خود سرور:HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
30- Enable StrictModes
فعال سازی حالت StrictModes جهت جلوگیری از دسترسی به فایل های دارای مجوزهای نادرست:StrictModes yes
31- Disable GatewayPorts
GatewayPorts یک تنظیم در SSH است که تعیین میکند آیا پورت های forward شده توسط SSH می توانند از طرف دیگر کامپیوترها در شبکه دسترسی داشته باشند یا خیر.
غیرفعال کردن GatewayPorts جهت جلوگیری از forward پورت ها:GatewayPorts no
32- Use IPTables rate limiting
محدود کردن تعداد connection های SSH در هر ثانیه جهت جلوگیری از حملات brute-force:iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m limit --limit 3/min -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
33- Use SSH guard
نصب و فعال سازی SSHGuard برای بلاک کردن IP های مخرب:
Debiansudo apt install sshguard
RedHatsudo yum install sshguard
Slackwarewget https://www.sshguard.net/download/latest.tar.gz
tar -xvf latest.tar.gz
cd sshguard-*
./configure
make && make install
34- Rotate SSH keys regularly
بصورت دوره ای کلید های SSH را تغییر دهید تا خطرات ناشی از لو رفتن کلید ها کاهش یابد.
میتوانید از ابزار ssh-keygen
برای تولید کلید های جدید استفاده کنید.
35- Disable compression
غیرفعال کردن فشرده سازی جهت جلوگیری از حملات CRIME.
در حملات CRIME، هکرها با تحلیل الگوهای فشرده سازی، میتوانند اطلاعات حساس (مانند session احراز هویت یا کوکی ها) را استخراج کنند...Compression no
36- Use custom banner
تنظیم banner سفارشی قبل از ورود جهت پنهان سازی اطلاعات حساس:Banner /etc/issue.net
37- Disable DNS lookup
غیرفعال کردن جستجوی DNS برای کاهش دادن زمان connection و جلوگیری از حملات DNS spoofing:UseDNS no
38- Use Auditd monitoring
نصب و فعال سازی سیستم لاگ گیری Auditd جهت ردیابی فعالیت های مشکوک.
RedHatsudo yum install audit
Slackwarewget https://download.savannah.gnu.org/releases/audit/audit-3.0.tar.gz
tar -xvf audit-3.0.tar.gz
cd audit-3.0
./configure
make && sudo make install
sudo ausearch -k ssh
Debian
خودتون نصب کنید D:
39- Restrict SSH to specific interfaces
محدود کردن SSH server به interface های شبکه ای خاص:ListenAddress 192.168.1.100
40- Regularly review logs
بررسی منظم لاگ های SSH server برای شناسایی فعالیت های مشکوک.
میتوانید از دستورات journalctl
, cat /var/log/auth.log
, یا grep
برای جستجو استفاده کنید.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.