محافظت از سرور لینوکس اول چه باید کرد

محافظت از سرور لینوکس اول چه باید کرد
حبیب منی/ویکی‌مدیا کامانز، CC BY-SA

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

مقدار

کاربر غیر روت

اولین کاری که باید انجام دهید این است که یک کاربر غیر ریشه ایجاد کنید. نکته این است که کاربر root امتیازات مطلق در سیستم، و اگر به او اجازه مدیریت از راه دور را بدهید، نیمی از کار را برای هکر انجام خواهید داد و یک نام کاربری معتبر برای او باقی خواهید گذاشت.

بنابراین، باید کاربر دیگری ایجاد کنید و مدیریت راه دور از طریق SSH را برای روت غیرفعال کنید.

یک کاربر جدید با دستور ایجاد می شود useradd:

useradd [options] <username>

سپس با دستور یک رمز عبور برای آن اضافه می شود passwd:

passwd <username>

در نهایت، این کاربر باید به گروهی اضافه شود که حق اجرای دستورات با امتیازات بالا را دارد. sudo. بسته به توزیع لینوکس، اینها ممکن است گروه های مختلفی باشند. به عنوان مثال، در CentOS و Red Hat یک کاربر به یک گروه اضافه می شود wheel:

usermod -aG wheel <username>

در اوبونتو به گروه اضافه می شود sudo:

usermod -aG sudo <username>

کلید به جای رمزهای عبور SSH

Brute force یا نشت رمز عبور یک بردار حمله استاندارد است، بنابراین بهتر است احراز هویت رمز عبور را در SSH (Secure Shell) غیرفعال کنید و به جای آن از احراز هویت کلید استفاده کنید.

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

sudo apt install openssh-client

نصب سرور:

sudo apt install openssh-server

راه اندازی دیمون SSH (sshd) در سرور اوبونتو:

sudo systemctl start sshd

دیمون را به طور خودکار در هر بوت شروع کنید:

sudo systemctl enable sshd

لازم به ذکر است که قسمت سرور OpenSSH شامل قسمت مشتری می باشد. یعنی از طریق openssh-server می توانید به سرورهای دیگر متصل شوید. علاوه بر این، از دستگاه مشتری خود می توانید یک تونل SSH را از یک سرور راه دور به یک میزبان شخص ثالث راه اندازی کنید و سپس میزبان شخص ثالث سرور راه دور را به عنوان منبع درخواست ها در نظر بگیرد. یک عملکرد بسیار راحت برای پوشاندن سیستم شما. برای جزئیات بیشتر به مقاله مراجعه کنید. "نکات عملی، مثال ها و تونل های SSH".

معمولاً برای جلوگیری از امکان اتصال از راه دور به رایانه (به دلایل امنیتی) نصب یک سرور تمام عیار بر روی دستگاه مشتری هیچ فایده ای ندارد.

بنابراین، برای کاربر جدید خود، ابتدا باید کلیدهای SSH را روی رایانه ای که از آن به سرور دسترسی خواهید داشت، ایجاد کنید:

ssh-keygen -t rsa

کلید عمومی در یک فایل ذخیره می شود .pub و شبیه رشته ای از کاراکترهای تصادفی است که با آن شروع می شود ssh-rsa.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

سپس به عنوان root یک دایرکتوری SSH روی سرور در فهرست اصلی کاربر ایجاد کنید و کلید عمومی SSH را به فایل اضافه کنید. authorized_keysبا استفاده از یک ویرایشگر متن مانند Vim:

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

در نهایت، مجوزهای صحیح را برای فایل تنظیم کنید:

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

و مالکیت را به این کاربر تغییر دهید:

chown -R username:username /home/username/.ssh

در سمت مشتری، باید محل کلید مخفی را برای احراز هویت مشخص کنید:

ssh-add DIR_PATH/keylocation

اکنون می توانید با استفاده از این کلید با نام کاربری وارد سرور شوید:

ssh [username]@hostname

