توشن

۲۰ روش برتر امنیت سرور OPEN SSH

بنر طراحی سایت توشن

۲۰ روش برتر امنیت سرور OPEN SSH

۲۰ روش برتر امنیت سرور OPEN SSH
به این مطلب امتیاز بدهید:

OpenSSH پروتکل سرویس SSH است. OpenSSH برای ورود از راه دور، بک آپ گیری، انتقال فایل از راه دور به وسیله ی scp یا sftp و موارد بسیار دیگر پیشنهاد می شود. SSH بهترین راه برای نگهداری محرمانه و کامل اطلاعات و داده های تبادل شده بین دو شبکه و سیستم می باشد. هرچند، اصلی ترین مزیت آن تایید سرور، از طریق استفاده از رمزگذاری کلید عمومی است. این مطلب به شما نشان خواهد داد که چگونه سرور  OpenSSH فعال بر لینوکس یا یونیکس را مانند سیستم برای بهبود امنیت SSHD محافظت کرد. پیشفرض های OpenSSH پورت TCP-22 سرور OpenSSH دارای یک فایل کانفیگ می باشد-sshd ( در /etc/ssh/ قرار گرفته شده) کانفیگ کردن فایل کلاینت OpenSSH- ssh (در /etc/ssh/ قرار گرفته شده) ۱.از کلید عمومی SSH برای لاگین استفاده کنید سرور OpenSSH هویت های مختلف و متنوعی را پشتیبانی می کند. به همین دلیل پیشنهاد می شود تا از کلید عمومی احراز هویت استفاده کنید. ابتدا، جفت کلید را بر اساس ssh-keygen  پیشنهاد شده بر لپتاپ یا دسکتاپ محلی خودتان بسازید: نکته: DSA  و RSA 1024 بایت یا کلید SSH پایین تر، ضعیف به شمار می روند. برای استفاده از آنها لطفا خودداری نمایید. کلید های RSA نسبت به کلید های ECDSA  هنگامی که همگام سازی با کلاینت های SSH  مد نظر است، ترجیح داده می شود. تمامی کلیدهای SSH یا ED25519 یا RSA می باشند. از نمونه های دیگر استفاده نکنید.

ssh-keygen -t key_type -b bits -C "comment" ssh-keygen -t ed25519 -C "Login to production cluster at xyz corp" ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_aws_$(date +%Y-%m-%d) -C "AWS key for abc corp clients"

  سپس، کلید عمومی را با استفاده از ssh-copy-id، نصب کنید:

ssh-copy-id -i /path/to/public-key-file user@host ssh-copy-id user@remote-server-ip-or-dns-name ssh-copy-id toshan@rhel7-aws-server

هنگامی که ارتقا پیدا کرد، رمز کاربری را وارد کنید. بر اساس لاگینی که برای شما کار می کند، کلید ssh را تایید کنید:

ssh toshan@rhel7-aws-server

۲.روت لاگین را غیر فعال کنید پیش از آنکه روت کاربری برای لاگین شدن را غیر فعال کنیم، باید اطمینان پیدا کنیم که کاربر معمولی می تواند به عنوان روت و مدیر وارد شود. برای مثال، این امکان را به وجود می آوریم تا کاربر toshan به عنوان روت با استفاده از کامند sudo لاگین شود. چگونه کاربر toshan رابه گروه sudi به دبیان/ اوبونتو اضافه کنیم اجازه دهید تا اعضای گروه sudo هر دستوری را اجرا کنند. کاربر toshan را به گروه اضافه کنید:

sudo adduser toshan

اعضای گروه را با دستور تایید کنید:

id toshan

چگونه کاربر toshan را به گروه sudo به CentOS/RHEL اضافه کنیم اجازه دهید تا افراد حاضر در گروه wheel تمامی دستورات CentOS/RHEL و سرور فدورا لینوکس را اجرا کنند. از دستور حالت کاربری استفاده کنید و کاربری که toshan نام دارد را به گروه wheel اضافه کنید:

