نحوه راهاندازی تله امنیتی برای مقابله با نفوذ در سرور مجازی اوبونتو
۱۳ اسفند ۱۴۰۳
سرور شما دائماً در معرض اسکن رباتها و تلاشهای نفوذ است. با راهاندازی یک تله کندسازی (Tarpit) در سرور مجازی اوبونتو، میتوانید مهاجمان را درگیر کرده و سرعت حملات آنها را کاهش دهید. این روش باعث میشود رباتها با دری بسته مواجه شوند و زمان زیادی را بیهوده صرف کنند، در حالی که شما از سرور خود در برابر این تهدیدات محافظت میکنید.
در این آموزش نحوه راهاندازی Endless Tarpit که یک تله امنیتی میباشد را آموزش خواهیم داد. شما میتوانید سرویس SSH را طوری تنظیم کنید که در پورت دیگری اجرا شود که اینکار لاگهای احراز هویت شما را نیز خواناتر میکند. با توجه به گزارشهای احراز هویت، ممکن است با ورود ناموفق آدرس های IP که معمولا از یک گره در یک botnet ناشی می شوند مواجه شوید، در این حالت باید کل وب را برای یافتن سرورهای آسیب پذیر اسکن کنید. اکثر کاربران، رمز عبور ایمن یا کلیدهای SSH دارند که بهراحتی از ورود هکرها به سرورشان جلوگیری می کند. با این حال، برخی از سرورها در برابر این اسکن آسیب پذیر خواهند بود. حتی اگر نتوانید جلوی این حملات را بگیرید، می توانید با استفاده از tarpit سرعت آنها را کاهش دهید.
پیشنیازها
برای تکمیل این آموزش به موارد زیر نیاز دارید:
برای تکمیل این آموزش، باید یک سرور مجازی Ubuntu با یک کاربر غیر روت (non-root) دارای دسترسی sudo و یک فایروال (Firewall) فعال و حداقل 1 گیگابایت رم داشته باشید و همچنین ابزار Git را روی سرور خود نصب داشته کنید.. برای تنظیم این موارد، میتوانید راهنمای نحوه راهاندازی اولیه سرور مجازی با اوبونتو Ubuntu را دنبال کنید. برای درک بهتر آموزش هم، در صورتی که با سرور مجازی و VPS آشنایی ندارید، توصیه میشود مقاله سرور مجازی یا VPS چیست؟ انواع و کاربرد را مطالعه کنید.
همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راهاندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه بهصرفه
خرید سرور مجازی بهصرفه
در ادامه بخوانید:
- مرحله اول: انتقال SSH به یک پورت غیراستاندارد
- مرحله دوم: نصب Endlessh
- مرحله سوم: پیکربندی Endlessh
- نتیجه گیری

