Всем привет! Чтобы усилить безопасность серверов Linux, предлагаю вам ниже совет, основанный на публикации 40 советов по безопасности для усиления защиты Linux-сервера [2023 edition] Домик Вивека. В предоставленных инструкциях предполагается, что вы используете дистрибутив Linux на базе Ubuntu/Debian. Я опускаю часть материала автора, поскольку пост посвящен безопасности хостов Linux в инфраструктуре.

!!! Приведенные ниже рекомендации следует проверить на совместимость с используемыми вами сервисами. Перед внедрением рекомендую протестировать на каждом отдельном типе сервера/приложения. !!!

  1. Шифрование передаваемых данных

    По возможности избегайте использования FTP, Telnet и Rlogin/Rsh, поскольку в большинстве сетевых конфигураций имена пользователей, пароли, команды и передача файлов могут быть перехвачены любым пользователем в той же сети с помощью анализаторов сетевых пакетов. Используйте OpenSSH, SFTP или FTPS, которые добавляют шифрование через TLS.

    Чтобы удалить NIS, rsh и другие устаревшие службы:

sudo apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server
  1. Уменьшите количество установленного программного обеспечения, чтобы минимизировать уязвимости в Linux.

    Избегайте установки ненужного программного обеспечения, чтобы избежать дополнительных уязвимостей. Используйте менеджер пакетов RPM, например apt-get и/или dpkg, чтобы просмотреть все пакеты программного обеспечения, установленные в системе.

dpkg --list
dpkg --info packageName
apt-get remove packageName
  1. Одна сетевая служба на один экземпляр системы или виртуальной машины.

    Это ограничит количество других сервисов, которые могут быть скомпрометированы. Например, если злоумышленнику удастся успешно использовать такое программное обеспечение, как Apache Flow, он получит доступ ко всему серверу, включая другие службы, такие как MySQL/MariaDB/PGSql, почтовый сервер и т. д. Если у вас недостаточно оборудования, используйте виртуализацию для получения дополнительных экземпляров.

  2. Поддерживайте актуальность ядра и программного обеспечения Linux

    Установка исправлений безопасности — важная часть обслуживания сервера Linux. Linux предоставляет все инструменты, необходимые для обновления вашей системы, а также позволяет легко переключаться между версиями. Все обновления безопасности следует проверять (тестировать) и устанавливать как можно быстрее. Чтобы применить обновления, используйте команду

apt-get update && apt-get upgrade
  1. Используйте расширения безопасности Linux

    Linux поставляется с различными исправлениями безопасности, которые можно использовать для защиты от неправильно настроенных или скомпрометированных программ. Если возможно, используйте SELinux и другие расширения безопасности Linux для обеспечения соблюдения сетевых и других программных ограничений. Например, SELinux предоставляет различные политики безопасности для ядра Linux.

  2. Настройка глобального контроля доступа

    SELinux позволяет использовать глобальный контроль доступа (MAC). В соответствии со стандартным дискреционным контролем доступа Linux (DAC) приложение или процесс, работающий от имени пользователя (UID или SUID), имеет разрешения пользователя на такие объекты, как файлы, сокеты и другие процессы. Запуск ядра MAC защищает систему от вредоносных или ошибочных приложений, которые могут повредить или уничтожить систему. См. официальную документацию Красная Шапкакоторый объясняет настройку SELinux.

  3. Учетные записи пользователей Linux и строгая политика паролей

    Используйте команды useradd/usermod для создания учетных записей пользователей и управления ими. Убедитесь, что у вас хорошая и надежная политика паролей. Например, хороший пароль имеет длину не менее 14 символов (здесь я изменил рекомендацию автора на 8 символов) и включает в себя комбинацию букв, цифр, специальных символов, букв верхнего и нижнего регистра и т. д. проверять пароли пользователей по утекшим словарям хэшей паролей.

    Обычно файлы конфигурации, связанные с паролем и аутентификацией, хранятся в каталоге. /etc/pam.d/ в системах на базе Debian. А политика паролей определена в файле /etc/pam.d/общий-пароль. Прежде чем вносить какие-либо изменения, на всякий случай сделайте резервную копию этого файла.

