У цій статті ми розглянемо основні концепції та конкретні настройки, які допоможуть підвищити захищеність вашого CentOS сервера в Інтернеті. Використання даних підходів дозволить підвищити захист сервера від злому і зараження. Інструкція в більшій частині універсальна і основні моменти підійдуть для підвищення безпеки будь-якого Linux сервера.

Розбивка і опції монтування дисків для ізоляції

При установці CentOS (і будь-якого дистрибутива Linux) на етапі розбивки диска, не створюйте один розділ, а відокремте веб-простору від основного розділу, також створіть системні розділи:

При ізоляції розділів зловмисники не зможуть піднятися вище директорії веб при зломі сайту і впровадження в нього шкідливих скриптів.

Використовуйте спеціальні опції для безпечного монтування деяких розділів диска:

  • noexec – не дозволяє запускати бінарні файли (не можна використовувати на кореневій директорії, так як це призведе до непрацездатності системи);
  • nodev – передбачає, що на монтируемой файлової системи не будуть створені файли пристроїв / розробник. Так само не може бути застосовано до кореневого каталогу;
  • носуїд – забороняє операції з південь і твердий битами.

Дані параметри можуть бути встановлені на директорію, тільки якщо вона існує як окремий розділ. Ви можете налаштувати / etc / fstab відповідно до наступних рекомендацій, якщо такі розділи на диску у вас існують:

  • / додому – змонтувати з опціями nodev, носуїд, usrquota (Включення квоти);
  • / завантаження – змонтувати з опціями nodev, носуїд, noexeс – даний розділ потрібно для завантаження системи, заборонимо що-небудь міняти в ньому;
  • / деносуїд – під root користувачем виконання процесів не заборонено;
  • / var / log – змонтувати з опціями nodev, nosuid, noexeс;
  • / var / www – змонтувати з опціями nodev, nosuid;
  • / tmp – змонтувати з опціями nodev, nosuid, noexeс – даний розділ потрібен лише для зберігання і запису тимчасових файлів.

Всі перераховані вище розділи монтуються з опцією rw (Можливість запису).

Установка і оновлення програмного забезпечення в Linux (CentOS)

При усановке сервера ніколи не використовуйте дистрибутиви ОС, зібрані невідомими особами. Завантажуйте дистрибутиви тільки з офіційних дзеркал і не користуйтеся чужими кікстарта файлами для установки. Якщо ви не розбираєтеся в чужому коді, краще взагалі скасувати цю затію і встановити все вручну, або проаналізувати кікстарта файл повністю, щоб не встановити щось шкідливе на свій сервер.

Встановлюйте лише мінімально необхідне програмне забезпечення. Установка і настройка тільки по справі і за допомогою установника ням і dnf. Перевірте все встановлене ПЗ і видаліть непотрібні пакети:

yum list installed
yum list packageName
yum remove packageName

Використовуйте тільки офіційні та довірені репозиторії пакетів.

Не використовуйте нешифровані протоколи FTP, Telnet, Rlogin, Rsh.

Вимикатимете сервіси на своєму сервері, якщо в даний момент видалення сервісу вам не підходить.

Щоб перевірити список всіх сервісів, використовуйте команду:

systemctl list-unit-files --type=service

linux centos відключення невикористовуваних сервісів

Щоб відключити і прибрати службу з автозавантаження в CentOS використовується systemctl:

systemctl stop service
systemctl disable service

Наприклад, для відключення сервісу httpd використовується така команда:

systemctl stop httpd.service
systemctl disable httpd.service

Завжди тримайте в актуальному стані встановлене програмне забезпечення на вашому сервері. Вчасно оновлене ПЗ, захистить вас від відомих вразливостей. Ви можете налаштувати автоматичне оновлення системи, щоб кожного разу не виконувати це вручну.

yum update – оновлення системи

Захист SSH, авторизація по ключам

Для безпечної авторизації на сервері, використовуйте приватний ключ. Згенеруйте ключ за допомогою утиліти ssh-keygen:

# ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ffIDjWIfOgMZmOVbQmDWaOCADK4G3cYYy0dTIjqLkD8 root@server.vpn.ru
The key's randomart image is:
+---[RSA 2048]----+
|* +.B=+ |
|oO @oO. |
|*.*.B + . |
|=+ o * . o |
|+.E + S * o |
|. . o + * |
| + . o |
| o . |
| |
+----[SHA256]-----+

генерація ключів для ssh авторизації

Після генерації, ви можете підключитися за допомогою даного ключа до сервера, через ssh-клієнт.

Створіть додаткового користувача і виконуйте команди через судо.

sudo groupadd sudo – Створити групу судо

adduser webmaster – створити користувача

passwd webmaster – поміняти пароль