sudo usermod -aG wheel toshan id toshan

دسترسی sudo و غیرفعال بودن لاگین شدن روت برای ssh را تست کنید آن را تست کرده و مطمئن شوید که کاربر toshan می تواند به عنوان روت لاگین شده یا دستور را به عنوان روت اجرا کند:

sudo -i sudo /etc/init.d/sshd status sudo systemctl status httpd

یکبار دیگر با اضافه کردن خط زیر به کانفیگ  sshd غیرفعال شدن روت لاگین را تایید کنید:

PermitRootLogin no ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no

۳.رمز عبور را با لاگین غیر فعال کنید تمامی پسوردهایی که بر اساس لاگین وجود داشته اند می بایست غیر فعال شوند. تنها کلید عمومی بر اساس لاگین ها مجاز هستند. دستور زیر را برای فایل کانفیگ  sshd خود اضافه کنید:

AuthenticationMethods publickey PubkeyAuthentication yes

ورژن قدیمی کاربر SSHD بر  CentOS6.x/RHEL6.x می بایست از تنظیمات زیر استفاده کنید:

PubkeyAuthentication yes

۴.دسترسی کاربران ssh را محدود کنید به صورت پیشفرض، تمامی کاربران سیستم ها می توانند با استفاده از رمز یا کلید عمومی ssh لاگین شوند. گاهی اکانت کاربری یونیکس/لینوکس برای ایمیل یا FTP می سازید. هرچند، آن کاربرها می توانند در سیستم با استفاده از SSH وارد شوند. کاربرها دسترسی کامل را به ابزارهای سیستم دارند. از جمله کامپایلرها و تهیه فایل آغازگر زبان هایی مانند Perl، Python  که پورت های شبکه را می تواند باز کند و کارهای دیگری را نیز انجام دهند. تنها به کاربران toshan، sepanta و روت اجازه دهید تا از سیستم به وسیله ی ssh استفاده کنید. کانفیگ sshd زیر را اضافه کنید:

AllowUsers toshan sepanta

به نوبت، می توانید به تمامی کاربران اجازه دهید تا با ssh وارد شوند اما چند کاربر را نادیده بگیرید. کانفیگ این دستور به شرح زیر است:

DenyUsers root webii

همچنین می توانید با کاkفیگ لیونکس PAM اجازه یا مانع ورود از طریق سرور SSHD شوید. می توانید اجازه دهید لیستی از اسامی به SSH دسترسی داشته یا نداشته باشند. ۵.رمز ورودهای خالی را غیر فعال کنید می بایست کاملا از ورود اکانت هایی که از راه دور رمز ورود خالی دارند جلوگیری کنید. کانفیگ sshd  را با خط زیر به روز کنید:

PermitEmptyPasswords no

۶.از رمز عبورهای بلند و قوی برای کاربران/کلیدهای ssh استفاده کنید واقعا نمی توان گفت که چه قدر استفاده از رمز عبور قوی کاربری و رمز عبورهای بلند برای کلیدها اهمیت فراوانی دارد. می توانید کاربر را مجبور کنید تا از حمله ی رمزهای مخالف دیکشنری جلوگیری کند و از ابزار john the ripper برای فهمیدن کدام رمزها ضعیف است، استفاده کند. در اینجا یک نمونه ی ساده از عملکرد رمز عبور را مشاهده می کنید:

genpasswd() {

        local l=$1

       [ "$l" == "" ] && l=20

      tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs

}

اجرایش کنید:

genpasswd 16

خروجی:

uw8CnDVMwC6vOKgW

