بسیاری از کاربران سرویسهای مجازی با مشاهده تعداد لاگین های ناموفق 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 می نماید، بهره بگیرید. البته این کار به طور مشخصی لاگین به سرور را برای شما پیچیده خواهد نمود.
|