Блокировать прямой IP-доступ с помощью nginx - PullRequest
0 голосов
/ 29 января 2020

У меня есть следующие nginx конфигурации

if ($host != mydomain.com) {
 return 403;
}

Когда я нажимаю на ссылку http://127.0.0.1/test/test2/index.php (из POSTMAN), я получаю 403. Отлично. Но добавив Host -> mydomain.com в Headers, я получаю 200.

Когда я добавил add_header Host "$host"; в nginx конфигурациях, я заметил в ответ, что nginx имеет mydomain.com в своей переменной хоста. Я знаю, что намеренно упоминаю заголовок Host в http-запросе, который переопределяет 127.0.0.1 согласно nginx документации.

Но таким образом злоумышленник может отправлять запросы напрямую на веб-сервер, минуя Cloudflare WAF. так какое решение блокировать такие запросы от nginx?

Я испробовал следующие решения, но у меня не получилось.
https://www.digitalocean.com/community/questions/how-to-block-access-using-the-server-ip-in-nginx https://blog.knoldus.com/nginx-disable-direct-access-via-http-and-https-to-a-website-using-ip/

1 Ответ

0 голосов
/ 29 января 2020

Когда я нажимаю на ссылку http://127.0.0.1/test/test2/index.php (из POSTMAN), я получаю 403. Отлично. Но добавив Host -> mydomain.com в Headers, я получаю 200.

Если я правильно понимаю, вы, похоже, думаете, что добавление заголовка Host в вашем запросе - это как-то обходной путь. И это не ... это то, как имена хостов работают в HTTP.

Сервер волшебным образом не знает, что вы ввели http://domain.tld/test/ в адресную строку браузера. Ваш браузер выполняет поиск DNS для domain.tld и устанавливает TCP-соединение с разрешенным IP-адресом; Затем он отправляет заголовки, откуда сервер получает информацию:

GET /test/ HTTP/1.1
Host: domain.tld

Это единственный способ, которым сервер знает, что вы запросили http://domain.tld/test/.

...