LINUX.ORG.RU
ФорумAdmin

Nginx allow/deny ip

 


0

1

Братья и сестры, прошу вашей помощи.
Кто на опыте, объясните, как ограничить доступ к урлу по ip, с помощью nginx?
Указываю nginx такие параметры:

location ~ /admin/ {
    allow 195.0.0.1/24;
    deny all;
    }

Директива deny работает. Директива allow не работает. Директивы указываю на сервере, который проксирует запросы.

Кто скажет гуглить - отправляется в ад! Гарантирую это.

Спасибо.

Попробуй
allow 195.0.0.0/24;
рекомендую пользоваться командой nginx -t

Deleted
()
Ответ на: комментарий от MrClon

Запросы отправляются на локальный сервер 10.0.0.10. А должны отправляться на удаленный 10.0.0.3. При этом директивы отрабатывают верно.

Я неверно указываю location для allow/deny. А как его правильно указать, хер его знает:

server {
    # Редирект на HTTPS
    listen      10.0.0.10:80;
    server_name 
    return $server_name$request_uri;
}

server {
    listen       10.0.0.10:443;
    server_name 

    include acme;

    #Securing admin ip
    location ~ /admin/ {
    allow 100.0.0.19;
    deny all;
    }


    # Устанавливать Keep-Alive соединения с посетителями
    keepalive_timeout               60 60;

    # Сжатие данных перед отправкой клиенту. Обратите внимание, из типов здесь присутствует только text/plain, для других данных применяется сжатие на бэкенде на более высоком уровне компрессии, после чего эти данные отправляются в кэш. Сделано для того, чтобы избежать нагрузок на CPU при сжатии динамических документов.
    gzip                on;
    gzip_comp_level     1;
    gzip_min_length     512;
    gzip_buffers        8 64k;
    gzip_types text/plain;
    gzip_proxied        any;

    # Отдавать предпочтение шифрам, заданным на сервере
    ssl_prefer_server_ciphers on;
    # Установка длительности TLS сессии в 2 минуты
    ssl_session_cache shared:TLS:2m;
    ssl_session_timeout 2m;

    # Задание файла, содержащего сертификат сайта и сертификат УЦ
    ssl on;

    ssl_stapling on;
    ssl_stapling_verify on;

    ssl_certificate      /etc/letsencrypt/live//fullchain.pem;
    # Указание закрытого ключа
    ssl_certificate_key  /etc/letsencrypt/live//privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live//chain.pem;

    # Файл с параметрами Диффи-Хеллмана
    ssl_dhparam /etc/letsencrypt/live//dhparam.pem;

    # Поддерживаемые протоколы
    ssl_protocols TLSv1.2 TLSv1.1;

    # Наборы шифров, данный набор включает forward secrecy
    ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;

    # Передача Strict-Transport-Secutiry заголовка
    #add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains';

    location / {
        # Проксирование 
        #proxy_pass      http://10.0.0.2:6081/;
        proxy_pass      http://10.0.0.3:8080/;

        proxy_set_header    Host              $host;
        proxy_set_header    X-Real-IP         $remote_addr;
        proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto https;
        proxy_set_header    X-Forwarded-Port  443;
    }
}

SergeyF
() автор топика
Ответ на: комментарий от SergeyF

Ты ведь в курсе что при твоём текущем конфиге проксирование запросов не будет работать для запросов попадающих в локейшен /admin/? Такие запросы будут обрабатываться локально (в данном случае, видимо, выдавать ошибку). Конфигурация локейшенов не наследуется.

MrClon ★★★★★
()
Ответ на: комментарий от MrClon

Спасибо за ответ.

Нет, не вкурсе. Молод я. Вы верно говорите, что запросы не проксируются для /admin/.

Если я настрою allow/deny в 10.0.0.3, то придется разрешать не только 100.0.0.19, но и 10.0.0.10, и получается, что никакого ограничения нет =(.

Как это обойти? Может вы работали с такой задачей?

SergeyF
() автор топика
Ответ на: комментарий от SergeyF

А других возможных source ip кроме этих двух быть не может? Нарисуйте схему сети, не пойму что там у вас к чему

P.S. закрывать доступ можно не только по IP. Например https://nginx.org/ru/docs/http/ngx_http_auth_basic_module.html

MrClon ★★★★★
()
Ответ на: комментарий от MrClon

Спасибо за ответ.

«ngx_http_auth_basic_module» Сие уже настроено. Хотелось бы вообще отрезать админку от интернет.

Схема сети: 1. 10.0.0.1 - гетвей 2. 10.0.0.10 - Прокси сервер nginx + ssl. Его конфиг выше. 3. 10.0.0.3 - Сервер веб приложения. 4. 10.0.0.* - Серверы приложений.

SergeyF
() автор топика
Ответ на: комментарий от MrClon

Верно. Отрезать админку от всех ip интернет кроме одного, моего. Противоречия тут нет.
Покрутил конфиг:

 location / {
        # Проксирование
        #proxy_pass      http://10.0.0.2:6081/;
        proxy_pass      http://10.0.0.3:8080/;

        proxy_set_header    Host              $host;
        proxy_set_header    X-Real-IP         $remote_addr;
        proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto https;
        proxy_set_header    X-Forwarded-Port  443;

    location ~ /admin/ {
        allow 195.226.214.20;
        deny all;
        try_files $uri $uri/ /index.php;
        }

    location ~ /index.php/?admin/ {
        allow 195.226.214.20;
        deny all;
        try_files $uri $uri/ /index.php;
        }
  }
Правила deny/allow работают. Но админку не открывает, редиректит на главную страницу.

SergeyF
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.