Можно ли ограничить подключение к базе данных в контейнере Docker на конкретном интерфейсе в Ubuntu 16?

У меня есть база данных MySQL на сервере (я использую Percona в контейнере Docker) с несколькими сетевыми интерфейсами.

Моя система - Ubuntu 16.04.2 LTS.

ifconfig

eth0      Link encap:...
          inet addr:95.*.*.*

eth1      Link encap:...
          inet addr:10.*.*.*

Можно ли ограничить доступ ufw в базу данных на eth0 интерфейс, но позволяют eth1?

Таким образом, он сможет получить доступ к БД с 10.*.*.*:6603 и не сможет получить доступ с 95.*.*.*:6603,

Обновление (04.03.2017):

Я использовал эту команду, чтобы добавить правило:

sudo ufw deny in on eth0 to any port 6603 from any proto tcp

Статус:

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
6603/tcp on eth0           DENY        Anywhere
6603/tcp (v6) on eth0      DENY        Anywhere (v6)

Но я, несмотря на отрицание правила, могу войти в свою БД с MySQL клиент.

Но 6603 порт все еще открыт:

nmap -p 6603 95.85.54.75

Starting Nmap 7.01 ( https://nmap.org ) at 2017-03-04 16:14 UTC
Nmap scan report for 95.85.54.75
Host is up (0.0012s latency).
PORT     STATE SERVICE
6603/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 0.65 seconds

2 ответа

Решение

Проблема заключалась в том, что Docker вмешивался в правила брандмауэра.

Согласно этим постам ( Опасность UFW + Docker, Как настроить Docker 1.12+, чтобы НЕ мешать IPTABLES / FirewallD):

  • Я создал файл /etc/docker/daemon.json с содержанием:

    {
        "iptables": false
    }
    
  • Я добавил правило в UFW:

    sudo ufw allow in on eth1 to any port 6603 
    

    разрешить соединения только от UFW.

  • перезагрузить демон докера

    sudo service docker stop
    sudo service docker start
    

Примечание: это исправление работает только для контейнеров, созданных с docker run..., Для контейнеров, созданных с помощью Docker Swarm, это исправление не работает.

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

Файл конфигурации mysqld (обычно на /etc/mysql/my.cnf) имеет опцию под названием bind-address это позволяет вам установить один IP-адрес (например, 10.0.4.25), чтобы заставить MySQL прослушивать только этот интерфейс.

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

Другие вопросы по тегам