Linux сървърна защита. Какво да направите първо

Linux сървърна защита. Какво да направите първо
Хабиб М'хени/Wikimedia Commons, CC BY-SA

В днешно време вдигането на сървър на хостинг е въпрос на няколко минути и няколко клика на мишката. Но веднага след старта той се озовава във враждебна среда, защото е отворен към целия Интернет като невинно момиче в рокерска дискотека. Скенерите бързо ще го намерят и ще открият хиляди автоматично скриптирани ботове, които претърсват мрежата в търсене на уязвимости и неправилни конфигурации. Има няколко неща, които трябва да направите веднага след стартирането, за да осигурите основна защита.

Съдържание

Не-root потребител

Първата стъпка е да създадете не-root потребител за себе си. Въпросът е, че потребителят root абсолютни привилегии в системата и ако му разрешите дистанционно администриране, тогава ще свършите половината работа за хакера, оставяйки му валидно потребителско име.

Следователно трябва да създадете друг потребител и да деактивирате отдалеченото администриране чрез SSH за root.

Нов потребител се стартира от командата useradd:

useradd [options] <username>

След това се добавя парола за него с командата passwd:

passwd <username>

И накрая, този потребител трябва да бъде добавен към група, която има право да изпълнява команди с повишени права sudo. В зависимост от дистрибуцията на Linux това може да са различни групи. Например в CentOS и Red Hat потребителят се добавя към групата wheel:

usermod -aG wheel <username>

В Ubuntu се добавя към групата sudo:

usermod -aG sudo <username>

Ключове вместо SSH пароли

Грубата сила или изтичането на пароли са стандартен вектор за атака, така че е най-добре да деактивирате удостоверяването с парола в SSH (Secure Shell) и вместо това да използвате удостоверяване с ключ.

Има различни програми за внедряване на SSH протокола, като напр лш и dropbear, но най-популярен е OpenSSH. Инсталиране на OpenSSH клиента на Ubuntu:

sudo apt install openssh-client

Сървърна инсталация:

sudo apt install openssh-server

Стартиране на SSH демона (sshd) на Ubuntu сървъра:

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

В Ubuntu добавете реда 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

В Ubuntu добавете реда PasswordAuthentication no да подаде 10-my-sshd-settings.conf:

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

За инструкции относно активирането на двуфакторно удостоверяване чрез SSH вижте тук.

Защитна стена

Защитната стена гарантира, че само трафикът на портовете, които директно разрешавате, ще отива към сървъра. Това предпазва от експлоатация на портове, които са случайно активирани с други услуги, което значително намалява повърхността на атака.

Преди да инсталирате защитна стена, трябва да се уверите, че SSH е включен в списъка с изключения и няма да бъде блокиран. В противен случай след стартиране на защитната стена няма да можем да се свържем със сървъра.

Дистрибуцията на Ubuntu идва с неусложнена защитна стена (ufw), и с CentOS/Red Hat - firewalld.

Разрешаване на SSH в защитната стена на Ubuntu:

sudo ufw allow ssh

В CentOS/Red Hat използвайте командата firewall-cmd:

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

След тази процедура можете да стартирате защитната стена.

В CentOS/Red Hat стартирайте услугата systemd за firewalld:

sudo systemctl start firewalld
sudo systemctl enable firewalld

В Ubuntu използваме следната команда:

sudo ufw enable

Fail2Ban

Обслужване Fail2Ban анализира регистрационни файлове на сървъра и отчита броя на опитите за достъп от всеки IP адрес. Настройките определят правилата за това колко опита за достъп са разрешени за определен интервал - след което този IP адрес се блокира за определен период от време. Например, нека позволим 5 неуспешни опита за SSH удостоверяване в рамките на 2 часа, след което да блокираме дадения IP адрес за 12 часа.

Инсталиране на Fail2Ban на CentOS и Red Hat:

sudo yum install fail2ban

Инсталация на Ubuntu и Debian:

sudo apt install fail2ban

Стартиране:

systemctl start fail2ban
systemctl enable fail2ban

Програмата има два конфигурационни файла: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Ограниченията за забрана са посочени във втория файл.

Jail за SSH е активиран по подразбиране с настройки по подразбиране (5 опита, интервал 10 минути, забрана за 10 минути).

[ПО ПОДРАЗБИРАНЕ] ignorecommand=bantime=10m findtime=10m maxretry=5

В допълнение към SSH, Fail2Ban може да защити други услуги на уеб сървъра nginx или Apache.

Автоматични актуализации на защитата

Както знаете, във всички програми постоянно се откриват нови уязвимости. След публикуването на информацията експлойтите се добавят към популярните експлойт пакети, които се използват масово от хакери и тийнейджъри при сканиране на всички сървъри подред. Ето защо е много важно да инсталирате актуализации за защита веднага щом се появят.

На сървъра на Ubuntu автоматичните актуализации на защитата са активирани по подразбиране, така че не са необходими допълнителни действия.

На 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), така че авторът на програмата Тату Илтонен избран порт 22 по подразбиране, и е одобрен от IANA.

Естествено, всички атакуващи знаят на кой порт работи SSH - и го сканират заедно с останалите стандартни портове, за да разберат версията на софтуера, да проверят стандартните root пароли и т.н.

Промяната на стандартните портове - обфускация - няколко пъти намалява количеството боклук трафик, размера на регистрационните файлове и натоварването на сървъра, а също така намалява повърхността на атака. Въпреки че някои критикуват този метод на "защита чрез неизвестност" (сигурност чрез неизвестност). Причината е, че тази техника е противоположна на фундаменталната архитектурна защита. Ето защо, например, Националният институт за стандарти и технологии на САЩ в „Ръководство за сигурност на сървъра“ посочва необходимостта от отворена сървърна архитектура: „Сигурността на една система не трябва да разчита на секретността на внедряването на нейните компоненти“, се казва в документа.

Теоретично промяната на портовете по подразбиране е против практиката на отворена архитектура. Но на практика количеството злонамерен трафик всъщност намалява, така че това е проста и ефективна мярка.

Номерът на порта може да бъде конфигуриран чрез промяна на директивата Port 22 в конфигурационния файл / И т.н. / SSH / sshd_config. Показва се и от параметъра -p <port> в SSHD. SSH клиент и програми SFTP също поддържа опцията -p <port>.

Параметър -p <port> може да се използва за указване на номера на порта при свързване с командата ssh в linux. IN SFTP и scp използва се параметър -P <port> (главно Р). Инструкцията на командния ред отменя всяка стойност в конфигурационните файлове.

Ако има много сървъри, почти всички тези действия за защита на Linux сървъра могат да бъдат автоматизирани в скрипт. Но ако има само един сървър, тогава е по-добре ръчно да управлявате процеса.

Относно правата на рекламата

Поръчайте и започнете веднага! Създаване на VDS всяка конфигурация и с всяка операционна система в рамките на минута. Максималната конфигурация ще ви позволи да излезете максимално - 128 CPU ядра, 512 GB RAM, 4000 GB NVMe. Епично 🙂

Linux сървърна защита. Какво да направите първо

Източник: www.habr.com