پس از مجوز، می توانید از دستور scp برای کپی فایل ها، ابزار کمکی استفاده کنید sshfs برای نصب از راه دور یک سیستم فایل یا دایرکتوری ها.

توصیه می شود چندین نسخه پشتیبان از کلید خصوصی تهیه کنید، زیرا اگر احراز هویت رمز عبور را غیرفعال کنید و آن را گم کنید، به هیچ وجه راهی برای ورود به سرور خود نخواهید داشت.

همانطور که در بالا ذکر شد، در SSH باید احراز هویت را برای root غیرفعال کنید (به همین دلیل ما یک کاربر جدید ایجاد کردیم).

در CentOS/Red Hat خط را پیدا می کنیم PermitRootLogin yes در فایل پیکربندی /etc/ssh/sshd_config و آن را تغییر دهید:

PermitRootLogin no

در اوبونتو خط را اضافه کنید PermitRootLogin no به فایل پیکربندی 10-my-sshd-settings.conf:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

پس از تأیید اینکه کاربر جدید با استفاده از کلید خود احراز هویت شده است، می توانید احراز هویت رمز عبور را غیرفعال کنید تا خطر نشت رمز عبور یا نیروی بی رحمانه را از بین ببرید. حال برای دسترسی به سرور، مهاجم باید کلید خصوصی را بدست آورد.

در CentOS/Red Hat خط را پیدا می کنیم PasswordAuthentication yes در فایل پیکربندی /etc/ssh/sshd_config و آن را به صورت زیر تغییر دهید:

PasswordAuthentication no

در اوبونتو خط را اضافه کنید PasswordAuthentication no برای تشکیل پرونده 10-my-sshd-settings.conf:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

برای دستورالعمل‌هایی در مورد نحوه فعال کردن احراز هویت دو مرحله‌ای از طریق SSH، ببینید اینجا.

دیواره آتش

فایروال تضمین می کند که فقط ترافیک در پورت هایی که شما مستقیماً به آنها اجازه می دهید به سرور منتقل می شود. این امر در برابر بهره برداری از پورت هایی که به طور تصادفی توسط سرویس های دیگر فعال می شوند محافظت می کند، که سطح حمله را تا حد زیادی کاهش می دهد.

قبل از نصب فایروال، باید مطمئن شوید که SSH در لیست حذف قرار دارد و مسدود نمی شود. در غیر این صورت پس از راه اندازی فایروال نمی توانیم به سرور متصل شویم.

