Рассмотрим как защитить порты докера и ограничить доступ к ним из вне при помощи встроенного фаервола iptables.
Вводные
Для применения правила в Ubuntu при помощи iptables используется пакет iptables-persistent. Читать
Рассмотрим как защитить порты докера и ограничить доступ к ним из вне при помощи встроенного фаервола iptables.
Для применения правила в Ubuntu при помощи iptables используется пакет iptables-persistent. Читать
В последнее время Docker набирает всё больше и больше популярности благодаря возможности быстро развертывать сложные приложения, состоящие из большого количества сервисов. Portainer — это система управления docker контейнерами в Linux. Она позволяет управлять как локальными контейнерами, так и удалёнными с помощью Docker API.
С помощью Portainer вы сможете отслеживать состояние контейнеров, запускать, останавливать и удалять их, развертывать новые приложения, а также многое другое. Сегодня мы поговорим как выполняется установка Docker Portainer на ваш компьютер, а также как пользоваться программой
Для выполнения этой статьи вам понадобится уже установленный в вашей системе Docker. Я не буду подробно рассказывать как установить docker и docker-compose. Для этого воспользуйтесь этой статьей для Ubuntu или этой для CentOS.
После того, как Docker будет установлен, можно развернуть контейнер с Portainer. Было бы странно, если бы программа поставлялась в каком-либо другом виде. Создайте хранилище данных для Portainer:
docker volume create portainer_data
Для установки и запуска контейнера выполните:
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Эта команда настраивает автоматический запуск Portainer после перезагрузки, а также постоянное хранилище, чтобы ваши настройки не потерялись при удалении и повторном разворачивании контейнера. Чтобы убедится, что Portainer запущен выполните такую команду:
docker ps
Получить доступ к программе вы можете через веб-интерфейс на порту 9000. Откройте его в браузере. На первом шаге надо будет ввести имя пользователя и пароль, под которым вы будете входить в систему:

Затем выберите метод подключения к Docker. Для начала можно подключиться к локальному сервису Docker. Для этого выберите Local:

После нажатия кнопки Connect вы попадите в панель управления контейнерами:

Сначала вам надо выбрать узел, на котором вы будете управлять контейнерами, в данном случае, это local. Здесь вы можете уже управлять вашими контейнерами. Например, в разделе Containers можно посмотреть все доступные контейнеры:

А в разделе Stacks — все доступные приложения:

В разделе App Templates вы можете развернуть новое приложение на основе одного из существующих шаблонов. Например, давайте развернем WordPress. Для этого найдите его в списке:

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

После этого нажмите кнопку Deploy the stack и новое приложение появится в списке раздела Stasks. Как видите, теперь программа сообщает, что у неё есть полный контроль над этим приложением, потому что она его создала:
Если вы откроете приложение, там будут отображены его контейнеры. По каждому контейнеру можно посмотреть логи, открытые порты и даже подключится через терминал. Чтобы увидеть логи нажмите на иконку похожую на записную книжку возле состояния контейнера:

Для командной строки рядом есть значок с символом приглашения ввода. Вот так выглядит командная строка:

А открытые порты находятся в самом конце характеристик контейнера в разделе Published ports:

Если вы кликните по ссылке с надписью 32768:80 для контейнера WordPress, то попадёте на сайт WordPress:

