Введение

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

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

Для защиты Linux от таких угроз существуют различные функции безопасности, которые позволяют контролировать и ограничивать доступ к системным ресурсам и приложениям, а также обнаруживать и предотвращать атаки. В этой статье мы рассмотрим три основные функции безопасности, которые доступны в Linux: SELinux, AppArmor и Firewalls. Мы узнаем, что они из себя представляют, как они работают, какие у них преимущества и недостатки, а также как их настраивать и использовать.

Основная часть

SELinux

SELinux (Security-Enhanced Linux) — это модуль безопасности ядра Linux, который реализует механизм обязательного контроля доступа (MAC, Mandatory Access Control). Это означает, что SELinux определяет, какое приложение или процесс (субъект) может получить доступ к какому файлу, каталогу, порту или другому объекту в системе, исходя из заранее заданных правил, называемых политиками безопасности. SELinux не заменяет, а дополняет традиционный механизм дискреционного контроля доступа (DAC, Discretionary Access Control), который основан на правах владельца и группы файлов.

SELinux был разработан Национальным агентством безопасности США (NSA) в 2000 году и включен в основную ветку ядра Linux в 2003 году. SELinux поддерживается во многих дистрибутивах Linux, таких как Red Hat, Fedora, CentOS, Debian, Ubuntu и других. SELinux имеет три основных режима работы: enforcing, permissive и disabled. В режиме enforcing SELinux применяет политики безопасности и блокирует запрещенные действия. В режиме permissive SELinux не блокирует, а только регистрирует запрещенные действия в журнале. В режиме disabled SELinux отключен и не контролирует доступ.

Преимущества SELinux:

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

Недостатки SELinux:

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

Примеры настройки и использования SELinux:

Для проверки текущего режима работы SELinux можно использовать команду getenforce или sestatus. Для изменения режима работы SELinux можно использовать команду setenforce или редактировать файл /etc/selinux/config.

Для просмотра и изменения контекста безопасности (метки, которая определяет права доступа) файлов, каталогов, процессов или портов можно использовать команды ls -Z, chcon, ps -Z, semanage и другие.

Для анализа и устранения ошибок, связанных с SELinux, можно использовать команду audit2allow, которая генерирует предложения по изменению политик безопасности на основе журнала аудита /var/log/audit/audit.log.

Для создания и управления собственными политиками безопасности можно использовать инструменты, такие как checkpolicy, policycoreutils и selinux-policy-devel.

AppArmor

AppArmor (Application Armor) — это другой модуль безопасности ядра Linux, который также реализует механизм обязательного контроля доступа (MAC). Однако, в отличие от SELinux, AppArmor не использует контексты безопасности, а опирается на пути к файлам и каталогам. AppArmor позволяет создавать профили безопасности для отдельных приложений или групп приложений, которые определяют, какие файлы, каталоги, сетевые соединения и другие ресурсы они могут использовать и каким образом. AppArmor также поддерживает возможность изменять профили безопасности во время работы системы без необходимости перезагрузки.

AppArmor был разработан компанией Immunix в 1998 году и включен в основную ветку ядра Linux в 2007 году. AppArmor поддерживается во многих дистрибутивах Linux, таких как SUSE, openSUSE, Ubuntu, Debian и других. AppArmor имеет три основных режима работы: enforce, complain и disable. В режиме enforce AppArmor применяет профили безопасности и блокирует запрещенные действия. В режиме complain AppArmor не блокирует, а только регистрирует запрещенные действия в журнале. В режиме disable AppArmor отключен и не контролирует доступ.

Преимущества AppArmor:

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

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

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

Позволяет изменять профили безопасности во время работы системы без необходимости перезагрузки.

Недостатки AppArmor:

Менее гибок и мощный, чем SELinux, так как не поддерживает различные типы политик безопасности, такие как таргетированные, строгие, многоуровневые и ролевые.

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

Может вызывать конфликты с некоторыми приложениями или сервисами, которые не совместимы с профилями безопасности AppArmor. Может снижать производительность системы, если профили безопасности слишком строгие или неоптимальные.

