Рейтинг:0

доступ к URL-адресу виртуального хоста общедоступного обратного прокси-сервера Apache из локального хоста за NAT с использованием iptables

флаг bo

У меня проблема с гостем, использующим virsh за сервером, работающим с брандмауэром iptables. Этот гость размещает веб-сайты, один из которых имеет обратный прокси-сервер.

Все работает хорошо. Затем я установил сотрудничество онлайн 1: https://www.collaboraoffice.com/code/. Очень круто открывать документы, и у них есть плагин для самого важного

Я протестировал этот плагин с удаленного сервера, на котором также работает Mattermost, который обращается к этому локальному блоку за моими iptables, и он работает отлично. Однако, когда я тестирую этот плагин с самого гостевого локального сервера, за iptables, так что в основном NAT, он не может найти себя. У меня истекает время ожидания.

Итак, мой гость за iptables, с правильной настройкой правил для передачи трафика, содержит наиболее важный и CollaboraOnline, но если я укажу общедоступный URL-адрес от наиболее важного для получения CollaboraOnline, оба локальных хоста не смогут найти друг друга. Не могу сделать в плагине localhost:9980 или 127.0.0.1:9980 (там где CollaboraOnline), не нравится порт в адресе...

Если я скручиваюсь https://CollaboraOnline.domain.ca Я вижу, что время истекло.

Если я отредактирую файл /etc/hosts на локальном сервере, чтобы 127.0.0.1 CollaboraOnline.domain.ca, тогда curl работает, Mattermost-plugin находит CollaboraOnline, но все равно не работает, потому что я получаю такую ​​ошибку проверки типа SSL.

AH02032: имя хоста, предоставленное через SNI, и имя хоста, предоставленное через HTTP, не имеют совместимой настройки SSL, как обойти

Так что теперь у меня заканчиваются яркие идеи. У меня есть другой публичный ящик не за виршем с iptables, если я делаю завиток на один его локалхост, то все нормально. Это только наводит меня на мысль, что iptables может понадобиться правило, чтобы мой гость, работающий с Mattermost и CollaboraOnline, мог вернуться к самому себе при запросе общедоступного URL-адреса, который он обслуживает сам?!?

Кто-нибудь знает об этом?

Моя гостевая виртуальная машина — 192.168.122.126, а мой родительский сервер, на котором размещены гости Vrish и iptables, — 192.168.122.1.

Вот правила iptables (удалены некоторые помехи, такие как fail2ban)

