1

Я использую Apache для перенаправления субдомена на порт (mod_proxy , mod_proxy_http , mod_proxy_ajp) и таблицы IP для ограничения прямого доступа к порту, кроме меня и локального сервера.

Мои таблицы IP выглядят так:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:tproxy
ACCEPT     tcp  --  localhost            anywhere             tcp dpt:tproxy
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:http-alt
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:webmin
ACCEPT     tcp  --  localhost            anywhere             tcp dpt:webmin

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Контекст, который я собираюсь использовать в этом посте:

Sonatype Nexus: nexus.example.com => example.com:8081

Дженкинс CI: jenkins.example.com => example.com:8080

Webmin: webmin.example.com => example.com:10000

То, что у меня сейчас работает, - это не прямой доступ к порту, кроме меня. Я также хочу, чтобы локальная система могла получать доступ к портам, что, как я полагаю, у меня сейчас. Я использую mod_proxy_ajp для CI Jenkins и Webmin и mod_proxy_http для Nexus Sonatype.

Когда я посещаю прямые порты, каждая из этих служб загружается просто отлично. Когда я попросил кого-то еще загрузить каждого, они не могут, так что это работает.

Теперь, однако, при попытке получить доступ к одному из поддоменов, я получаю бесконечную нагрузку (бесконечный цикл?)

Когда я запускаю tracert на поддомене, он хорошо заканчивается, поэтому я могу вычеркнуть бесконечный цикл.

Вот моя конфигурация виртуального хоста Apache Sonatype Nexus:

<VirtualHost *:80>
        ServerName nexus.majornoob.com
        ServerAlias www.nexus.majornoob.com
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / http://localhost:8081/
        ProxyPassReverse / http://localhost:8081/
        ProxyPassReverseCookiePath / /
        ErrorLog /var/www/majornoob/error-nexus.log
        LogLevel warn
        CustomLog /var/www/majornoob/access-nexus.log combined
</VirtualHost>

а вот и мой Дженкинс:

<VirtualHost *:80>
        ServerName jenkins.majornoob.com
        ServerAlias www.jenkins.majornoob.com
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / ajp://127.0.0.1:8080/
        ProxyPassReverse / ajp://127.0.0.1:8080/
        ProxyPassReverseCookiePath / /

        ErrorLog /var/www/majornoob/error-jenkins.log

        LogLevel warn

        CustomLog /var/www/majornoob/access-jenkins.log combined
</VirtualHost>

Эти два примера виртуальных хостов используют mod_proxy_ajp и mod_proxy_http соответственно.

Может ли кто-нибудь помочь мне понять, почему я получаю бесконечный груз?

Благодарю.

редактировать: фигу на бесконечный цикл. Через некоторое время я получил ошибку 503 Service Unavailable.

1 ответ1

1

Правила iptables оцениваются по порядку, сверху вниз, как напечатано. Проблема у вас в том, что прокси-соединение от localhost, что соответствует этому правилу:

DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:tproxy

localhost не c-24-7-... , поэтому соединение обрывается. Время работы прокси-модуля истекло; если бы правилом было REJECT, а не DROP, вы бы получили ошибку намного быстрее (потому что вы получили бы явный отказ, а не просто попытка соединения исчезнуть).

Решение довольно простое: измените порядок правил так, чтобы "принять от локального хоста" перед "отказать в другом месте". (IP-маршрутизация соответствует наиболее конкретным, но поскольку iptables многофакторны, это не обязательно определяется).

Я бы вообще рекомендовал иметь первое правило, которое разрешает все локальные коммуникации (через интерфейс обратной связи, на тот случай, если кто-то попробует что-то странное через Ethernet); попробуйте добавить

iptables -I INPUT -i lo -s localhost -d localhost -j ACCEPT

вставить (-I) это вверху списка.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .