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

Как отклонить запросы, содержащие определенный заголовок и не поступающие с IP-адресов из белого списка в nginx?

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

Что-то вроде:

if ($http_xsuperadmintoken) {
  allow 192.168.1.0/24;
  allow 10.1.2.3;
  deny all;
}

но похоже, что мне не разрешено помещать директиву allow внутри блока if:

# nginx -t                                                                                                    
nginx: [emerg] "allow" directive is not allowed here in /etc/nginx/sites-  enabled/default:44

Я не нашел для этого обходного пути.

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

location / {
    error_page 412 = @checkip;
    recursive_error_pages on;

    if ($something) {
        return 412;
    }

}

location @checkip {
    allow 192.168.1.0/24;
    allow 10.1.2.3;
    deny all;
    }

Это проверяет наличие $ something, и если возвращается ошибка 412, это затем обрабатывается блоком @checkip, где мы затем проверяем IP-адрес.