Примеры настройки и использования AppArmor:

Для проверки текущего режима работы AppArmor можно использовать команду apparmor_status или aa-status. Для изменения режима работы AppArmor можно использовать команду aa-enforce, aa-complain или aa-disable или редактировать файл /etc/apparmor.d/disable.

Для просмотра и изменения профилей безопасности можно использовать команды aa-genprof, aa-autodep, aa-logprof, aa-mergeprof и другие. Профили безопасности хранятся в файлах в каталоге /etc/apparmor.d/ и имеют расширение .profile.

Для анализа и устранения ошибок, связанных с AppArmor, можно использовать команду aa-notify, которая показывает уведомления о запрещенных действиях в системном трее. Также можно просматривать журнал аудита /var/log/audit/audit.log или журнал ядра /var/log/kern.log.

Для создания и управления собственными профилями безопасности можно использовать инструменты, такие как aa-easyprof, aa-unconfined и aa-decode.
Firewalls

Firewalls (брандмауэры) — это программы или устройства, которые контролируют сетевой трафик, проходящий через них, и фильтруют его на основе заданных правил. Firewalls позволяют защищать Linux от внешних атак, таких как сканирование портов, подбор паролей, отказ в обслуживании и другие. Firewalls также позволяют контролировать доступ к сетевым ресурсам и сервисам, таким как веб-серверы, почтовые серверы, базы данных и другие. Firewalls могут быть разделены на два основных типа: пакетные и прикладные.

Пакетные firewalls работают на уровне сетевых пакетов и анализируют их заголовки, такие как IP-адреса, порты, протоколы и т.д. Пакетные firewalls могут быть реализованы как на уровне ядра Linux, так и на уровне пользовательского пространства. Примеры пакетных firewalls в Linux: iptables, nftables, firewalld, ufw и другие.

Прикладные firewalls работают на уровне приложений и анализируют их содержимое, такое как URL, заголовки HTTP, куки, почтовые сообщения и т.д. Прикладные firewalls могут быть реализованы как отдельные программы или модули для существующих приложений. Примеры прикладных firewalls в Linux: mod_security, fail2ban, psad и другие.

Преимущества firewalls:

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

Недостатки firewalls:

Не могут защитить систему от угроз, которые исходят из внутренней сети или локального компьютера, таких как вирусы, трояны, шпионское ПО и другие.

Могут вызывать конфликты с некоторыми приложениями или сервисами, которые требуют открытых портов или специфических протоколов. Могут снижать производительность системы, если правила фильтрации слишком строгие или неоптимальные.
Примеры настройки и использования firewalls:

Для проверки текущего состояния firewalls можно использовать команды iptables -L, nft list ruleset, firewall-cmd --state, ufw status и другие. Для изменения состояния firewalls можно использовать команды iptables, nft, firewall-cmd, ufw и другие.
Для просмотра и изменения правил фильтрации можно использовать команды iptables -A, nft add rule, firewall-cmd --add-rule, ufw allow и другие. Правила фильтрации могут быть основаны на разных критериях, таких как IP-адреса, порты, протоколы, интерфейсы, зоны и т.д.

Для анализа и устранения ошибок, связанных с firewalls, можно использовать команды iptables -v, nft monitor, firewall-cmd --debug, ufw logging и другие. Также можно просматривать журнал аудита /var/log/audit/audit.log или журнал ядра /var/log/kern.log.
Для создания и управления собственными правилами фильтрации можно использовать инструменты, такие как iptables-save, nft export, firewall-cmd --permanent, ufw user.rules и другие.

Заключение

В этой статье мы рассмотрели три основные функции безопасности, которые доступны в Linux: SELinux, AppArmor и Firewalls. Мы узнали, что они из себя представляют, как они работают, какие у них преимущества и недостатки, а также как их настраивать и использовать. Мы поняли, что каждая из этих функций имеет свои особенности и подходит для разных целей и задач. Мы также увидели, что для обеспечения максимальной безопасности системы желательно использовать их вместе, дополняя и усиливая друг друга.

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