iptables -L
Сеть FORWARD (политика ACCEPT)
целевая защита выбор источника назначения         
ПРИНИМАТЬ все -- где угодно 192.168.122.126 состояние НОВОЕ, СВЯЗАННОЕ, УСТАНОВЛЕННОЕ
ПРИНИМАТЬ все -- где угодно 192.168.122.0/24 ctstate СВЯЗАННО, УСТАНОВЛЕНО
ПРИНИМАТЬ все -- 192.168.122.0/24 где угодно            
ПРИНИМАТЬ все -- в любом месте в любом месте            
REJECT all -- везде, где угодно
REJECT all -- везде, где угодно
iptables -L -t физ 
Цепь PREROUTING (политика ПРИНЯТЬ)
целевая защита выбор источника назначения         
DNAT tcp -- где угодно 148.59.149.79 tcp dpt:9980 to:192.168.122.126:9980
DNAT tcp -- везде 148.59.149.79 tcp dpt:12000 to:192.168.122.126:12000
DNAT tcp -- везде 148.59.149.79 tcp dpt:11000 to:192.168.122.126:11000
DNAT tcp -- везде 148.59.149.79 tcp dpt:submission to:192.168.122.126:587
DNAT tcp -- везде 148.59.149.79 tcp dpt:imap2 to:192.168.122.126:143
DNAT tcp -- где угодно 148.59.149.79 tcp dpt:smtp to:192.168.122.126:25
DNAT tcp -- везде 148.59.149.79 tcp dpt:webmin to:192.168.122.126:10000
DNAT tcp -- везде 148.59.149.79 tcp dpt:4443 to:192.168.122.126:4443
DNAT udp -- где угодно 148.59.149.79 udp dpt:10000 to:192.168.122.126:10000
DNAT tcp -- где угодно 148.59.149.79 tcp dpt:http to:192.168.122.126:80
DNAT tcp -- везде 148.59.149.79 tcp dpt:https to:192.168.122.126:443
Martin avatar
флаг kz
Если я вас правильно понял, ваша хост-система содержит правила iptables и правильно перенаправляет входящий трафик на вашу виртуальную машину. Вы выполняли команды curl внутри виртуальной машины или в хост-системе?
gstlouis avatar
флаг bo
@Мартин Я закручивал с гостевой ВМ, а не с сервера, на котором хранятся iptables и размещаются мои гости. Итак, мой гость — это 192.168.122.126, а мой сервер/iptables/vrish — 192.168.122.1.
Martin avatar
флаг kz
Ах, ладно, виртуальная машина и хост находятся в одной подсети... не могли бы вы опубликовать свои правила iptables, пожалуйста?
gstlouis avatar
флаг bo
@Martin обновил исходный пост
Martin avatar
флаг kz
а на виртуальной машине нет правил брандмауэра? потому что, если nat происходит на сервере, я не вижу причин, по которым завиток изнутри виртуальной машины на локальный хост должен потерпеть неудачу...
gstlouis avatar
флаг bo
@Мартин Виртуальная машина имеет iptables для целей fail2ban. Цепочка FORWARD ничего не содержит, а цепочки nat table все пустые. если мне не нужно сообщить iptables на виртуальной машине что-то о зацикливании публичного запроса URL-адреса обратно к себе, iptables не содержит ничего пользовательского из своей исходной конфигурации, за исключением дополнительных цепочек fail2ban. Я могу опубликовать, если вы считаете, что это актуально.
Martin avatar
флаг kz
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/136222/discussion-between-martin-and-gstlouis).
gstlouis avatar
флаг bo
Уже пришлось уйти. Может быть завтра? @Мартин
Martin avatar
флаг kz
конечно, я думаю, что цепочки ВХОД/ВЫХОД имеют значение - возможно, fail2ban заблокировал вас...
gstlouis avatar
флаг bo
@Мартин Я отключил оба f2b, и они все еще не работают. Я вошел в чат, но не могу быстро ответить
Рейтинг:1
флаг kz

Виновником здесь было неисправное/неполное правило NAT. Во время соединения TCP каждая конечная точка имеет фиксированные IP-адреса источника/назначения, и если на этот порт поступает IP-пакет с другим IP-адресом источника/назначения, пакет отбрасывается. Это справедливо для обеих конечных точек: клиента ( curl ) и сервера.

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

  • curl изнутри виртуальной машины отправляет пакет на общедоступный IP-адрес. IP-адрес источника: 192.168.122.126, IP-адрес назначения: 148.59.149.79
  • Ядро виртуальной машины проверяет свою таблицу маршрутизации и отправляет IP-пакет на шлюз по умолчанию, то есть 192.168.122.1.
  • ядро хоста получает пакет и передает его по цепочкам iptables (помните, какая цепочка проходится первой — PREROUTING идет перед POSTROUTING )
  • внутри цепочки PREROUTING IP-адрес назначения заменяется на 192.168.122.126.
  • здесь будет пройдена цепочка POSTROUTING.
  • из-за IP-адреса назначения пакет возвращается на виртуальную машину
  • на сокет сервера приходит IP-пакет. IP-адрес назначения и источника: 192.168.122.126. Нет проблем до сих пор.
  • Сокет сервера отправляет ответ - на этот раз, поскольку IP-адрес назначения является его собственным интерфейсом, правила NAT хоста НЕ будут применяться.
  • Клиентский сокет получает ответ от 192.168.122.126, который не является IP-адресом, на который клиентский сокет отправил запрос на подключение, поэтому пакет отбрасывается.

Решением является изменение исходного IP-адреса таким образом, чтобы ответ от сокета сервера виртуальной машины проходил правила NAT хоста:

iptables -t nat -I POSTROUTING 1 -s 192.168.122.126 -d 192.168.122.126 -j SNAT --к источнику 192.168.122.1

Помните, что цель SNAT применима только внутри цепочки POSTROUTING, поэтому DNAT из цепочки PREROUTING уже применен.

С этим правилом сокет сервера внутри виртуальной машины получает входящий запрос на подключение от 192.168.122.1 — отправляет ответ, и к ответу применяются правила SNAT/DNAT в обратном порядке, как только он поступает на хост: источник на 192.168.1. 122.126 и пункт назначения 148.59.149.79.

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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.