Можно ли ограничить подключение к базе данных в контейнере 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), можно подключаться к сервисам, привязанным к одному интерфейсу из другого.