Безопасность сервера Linux

Безопасность сервера Linux

DIMIT

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

Эти инструкции подойдут для любого дистрибутива, неважно что вы используете CentOS, Red Hat или Ubuntu, Debian.

1. Шифрование связи

Все данные, передаваемые по сети открыты для мониторинга. Поэтому нужно шифровать передаваемые данные, там, где это возможно с помощью паролей, ключей или сертификатов.

Используйте scp, ssh , rsync, или sftp для передачи файлов. Можно также смонтировать удаленную файловую систему в ваш домашний каталог с помощью таких инструментов, как shhfs.

GnuPG позволяет шифровать и подписывать ваши данные с помощью специального личного ключа. Также есть функции для управления ключами и доступа к открытым ключам.

Fugu — это графический инструмент для передачи файлов по протоколу SFTP. SFTP очень похож на FTP, но вся сессия здесь зашифрована. Это значит что никакие пароли или команды не передаются в открытом виде. А поэтому такие передачи менее уязвимы для третьих сторон. Также можно использовать FileZilla, это кроссплатформенный FTP клиент с поддержкой работы FTS через SSH / TLS и SSH File Transfer Protocol (SFTP).

OpenVPN — эффективный и легкий VPN клиент с поддержкой шифрования по SSH.

2. Постарайтесь не использовать FTP, Telnet, Rlogin и RSH

В большинстве сетей имена пользователей, пароли от FTP, Telnet, RSH команд могут быть перехвачены кем-либо из той же самой сети с помощью анализатора пакетов. Общее решение этой проблемы заключается в использовании OpenSSH, SFTP или SFTP, который добавляет SSL или TLS к обычному FTP. Выполните такую команду чтобы удалить NIS, RSH и другие устаревшие службы:

yum erase inetd xinetd ypserv tftp-server telnet-server rsh-serve

3. Уменьшите количество программного обеспечения

Вам действительно нужны все установленные веб-службы? Не следует устанавливать ненужное программное обеспечение, чтобы избежать уязвимостей в этих программах. Используйте свой пакетный менеджер чтобы посмотреть установленные программы и удалить все ненужные:

yum list installed

$ yum list пакет

$ yum remove пакет

Или:

dpkg --list

$ dpkg --info пакет

$ apt-get remove пакет

4. Одна машина — одна служба

Запускайте разные службы на отдельных серверах или виртуальных машинах. Это ограничивает число сервисов, которые могут быть скомпрометированы. Например, если злоумышленник сможет взломать Apache, то он получит доступ ко всему серверу. Включая такие сервисы, как MySQL, сервер электронной почты и так далее. Вы можете использовать такое программное обеспечение, как XEN или OpenVZ для виртуализации.

5. Держите ядро Linux и ПО в актуальном состоянии

Применение патчей безопасности это очень важная часть того чтобы поддерживать безопасность сервера Linux. Операционная система предоставляет все инструменты для поддержания системы в актуальном состоянии, и обновления до новых версий. Все обновления безопасности должны применяться как можно скорее. Здесь тоже нужно использовать ваш менеджер пакетов. Например:

sudo yum update

Или для систем основанных на Debian:

sudo apt update && sudo apt upgrade

Вы можете настроить Red Hat или Fedora для отправки вам уведомления на Email о доступности новых обновлений безопасности. Также вы можете настроить автоматическое обновление через cron, или же вы можете использовать aptcron в Debian для уведомления о необходимости обновить систему.

6. Используйте расширения безопасности в Linux

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

SELinux предоставляет различные политики безопасности для ядра Linux. Здесь есть возможность контролировать доступ к любым ресурсам системы с помощью ролей. К тому или иному ресурсу может получить доступ только программа, роль которой позволяет это делать и даже права суперпользователя не имеют значения. SELinux намного увеличивает безопасность системы Linux, поскольку даже root здесь считается обычным пользователем. Подробнее о настройке SELinux описано в отдельной статье.

7. Учетные записи пользователей и надежные пароли

