20 реальных шагов по усилению безопаcности Linux
Чтобы обеспечить повышенный уровень безопасности системы, зачастую можно не прибегать к дорогостоящим специализированным средствам защиты. Добиться этого можно за счет грамотного конфигурирования уже имеющихся штатных механизмов защиты. Рассмотрим действия, которые может выполнить любой системный администратор , чтобы обезопасить Linux-систему .
№ 1. Избегайте использования FTP, Telnet и Rlogin/Rsh
В большинстве вариантов конфигурации сетей можно в той же самой сети с помощью сниффера пакетов ( packet sniffer ) перехватывать имена пользователей, пароли, команды FTP/Telnet/RSH и пересылаемые файлы. Общим решением проблемы является использование OpenSSH, SFTP или FTPS (FTP поверх SSL), которые добавляют к FTP либо SSL, либо шифрование TLS. Для того, чтобы удалить NIS, rsh и другие устаревшие сервисы, наберите следующую команду:
№ 2. Минимизируйте количество установленных приложений для минимизации числа уязвимостей
Вам действительно нужны все виды установленных веб-сервисов? Избегайте устанавливать ненужные приложения с тем, чтобы избежать уязвимостей, имеющихся в этих приложениях. Воспользуйтесь менеджером пакетов RPM, таким как as yum, либо apt-get and/or dpkg to review для просмотра всего набора установленных в системе программ. Удалите все ненужные пакеты.
№ 3. Один сетевой сервис на каждую систему или экземпляр виртуальной машины
Запускайте различные сетевые сервисы на отдельных серверах или отдельных экземплярах виртуальной машины. Это снизит количество сервисов, которые могут подвергнуться опасности. Например, если атакующий успешно попадает внутрь сервиса Apache , он также сможет получить доступ ко всему серверу, в том числе и к другим сервисам, таким как MySQL, почтовый сервер и т. п.
№ 4. Поддерживайте ядро Linux и программы в обновлённом состоянии
Применение всех патчей безопасности является важной частью работы по поддержанию сервера Linux. В Linux есть все необходимые средства для поддержания вашей системы всегда в обновлённом состоянии и для легкого перехода к следующим версиям. Все обновления, касающиеся безопасности, должны изучаться и устанавливаться сразу, как для этого появится возможность. Для того, чтобы установить все обновления, касающиеся безопасности, опять воспользуйтесь менеджером пакетов RPM, таким как yum или apt-get и/или dpkg:
Вы можете сконфигурировать Red hat/CentOS/Fedora Linux так, что yum будет посылать вам по e-mail напоминание о том, что есть обновление. Другая возможность – выполнять все обновления, относящиеся к безопасности, как задания для cron. Под Debian/Ubuntu Linux вы можете использовать apticron для отсылки напоминаний, касающихся безопасности.
№ 5: Используйте расширения Linux, повышающие безопасность
Linux поставляется с различными патчами по безопасности, которые можно использовать с тем, чтобы защитится от неверно работающих или подвергнувшихся атаке программ. Если можно, то используйте SELinux и другие расширения Linux, повышающие безопасность, в которых уже есть средства ограничения при работе с сетью и другие программы. Например, в SELinux имеется большое количество политик безопасности, которые реализованы в ядре SELinux.
№ 6. Политика пользовательских паролей и сильные пароли
Используйте команды useradd/usermod для того, чтобы создавать и работать с регистрационными записями пользователей. Удостоверьтесь в том, что вы используете политику применения хороших и сильных паролей. Например, длина хорошего пароля должна быть не менее 8 символов и в нём должны присутствовать прописные и строчные буквы, цифры, специальные символы и т. п. Самое главное – подобрать пароль, который вы можете запомнить. Используйте такие инструментальные средства, как John the ripper для поиска на вашем сервере слабых пользовательских паролей. Используйте pam_cracklib.so для того, чтобы проверять устойчивость пароля против его подбора по словарю.
№ 7. Запретите прямой доступ в систему с правами root
Никогда не входите в систему как пользователь root. Для выполнения команд уровня root, если это потребуется, вам следует пользоваться командой sudo . Команда sudo существенно повышает безопасность системы и не требует раздавать пароль root другим пользователям и администраторам. Команда sudo также предоставляет простые средства для аудита и отслеживания событий.
№ 8. Защитите сервер от физического доступа к нему
Вы должны защитить консоли Linux-серверов от физического доступа к системе. Сконфигурируйте BIOS и запретите загружаться с таких внешних устройств, как DVDs/CDs/USB. Установите пароль BIOS и пароль загрузки grub с тем, чтобы защитить эти настройки. Все системные блоки должны быть сосредоточены в специально отведённом для этого помещении и персонал, прежде чем получить доступ к вашему серверу, должен пройти в службе безопасности определенную проверку.
№ 9. Отключите ненужные сервисы
Отключите все ненужные сервисы и демоны (сервисы, запускающиеся в фоновом режиме). Вам нужно будет удалить все ненужные сервисы, запускаемые при старте системы. Для того, чтобы получить список всех сервисов, запускаемых на уровне запуска 3 (run level # 3) во время загрузки системы, наберите следующую команду:
Безопасность сервера Linux
Безопасность сервера 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. Операционная система предоставляет все инструменты для поддержания системы в актуальном состоянии, и обновления до новых версий. Все обновления безопасности должны применяться как можно скорее. Здесь тоже нужно использовать ваш менеджер пакетов. Например:
Или для систем основанных на 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 -r -u пользователь
Также вы можете вручную блокировать или разблокировать аккаунты с помощью команды passwd. Чтобы заблокировать используйте:
passwd -l пользователь
А для разблокировки:
passwd -u пользователь
Также желательно проверить есть ли в системе аккаунты с пустыми паролями. Для этого выполните:
Дальше такие аккаунты остается только заблокировать.
Также проверьте нет ли пользователей с группой или идом 0. Такой пользователь должен быть только один, и это root. Проверить можно с помощью такой команды:
awk -F: ‘($3 == «0»)
Должна быть только одна строка:
Если есть и другие — удалите их. Пользователи, а особенно их слабые пароли — одна из самых уязвимых вещей, которая может нарушить безопасность в 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
Найдите все открытые программами порты:
То же самое можно сделать с помощью сканера nmap:
nmap -sT -O localhost
Используйте iptables, чтобы закрыть все порты, которые не должны быть доступны из сети. Или остановите ненужные сервисы как описано выше.
13. Удалите Х сервер
Х сервер на серверном компьютере — вещь совсем необязательная. Вам не нужно запускать графическое окружение на выделенном Apache или Email сервере. Удалите это программное обеспечение для увеличения безопасности и производительности.
14. Настройте Iptables
iptables — это программа пространства пользователя для настройки встроенного в ядро фаервола Netfilter. Он позволяет фильтровать весь трафик и разрешать только определенные виды трафика. Также используйте TCPWrappers — ACL систему для фильтрации доступа в интернет. Вы можете предотвратить множество типов DOS атак с помощью iptables. Сетевая безопасность в Linux это очень важный момент общей безопасности системы.
15. Настройте ядро
В файле /etc/sysctl.conf хранятся настройки ядра, которые загружаются и применяются во время запуска системы.
Включить защиту от переполнения буфера execshield:
Включить защиту от подделывания IP:
Отключить перенаправление IP адресов:
Игнорировать широковещательные запросы:
Логгировать все подделанные пакеты:
16. Разбейте жесткий диск на разделы
Разделение жесткого диска на разделы в зависимости от назначения файлов улучшает безопасность ос Linux. Рекомендуется делать отдельные разделы для таких директорий:
Сделайте отдельные разделы для корневых директорий 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 потенциально опасны. Этот флаг означает, что программа будет выполняться с правами суперпользователя. А это означает, что если в программе есть какая-нибудь уязвимость или баг, то локальный или удаленный пользователь сможет использовать этот файл. Найдите все такие файлы с помощью следующей команды:
Найти файлы с установленным SGID флагом:
Или скомбинируем все это в одной команде:
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:
Запретите вход от имени суперпользователя:
Также рекомендуется сменить порт ssh на случайный и вообще не использовать пароли для аутентификации, а только ключи.
24. Установите IDS
IDS или система обнаружения вторжений пытается обнаружить подозрительную, вредоносную активность, такую как атака DOS, сканирование портов или даже попытки взломать компьютер путем мониторинга сетевого трафика.
Хорошая практика — развернуть подобное программное обеспечение, перед тем как система станет доступной из интернета. Вы можете установить AIDE, это HIDS (Host based IDS) которая может контролировать все аспекты внутреннего устройства вашей системы.
Snort — это программное обеспечение для обнаружения попыток вторжения из сети. Она способна выполнять анализ и журналирование пакетов и анализировать сетевой трафик в реальном времени.
25. Защитите ваши файлы и каталоги
В Linux есть отличные средства защиты от несанкционированного доступа к файлам. Однако разрешения установленные Linux и файловой системой ничего не значат, когда у злоумышленника есть физический доступ к компьютеру и он может просто подключить жесткий диск компьютера к другой системе, чтобы скопировать ваши данные. Но вы можете легко защитить свои файлы с помощью шифрования:
- Для шифрования и расшифровки файла по паролю используйте GPG
- Также можно защищать файлы с помощью OpenSSL
- Шифрование каталогов выполняется с помощью ecryptfs
- TrueCrypt — свободный инструмент для шифрования дисков в Windows и Linux
Выводы
Теперь безопасность ос linux на вашем компьютере будет намного увеличена. Не забывайте ставить сложные пароли и время от времени проверять систему на руткиты. Напишите в комментариях свой любимый инструмент для обеспечения безопасности системы.