dnf download readline cat /var/log/dnf.librepo.log | grep URL | tail -n1
prepare_next_transfer: URL: http://www.mirrorservice.org/sites/dl.fedoraproject.org/pub/fedora/linux/releases/23/Everything/source/SRPMS/r/readline-6.3- 6.fc23.src.rpm
и вы получили URL-адрес, откуда загружен пакет
У меня была аналогичная проблема, которая заключалась в необходимости «защитить» сетевой трафик, даже если кто-то развернул контейнер, который привязывал приложение к любому адресу:0.0.0.0:port
.
Docker предоставляет цепочку фильтров DOCKER-USER
, но похоже, что вся магия происходит в цепочке DOCKER
nat, на которую ссылается в PREROUTING
.
Таким образом, это nat
невозможно обойти до фильтрации, и я не хочу слишком сильно касаться правил докера.
Мне не нравится идея менять пакет еще раз, поэтому я придумал схему, которая возвращает все по умолчанию и переходит к другой цепочке вPREROUTING
до вызова DOCKER
.
Затем я выборочно возвращаюсь к DOCKER
, когда считаю, что трафик хороший.
Вот код:
iptables -t nat -N DOCKER-BLOCK
iptables -t nat -I PREROUTING -m addrtype --dst-type LOCAL -j RETURN
iptables -t nat -I PREROUTING -m addrtype --dst-type LOCAL -j DOCKER-BLOCK
Вот именно!
Пакет перейдет к цепочке DOCKER-BLOCK
, и если эта цепочка пуста, он выйдет из цепочки и продолжит переход PREROUTING
к RETURN
и будет заблокирован.
При включении порта:
iptables -t nat -I DOCKER-BLOCK -p tcp -m tcp --dport 1234 -j DOCKER
Это заставит пакет вернуться в цепочку DOCKER
, где он управляется docker
. Docker должен обработать пакет, а RETURN
из PREROUTING
никогда не должен быть достигнут.
Преимущество в том, что вам больше не нужно прикасаться к таблице PREROUTING
, если вы хотите сбросить, сбрасывайте напрямую DOCKER-BLOCK
.
Проблема с подходом DOCKER -BLOCK заключается в том, что если вы хотите заблокировать трафик к хосту и контейнерам, например заблокировать tcp-порт 50, вам нужно добавить его в цепочку DOCKER -BLOCK (для обойти правила докера )и в цепочке INPUT (для фактического сброса ).