← Назад ко всем вопросам

Как заблокировать порт, который слушает контейнер

1️⃣ Как кратко ответить

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

2️⃣ Подробное объяснение темы

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

Использование iptables

iptables — это утилита для настройки правил фильтрации пакетов в Linux. Она позволяет управлять входящими и исходящими соединениями на уровне ядра.

Пример блокировки порта 8080:

sudo iptables -A INPUT -p tcp --dport 8080 -j DROP
  • sudo: выполнение команды с правами суперпользователя.
  • iptables -A INPUT: добавление нового правила в цепочку INPUT, которая обрабатывает входящие соединения.
  • -p tcp: указание протокола TCP.
  • --dport 8080: указание порта, который нужно заблокировать.
  • -j DROP: действие, которое нужно выполнить — отбросить пакеты.

Использование firewalld

firewalld — это динамическое управление брандмауэром с поддержкой зон и служб.

Пример блокировки порта 8080:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" port port=8080 protocol=tcp reject'
  • sudo: выполнение команды с правами суперпользователя.
  • firewall-cmd: команда для управления firewalld.
  • --zone=public: указание зоны, в которой применяется правило.
  • --add-rich-rule: добавление сложного правила.
  • rule family="ipv4": указание семейства протоколов.
  • port port=8080 protocol=tcp: указание порта и протокола.
  • reject: действие, которое нужно выполнить — отклонить соединение.

Изменение конфигурации контейнера

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

docker run -d --name my_container my_image
  • docker run -d: запуск контейнера в фоновом режиме.
  • --name my_container: задание имени контейнера.
  • my_image: имя образа контейнера.

Использование сетевых политик Kubernetes

Если контейнер работает в кластере Kubernetes, можно использовать сетевые политики для ограничения доступа к портам.

Пример сетевой политики, блокирующей доступ к порту 8080:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-port-8080
spec:
  podSelector:
    matchLabels:
      app: myapp
  policyTypes:
  - Ingress
  ingress:
  - from: []
    ports:
    - protocol: TCP
      port: 8080
  • apiVersion: networking.k8s.io/v1: версия API для сетевых политик.
  • kind: NetworkPolicy: тип ресурса.
  • metadata: метаданные, включая имя политики.
  • spec: спецификация политики.
  • podSelector: выборка подов, к которым применяется политика.
  • matchLabels: метки для выбора подов.
  • policyTypes: типы политики, в данном случае — входящие соединения.
  • ingress: правила для входящих соединений.
  • from: []: пустой массив, означающий, что входящие соединения запрещены.
  • ports: указание порта и протокола, которые нужно заблокировать.

Эти методы позволяют эффективно управлять доступом к портам контейнеров, обеспечивая безопасность и контроль над сетевыми взаимодействиями.

Тема: Docker / Контейнеры
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки