Почему я не должен запускать программное обеспечение, не являющееся веб-сервером, через порт 80? - PullRequest
5 голосов
/ 18 декабря 2008

Учитывая, что в мире так много драконовских брандмауэров, есть ли причина, по которым я не должен запускать серверное программное обеспечение на порту 80, чтобы гарантировать максимально возможную доступность? Кажется, что наиболее распространенное исключение брандмауэра - разрешить исходящие соединения через порт 80. Я понимаю, что любой вид проверки пакетов по-прежнему блокирует мой не HTTP-трафик, но в этом случае я уверен, что брандмауэр не будет иметь никаких другие открытые исходящие порты в любом случае.

Если на сервере уже имеется веб-сервер на порту 80, можно ли использовать виртуальный хост, прослушивающий порт 80 (например, myDomain.com:80 и myApp.myDomain.com:80 на та же машина)?

Ответы [ 5 ]

7 голосов
/ 18 декабря 2008

Если вам нужно сделать это, почему бы просто не обернуть код вашей сети с помощью интерфейса SOAP или HTTPHandler?

Тогда ваши пакеты будут соответствовать HTTP, вы пройдете через брандмауэры, и все будут счастливы?

Это будет намного проще, чем решить все проблемы установки и эксплуатации, которые вы получите с помощью многоцелевого порта 80.

2 голосов
/ 18 декабря 2008

Я могу думать о двух причинах: во-первых, если вы делаете это, чтобы обойти брандмауэр компании, вы будете нарушать политику безопасности, а во-вторых, вы будете использовать зарезервированный порт для протокола, для которого он не зарегистрирован, который может вызвать значительную путаницу у клиентов, пытающихся взаимодействовать с вашей системой (например, Google, например), и значительную головную боль для вашего приложения, когда они это делают.

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

1 голос
/ 18 декабря 2008

Невозможно сделать виртуальный хостинг для других доменов, прослушивающих порт 80. Только один процесс может прослушивать порт. Виртуальный хостинг происходит на уровне приложений на основе заголовков HTTP.

Другая проблема, с которой вы можете столкнуться - это прокси-серверы. Не тот тип, который настраивает пользователь, а автоматические прокси от компаний или интернет-провайдеров. Они не поймут протокол вашего приложения и, скорее всего, потерпят неудачу.

Наконец, если ваше приложение работает в варианте Unix / Linux, для порта 80 потребуются права root.

1 голос
/ 18 декабря 2008

Чтобы ответить на ваш второй вопрос "возможно ли использовать какой-то виртуальный хост, прослушивающий порт 80":

Да, есть, и он называется виртуальным хостингом и обрабатывается большинством современных веб-серверов. Но тогда все запросы от вашего приложения должны начинаться с протокола HTTP 1.1, где указан хост. Ваше приложение, вероятно, должно быть приложением CGI. Но это, вероятно, не то, что вы хотите.

Другой способ - позволить вашему приложению контролировать порт 80 и перенаправлять все http-запросы на веб-сервер. Это грязно, и если ваше приложение не работает, веб-сервер тоже.

Решение состоит в том, чтобы иметь более одного IP-адреса на вашем сервере (вы можете привязать более одного ip-адреса на один ник). Затем вы можете привязать mydomain.com:80 по адресу 1 к веб-серверу и myapp.mydomain.com по адресу 2 к приложению, но они все еще находятся на одном сервере.

И чтобы ответить на ваш первый вопрос: «есть ли причина, по которой я не должен запускать серверное программное обеспечение на порту 80»: Да, это плохая практика. Ожидайте получить много http-запросов от автоматического сканирования. Вы можете ответить на них с правильным http-заголовком или игнорировать их.

0 голосов
/ 18 декабря 2008

Я признаюсь, что работал с брандмауэром Draconian, когда ssh-сервер прослушивал 80-й порт дома и использовал ssh-туннелирование для предоставления доступа к другим серверам и службам . Спешу добавить, что я сделал это с благословения людей, управляющих брандмауэром - мы все согласились с тем, что это лучшее решение для рассматриваемых проблем.

Спешу добавить, что эта тактика делает порт 80 бесполезным по прямому назначению , что меня устраивало, так как в любом случае это была моя личная рабочая станция. Если у вас есть только один компьютер в вашем домене, это будет проблемой. Но имея машину, которую я мог бы посвятить обслуживанию ssh с порта 80, создал никаких проблем с установкой или работой . Я просто запустил /etc/init.d/apache stop, а затем запустил sshd, чтобы прослушать порт 80. Тогда я был готов пойти на те несколько месяцев, которые мне понадобились для этого.

Автоматические сканеры, которые приходят, стуча в порт 80 моей личной рабочей станции, могут зависнуть: -)

...