فایروال ssh TCP پورت # ۲۲ شما به فایروال SSH TCP # 22 با به روزرسانی iptables/ufw/firewall-cmd نیاز دارید. سرور OpenSSH تنها کانکشن هایی را که از LAN یا دیگر WAN های سایت های ریموتی باشند، قبول می کند. کانفیگ (iptables) /etc/sysconfig/iptavles (redhat را به روز رسانی کنید تا تنها از ۱۹۲.۱۶۸.۱.۰ و ۲۰۲.۵۴.۱.۵/۲۹ کانکشن قبول کند. دستورات زیر وارد کنید:

-A RH-Firewall-1-INPUT -s 192.168.1.0/۲۴ -m state --state NEW -p tcp --dport 22 -j ACCEPT

-A RH-Firewall-1-INPUT -s 202.54.1.5/۲۹ -m state --state NEW -p tcp --dport 22 -j ACCEPT

UFW مخفف uncomplicated firewall می باشد. از آن برای مدیریت و کنترل فایروال لینوکس استفاده می شود و هدف آن این است که استفاده ی آسان برای کاربر را فراهم نمایند.از دستور زیر برای قبول کردن پورت ۲۲ از ۲۰۲.۵۴.۱۵/۲۹ تنها استفاده می شود:

sudo ufw allow from 202.54.1.5/29 to any port 22

*کانفیگ فایروال BSD PF اگر از فایروال PF استفاده می کنید /etc/pf.conf را به روزرسانی کنید:

pass in on $ext_if inet proto tcp from {192.168.1.0/24, 202.54.1.5/29} to $ssh_server_ip port ssh flags S/SA synproxy state

۸.پورت SSH را عوض و IP بایندینگ را محدود کنید به صورت پیش فرض، SSH به تمامی واسطه ها و آی پی آدرس های سیستم گوش می کند. پورت بایندینگ SSH را محدود و پورت SSH را تعویض کنید. (بروت های بسیاری اسکریپت ها را مجبور می کنند تنها تلاش کنند تا به TCP  پورت # ۲۲ وصل شوند.) برای به هم پیوستن به ۱۹۲.۱۶۸.۱۵ و ۲۰۲.۵۴.۱.۵ آی پی ها و پورت ۳۰۰، کانفیگ SSH زیر را تصحیح یا اضافه کنید: Port 300

ListenAddress 192.168.1.5

ListenAddress 202.54.1.5

بهترین راه برای استفاده از ورودی های اسکریپت محافظت شده مانند fail2ban  یا denyhotos زمانی است که می خواهید از WAN IP آدرس پویا کانکشنی را قبول کنید. ۹.استفاده از بسته های TCP (اختیاری) بسته TCP هاست شبکه ی سیستم ACL می باشد که برای فیلتر کردن دسترسی شبکه به اینترنت استفاده می شود. OpenSSH بسته های TCP را پشتیبانی می کند. تنها فایل /etc/hosts. را مانند ssh زیر تنها از ۱۹۲.۱۶۸.۱.۲ و ۱۷۲.۱۶.۲۳.۱۳ آی پی آدرس، به روزرسانی کنید :

sshd : 192.168.1.2 172.16.23.12

۱۰.حملات برای کرک پسورد SSH را دفع کنید نیروی بروت متودی برای شکستن برنامه ی رمزگذاری با استفاده از امکان های بی شمار با استفاده از یک یا چند شبکه ی کامپیوتری توزیع شده، است. برای جلوگیری از حمله ی بروت علیه ssh از نرم افزار زیر استفاده کنید: DenyHosts، ابزاری است که با پایتون نوشته شده است و تمایل دارد تا از حمله ی نیروی بروت به سرورهای ssh جلوگیری کند. این کار با نظارت بر تلاش های لاگین شدن ناموفق برای احراز هوییت و بلاک کردن آی پی آدرس انجام می شود. .توضیح دهید که چگونه هاست های ناموفق تحت RHEL/FEDORA و CENTOS لینوکس تنظیم می شوند. Fail2ban برنامه ی مشابهی است که از حمله های بروت علیه SSH جلوگیری می کند. sshguard هاست ها را از حمله های بروت علیه ssh و دیگر سرورهایی که از pf استفاده می کنند، حمایت می کند. sshblock تلاش های لاگین شدن SSH را بلاک می کند. فیلتر IPQ BDB ممکن است به عنوان fail2ban lite شناخته شود. ۱۱.برآورد-محدود کردن ترافیک های ورودی در TCP  پورت # ۲۲ (اختیاری) هم فیلتر نت و هم PF گزینه ی برآورد-محدود کردن را برای اجرای throttling ساده بر کانکشن های ورودی در پورت # ۲۲ را فراهم می کنند. نمونه های Iptables نمونه و مثال های زیر کانکشن هایی که بیش از ۵ بار تلاش می کنند تا در ۶۰ ثانیه به پورت ۲۲ وصل شوند را دراپ می کند:

#!/bin/bash

inet_if=eth1

ssh_port=22

IPT -I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW -m recent  --set

IPT -I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW -m recent  --update --seconds 60 --hitcount 5 -j DROP

اسکرپیت بالا را از iptables اسکریپت های خود فرا بخوانید. یک گزینه ی کانفیگ کردن دیگر:

IPT -A INPUT  -i ${inet_if} -p tcp --dport ${ssh_port} -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT

IPT -A INPUT  -i ${inet_if} -p tcp --dport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT

IPT -A OUTPUT -o ${inet_if} -p tcp --sport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT

# another one line example

# $IPT -A INPUT -i ${inet_if} -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 22 -m limit --limit 5/minute --limit-burst 5-j ACCEPT

<abusive_ips> flush)