مرحله اول: انتقال SSH به یک پورت غیراستاندارد
ابتدا با انتقال SSH به یک پورت غیراستاندارد، یک پورت برای Endless SSH آزاد کنید. . با توجه به این که باتنتها منابع محدودی دارند، معمولاً فقط پورت پیشفرض SSH را که 22
است را اسکن میکنند. با انتقال SSH به یک پورت غیر استاندارد، می توانید ربات را در Endless Tarpit به تله بیندازید.
با استفاده از دستور زیر، یک نسخه پشتیبان از فایل پیکربندی SSH از سرور خود تهیه کنید:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
برای بازیابی تنظیمات اصلی می توان SSH را به پورت پیش فرض برگرداند. اکنون فایل پیکربندی SSH /etc/ssh/sshd_config
را با استفاده از nano باز کنید:
sudo nano /etc/ssh/sshd_config
در فایل باز شده، خط #Port 22
را پیدا کرده و #
را حذف کنید، سپس مانند زیر پورت موردنظرتان را به یک پورت بلا استفاده در سرور خود تغییر دهید:
...
Port 2222
...
بطور مثال پورت2222
بلا استفاده است. بدین ترتیب می توانید هر پورتی که برای اتصالات SSH تکراری استفاده می شود را انتخاب کنید. فایل را ذخیره کنید و ببندید.
در صورتی که سرور شما از فایروالufw
استفاده می کند، با استفاده از دستور زیر پورت را باز کنید:
sudo ufw allow 2222/tcp
در ادامه سرویس SSH را دوباره راهاندازی کنید:
sudo systemctl restart sshd
سپس طبق دستور زیر، با پورت جدیدی که تنظیم کردهاید به سرور خود وصل شوید:
ssh sammy@your_server_ip -p 2222
هشدار: SSH فعال خود را نبندید مگر اینکه تأیید کرده باشید که می توانید از SSH در پورت جدید استفاده کنید. در صورتی که نتوانید از طریق پورت جدید وصل شوید، دسترسی به سرور با بستن جلسه، در معرض ریسک خواهد بود. اگر نمی توانید با استفاده از ترمینال جداگانه به سرور خود متصل شوید، می توانید تنظیمات SSH اصلی خود را با اجرای دستورات زیر بازیابی کنید:
sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
sudo systemctl restart sshd
بعد از اجرای دستور، در صورت بروز مشکل، بررسی کنید که sshd
با موفقیت راه اندازی مجدد شده است یا نه. سپس تنظیمات فایروال خود را بررسی کرده تا مطمئن شوید که پورت2222
ترافیک tcp را می پذیرد.
حالا بعد از تائید ایجاد اتصال جدید به پورت 2222
،ترمینال اصلی خود را با خیال راحت ببنیدید. موقع اتصال به سرور، همیشه باید مانند زیر پورت جدید را مشخص کنید:
ssh sammy@your_server_ip -p 2222
در آخر بعد از انتقال موفقیتآمیز SSH به یک پورت غیراستاندارد، نوبت به راهاندازی Endlessh میرسد.
مرحله دوم: نصب Endlessh
Endlessh بسته رسمی ندارد. شما می توانید از Git برای کلون کردن مخزن، بسته build-essential
و بسته libc6-dev
استفاده کنید.
بسته های مورد نیاز را با دستور زیر نصب کنید:
sudo apt install build-essential libc6-dev
در ادامه با انتخاب کلید Y
نصب را تأیید کرده و سپس مخزن Endlessh از GitHub را در فهرست اصلی خود کلون کنید:
git clone https://github.com/do-community/endlessh
به پوشه پروژه بروید و از دستور make
برای کامپایل Endlessh استفاده کنید:
cd endlessh
make
با دستور زیر Endlessh را اجرا کنید:
sudo ./endlessh -v -p 22
برای تست درست کار کردن Endlessh، میتوانید طبق دستور زیر در پنجره ترمینال جدید یک اتصال SSH به پورت 22
با پرچم -v
ایجاد کنید:
ssh sammy@your_server_ip -v
ssh sammy@your_server_ip -p 22 -v
پس از اجرای این دستور، زمان اتصال جدید SSH به پورت 22
مطابق خروجی زیر، هر 10 ثانیه یک بار یک رشته از کاراکترهای تصادفی در ترمینال ظاهر می شود تا جلسه بسته شود:
debug1: kex_exchange_identification: banner line 0: NvnHF>]&W4p+tg*"+
debug1: kex_exchange_identification: banner line 1: n<
debug1: kex_exchange_identification: banner line 2: @/O5c0/;>1b{qd(M,vK
debug1: kex_exchange_identification: banner line 3: i+ OZ
debug1: kex_exchange_identification: banner line 4: yn
debug1: kex_exchange_identification: banner line 5: T[V\\[HUg
حالا که صحت اتصال به یک جلسه جدید تایید شد، می توانید ترمینال جدید را ببندید و در نهایت Ctrl+C
را بزنید تا Endlessh را در جلسه ترمینال اصلی متوقف کنید.
در انتهای این مرحله Endlessh را از منبع دانلود کرده، بعد آن را پیکربندی کنید تا هنگام خروج از سیستم و راهاندازی مجدد سرور، همچنان پایدار بماند.
پیشنهاد مطالعه: GitHub چیست؟
مرحله سوم: پیکربندی Endlessh
در این مرحله، Endlessh را به عنوان سرویسی تنظیم میکنیم که پس از پایان و از طریق راهاندازی مجدد سیستم، باقی خواهد ماند. با دستور زیر، Endlessh را به پوشه /usr/local/bin
منتقل کنید:
sudo mv ./endlessh /usr/local/bin/
در ادامه ممکن است از شما رمز عبور بخواهد، در اینصورت رمز عبور را وارد کرده و فایل service را در پوشه /etc/systemd/system
کپی کنید:
sudo cp util/endlessh.service /etc/systemd/system/
حالا شما میتوانید فایل service را با کمی تغییر در Endlessh روی پورت های زیر 1024
اجرا کنید. جهت ویرایش پورتها، فایل را در nano باز کنید:
sudo nano /etc/systemd/system/endlessh.service
سپس بخش مربوط به اجرای Endlessh را در پورت های زیر 1024
پیدا کنید.
در این مرحله، فایل را با حذف #
در ابتدای خط با AmbientCapabilities=CAP_NET_BIND_SERVICE
و اضافه کردن #
به ابتدای خط PrivateUsers=true
مانند زیر بهروز رسانی کنید:
## If you want Endlessh to bind on ports < 1024
## 1) run:
## setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) uncomment following line
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) comment following line
#PrivateUsers=true
فایل را ذخیره کنید و خارج شوید. اکنون، به Endlessh اجازه میدهید تا روی پورتهای کمتر از 1024
اجرا شود (پورتهای دارای امتیاز دامنه اینترنتی) این قابلیت را برای Endlessh با دستورsetcap
تنظیم کنید:
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
حالا شما یک فایل پیکربندی برای Endlessh نیاز دارید، تا به آن بگویید از کدام پورت استفاده کند. برای اینکار یک فایل پیکربندی به نام /etc/endlessh/config
ایجاد کنید:
sudo mkdir /etc/endlessh
sudo nano /etc/endlessh/config
در فایل پیکربندی، پورت مورد استفاده را با نام پورت 22
تعریف کنید:
Port 22
فایل را بعد از ذخیره ببندید. اکنون با دستور زیر، سرویس Endlessh را مجددا راه اندازی کنید:
sudo systemctl --now enable endlessh
همانطور که مشاهده میکنید، در دستور بالا –now enable
باعث میشود که پس از راه اندازی مجدد سرور، سرویس ادامه پیدا کند.
دستور systemctl status
نشان میدهد که آیا سرویس با موفقیت شروع به اجرا شده است یا نه:
sudo systemctl status endlessh
خروجی که مشاهده میکنید:
● endlessh.service - Endlessh SSH Tarpit
Loaded: loaded (/etc/systemd/system/endlessh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-22 11:20:39 UTC; 1 months 11 days ago
Docs: man:endlessh(1)
Main PID: 34007 (endlessh)
Tasks: 1 (limit: 1081)
Memory: 380.0K
CGroup: /system.slice/endlessh.service
└─34007 /usr/local/bin/endlessh
در صورت اجرا، میتوانید در ترمینال جدید به پورت 22
متصل شوید:
ssh sammy@your_server_ip
بخاطر اینکه tarpit در حال اجرا است، ترمینال جدید قابلیت اتصال نخواهد داشت. به صورت دستی و با استفاده از کلیدهای ترکیبی Ctrl+C
اتصال را متوقف کنید، در غیر این صورت تا ابد سرویس اجرا خواهد شد (: پس با دستور زیر سرویس را متوقف کنید:
sudo systemctl --now disable endlessh
بعد از متوقف کردن سرویس، میتوانید از دستورالعملهای بازیابی SSH که در هشدار مرحله اول گفتیم، برای بازیابی تنظیمات سرور اصلی نیز استفاده کنید و با sudo systemctl
مجددا سرویس را فعال کنید. هم اکنون با اطمینان خاطر از این که SSH در پورت 22
اجرا نمیشود، به راحتی می توانید sudo systemctl –now enable endlessh
را فعال کنید بدون این که راه اندازی مجدد داشته باشید.
جمع بندی
در این آموزش، با موفقیت، تله امنیتی برای مقابله با نفوذ را روی سرور مجازی اوبونتو نصب و پیکربندی کردیم. این کار باعث کاهش شلوغی در گزارشهای احراز هویت شده و زمان هدررفته رباتهای مهاجم را به حداقل میرساند. امیدواریم این آموزش برای شما مفید باشد:)
سوالات متداول
1- آیا این روش از حملات به سرور جلوگیری میکند؟
خیر، اما سرعت اجرای حملات را کاهش داده و باعث میشود مهاجمان بهراحتی به اهداف بعدی بروند.
2- روی عملکرد سرور تاثیر میگذارد؟
Endlessh کم حجم و سبک است و منابع کمی مصرف میکند. اجرای آن بر روی پورت جداگانه باعث ایجاد اختلال در سرویسهای دیگر نمیشود.
3- چگونه متوجه شوم که تله کندسازی کار میکند؟
با بررسی لاگهای Endlessh میتوانید ببینید که چه تعداد اتصال توسط این تله درگیر شده است.