Используйте команды useradd и usermod для создания и поддерживания учетных записей пользователей. Убедитесь, что у вас хороший и сильный пароль, он должен содержать, по крайней мере, восемь символов, желательно в разном регистре, среди которых должны встречаться специальные символы или цифры. Например, 8 символов, из которых семь буквы и один символ или цифра. Используйте такие инструменты, как John the ripper чтобы найти слабые пароли пользователей на сервере, а также настройте pam_cracklib.so, чтобы обеспечить соблюдение политики паролей.

8. Время от времени изменяйте пароли

Команда change позволяет указать количество дней до даты принудительной смены пароля. Эта информация используется системой для определения момента, когда пользователь должен его изменить. Эти настройки находятся в /etc/login.defs. Чтобы отключить старение пароля введите следующую команду:

change -l имя_пользователя

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

Также вы можете все настроить вручную, в файле /etc/shadow:

{пользователь}:{пароль}:{последнее_изменение}:{максимум_дней}:{минимум_дней}:{Предупреждение}:{деактивировать}:{строк_годности}:

  • Минимум дней — минимальный интервал между сменами паролей, то есть насколько часто пользователь может менять пароль.
  • Максимум дней — сколько дней будет годен пароль, по истечении этого срока пользователь будет вынужден поменять пароль.
  • Предупреждение — количество дней после которых пользователь будет предупрежден, что ему нужно сменить пароль.
  • Строк_годности — количество дней с первого января 1970 когда аккаунт будет полностью отключен.

Рекомендуется использовать такую команду, вместо редактирования файла /etc/shadow вручную:

chage -M 60 -m 7 -W 7 имя_пользователя

Также желательно запретить пользователям использовать старые пароли, иначе все старания с попытками заставить их принудительно менять пароли будут сведены к нулю.

9. Блокируйте аккаунты после неудачных попыток входа

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

faillog

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

faillog -r -u пользователь

Также вы можете вручную блокировать или разблокировать аккаунты с помощью команды passwd. Чтобы заблокировать используйте:

passwd -l пользователь

А для разблокировки:

passwd -u пользователь

Также желательно проверить есть ли в системе аккаунты с пустыми паролями. Для этого выполните:

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

Дальше такие аккаунты остается только заблокировать.

Также проверьте нет ли пользователей с группой или идом 0. Такой пользователь должен быть только один, и это root. Проверить можно с помощью такой команды:

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

Должна быть только одна строка:

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

Если есть и другие — удалите их. Пользователи, а особенно их слабые пароли — одна из самых уязвимых вещей, которая может нарушить безопасность в linux.

10. Отключите вход для суперпользователя

Чтобы сохранить безопасность системы linux никогда не используйте вход от имени root пользователя. Вы можете воспользоваться sudo, чтобы получить необходимые полномочия и запустить нужную команду от имени суперпользователя. Эта команда позволяет не разглашать пароль суперпользователя другим админам, а также содержит инструменты мониторинга, ограничения и отслеживания действий.

11. Физическая безопасность сервера

Безопасность сервера Linux должна включать физическую безопасность. Вы должны ограничить физический доступ к консоли сервера. Настройте BIOS так, чтобы не поддерживалась загрузка с внешних носителей, таких как DVD, CD, USB. Также установите пароль на BIOS и загрузчик GRUB, чтобы защитить их параметры.

12. Отключите ненужные сервисы

Отключите все неиспользуемые сервисы и демоны. Также не забудьте удалить эти сервисы из автозагрузки. Вы можете посмотреть список всех активных сервисов в системах Red Hat командой:

 chkconfig --list | grep '3:on'

Для отключения сервиса используйте:

service сервис stop

$ chkconfig сервис off

Найдите все открытые программами порты:

netstat -tulpn

То же самое можно сделать с помощью сканера nmap:

nmap -sT -O localhost

Используйте iptables, чтобы закрыть все порты, которые не должны быть доступны из сети. Или остановите ненужные сервисы как описано выше.

13. Удалите Х сервер

