پیشگیری و مقابله با حملات Brute Force مبتنی بر SSH

سرویس های اختصاصی > سرور اختصاصی مجازی (VDS) > مبتنی بر لینوکس (Linux)


بسیاری از کاربران سرویسهای مجازی با مشاهده تعداد لاگین های ناموفق 
SSH  متعجب میشوند.  کافی است تنها یک سرور متصل به شبکه اینترنت داشته باشید تا روزانه در معرض ده ها و بلکه صدها تلاش Brute Force قرار بگیرید.

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

هنگامی که در حال مشاهده تلاش های ناموفق هستید، چند راهکار برای مسدود نمودن این تلاش ها و یا ناموفق نمودن آن ها خواهید داشت .

1-در صورتی که همیشه با آدرس IP  یکسانی به سرور خود متصل می شوید، می توانید پرت 22 را در فایروال سرور بر روی هر IP به استثنا IP  خودتان مسدود کنید:

iptables -A INPUT -p tcp -d 0/0 -s YOUR.IP.GOES.HERE --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -d 0/0 --dport 22 -j DROP

سپس فرمان 'iptables-save' را اجرا نمایید.

توجه :  به این موضوع دقت داشته باشید که در صورت استفاده از این راهکار، اگر به هر شکل IP  شما تغییر کند، دسترسی SSH  به سرور خود را  از دست خواهید داد. همچنین این دسترسی برای ایران هاست ( در مواقع لزوم و اظطراری) نیز با سختی مواجه خواهد شد، همچنین بدیهی است که راه ورود خود با هر IP  دیگری به سرور را مسدود می نمایید.

2- سرویس  SSH را بر روی یک پورت  غیر معمول اجرا نمایید. از آن جا که بیشتر حمله های خودکار تنها برای اتصال با پورت استاندارد 22 برنامه ریزی شده اند، این روش برای پنهان شدن از تیر رس حمله گرهای خودکار، موثر خواهد بود.

برای تنظیم این مورد کافی است خط مربوط به شماره پورت را در /etc/ssh/sshd_config تغییر داده و سپس سرویسSSH  را مجددا" راه اندازی نمایید.

Port 1022

3-  از دستور AllowUsers در تنظیمات SSH  برای صدور اجازه تنها برای کاربران و IP  های خاص استفاده کنید.         

می توانید یک لیست از کاربران مجاز را مشابه مورد زیر ایجاد نمایید.

AllowUsers bob john root@11.22.33.44 root@99.88.77.66

در  این مثال، به کاربران bob'  و 'john'  اجازه داده شده از هرجایی به سرور لاگین نمایند در حالی که این اجازه برای کاربر root تنها به 2 آدرس IP  ذکر شده محدود شده است.

4- از پسوردهای پیچیده تری استفاده نمایید. حملات Brute Force  بر روی پسوردهای معمول و یا کلمات با معنی و ترکیبی از آنها (ترکیبی از واژگان فرهنگ لغات) متمرکز هستند. پسوردهای پیچیده ترکیبی از حروف کوچک و بزرگ، اعداد و علائم هستند که لزوما" واژه ی خاص و قابل فهمی را شامل نمی شوند.

5- حتی بهتر است که اصلا" از پسوردها برای لاگین به سرور استفاده نکنید. به جای آن public key   خود را در سرور نصب و از آن جهت ورود استفاده نمایید. اگر تمامی کاربران شما از Public key ها برای دسترسی به سرور استفاده می کنند چه بهتر که PasswordAuthentication را بر روی 'no' قرار دهید. برای غیرفعال نمودن لاگین با پسورد فقط برای کاربر root  از 'PermitRootLogin without-password' استفاده کنید. همچنین نیاز خواهید داشت که 'UsePam' و 'ChallengeResponseAuthentication' را  غیر فعال (turn off)  نمایید.

6-اگر نیاز به صدور اجازه دسترسی از آدرس های دلخواه را دارید   میتوانید بر روی استفاده از برنامه هایی چونDenyHosts یا  Fail2banحساب کنید. این برنامه ها لاگین های ناموفق را زیر نظر گرفته و IP   های مهاجم را در/etc/hosts اضافه می نمایند. همچنین با به روز رسانی نقش های فایر وال ،آنها را Deny  و یا null route  می نمایند.DenyHosts را میتوان طوری تنظیم نمود که خود را با یک پایگاه داده و لیست آنلاین از IP های مهاجم که توسط دیگران مخابره می شود، همگام سازی نماید  تا شما به صورت منفعلانه ای host هایی که دیگران مسدود نموده ودر لیست سیاه قرار داده اند را deny نمایید. در نظر داشته باشید در صورت استفاده از چنین برنامه هایی امکان لاک شدن موقت VPS شما به علت اشتباه وارد نمودن مکرر پسورد از سمت شما وجود خواهد داشت.

7- از 'hashlimit' در 'iptables' استفاده نمایید.

iptables -I INPUT -m hashlimit -m tcp -p tcp --dport 22 --hashlimit 1/min 
--hashlimit-mode srcip --hashlimit-name ssh -m state --state NEW -j ACCEPT

به طور مثال، با استفاده از این رول،  از یک آدرس IP در هر دقیقه فقط یک اتصال به پورت SSH  اجازه داده خواهد شد.

8- از Port Knocking برای نهان سازی کامل پورتی که سرور شما جهت سرویس SSH  روی آن Listen  می نماید، بهره بگیرید. البته این کار به طور مشخصی لاگین به سرور را برای شما پیچیده خواهد نمود.

Add Feedback