۱۲.از پورت knocking استفاده کنید (اختیاری) پورت knocking متود خارجی پورت های باز بر فایروال است که با تلاش کانکشن بر مجموعه پورت های بسته ی از پیش تعیین شده به وجود آورده می شود. برای یک بار که تلاش های کانکشن به ترتیب به طور صحیح دریافت شد، قوانین فایروال به صورت پویا اصلاح شده تا به هاستی که کانکشن را ارسال می کند اجازه دهد تا به پورت یا پورت های به خصوص وصل شود. نمونه ی پورت knocking مثالی برای ssh است که از iptables استفاده می کند:

IPT -N stage1

IPT -A stage1 -m recent --remove --name knock

IPT -A stage1 -p tcp --dport 3456 -m recent --set --name knock2

 

IPT -N stage2

IPT -A stage2 -m recent --remove --name knock2

IPT -A stage2 -p tcp --dport 2345 -m recent --set --name heaven

 

IPT -N door

IPT -A door -m recent --rcheck --seconds 5 --name knock2 -j stage2

IPT -A door -m recent --rcheck --seconds 5 --name knock -j stage1

IPT -A door -p tcp --dport 1234 -m recent --set --name knock

 

IPT -A INPUT -m --state ESTABLISHED,RELATED -j ACCEPT

IPT -A INPUT -p tcp --dport 22 -m recent --rcheck --seconds 5 --name heaven -j ACCEPT

IPT -A INPUT -p tcp --syn -j door

  ۱۳.idle وقفه ای خروج را کانفیگ کنید کاربر می تواند با ssh به سرور وارد شود و شما می توانید idle وقفه ای خروج را تنظیم کنید تا از ssh session ناایمن جلوگیری کنید. sshd-config را باز کرده و مطمئن شوید که کمیت های زیر کانفیگ شده اند:

ClientAliveInterval 300 ClientAliveCountMax 0

شما idle خروج را در ثانیه تنظیم می کنید (۳۰۰ ثانیه==۵ دقیقه). پس از آنکه این وقفه تمام شد، کاربر idle به صورت اتوماتیک بیرون می شود (بخوانید لوگ اوت شده است). ۱۴.هشدار را برای کاربران ssh فعال کنید با به روز رسانی sshd-config با خط زیر، هشدار را تنظیم کنید:

Banner /etc/issue