Х сервер на серверном компьютере — вещь совсем необязательная. Вам не нужно запускать графическое окружение на выделенном Apache или Email сервере. Удалите это программное обеспечение для увеличения безопасности и производительности.

14. Настройте Iptables

iptables — это программа пространства пользователя для настройки встроенного в ядро фаервола Netfilter. Он позволяет фильтровать весь трафик и разрешать только определенные виды трафика. Также используйте TCPWrappers — ACL систему для фильтрации доступа в интернет. Вы можете предотвратить множество типов DOS атак с помощью iptables. Сетевая безопасность в Linux это очень важный момент общей безопасности системы.

15. Настройте ядро

В файле /etc/sysctl.conf хранятся настройки ядра, которые загружаются и применяются во время запуска системы.

Включить защиту от переполнения буфера execshield:

kernel.exec-shield=1

kernel.randomize_va_space=1

Включить защиту от подделывания IP:

net.ipv4.conf.all.rp_filter=1

Отключить перенаправление IP адресов:

net.ipv4.conf.all.accept_source_route=0

Игнорировать широковещательные запросы:

net.ipv4.icmp_echo_ignore_broadcasts=1

net.ipv4.icmp_ignore_bogus_error_messages=1

Логгировать все подделанные пакеты:

net.ipv4.conf.all.log_martians = 1

16. Разбейте жесткий диск на разделы

Разделение жесткого диска на разделы в зависимости от назначения файлов улучшает безопасность ос Linux. Рекомендуется делать отдельные разделы для таких директорий:

  • /usr
  • /home
  • /var и /var/tmp
  • /tmp

Сделайте отдельные разделы для корневых директорий Apache и FTP серверов. Откройте файл /etc/fstab и выставьте специальные опции для нужных разделов:

  • noexec — не выполнять любые программы или исполняемые файлы на этом разделе, разрешены только скрипты
  • nodev — не разрешать символические или специальные устройства на этом разделе.
  • nosuid — не разрешать SUID / SGID доступ для программ из этого раздела.

17. Используйте ограничение дискового пространства

Ограничивайте доступное дисковое пространство для пользователей. Для этого создайте дисковую квоту в /etc/fstab, перемонтируйте файловые системы и создайте базу данных дисковых квот. Это повысит безопасность в Linux.

18. Отключите IPv6

Протокол интернета нового поколения IPv6 в будущем заменит уже используемый IPv4. Но на данный момент нет инструментов, позволяющих проверить безопасность сети на основе IPv6. Многие дистрибутивы Linux разрешают использование протокола IPv6 по умолчанию. Хакеры могут отправлять нежелательный трафик и администраторы не смогут его отследить. Так что если эта служба вам не нужна отключите ее.

19. Отключите неиспользуемые SUID и SGID бинарники

Все исполняемые файлы, для которых включен флаг SUID или SGID потенциально опасны. Этот флаг означает, что программа будет выполняться с правами суперпользователя. А это означает, что если в программе есть какая-нибудь уязвимость или баг, то локальный или удаленный пользователь сможет использовать этот файл. Найдите все такие файлы с помощью следующей команды:

find / -perm +4000

Найти файлы с установленным SGID флагом:

 find / -perm +2000

Или скомбинируем все это в одной команде:

find / \( -perm -4000 -o -perm -2000 \) -print

$ find / -path -prune -o -type f -perm +6000 -ls

Вам придется подробно изучить каждый найденный файл, чтобы понять насколько нужен тот или иной файл.

20. Общедоступные файлы

Также желательно найти файлы, которые могут изменять все пользователи в системе. Для этого используйте такую команду:

find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Теперь вам нужно проверить правильно ли выставлены права для группы и владельца этого каждого файла и не несет ли это угрозы безопасности.

Также желательно найти все файлы не принадлежащие никому:

 find /dir -xdev \( -nouser -o -nogroup \) -print

21. Используйте централизованную систему аутентификации

