Защита на Linux сървър. Какво да направя на първо място

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

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

Съдържание

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

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

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

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

useradd [options]

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

passwd

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

usermod -aG wheel

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

usermod -aG sudo

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

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

Има различни програми за реализиране на протокола SSH, като lsh и 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 идва Uncomplicated Firewall (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 стартираме системната услуга за 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. Ограниченията за бан са посочени във втория файл.

Джейлът за SSH е включен по подразбиране с дефолтни настройки (5 опита, интервал 10 минути, бан за 10 минути).

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5

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

Автоматични актуализации на сигурността

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

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

На CentOS/Red Hat трябва да инсталирате приложението dnf-automatic и да включите таймера:

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 — и сканират същия заедно с останалите стандартни портове, за да установят версията на софтуера, да проверят стандартните пароли на рут администратора и т.н.

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

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

Номерът на порта може да се настрои, като се промени директивата Port 22 в конфигурационния файл. /etc/ssh/sshd_configТой също така се посочва с параметъра -p в sshd.Клиентът SSH и програмите sftp също поддържат параметъра -p.

Параметър -p което може да се използва за указване на номера на порта при свързването с команда ssh в Linux. В sftp и scp се използва параметър -P (заглавная P). Команден ред е преопределя всяко значение в конфигурационни файлове.

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

Реклама

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

Защита на Linux сървър. Какво да направя на първо място

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster