1. Фундаментальные основы Linux и сетевых протоколов: архитектура, безопасность и управление трафиком
Фундаментальные основы Linux и сетевых протоколов: архитектура, безопасность и управление трафиком
Добро пожаловать в курс DevSecOps: От сетей и Linux до безопасности Kubernetes. Это первая и, пожалуй, самая важная статья цикла. Прежде чем мы начнем разворачивать кластеры Kubernetes, настраивать CI/CD пайплайны и внедрять сканеры уязвимостей вроде Trivy, нам необходимо построить прочный фундамент.
Любая современная облачная инфраструктура, будь то Docker-контейнер или сложный кластер K8s, опирается на базовые примитивы операционной системы Linux и сетевые протоколы. Непонимание того, как работает ядро Linux или как происходит TCP-рукопожатие, делает специалиста слепым при отладке сложных инцидентов безопасности.
Архитектура Linux: Ядро и Пространство пользователя
Операционная система Linux разделена на два основных уровня: Kernel Space (пространство ядра) и User Space (пространство пользователя). Понимание этой границы критически важно для безопасности контейнеров.
!Схема взаимодействия пространства пользователя и ядра через системные вызовы
Изоляция: Namespaces и Cgroups
Контейнеризация — это не магия, а использование двух функций ядра Linux:
Namespaces (Пространства имен): Отвечают за то, что* процесс может видеть. Они изолируют глобальные системные ресурсы.
* PID: Изоляция процессов (контейнер видит только свои процессы).
* NET: Изоляция сетевого стека (свои IP, порты, таблицы маршрутизации).
* MNT: Изоляция файловой системы.
Cgroups (Control Groups): Отвечают за то, сколько* ресурсов процесс может использовать. Они ограничивают CPU, память и I/O.
> Контейнеры в Linux — это обычные процессы, которые были ограничены с помощью Namespaces и Cgroups, чтобы создать иллюзию отдельной системы.
Безопасность в Linux: От прав доступа до Capabilities
В классической модели безопасности Linux есть права rwx (чтение, запись, исполнение) и пользователи (владелец, группа, остальные). Однако для DevSecOps этого недостаточно.
Linux Capabilities
Традиционно в Linux есть два типа процессов: привилегированные (root, UID 0) и непривилегированные. Это создает проблему безопасности: если приложению нужно всего лишь открыть порт ниже 1024 (например, веб-сервер на 80 порту), ему приходится давать полные root-права. Если злоумышленник взломает такой сервис, он получит контроль над всей системой.
Capabilities (возможности) разбивают суперсилу root-пользователя на мелкие части. Вместо того чтобы давать полный root, мы можем выдать процессу только конкретную способность.
Примеры Capabilities:
* CAP_NET_BIND_SERVICE: Разрешает биндить порты ниже 1024.
* CAP_CHOWN: Разрешает менять владельца файлов.
* CAP_SYS_ADMIN: Очень мощная привилегия, фактически аналог root (часто требуется для Docker внутри Docker).
Пример проверки capabilities у процесса ping (которому нужен доступ к сырым сокетам):
Docker Security: DinD vs DooD
При построении CI/CD пайплайнов часто возникает необходимость собирать Docker-образы внутри контейнеров (например, в Jenkins или GitLab CI). Здесь мы сталкиваемся с двумя подходами, имеющими разные риски безопасности:
--privileged, что отключает многие механизмы защиты и дает доступ к устройствам хоста. Это крайне небезопасно./var/run/docker.sock) внутрь контейнера. Контейнер использует демон хоста для сборки. Это тоже опасно: если злоумышленник получит доступ к сокету, он сможет запустить любой контейнер с любыми правами на хосте.Сетевые протоколы и передача данных
Понимание сети начинается с модели OSI, но на практике инженеры DevSecOps чаще оперируют моделями TCP/IP.
TCP/IP и надежность
Протокол TCP (Transmission Control Protocol) обеспечивает гарантированную доставку данных. Это происходит благодаря механизму "рукопожатия" (Handshake).
Для оценки производительности сети часто используется понятие пропускной способности TCP. Теоретический максимум пропускной способности можно выразить формулой:
где — пропускная способность (бит/с), (Receive Window) — размер окна приема TCP (объем данных, который можно отправить без подтверждения), а (Round Trip Time) — время прохождения сигнала туда и обратно. Если высокий (большая задержка), скорость передачи падает, даже если канал широкий.
DNS: Адресная книга интернета
DNS (Domain Name System) преобразует доменные имена в IP-адреса. В Kubernetes DNS играет ключевую роль (CoreDNS), позволяя сервисам находить друг друга по именам, а не по динамическим IP.
Мониторинг и анализ трафика
Для обеспечения безопасности сети (Network Security) необходимо уметь анализировать, что происходит в каналах связи.
Основные инструменты
ss является более современной и быстрой заменой netstat..pcap файлов, записанных через tcpdump).Безопасность сети
Основой сетевой безопасности в Linux является Netfilter — фреймворк внутри ядра, который управляет пакетами. Утилиты iptables или более современный nftables являются интерфейсами к Netfilter.
В контексте Kubernetes, сетевые политики (Network Policies) часто реализуются именно через правила iptables или технологию eBPF, ограничивая трафик между подами.
Подготовка к Kubernetes
В следующих статьях мы перейдем к практике:
Но помните: Trivy и kube-bench лишь подсвечивают проблемы. Исправление этих проблем потребует от вас знаний, полученных в этой статье — понимания прав доступа, capabilities и сетевых правил.