usermod -aG sudo webmaster – додати користувача до групи судо

У файлі / etc / sudoers додайте рядок:

%sudo ALL=(ALL:ALL) ALL

Вимкніть в налаштування ssh-сервера, авторизацію через корінь і за логіном / паролем:

nano /etc/ssh/sshd_config

І змінюємо значення зазначених нижче рядків на:

PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
AuthenticationMethods publickey
PubkeyAuthentication yes

Змініть стандартний порт для ssh. Порт за замовчуванням для ssh, В першу чергу буде схильний до злому.

Щоб поміняти стандартний порт на ssh, В конфігураційному файлі / etc / ssh / sshd_config замініть значення в рядку:

Port 22

зміна порту ssh в sshd_config

Регулярна зміна паролів в Linux

Якщо ви все ж використовуєте паролі для авторизації в Linux, то налаштуйте термін дії пароля через утиліту chage.

Щоб перевірити, скільки днів буде діяти пароль для будь-якого користувача, використовуйте команду:

chage -l root

За замовчуванням для root у мене було встановлено 99999 днів:

# chage -l root

Last password change : never
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7

Щоб змінити термін дії пароля (наприклад 9 днів), скористайтеся командою:

chage -M 9 root

Тепер при перевірці інформації про термін пароля для користувача root, інформація змінилася:

# chage -l root

Last password change : never
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 9
Number of days of warning before password expires : 7

Більше опцій по утиліті chage ви можете отримати з довідки:

man chage

Для блокування користувачів при введенні неправильного пароля, скористайтеся утилітою fail2ban (Вона дозволяє реалізувати аналог групових політик блокування облікових записів в Windows). Fail2ban дозволяє захистити сервер Linux і служби від підбору паролів.

Для установки fail2ban виконайте:

yum install epel-release fail2ban -y

Конфігураційний файл fail2ban розташований в /etc/fail2ban/jail.conf. Налаштування, які ми торкнемося:

  • бантим = 600 – час бана при блокуванні
  • максретрі = 3 – кількість спроб неправильного введення пароля, після яких користувач буде заблокований
  • час пошуку = 600 – часовий відрізок, в якій потрібно авторизуватися користувачеві

Інші налаштування використовуються за бажанням. Додатково ви можете налаштувати відправку звітів до себе на пошту.

створіть файл /etc/fail2ban/jail.local і додайте туди наступні рядки:

Після зміни конфігураційного файлу, запустіть сервіс.

[DEFAULT]
ignoreip = 127.0.0.1/24
[ssh-iptables]
enabled = true
port = ssh
filter = sshd
action = iptables[name=sshd, port=ssh, protocol=tcp]
logpath = /var/log/secure

Після чого збережіть файл і перезапустіть сервіс fail2ban:

systemctl restart fail2ban

Таким чином, ми налаштували блокування користувачів для ssh:

fail2ban блокування ssh при неправильному паролі

При неправильному введенні пароля, мене заблокувало на 10 хвилин. Ви можете налаштувати fail2ban для роботи з будь-яким сервісом, який працює з користувачами, наприклад:

Підвищення захисту сервера за допомогою SELinux

Зазвичай при налаштуванні сервера, я відключаю SELinux, Хоча це не рекомендується. але настройка SELinux дуже специфічна і велика. Налаштування SELinux на сервері може затягнутися на кілька днів. Якщо у вас є час на настройку та налагодження системи SELinux, то скористайтеся ним для безпеки вашого сервера.

SELinux має 3 режими роботи:

  • Застосування
  • Дозвільний
  • Інваліди

В режимі забезпечення виконання SELinux застосовує свою політику в системі і стежить за несанкціонованим доступом з боку користувачів. Всі спроби реєструються в логах.

В режимі дозвільний політика SELinux не застосовується, але вся інформація фіксується в логах, після чого ви можете їх проаналізувати. Даний режим корисний при налаштуванні і налагодженні системи.

І інваліди відповідно взагалі відключає SELinux і її політика не застосовується взагалі.

конфігураційний файл SELinux – / etc / selinux / config

ретельну настройку SELinux можна розписати на декілька статей, якщо вам потрібна детальна інформація, можна скористатися офіційною документацією Червоний капелюх. Зазвичай при налаштуванні сервера, все працює повноцінно, я з включеним SELinux помічав, що виникають проблеми з ftp-Сервер, а також з деякими платним ПО.

Перевірка стану:
# sestatus

SELinux status: disabled

Для більш зручного вивчення логів SELinux рекомендую використовувати утиліти aureport і sealer.

Налаштування брандмауера Firewalld