Чтобы обновить Portainer надо удалить текущий образ и запустить его снова. Это не вызовет никаких проблем, так как при создании предыдущего образа мы использовали внешнее хранилище для хранения данных. Остановите образ и удалите его:
docker stop portainer
docker rm portainer
Скачайте новую версию:
docker pull portainer/portainer
Затем осталось снова установить Portainer:
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
Как видите установка Portainer очень простая, если у вас есть уже установленный docker, а далее программа только помогает пользоваться контейнерами. Вы можете подключить к ней и удалённые узлы, однако для этого надо, чтобы у них был публичный IP адрес, потому что в локальной сети взаимодействовать с ними вы не сможете. А вы используете Portainer или пользуетесь другим интерфейсом для управления Docker? Напишите в комментариях!
Источник: https://losst.ru/ustanovka-docker-portainer
Безопасны ли ваши контейнеры и образа Docker?
Хакеры стали очень активными в последние несколько лет.
Даже крупные организации, такие как Facebook, Google и Yahoo, стали жертвами атак, потеряв миллионы долларов.
Вот почему сегодня безопасность приложения – это самое важное в любой организации.
Многие из этих приложений сегодня работают внутри контейнеров, поскольку они легко масштабируются, экономичны, быстрее развертываются, занимают меньше места в хранилище и используют ресурсы намного лучше, чем виртуальные машины.
Таким образом, фактор безопасности этих контейнеров очень важен.
Образ контейнера состоит из слоев, и чтобы получить реальное представление об уязвимости образа, необходимо получить доступ к каждому уровню.
У небольших образов контейнеров меньше шансов подвергнуться потенциальным уязвимостям.
Контейнеризация – это один из основных этапов процесса DevOps, на котором безопасность требует серьезного внимания.
Образ контейнера может содержать множество ошибок и уязвимостей, что дает хакерам хорошую возможность получить доступ к приложению или данным, содержащимся в контейнере, что обходится компании в миллионы.
Следовательно, крайне важно регулярно сканировать и проверять образы и контейнеры.
DevSecOps играет важную роль в повышении безопасности процессов DevOps, включая сканирование образов и контейнеров на предмет ошибок и уязвимостей.
Сканер безопасности контейнеров поможет вам найти все уязвимости внутри ваших контейнеров и регулярно отслеживать их на предмет любых атак, проблем или новых ошибок.
Давайте изучим доступные варианты.

Clair – это проект с открытым исходным кодом, который предлагает сканирование уязвимостей контейнеров Docker и приложений (appc).
Это механизм анализа, управляемый API, который слой за слоем проверяет наличие недостатков безопасности в контейнерах.
Вы можете создавать сервисы с помощью Clair, которые могут непрерывно отслеживать ваши контейнеры на предмет любых уязвимостей.
Также он уведомляет о потенциальной угрозе в контейнере.
А именно, он уведомляет вас о потенциальной угрозе в контейнере на основе базы данных Common Vulnerabilities and Exposures (CVE) и аналогичных баз данных.
Если выявляется какая-либо угроза или проблема, которая уже есть в Национальной базе данных уязвимостей (NVD), инструмент извлекает подробности и предоставляет их в отчете.

Trivy – это простой и комплексный сканер уязвимостей для контейнеров и других артефактов.
Он помогает обнаруживать уязвимости пакетов операционной системы (Alpine, RHEL, CentOS и т. д.) и зависимости приложений (Bundler, Composer, npm, yarn и т. д.).
Перед отправкой в реджестри контейнеров или развертыванием приложения вы можете легко просканировать свой локальный образ контейнера и другие артефакты, что даст вам уверенность в том, что с вашим приложением все в порядке.
Ранее мы уже подробно разбирали его:

Anchore – это проект с открытым исходным кодом для глубокого анализа образов Docker.
Он также удостоверяет образ, сообщая, защищен он или нет.
Anchore может работать как на отдельной платформе, так и на платформах оркестровки, таких как Kubernetes, Rancher, Amazon ECS, Docker Swarm.
Anchore также доступен в плагинах Jenkins для сканирования пайплайнов CI/CD.
Вам необходимо отправить образ в anchore, который проанализирует и предоставит вам подробную информацию, если в нем есть какие-либо уязвимости.
Вы также можете использовать свою собственную политику безопасности для оценки образов.

Dagda – это инструмент с открытым исходным кодом для статического анализа известных уязвимостей, таких как трояны, вредоносное ПО, вирусы и т. д., в образах и контейнерах.
Он использует антивирусный движок ClamAV для обнаружения таких уязвимостей.
Сначала он импортирует все известные уязвимости из CVE, Red Hat Security Advisories (RHSA), Red Hat Bug Advisories (RHBA), идентификаторов Bugtraq (BID), базы данных безопасности Offensive в MongoDB.
Затем в соответствии с импортированными уязвимостями анализируются образы и контейнеры.