ЧИТАТЬ   Захарова назвала условием нормализации отношений с Западом

Чтобы установить минимальную длину пароля, отредактируйте файл:

sudo vi /etc/pam.d/common-password

Найдите следующую строку:

password [success=2 default=ignore] pam_unix.so obscure sha512

И добавьте в конце лишнее слово: минлен=14. Здесь я задаю минимальную длину пароля 14.

password [success=2 default=ignore] pam_unix.so obscure sha512 minlen=14

Сохраните и закройте файл. Пользователи больше не могут использовать пароль короче 14 символов.

Дополнительную информацию о настройке сложности пароля см. Здесь.

  1. Установить срок действия пароля

    Команда chage изменяет количество дней между сменами пароля и позволяет определить дату последней смены пароля. Эта информация используется системой, чтобы определить, когда пользователю следует сменить пароль.

    В Linux есть еще один интересный файл — /etc/тень. В этом файле хранится хешированная парольная фраза (или «хеш») для учетных записей пользователей Linux. Вы можете редактировать файл /etc/shadow в следующих полях.

{userName}:{password}:{lastpasswdchanged}:{Minimum_days}:{Maximum_days}:{Warn}:{Inactive}:{Expire}:
  • Минимум_дней — минимальное количество дней, необходимое между сменами пароля, т. е. количество дней, оставшихся до того, как пользователю будет разрешено сменить свой пароль.

  • Максимальное_количество_дней — максимальное количество дней, в течение которых пароль действителен (по истечении которых пользователь будет обязан сменить пароль).

  • Предупреждать — за сколько дней до истечения срока действия пароля пользователь будет уведомлен о необходимости смены пароля.

  • Истекший — дни, когда учетная запись будет деактивирована, т. е. абсолютная дата, указывающая, когда соединение больше нельзя будет использовать.

    1. Ограничить использование предыдущих паролей

      Рекомендуется запретить всем пользователям использовать или повторно использовать одни и те же старые пароли в Linux. Параметр памяти модуля pam_unix можно использовать для настройки количества предыдущих паролей, которые нельзя использовать повторно. /etc/pam.d/common-password – файл конфигурации pam Debian/Ubuntu Linux.

      Отредактируйте/добавьте строку пароля и добавьте Remember=5, чтобы пользователь не мог повторно использовать любой из своих последних 5 паролей:

password sufficient pam_unix2.so use_authtok md5 shadow remember=5

Обратите внимание, что последние 5 паролей каждого пользователя хранятся в файле /etc/security/opasswd, чтобы обеспечить сохранение истории изменений паролей и предотвратить слишком частое изменение пользователем одного и того же пароля.

  1. Блокировка учетных записей пользователей после неудачного входа в систему

    В Linux вы можете использовать команду Faillog для просмотра записей журнала ошибок или для установки ограничений на неудачные попытки входа в систему. faillog форматирует содержимое журнала ошибок /var/log/faillog. Его также можно использовать для управления счетчиками и ограничения неудачных попыток входа в систему. Чтобы просмотреть неудачные попытки входа в систему, введите:

faillog

Чтобы разблокировать учетную запись после неудачных попыток входа в систему, запустите:

faillog -r -u userName

Опция -m позволяет вам установить максимальное количество неудачных попыток входа в систему (MAX) в системе. Как только это число будет превышено, учетная запись будет отключена. Установка значения MAX, равного 0, не накладывает ограничений на количество неудачных входов в систему.

# faillog -M MAX -u username
# faillog -M 5 -u root

Обратите внимание, что вы можете использовать команду passwd для блокировки и разблокировки учетных записей:

# lock Linux account
passwd -l userName

# unlock Linux account
passwd -u userName

Как я могу гарантировать, что ни у одной учетной записи нет пустых паролей? Введите следующую команду

awk -F: '($2 == "") {print}' /etc/shadow