Відкрийте тільки мінімально необхідний набір портів на сервері, які дійсно потрібні для роботи. Наприклад, для роботи веб-серверів досить відкрити 80 і 443. Якщо ви використовуєте mysql /mariadb, Вимкніть можливість підключення з віддалених серверів на порт 3306 (якщо ваша БД використовується тільки локально, не включена в кластер Galera і не наспіл в сценаріях реплікації).

Якщо у вас на комп’ютері / шлюзі доступу заданий статичний IP адреса, додайте в винятку брандмауера ваш довірений адресу і підключайтеся до сервера з нього. Детальніше про налаштування firewalld в CentOS (якщо ви прівиккі до iptables дивіться статтю Налаштування Linux-файрволу за допомогою iptables).

Щоб перевірити відкриті порти на сервері, використовуйте утиліту netstat:

netstat -tulpn

netstat -tulpn перевірка відкритих портів

Видалення X Windows

Не використовуйте на своєму сервері систему X Windows. Видаліть всі ПО, яке пов’язане з цією системою, немає необхідності використовувати це на Linux сервері:

yum group remove "GNOME Desktop"
yum group remove "KDE Plasma Workspaces"
yum group remove "Server with GUI"
yum group remove "MATE Desktop"

Захист ядра Linux

Використовуйте налаштування у файлі /etc/sysctl.conf для забезпечення додаткової безпеки під час завантаження ядра Linux.

Увімкніть екзекшит:

kernel.exec-shield=1

Вимкніть IP-маршрутизацію (якщо ваш сервер не використовується як шлюз доступу в Інтернет з LAN):

net.ipv4.conf.all.accept_source_route=0

Увімкніть захист від спуфинга

net.ipv4.conf.all.rp_filter=1

Увімкніть ігнорування широкомовних запитів

net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1

Увімкніть реєстрацію підозрілих пакетів

net.ipv4.conf.all.log_martians = 1

Права на файли в Linux

Запустіть пошук файлів без користувача і групи, такі файли потенційно несуть загрозу і можуть бути використані зловмисниками. Щоб знайти такі файли, використовуйте команду:

find /директория -xdev ( -nouser -o -nogroup ) -print

Якщо файли будуть знайдені, змініть на них власника і групу.

встановіть прапорець chattr на потрібні файли, щоб захистити їх від модифікації. Жоден користувач, не зможе змінити файл, поки даний прапорець встановлений. наприклад:

chattr +i /etc/mysript.sh

Не встановлюйте занадто високі права на директорії і файли, наприклад, стандартні права для веб:

  • 755 для директорій
  • 644 для файлів

У деяких випадках, можуть бути винятки, але завжди уважно підходите до цього питання. Забороніть користувачам виставляти дозвіл 777. Ви можете знайти такі файли:

find /home -type f -perm 777

Захист Web-сервера

Якщо ви використовуєте сервер під веб, Подбайте про налаштування web-сервісів. Закрийте перегляд вмісту директорій через Параметри -Індекси, А також додайте Х-кадр.

Header always append X-Frame-Options SAMEORIGIN

Даний параметр, заборонить відкривати сторінку у фреймі, а також для запобігання вбудовування контенту вашого сайту на інші сайти.

Вимкніть показ версії вашого веб-сервера. для апаш в файлі конфігурації пропишіть:

serverSignature Off

для nginx в файлі конфігурації в секцію http прописати:

server_tokens off;

Якщо ви використовуєте php, забороніть небезпечні функції через php.ini:

expose_php=Off

– заборонить показ версії php

disable_functions=exec,passthru,shell_exec,system,proc_open,popen

– заборонить використання даних функцій

Так само налаштуйте ліміти по виконанню скриптів і їх розмір, це убезпечить вас від дрібних атак.

Встановіть на свій сайт і пошту SSL сертифікат, щоб з’єднання в браузері і при відправці пошти, шифрувати. Можна скористатися безкоштовним сертифікатом від Let’s Encrypt, або придбати недорогий платний сертифікат.

Захист фізичного сервера

Якщо на вашому сервері є консоль для віддаленого доступу МОП/IPMI/ BMC, Закрийте доступ до неї із зовні, залиште тільки ваш довірений IP, Це дозволить обмежити себе від зайвих проблем.

Якщо ваш фізичний сервер розміщується поза офісом / будинку, закрийте BIOS / UEFI паролем.

І головний момент, розміщуйте свої сервера у перевірених провайдерів.

Створення резервних копій сервера Linux

Звичайно не варто забувати про резервне копіювання сервера. Ви можете виконувати резервні копії як всього сервера, так і окремо взяті файли або директорії (можна налаштувати бекап в безкоштовні хмарні сховища скриптами). У разі будь-якого інциденту, у вас завжди під рукою буде актуальна резервна копія, з якої можна розгорнути сервер або замінити конфігураційний файли.

Leave a Reply

Your email address will not be published. Required fields are marked *