Перенаправить HTTP-порт по умолчанию в приложение

На моем сервере CentOS на mydomain.com меня есть веб-приложение svn, работающее на порту 8880. Я хочу скрыть порт: в данный момент, если кто-то хочет получить доступ, им необходимо получить доступ через http://thisdomain.com:8880/svn . Я хочу сделать приложение доступным по адресу http://thisdomain.com/ .

2 Solutions collect form web for “Перенаправить HTTP-порт по умолчанию в приложение”

Вариант 1: перенаправление портов NAT

Если все, что вам нужно сделать, это перенаправление запросов на внешний порт 80 во внутреннюю программу, запущенную на порту 8880, для этого можно использовать пересылку портов iptables :

 # iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to 127.0.0.1:8880 

Здесь есть несколько моментов:

  1. Я предполагаю, что вы работаете с каким-то VPS , поэтому eth0 вероятно, не является правильным именем интерфейса. При этом вам придется заменить это.

    Кстати, если вы используете общий хостинг или ваш VPS не разрешает iptables , перейдите к следующему варианту.

  2. Как указано выше, правило предполагает, что вы настроили эту внутреннюю программу для прослушивания только на локальном интерфейсе 127.0.0.1 . Это дает вам «скрывающееся» поведение, о котором вы просили.

  3. Существующие ранее правила брандмауэра могут помешать этому правилу, поскольку оно написано в настоящее время. Там нет замены для понимания ваших текущих правил iptables перед их модификацией, но если это не сработает, вы можете вслепую попробовать добавить другое правило следующим образом:

     # iptables -A FORWARD -p tcp -i eth0 --dport 80 -j ACCEPT 

    Такая вещь понадобится, если ваше правило цепи FORWARD умолчанию – DENY .

  4. Вы должны убедиться, что эти правила при загрузке.

    Если вы будете осторожны, вы можете отредактировать /etc/sysconfig/iptables для CentOS, чтобы выполнить это. Этот файл использует синтаксис, похожий на язык командной строки iptables но не точно такой же. Вероятно, вы должны проверить это на локальной виртуальной машине, чтобы уменьшить вероятность того, что вы случайно заблокируете себя из своего общего сервера.

    Было бы безопаснее поместить команды в /etc/rc.local , но будьте осторожны, если при перезапуске службы iptables (например, service iptables reload ) ваши пользовательские правила будут удалены, если они не находятся в /etc/sysconfig/iptables ,

Если вы прочитали все это и задаетесь вопросом, почему я сделал это Вариант 1, когда Вариант 2 ниже проще, то он намного эффективнее. Переадресация портов в основном «бесплатна» с точки зрения ресурсов, как только вы ее настроили.

Вариант 2: HTTP-прокси

Еще один способ – использовать какой-то HTTP-прокси . Я использовал Tinyproxy для такого рода вещей. Он более гибкий, чем переадресация портов NAT, и не требует, чтобы вы запускали брандмауэр операционной системы.

Он упакован для CentOS в EPEL , так что, как только вы включили репозиторий EPEL, вам просто нужно сказать, что yum install tinyproxy .

Внесите эти изменения в файл /etc/tinyproxy/tinyproxy.conf :

 Port 80 Upstream localhost:8880 

Кроме того, закомментируйте строку « Allow , поэтому Tinyproxy будет принимать подключения от внешних IP-адресов:

 # Allow 127.0.0.1 

Вы должны убедиться, что Apache не запущен ( service httpd stop ), когда вы пытаетесь запустить это ( service tinyproxy start ), так как он будет принимать порт 80.

Документация для Tinyproxy – это всего лишь краткая ссылка, поэтому я не уверен, что использование Upstream – это взлом, который лучше заменяется с помощью функций обратного прокси-сервера Tinyproxy. Тем не менее, это работает для меня, и для конфигурационного файла требуется меньше изменений, поэтому я так и делаю это.

Если вам интересно, почему я не просто использовал Apache для этого с самого начала, просто это сложнее и требует больше ресурсов. У Apache есть прокси-функции . Однако, если вам не нужна полная мощь Apache, я не вижу причин так поступать по Tinyproxy.

В отличие от перенаправления портов NAT, для запуска Tinyproxy требуется несколько системных ресурсов. Требуется некоторое ОЗУ, и если ваш уровень трафика достаточно высок, он может стать привязанным к вводу / выводу . Если ваш сервер не особенно занят, вы, вероятно, даже не заметите, что он работает.

Это будет сделано в вашем файле httpd.conf как виртуальный хост. Это будет выглядеть примерно так:

 <VirtualHost thisdomain.com:8880> DocumentRoot /www/docs/svn/myapp ServerName thisdomain.com </VirtualHost 

Удостоверьтесь, что apache lisening для правильного порта. Найдите, где говорится, listen 80 и listen 8880

  • Linux: отслеживайте мое использование интернет-страниц за страницей
  • IPTables и прозрачные прокси
  • Linux «ip route» изменяет адрес источника TCP, но не UDP
  • Пользовательские разрешения TCP-порта
  • Как использовать lsof для идентификации входящих TCP-соединений?
  • Определение того, какой процесс связан с портом
  • Строка iptables, не отбрасывающая пакет из потоков tcp при использовании conntrack и string
  • Привязать непривилегированное приложение к привилегированному порту в Mac OS X
  • Анализ сетевого трафика
  • Почему TCP-соединения IPv4 отображаются как tcp6?
  • Браузер не может связаться с хостом на Solaris 8
  • Linux и Unix - лучшая ОС в мире.