Заблокируйте все учетные записи с пустым паролем:

passwd -l userName
  1. Убедитесь, что ни у одной учетной записи без полномочий root UID не установлен на 0.

    Только учетная запись root имеет UID 0 со всеми разрешениями на доступ к системе. Введите следующую команду, чтобы отобразить все учетные записи с UID, равным 0:

awk -F: '($3 == "0") {print}' /etc/passwd

Вы должны увидеть только одну строку:

root:x:0:0:root:/root:/bin/bash

Если вы видите другие строки, удалите их или убедитесь, что этим учетным записям разрешено использовать UID 0.

  1. Отключить root-вход

    Никогда не входите в систему как root. При необходимости вам следует использовать sudo для запуска команд на корневом уровне. sudo значительно повышает безопасность системы, не передавая пароль root другим пользователям и администраторам.

  2. Оцените физическую безопасность серверов Linux

    Вы должны защитить доступ к физической консоли серверов Linux. Настройте BIOS и отключите загрузку с внешних устройств, таких как DVD/CD/USB-накопитель. Установите пароль для BIOS и загрузчика Grub, чтобы защитить эти настройки. Более подробную информацию о настройках можно посмотреть Здесь.

  3. Отключите ненужные службы Linux

    Отключите все ненужные службы и демоны (службы, работающие в фоновом режиме). Вам необходимо удалить все ненужные службы из автозагрузки системы. Введите следующую команду, чтобы отобразить все службы, которые запускаются во время запуска на уровне 3:

# systemctl list-unit-files --type=service
# systemctl list-dependencies graphical.target

Отключить службу при запуске

# systemctl disable service
# systemctl disable httpd.service

Запустить/Остановить/Перезапустить службу

# systemctl start service
# systemctl start httpd.service

# systemctl restart service
# systemctl restart httpd.service

# systemctl stop service
# systemctl stop httpd.service

Просмотр журналов

# journalctl
# journalctl -u network.service
# journalctl -u ssh.service
# journalctl -f
# journalctl -k
  1. Найдите открытые сетевые порты

    Используйте следующую команду, чтобы получить список всех открытых портов и связанных с ними программ:

ss -tulpn
  1. Удалить системы X Window (X11)

    Системы X Window (GUI) на сервере не требуются. Нет смысла запускать X11 на выделенном почтовом сервере Linux и веб-сервере Apache/Nginx. Вы можете отключить и удалить X Windows, чтобы улучшить безопасность и производительность сервера. Debian использует /etc/rc2.d/*gdm или /etc/rc2.d/*kdm или /etc/rc2.d/*xdm для графического интерфейса при запуске. Для удаления используйте команды

update-rc.d gdm remove <== удаление Gnome
update-rc.d xdm remove <== удаление Kde
update-rc.d kdm remove <== удаление Xdm
  1. Настройте фаервол на основе Iptables и TCPWrappers

    Iptables — это прикладная программа, позволяющая настраивать брандмауэр (Netfilter), предоставляемый ядром Linux. Будьте внимательны при настройке Iptables — если вы допустите ошибку в настройках, вы можете потерять сетевой доступ к серверу (благо, если Linux стоит на виртуальной машине, вы можете подключиться и исправить настройки через гипервизор). Примеры доступных настроек Здесь.

  2. Выполнять Усиление защиты ядра Linux /etc/sysctl.conf

    Файл /etc/sysctl.conf используется для настройки параметров ядра при запуске. Linux считывает и применяет настройки из /etc/sysctl.conf во время загрузки. Пример /etc/sysctl.conf:

# Включаем execshield
kernel.exec-shield=1
kernel.randomize_va_space=1

# Включить защиту от IP спуфинга
net.ipv4.conf.all.rp_filter=1

# Отключить IP source роутинг
net.ipv4.conf.all.accept_source_route=0

# Игнорирование broadcast-запросов
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1

# Убеждаемся, что сетевые пакеты с некорректными адресами логируются 
net.ipv4.conf.all.log_martians = 1

Source

От admin