یوشا

دست نوشته ها و تجربیات شخصی

یوشا

دست نوشته ها و تجربیات شخصی

شهید دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم آنکس که تخصص ندارد و کاری را می پذیرد بی تقواست!

طبقه بندی موضوعی

این مقاله ۴۰ نکته ای شامل تنظیمات پیشرفته و 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 می کنند.
Debian
sudo apt install fail2ban 

RedHat
sudo yum install fail2ban

Slackware
wget 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.
Debian
sudo 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/RedHat
sudo 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‌ های مخرب:
Debian
sudo apt install sshguard

RedHat
sudo yum install sshguard

Slackware
wget 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 جهت ردیابی فعالیت‌ های مشکوک.
RedHat
sudo yum install audit

Slackware
wget 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 برای جستجو استفاده کنید.

 
  • ۰۴/۰۶/۲۰
  • یوشا آل ایوب

OpenSSh

SSh

hardening

نکات و اصول مهم

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">