نمونه فایل /etc/issue:

----------------------------------------------------------------------------------------------

You are accessing a XYZ Government (XYZG) Information System (IS) that is provided for authorized use only.

By using this IS (which includes any device attached to this IS), you consent to the following conditions:

 

+ The XYZG routinely intercepts and monitors communications on this IS for purposes including, but not limited to,

penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM),

law enforcement (LE), and counterintelligence (CI) investigations.

 

+ At any time, the XYZG may inspect and seize data stored on this IS.

 

+ Communications using, or data stored on, this IS are not private, are subject to routine monitoring,

interception, and search, and may be disclosed or used for any XYZG authorized purpose.

 

+ This IS includes security measures (e.g., authentication and access controls) to protect XYZG interests--not

for your personal benefit or privacy.

 

+ Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching

or monitoring of the content of privileged communications, or work product, related to personal representation

or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work

product are private and confidential. See User Agreement for details.

----------------------------------------------------------------------------------------------

نمونه ی بالا یک نمونه ی استاندارد است، تیم قانونی خود را برای موافقت کاربر خاص و جزئیات قابل توجه قانونی در نظر بگیرید. ۱۵.فایل های .rhosts را غیر فعال کنید (اعتبار سنجی) فایل های ~/.rhosts  و ~/.shosts کاربر را نخوانید. با تنظیمات زیر sshd-config را به روز رسانی کنید:

IgnoreRhosts yes

Ssh می تواند عمل دستور  rsh غیر کاربردی را تقلید کند. برای جلوگیری از این کار تنها کافی است دسترسی ناایمن به وسیله ی RSH را غیر فعال کنید. ۱۶.تایید یا احراز هویت HOST-BASED را غیر فعال کنید (اعتبار سنجی) برای غیر فعال کردن احراز هویت host-based ، sshd-config را با گزینه ی زیر به روز رسانی کنید:

HostbasedAuthentication no

۱۷.OpenSSH و سیستم های عامل را به هم وصل کنید پیشنهاد می شود که از ابزاری مانند yum، apt-get، freebsd-upadte و دیگر ابزارها استفاده کنید تا سیستم ها را با آخرین patch های امنیتی به روز رسانی کند: ۱۸.chroot OpenSSH (کاربران را به دایرکتوری های خانگی قفل کنید) به صورت پیش فرض کاربران اجازه دارند تا دایرکتوری های سرورهایی مانند /etc/،/bin و غیره را مرور کنند. شما می توانید ssh را با استفاده از os based chroot و یا استفاده از ابزارهای خاصی مانند rssh محافظت کنید. با آزادسازی OpenSSH 4.8pl دیگر نیازی به تکیه به هک های شخص سوم مانند rssh و یا تنظیمات chroot (1)  پیچیده برای محدودیت و لاک کردن کاربران از دایرکتوری های خانگی شان، نیست. ۱۹.سرور OpenSSH را بر کلاینت کامپیوتر غیر فعال کنید ورک استیشن ها و لپتاپ ها می توانند بدون سرور OpenSSH کار کنند. اگر لاگین ریموت و فایل توانمندی های SSH انتقال را فراهم نمی کند، سرور SSHD را حذف و غیر فعال کنید. کاربران CesntOS / RHEL می توانند سرور openssh را با دستور yum حذف و غیر فعال کنند:

sudo yum erase openssh-server

کاربر دبیان/ لینکوس اوبونتو می تواند همین کا را با دستور apt ودستور apt-get حذف و غیر فعال کند:

sudo apt-get remove openssh-server

ممکن است شما به آپدیت اسکریپت iptables برای حذف کردن ssh نیاز داشته باشید. با centos / rhel / fedora  فایل های /etc/sysconfig/iptables و /etc/syscongig/ip6tables را ویرایش کنید. هنگامی که ویرایش انجام شد، سرویس iptables را ری استارت کنید:

service iptables restart service ip6tables restart

۲۰.راهکارهای bonus از Mozilla اگر از openssh ورژن ۶.۷+ یا ورژن جدیدتر استفاده می کنید، تنظیمات زیر را امتحان کنید:

#################[ WARNING ]########################

# Do not use any setting blindly. Read sshd_config #

# man page. You must understand cryptography to    #

# tweak following settings. Otherwise use defaults #

####################################################

 

# Supported HostKey algorithms by order of preference.

HostKey /etc/ssh/ssh_host_ed25519_key

HostKey /etc/ssh/ssh_host_rsa_key

HostKey /etc/ssh/ssh_host_ecdsa_key

 

# Specifies the available KEX (Key Exchange) algorithms.

KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256

 

# Specifies the ciphers allowed

Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr

#Specifies the available MAC (message authentication code) algorithms

MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com

# LogLevel VERBOSE logs user's key fingerprint on login. Needed to have a clear audit track of which key was using to log in.

LogLevel VERBOSE

# Log sftp level file access (read/write/etc.) that would not be easily logged otherwise.

Subsystem sftp  /usr/lib/ssh/sftp-server -f AUTHPRIV -l INFO

می توانید با استفاده از دستور زیر سرور OpenSSH خود را که با alog حمایت می شود، گرب کنید:

ssh -Q cipher ssh -Q cipher-auth ssh -Q mac ssh -Q kex ssh -Q key

(عکس دوم ) چگونه می توان فایل sshd-config را تست و سرور ssh را ری استارات یا مجددا بارگزاری کرد؟ پیش از ری استارت sshd برای هر نوع خطا یا اروری اعتبار فایل کانفیگ و صحت کلید را با اجرای دستور زیر بررسی کنید:

sudo sshd –t

حالت تست را فعال کنید:

sudo sshd –T

سرانجام sshd را در لینوکس یا سیستم های اونیکس برای جفت کردن ورژن distro خود ری استارت کنید:

sudo systemctl start ssh ## Debian/Ubunt Linux## sudo systemctl restart sshd.service ## CentOS/RHEL/Fedora Linux## doas /etc/rc.d/sshd restart ## OpenBSD## sudo service sshd restart ## FreeBSD##

گارانتی آپتایم 99.9%

ما آپتایم وبسایت و تمامی سرویس های شما را در هر شرایطی به صورت 100 درصد تضمین میکنیم!

امنیت و حفظ حریم خصوصی

توشن سرویس دهنده هاست ایرانی با زیرساخت S.O.C جهت کنترل امنیت اطلاعات کاربران

پشتیبانی 24 ساعته

کارشناسان توشن در هر ساعت از شبانه روز آماده خدمت گذاری به مشتریان عزیز می باشند

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

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

پنج × 5 =

سوالات خود را از ما بپرسید!

توشن

لطفا پیش از ارسال دیدگاه، چند مورد زیر را مطالعه نمایید:

- دیدگاه خود را به زبان فارسی ارسال نمایید.
- به دیدگاه کاربران دیگر احترام بگذارید، پیام‌هایی که شامل محتوای توهین‌آمیز و کلمات نامناسب باشند، تایید نخواهند شد.
- از ارسال لینک‌ سایت های شخصی و ارائه اطلاعات شخصی در متن دیدگاه پرهیز فرمایید.
- موارد مرتبط با بخش پشتیبانی را از طریق مرکز پشتیبانی مطرح فرمایید تا در اسرع وقت بررسی شوند.

بهترین سرویس ، کمترین قیمت

برخی از مشتریان خدمات مجموعه توشن

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

هوای شما را داریم!

خود را درگیر مشکلات هاست و سرور نکنید!

حل این مشکلات را به ما بسپارید و به توسعه سایت و کسب و کار خود بیاندیشید!

مشاوره و فروش:          +21 91006996

help

سوال فنی دارید؟ ارسال تیکت پشتیبانی