Алексей Иванов
Использование UFW для управления сетевой безопасностью в Docker
Введение
Docker — это мощный инструмент контейнеризации, который позволяет разработчикам создавать, разворачивать и управлять приложениями в изолированных средах. Однако, изоляция контейнеров приводит к возникновению дополнительных вызовов в контексте сетевой безопасности. Управление сетевыми соединениями между контейнерами, а также между контейнерами и внешним миром, становится чрезвычайно важной задачей. Один из способов обеспечения безопасности сетей — это использование UFW (Uncomplicated Firewall). Это простой и удобный инструмент для управления правилами брандмауэра в операционных системах на базе Linux.
Использование UFW в Docker
UFW предоставляет легкий и интуитивно понятный интерфейс для управления параметрами безопасности на основе iptables. Он позволяет устанавливать правила для разрешения или блокировки входящего и исходящего трафика, упрощая процесс управления сетевой безопасностью.
Важное уточнение про совместимость Docker и UFW
Docker и UFW не интегрируются «из коробки» так, как ожидают многие. Когда вы публикуете порты контейнера (-p 8080:80), Docker добавляет правила в таблицу nat и цепочки DOCKER, поэтому часть трафика может быть перенаправлена до того, как она попадёт в цепочки INPUT/OUTPUT, которыми управляет UFW. В итоге может сложиться впечатление, что UFW «игнорируется».
Это поведение описано в документации Docker: https://docs.docker.com/engine/network/packet-filtering-firewalls/
Ниже — примеры, которые полезны для базового понимания UFW, но если вам нужно реально контролировать доступ к опубликованным портам контейнеров, используйте подходы из следующего раздела.
UFW (Uncomplicated Firewall) помогает управлять сетевой безопасностью Docker-контейнеров. Чтобы эффективно использовать UFW, необходимо понимать принципы работы Docker и сетевой безопасности. Если вы хотите детальнее погрузиться в Docker, узнать про Docker volumes, Docker-compose, Docker registry — приходите на наш большой курс Docker + Ansible - с нуля. На курсе 159 уроков и 7 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Раздел 1: Установка и настройка UFW
Перед тем, как начать использовать UFW для управления сетевой безопасностью в Docker, необходимо его установить и настроить. Давайте разберемся, как это сделать:
Установка UFW. В большинстве дистрибутивов Linux установка UFW производится через менеджер пакетов. Например, в Ubuntu это можно сделать с помощью команды:
sudo apt-get update sudo apt-get install ufwЭти команды загрузят и установят UFW на вашу систему.
Включение UFW. После установки необходимо включить UFW:
sudo ufw enableЭта команда активирует брандмауэр с настройками по умолчанию, которые обычно разрешают все исходящие соединения и блокируют все входящие, за исключением разрешенных.
Проверка состояния. Чтобы удостовериться, что UFW включен и работает, используйте следующую команду:
sudo ufw statusВы увидите текущее состояние брандмауэра и текущие активные правила.
Раздел 2: Настройка правил UFW для Docker
Теперь мы готовы приступить к настройке правил UFW для управления трафиком, связанным с Docker-контейнерами.
Как реально ограничивать доступ к опубликованным портам Docker
Рекомендованный путь — фильтровать трафик в цепочке DOCKER-USER (Docker гарантирует, что она будет вызываться до собственных правил Docker). Это позволяет применять «firewall-политику» для контейнеров, не ломая сеть Docker.
Пример: разрешить доступ к опубликованным портам контейнеров только с вашего IP, а остальное — блокировать:
# Разрешаем (пример) доступ к контейнерам только с 203.0.113.10
sudo iptables -I DOCKER-USER -s 203.0.113.10 -j ACCEPT
# Разрешаем established/related
sudo iptables -I DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Всё остальное к контейнерам - запрещаем
sudo iptables -A DOCKER-USER -j DROP
Если вы используете UFW, то вместо прямого управления iptables можно подключить UFW к DOCKER-USER через файл /etc/ufw/after.rules (или использовать готовые рецепты вроде ufw-docker). Важно: конкретная реализация зависит от дистрибутива и версии UFW.
Разрешение портов
Одной из важных задач является разрешение входящего трафика на определенные порты, которые используемые нашими контейнерами. Давайте посмотрим, как это сделать:
sudo ufw allow 8080/tcp
Эта команда разрешает входящий трафик по TCP на порт 8080. Обратите внимание, что вам нужно выбрать порты, которые соответствуют приложениям, работающим внутри ваших Docker-контейнеров.
Блокировка всех входящих соединений
Когда вы хотите создать изолированную среду, в которой контейнеры могут общаться только через определенные каналы, полезно заблокировать все входящие соединения, кроме разрешенных:
sudo ufw default deny incoming
Эта команда изменит политику безопасности, блокируя все входящие соединения, за исключением тех, которые явно разрешены.
Раздел 3: Дополнительные параметры и советы
Есть несколько дополнительных параметров и советов, которые могут пригодиться при использовании UFW для Docker:
Логирование
UFW позволяет вам включить логирование заблокированных попыток соединений, что может быть полезно для анализа попыток несанкционированного доступа:
sudo ufw logging on
С этой настройкой все заблокированные попытки доступа будут регистрироваться в системный журнал.
Проверка и отладка
Иногда может возникнуть необходимость проверки конкретных правил или отладки конфигурации. Вы можете посмотреть все активные правила и политику:
sudo ufw status verbose
Эта команда предоставляет подробную информацию о текущем состоянии брандмауэра, включая активные правила и настройки.
Заключение
Использование UFW с Docker — это отличный способ укрепить сетевую безопасность ваших контейнеров. Простой интерфейс UFW делает его идеальным инструментом даже для новичков, позволяя создавать и управлять брандмауэром без глубоких знаний сетевых технологий. Надеюсь, этот материал помог вам лучше понять, как UFW может быть интегрирован с Docker для создания безопасной среды выполнения приложений. Подумайте о том, как вы можете применить эти знания в своих проектах, чтобы обеспечить более безопасное исполнение ваших приложений.
Для автоматизации настройки UFW в Docker-окружении можно использовать Ansible. На нашем курсе Docker + Ansible - с нуля вы научитесь автоматизировать эти задачи. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в Docker и Ansible прямо сегодня.
Постройте личный план изучения Docker до уровня Middle — бесплатно!
Docker — часть карты развития DevOps
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Docker
Лучшие курсы по теме

Docker и Ansible
Антон Ларичев
Основы Linux
Антон Ларичев