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

Как предотвратить доступ пользователя к веб-сайту, использующему server.domain.com, но разрешенному через vip.domain.com?

Мы настраиваем наш веб-сайт для работы на игровой платформе. Он работает по протоколу http на 9000. Мы можем получить доступ к сайту, перейдя по ссылке http://servername.domain.com:9000 где servername - имя веб-сервера.

Мы также настраиваем наш балансировщик нагрузки F5 для перенаправления всего трафика с http на https и трафика с порта 443 на 9000. Мы настраиваем доменное имя для F5, vip.domain.com, которое подключается к этому веб-серверу на бэкэнде. Мы удалили другие веб-серверы из пула для отладки, поэтому в настоящее время в пуле только 1 сервер.

Когда я захожу на сайт в Chrome, если мы идем по http://vip.domain.com, F5 перенаправляет нас на https://vip.domain.com и мы получаем зеленый замок с надписью "Secure".

Когда я вхожу http://server.domain.com:9000, там написано "Not Secure", и мы не получаем замок.

Кто-то провел сканирование безопасности и сказал, что мы отправляем вещи в открытом виде, в незашифрованном виде. Мы провели все наши испытания и сказали всем перейти на http://vip.domain.com, но я предполагаю, что сканирование использовало http://servername.domain.com:9000.

Есть ли способ сделать http://servername.domain.com:9000 не работает, но все же оставьте порт 9000 открытым для http://vip.domain.com? У нас есть доступ для внесения изменений как в сервер, так и в VIP, если это необходимо.

Это просто сделать с помощью iRule:

when HTTP_REQUEST {
  if { [HTTP::host] equals "servername.domain.com" } {
    # send a TCP reset
    reject

    # alternatively, redirect somewhere else
    # HTTP::redirect "http://www.somedomainyoufindentertaining.com"
  }     
}

(Почти дословно из https://devcentral.f5.com/questions/block-domain-redirect)

Просто укажите это в виртуальном сервере, обрабатывающем трафик порта 9000. Вы также можете проявить более творческий подход к условию, определяющему, отклонять ли соединение или нет.

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

простые правила:

iptables -A INPUT -p tcp --dport 9000 -m comment --comment 'allow LB traffic' -s LB.IP.ADDR.HERE -j ACCEPT
iptables -A INPUT -p tcp --dport 9000 -m comment --comment 'drop all other requests to 9000' -j DROP

Они будут:

  • разрешить порт 9000 с машины LB (вы можете добавить больше правил для большего количества LB
  • заблокировать другой трафик на порт 9000

Еще лучше было бы определить в вашем приложении, какой домен используется в соединении, и выполнить перенаправление на безопасный адрес, если используется неправильный. Я не уверен насчет вашего фреймворка / приложения, но большинство из них предоставляют такие механизмы.