Linux hardening aka закалка для пингвина
Данный материал по большей части будет представлять собой чек-лист, который можно и нужно использовать при развертывании и настройке систем, основанных на Debian/Ubuntu или CentOS/RHEL.
Оглавление
- Шифрование передачи данных
- Избегай того, чтобы использовать FTP, Telnet, Rlogin/Rsh сервисов
- Минимизируй количество установленного ПО, чтобы минимизировать риски
- Одна сетевая служба на систему или экземпляр ВМ
- Обновляйся
- Учетные записи юзверей Linux и строгая парольная политика
- Включи ограничение по времени использования паролей пользователей Linux для повышения безопасности
- Ограничение использования старых паролей в Linux
- Фильтруй учетки без пароля
- Никто, кроме root, не имеет UID 0
- Отключи авторизацию под root
- Отключи ненужные службы
- Физическая защита
- Отслеживай прослушиваемые порты
Шифрование передачи данных
Все данные, передающиеся по сети, открыты для мониторинга. По возможности данные необходимо шифровать с использованием паролей/сертификатов.
- Используйте scp, ssh, rsync или sftp для передачи файлов. Также можно примонтировать файловую систему, которая является удаленным сервером или же Вашей домашней директорией. Реализуется это, например, через sshfs;
- GnuPG позволяет шифровать и подписывать ваши данные и сообщения, имеет универсальную систему управления ключами, а также модули доступа ко всем видам каталогов открытых ключей;
- OpenVPN - это экономичная, легкая SSL VPN. Другой вариант - попробовать tinc, который использует туннелирование и шифрование для создания защищенной сети между узлами в Интернете или же незащищенной локальной сети;
- При использовании веб-сервера (NGinx, Apache, Lighttpd), то и к нему будет не лишним прикрутить сертификатик.
Избегай того, чтобы использовать FTP, Telnet, Rlogin/Rsh сервисов
В большинстве сетевых конфигураций имена пользователей, пароли, команды FTP/telnet/rsh и передаваемые файлы могут быть перехвачены любым пользователем, находящимся в той же сети, с помощью сниффера. Общим решением этой проблемы является использование OpenSSH, SFTP или FTPS (FTP over SSL), которые добавляютшифрование к FTP.
Введите следующую команду yum для удаления NIS, rsh и других устаревших служб:
yum erase xinetd ypserv tftp-server telnet-server rsh-server
Если вы используете Debian/Ubuntu, то для удаления небезопасных служб: используйте:
sudo apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server
Минимизируй количество установленного ПО, чтобы минимизировать риски
Никому ведь из нас не нужен весь набор установленного ПО. Поэтому не стоит устанавливать все игры ПО, которое Вам не потребуется. Нет человека - нет проблем Нет бесполезного ПО - нет уязвимостей в этом ПО.
Для проверки и удаления нежелательных пакетов с yum:
Для проверки и удаления нежелательных пакетов с apt-get/dpkg:
Одна сетевая служба на систему или экземпляр ВМ
Запускайте различные сетевые службы на отдельных серверах или экземплярах виртуальных машин. Это ограничивает количество других сервисов, которые могут быть скомпрометированы.
Если злоумышленник скомпрометировал веб-сервер, то будет неловко, если он скомпрометирует еще и БД, которая крутилась на этом же сервере.
Обновляйся
Применение патчей безопасности является важной частью сопровождения Linux-систем. Linux предоставляет все необходимые средства для поддержания системы в актуальном состоянии, а также позволяет легко переходить с одной версии на другую. Все обновления безопасности должны быть просмотрены и применены как можно скорее.
apt-get update && apt-get upgrade
Учетные записи юзверей Linux и строгая парольная политика
Для создания и поддержки учетных записей пользователей используйте команды useradd / usermod. Убедитесь в том, что у вас надежная парольная политика. Например, хороший пароль должен состоять не менее чем из 8 символов, а вообще лучше не менее 12 и включать в себя сочетание букв, цифр, специальных символов, верхнего и нижнего алфавита и т.д. Самое важное - выбрать пароль, который можно запомнить.
Включи ограничение по времени использования паролей пользователей Linux для повышения безопасности
Команда chage изменяет количество дней между сменой пароля и дату последней смены пароля. Эта информация используется системой для определения того, когда пользователь должен сменить свой пароль. Файл /etc/login.defs определяет конфигурацию теневого набора паролей для конкретного сайта, включая настройку старения паролей.
Чтобы узнать информацию об истекающих паролях:chage -M 99999 userName
Ну или на худой конец Вы можете редактировать /etc/shadow вручную в соответствии со значениями:
{userName}:{password}:{lastpasswdchanged}:{Minimum_days}:{Maximum_days}:{Warn}:{Inactive}:{Expire}:
- Minimum_days: Минимальное количество дней, необходимое для смены пароля, т.е. количество дней, оставшихся до того, как пользователю будет разрешено сменить пароль;
- Maximum_days: Максимальное количество дней, в течение которых действует пароль (после чего пользователь будет вынужден сменить пароль);
- Warn : Количество дней до истечения срока действия пароля, за которые пользователь будет предупрежден о необходимости смены пароля;
- Expire : Количество дней с 1 января 1970 года, когда учетная запись отключена, т.е. абсолютная дата, определяющая, когда логин больше не может быть использован.
Но я был не рекомендовал этим заниматься, а сделать по-человечески:
chage -M 60 -m 7 -W 7 userName
Ограничение использования старых паролей в Linux
В Linux можно запретить всем пользователям использовать одни и те же старые пароли. Параметр модуля pam_unix remember может быть использован для настройки количества предыдущих паролей, которые не могут быть использованы повторно.
Фильтруй учетки без пароля
Нехорошо, когда в системе есть пользователь без собственного пароля, поэтому стоит таковых отсеивать:
awk -F: '($2 == "") {print}' /etc/shadow
Никто, кроме root, не имеет UID 0
По хорошему только root может иметь UID 0 с полным доступом. Чтобы отобразить все учетки, имеющие UID 0:
awk -F: '($3 == "0") {print}' /etc/passwd
В идеале Вы должны увидеть только следующее:
root:x:0:0:root:/root:/bin/bash
Если Вы увидите учетные записи помимо root, то удалите их, либо же убедитесь, что данные учетные записи могут использовать UID 0.
Отключи авторизацию под root
Авторизация в систему под root не нужна, как и работа в системе от учетной записи root'a. Если для работы необходимы права суперпользователя, то используй sudo. Это поможет обезопасить систему и позволит не делиться с другими пользователями и администраторами паролем от root. А можно ведь еще и прикрутить уведомления на использование sudo.
Отключи ненужные службы
Все службы и демоны, которые не нужны в работе, стоит убрать из автозапуска. Чтобы посмотреть, что запускается на третьем уровне загрузки:
chkconfig --list | grep '3:on'
По поводу дистрибутивов и служб Linux использующих systemd
Для всего описанного выше современные в дистрибутивах с systemd используется systemctl. Например, чтобы выведите список служб, в котором перечислены уровни выполнения, на которых каждая из них настроена на включение или выключение:
systemctl list-unit-files --type=service
systemctl list-dependencies graphical.target
Для отключения служб при загрузке:
systemctl disable httpd.service
Посмотреть логи служб всегда поможет journalctl:
Физическая защита
Необходимо защитить физический консольный доступ к Linux-серверам. Настройте BIOS и отключите загрузку с внешних устройств, таких как DVD/CD/USB-носители. Установите пароль на BIOS и загрузчик grub для защиты. Сервер в серверный шкаф, шкаф в помещение, к которому доступ имеет только ограниченный список лиц.
Отслеживай прослушиваемые порты
Для получения списка всех открытых портов и связанного с ними ПО используйте:netstat -tulpn
nmap -sT -O server.example.com
Ну, как мне кажется, это самое основное, что необходимо при hardening'е Linux-систем. Разумеется, можно сделать куда больше. Но это уже вопрос к тому, кто как и на совесть ли выполняет свою работу.
tg - https://t.me/bh_cat