توزیع اوبونتو با فایروال بدون عارضه (وایو با CentOS/Red Hat - فایروال.

اجازه دادن به SSH در فایروال در اوبونتو:

sudo ufw allow ssh

در CentOS/Red Hat از دستور استفاده می کنیم firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

پس از این روش، می توانید فایروال را راه اندازی کنید.

در CentOS/Red Hat ما سرویس systemd را برای فایروالد راه اندازی می کنیم:

sudo systemctl start firewalld
sudo systemctl enable firewalld

در اوبونتو از دستور زیر استفاده می کنیم:

sudo ufw enable

Fail2Ban

سرویس Fail2Ban گزارش های سرور را تجزیه و تحلیل می کند و تعداد تلاش های دسترسی از هر آدرس IP را می شمارد. تنظیمات قوانینی را برای تعداد تلاش برای دسترسی در یک بازه زمانی مشخص مشخص می کند - پس از آن این آدرس IP برای مدت زمان مشخصی مسدود می شود. به عنوان مثال، ما اجازه می دهیم 5 تلاش ناموفق برای احراز هویت از طریق SSH در مدت 2 ساعت انجام شود و پس از آن این آدرس IP را به مدت 12 ساعت مسدود می کنیم.

نصب Fail2Ban روی CentOS و Red Hat:

sudo yum install fail2ban

نصب در اوبونتو و دبیان:

sudo apt install fail2ban

راه اندازی:

systemctl start fail2ban
systemctl enable fail2ban

این برنامه دارای دو فایل پیکربندی است: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. محدودیت های Ban در فایل دوم مشخص شده است.

زندان برای SSH به طور پیش فرض با تنظیمات پیش فرض فعال است (5 تلاش، فاصله 10 دقیقه، ممنوعیت برای 10 دقیقه).

[پیش‌فرض] ignorecommand = bantime = 10m findtime = 10m maxretry = 5

علاوه بر SSH، Fail2Ban می‌تواند از سرویس‌های دیگر روی سرور وب nginx یا آپاچی محافظت کند.

به روز رسانی خودکار امنیتی

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

سرورهای اوبونتو به‌طور پیش‌فرض به‌روزرسانی‌های امنیتی خودکار را فعال می‌کنند، بنابراین نیازی به مراحل اضافی نیست.

در CentOS/Red Hat باید برنامه را نصب کنید dnf اتوماتیک و تایمر را روشن کنید:

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

بررسی تایمر:

sudo systemctl status dnf-automatic.timer

تغییر پورت های پیش فرض

SSH در سال 1995 برای جایگزینی telnet (پورت 23) و ftp (پورت 21) توسعه یافت، بنابراین نویسنده برنامه Tatu Iltonen است. پورت 22 را به طور پیش فرض انتخاب کردو توسط ایانا تایید شد.

طبیعتاً، همه مهاجمان می‌دانند که SSH روی کدام پورت اجرا می‌شود - و آن را همراه با سایر پورت‌های استاندارد اسکن می‌کنند تا نسخه نرم‌افزار را پیدا کنند، رمزهای عبور استاندارد root را بررسی کنند و غیره.

تغییر پورت های استاندارد - مبهم سازی - حجم ترافیک ناخواسته، اندازه لاگ ها و بار روی سرور را چندین برابر کاهش می دهد و همچنین سطح حمله را کاهش می دهد. اگرچه برخی انتقاد از این روش "دفاع از طریق ابهام" (امنیت از طریق ابهام). دلیل آن این است که این تکنیک با اصولی مخالف است حفاظت از معماری. بنابراین، به عنوان مثال، موسسه ملی استاندارد و فناوری ایالات متحده "راهنمای امنیت سرور" نیاز به معماری سرور باز را نشان می‌دهد: «امنیت یک سیستم نباید به محرمانه بودن اجرای اجزای آن متکی باشد».

در تئوری، تغییر پورت های پیش فرض برخلاف رویه های معماری باز است. اما در عمل، حجم ترافیک مخرب در واقع کاهش می یابد، بنابراین این یک اقدام ساده و موثر است.

شماره پورت را می توان با تغییر دستورالعمل پیکربندی کرد Port 22 در فایل پیکربندی / etc / ssh / sshd_config. همچنین با پارامتر نشان داده می شود -p <port> в ssh. کلاینت و برنامه های SSH sftp همچنین از پارامتر پشتیبانی می کند -p <port>.

پارامتر -p <port> می توان از آن برای تعیین شماره پورت هنگام اتصال با استفاده از دستور استفاده کرد ssh در لینوکس که در sftp и scp پارامتر استفاده می شود -P <port> (پ بزرگ). تعیین آن از خط فرمان، هر مقدار را در فایل های پیکربندی لغو می کند.

اگر تعداد زیادی سرور وجود داشته باشد، تقریباً همه این اقدامات برای محافظت از سرور لینوکس را می توان در یک اسکریپت خودکار کرد. اما اگر فقط یک سرور وجود دارد، بهتر است فرآیند را به صورت دستی کنترل کنید.

در حقوق تبلیغات

سفارش دهید و بلافاصله شروع به کار کنید! ایجاد VDS هر پیکربندی و با هر سیستم عامل در عرض یک دقیقه. حداکثر پیکربندی به شما امکان می دهد که یک انفجار داشته باشید - 128 هسته CPU، 512 گیگابایت رم، 4000 گیگابایت NVMe. کاملا حماسی :)

محافظت از سرور لینوکس اول چه باید کرد

منبع: www.habr.com