Без централизованной системы аутентификации пользовательские данные становятся противоречивыми, что может привести к устареванию учетных данных, и забыванию аккаунтов, которые должны были бы быть уже давно удалены. Централизованная служба позволит поддерживать контроль над учетными записями и аутентификационными данными пользователей на разных системах Linux и Unix. Вы можете синхронизировать данные аутентификации между серверами. Но не используйте службу NIS, лучше посмотрите в сторону Open DAP.

Одной из интересных реализаций такой системы есть Kerberos. Она позволяет выполнять аутентификацию пользователей с помощью секретного ключа, в сетях, где пакеты могут быть перехвачены и модифицированы. Kerberos использует симметрический ключ для шифрования данных и требует для своей работы центр управления ключами. Вы можете настроить удаленный вход, удаленное копирование, защищенное копирование файлов между системами и другие задачи, с высоким уровнем безопасности.

22. Логирование и аудит

Настройте логгирование и аудит для сбора и сохранения всех неудачных попыток входа и попыток взлома. По умолчанию все логи или, по крайней мере, большинство из них находятся в папке /var/log/. Подробнее, о том, за что отвечают определенные лог файлы мы говорили в отдельной статье.

Вы можете смотреть логи с помощью таких утилит, как logwatch или logcheck. Они очень сильно упрощают чтение логов. Вы можете просматривать не весь файл, а только интересующие вас события, а также отправлять себе уведомление на электронный адрес.

Наблюдайте за системой с помощью службы auditd. Программа записывает на диск все события аудита которые вас интересуют. Все настройки аудита хранятся в файле /etc/audit.rules при запуске системы сервис прочитывает все правила из этого файла. Вы можете его открыть и настроить все как нужно или же воспользоваться отдельной утилитой — auditctl. Можно настроить такие моменты:

  • События запуска и выключения системы
  • Дата и время события
  • Пользовательские события (например доступ к определенному файлу)
  • Тип события (редактирование, доступ, удаление, запись, обновление и т д)
  • Удачность или сбой при выполнении события
  • Запись событий изменения настроек сети
  • Запись изменения пользователей и групп
  • Мониторинг изменений файлов

23. Защитите OpenSSH сервер

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

Поэтому рекомендуется отключить использование протокола SSH1, в пользу более защищенного SSH2. Все настройки сервера ssh находятся в файле /etc/ssh/sshd_config.

Разрешите только использование протокола 2:

Protocol 2

Запретите вход от имени суперпользователя:

PermitRootLogin no

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

24. Установите IDS

IDS или система обнаружения вторжений пытается обнаружить подозрительную, вредоносную активность, такую как атака DOS, сканирование портов или даже попытки взломать компьютер путем мониторинга сетевого трафика.

Хорошая практика — развернуть подобное программное обеспечение, перед тем как система станет доступной из интернета. Вы можете установить AIDE, это HIDS (Host based IDS) которая может контролировать все аспекты внутреннего устройства вашей системы.

Snort — это программное обеспечение для обнаружения попыток вторжения из сети. Она способна выполнять анализ и журналирование пакетов и анализировать сетевой трафик в реальном времени.

25. Защитите ваши файлы и каталоги

В Linux есть отличные средства защиты от несанкционированного доступа к файлам. Однако разрешения установленные Linux и файловой системой ничего не значат, когда у злоумышленника есть физический доступ к компьютеру и он может просто подключить жесткий диск компьютера к другой системе, чтобы скопировать ваши данные. Но вы можете легко защитить свои файлы с помощью шифрования:

  • Для шифрования и расшифровки файла по паролю используйте GPG
  • Также можно защищать файлы с помощью OpenSSL
  • Шифрование каталогов выполняется с помощью ecryptfs
  • TrueCrypt — свободный инструмент для шифрования дисков в Windows и Linux

Выводы

Теперь безопасность ос linux на вашем компьютере будет намного увеличена. Не забывайте ставить сложные пароли и время от времени проверять систему на руткиты.

Источник:
https://losst.ru/bezopasnost-servera-linux

Report Page