Falco – это проект с открытым исходным кодом как механизм обнаружения угроз в Kubernetes.
Это инструмент безопасности во время выполнения для обнаружения аномальной активности на хостах и контейнерах, работающих в Kubernetes.
Он обнаруживает любое неожиданное поведение в вашем приложении и предупреждает вас об угрозах во время выполнения.
Он использует синтаксис, подобный tcpdump, для создания правил и использует библиотеки, такие как libscap и libinsp, которые могут входить и извлекать данные с вашего сервера API Kubernetes или среды выполнения контейнера.
После этого вы можете использовать эти метаданные, чтобы получить информацию о подах, метках и пространствах имен, чтобы фактически создать правила, специфичные для конкретного пространства имен или определенного образа контейнера.
Правила фокусируются на системных вызовах и на том, какие системные вызовы разрешены и запрещены в системе.

Aqua Security защищает приложения, созданные с использованием облачных технологий, таких как контейнеры.
Он обеспечивает сканирование уязвимостей и управление для таких оркестраторов, как Kubernetes.
Это комплексная платформа безопасности, обеспечивающая безопасность приложений, работающих в контейнерах, и их выполнение в безопасной среде.
Когда разработчики создают образы, у них есть набор технологий и библиотек для их создания.
Aqua security позволяет им сканировать эти образа, чтобы убедиться, что они “чистые”, в них нет известных уязвимостей, в них нет открытых паролей или секретов, а также нет угроз безопасности, которые могли бы сделать этот образ уязвимым.
Если обнаружена какая-либо уязвимость, aqua security сообщает о них разработчику и рекомендует, что им нужно сделать, чтобы исправить эти уязвимые образы.
Aqua Security также имеет технологии, гарантирующие, что образ не подвергнется атаке или проникновению с какой-либо угрозой безопасности, когда контейнер запущен в продакшен.
Docker Bench Security – это скрипт с несколькими автоматическими тестами для проверки лучших практик развертывания контейнеров в производственной среде.
Чтобы запустить систему безопасности Docker Bench, вам понадобится Docker 1.13.0 или новее.
Вам необходимо выполнить приведенную ниже команду, чтобы запустить систему безопасности Docker Bench.
docker run -it --net host --pid host --userns host --cap-add audit_control
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST
-v /var/lib:/var/lib
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/lib/systemd:/usr/lib/systemd
-v /etc:/etc --label docker_bench_security
docker/docker-bench-securityПосле этого скрипт запустится, и он поделится деталями по северети INFO, WARN, PASS.
После запуска скрипта вы можете проверить все предупреждающие сообщения и внести исправления.

Docker — это платформа контейнеризации, которая позволяет быстро создавать, тестировать и развертывать приложения в виде переносимых самодостаточных контейнеров, которые могут работать практически где угодно. Это де-факто стандарт для развертывания контейнеров, и это важный инструмент для инженеров DevOps и их конвейеров непрерывной интеграции и доставки.
В этой статье мы объясним, как составить список контейнеров Docker. Читать
Подключение к работающему контейнеру Docker полезно, когда вы хотите увидеть, что происходит внутри контейнера. Если контейнер Docker не работает должным образом, вы можете подключиться к контейнеру или получить оболочку для контейнера и выполнить такие команды, как ps или top . Вы также можете войти в контейнер, установить новые пакеты и построить из него новый образ Docker .
В этом руководстве мы объясним, как подключиться к основному запущенному процессу контейнера и как получить оболочку к работающему контейнеру.
Читать
Docker — это платформа контейнеризации, которая позволяет быстро создавать, тестировать и развертывать приложения в виде переносимых самодостаточных контейнеров, которые могут работать практически где угодно.
Docker Compose — это инструмент, который позволяет определять и настраивать многоконтейнерные приложения Docker. Он использует файл YAML для настройки контейнеров, сетей и томов приложения. Читать