Назад | Перейти на главную страницу

Не удается переадресовать порт с помощью UFW в Ubuntu

Я пытаюсь заставить порт работать, чтобы открыть контейнер LXC при использовании ufw на Ubuntu, но безрезультатно. Я построил следующий рабочий процесс на основе руководств в Интернете ([1] [2] [3]); прежде всего раздел о /etc/ufw/before.rules Я вижу повторяющиеся повсюду, но ... я не могу заставить это работать на меня.

Если кто-то последует этому руководству и добьется успеха ... дайте мне знать (так что я могу сначала поплакать, а затем отступить и написать свой собственный инструмент брандмауэра)

Шаги по воспроизведению / тестированию

Настроить

  1. Тестовая среда

    • Новая виртуальная машина (я использовал виртуальный бокс) "host1" с сетевым интерфейсом NAT и NAT.
      • Установите сервер Ubuntu 16.04 - просто выполните установку по умолчанию
    • Второй экземпляр виртуальной машины host2 в той же сети NAT
  2. Установка LXC на host1 - я делаю это с простым LXC, еще не представляя настройки LXD

    • sudo lxc-create -n web -t download -- -d centos -r 7 -a amd64
    • sudo lxc-start -n web
    • sudo lxc-attach -n web
      • yum install httpd ; yum enable httpd ; yum start httpd
      • exit

Предположим теперь, что

Вы можете сделать снимок этого базового состояния.

На данный момент два маршрута: A-маршрут с простыми iptables и B-маршрут, проблемный, с ufw.

  1. А - iptables
    • sudo iptables -t nat -A PREROUTING -i enp0s8 -p tcp --dport 8080 -j DNAT --to "10.0.3.101:80"
    • На втором хосте могу wget http://10.0.2.6:8080 и это дает мне стандартную целевую страницу CentOS. Успех!

Эта проблема

  1. B - это можно сделать после перезагрузки host1 или, если вы сделали снимок ранее, просто вернуться. В любом случае он ведет себя одинаково
    • редактировать /etc/default/ufw
      • устанавливать MANAGE_BUILTINS=yes
      • устанавливать DEFAULT_FORWARD_POLICY="ACCEPT"
    • редактировать /etc/ufw/sysctl.conf
      • раскомментировать net/ipv4/ip_forward=1
    • редактировать /etc/ufw/before.rules
      • Вставьте строки nat (см. Ниже [4]) под ведущими комментариями, но выше в *filter линия
      • Регулировка конечно для соответствующих конфигураций
    • ufw allow 8080
    • ufw enable
    • На данный момент я не могу связаться с host1 с host2 с помощью wget, firefox и т. Д. - соединение не может быть установлено
    • Если я сделаю nc -l 8080 на host1 и попробуйте снова подключиться с host2, я получаю дамп HTTP-заголовка, указывающий на то, что переадресация портов не происходит. ПОТЕРПЕТЬ ПОРАЖЕНИЕ!

Я прошел свои шаги примерно 5 раз со свежими виртуальными машинами, каплями digitalOcean и экземплярами AWS EC2 - не повезло, всегда одно и то же.

Кто-нибудь может указать, что я делаю не так ...?

Оказывается, есть еще несколько шагов настройки, которые необходимы, чтобы разрешить поток общего трафика:

На вершине /etc/ufw/before.rules, перед *filter раздел

*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -i enp0s8 -p tcp --dport 8080 -j DNAT --to 10.0.3.101:80
COMMIT

И внизу, перед финал COMMIT:

-A FORWARD -o lxcbr0 -j ACCEPT
-A FORWARD -i lxcbr0 -j ACCEPT

-A INPUT -p udp --dport 53 -i enp0s8 -m state --state NEW -j ACCEPT
-A INPUT -p tcp --dport 53 -i enp0s8 -m state --state NEW -j ACCEPT
-A INPUT -p udp --dport 67 -i enp0s8 -m state --state NEW -j ACCEPT
-A INPUT -p tcp --dport 67 -i enp0s8 -m state --state NEW -j ACCEPT

На вершине /etc/ufw/after.rules, перед разделом фильтра:

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
COMMIT

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