Ограничение доступа к сайту через Nginx

Ограничение доступа к сайту через Nginx

При работе с веб-сервером важно контролировать, кто имеет доступ к различным ресурсам сайта. Nginx предоставляет гибкие инструменты для ограничения доступа по IP, настройке аутентификации и защите конфиденциальных файлов. В этой статье мы рассмотрим основные способы реализации таких ограничений.

Ограничение доступа к файлам

Чтобы закрыть доступ к файлам, которые могут вызывать повышенный интерес:

        location ~ /.svn/ {
           deny all;
        }

Разграничение доступа по IP

Вы можете разрешать или запрещать доступ к файлам с определённых IP-адресов, используя директивы allow и deny:

  location /server-status {
      allow 111.111.111.111;
      allow 11.11.11.11;
      deny all;
  }

Защита с логином и паролем

Для более гибкой защиты можно использовать директивы auth\basic и auth\basic\user\file. Пользователю будет необходимо ввести логин и пароль:

  location /admin/ {
      auth_basic "Enter password to access";
      auth_basic_user_file /etc/nginx/basic.auth;
  }

Комбинированная защита

Вы можете сочетать IP-фильтр и базовую аутентификацию:

  location /admin/ {
      satisfy any;
      allow 111.111.111.111;
      allow 11.11.11.11;
      deny  all;
 
      auth_basic "Enter password to access";
      auth_basic_user_file /etc/nginx/basic.auth;
  }

Защита от запросов к несуществующим файлам

        location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
           try_files $uri =404;
        }

Перезапуск Nginx

После внесения изменений необходимо перезапустить Nginx одной из команд:

systemctl reload nginx
service nginx reload

Перенаправление по IP

В зависимости от IP-адреса Nginx может выполнять перенаправление:

location / {
    
    if ($remote_addr != 111.111.111.111) {
        return 301 https://$host$request_uri;
    }
    
}

Примечание

В этом примере все посетители будут перенаправлены на https://$host$request_uri, кроме запроса с IP-адреса 111.111.111.111.


Защита от перебора паролей с помощью iptables

Вы можете блокировать IP на время, если количество запросов превышает установленный порог:

iptables -A INPUT -p tcp --syn --dport 80 -i eth0 -m state --state NEW \
            -m recent --name bhttp --set
iptables -A INPUT -p tcp --syn --dport 80 -i eth0 -m state --state NEW \
            -m recent --name bhttp --update --seconds 120 \
            --hitcount 360 -j DROP
iptables -A INPUT -p tcp --syn --dport 80 -i eth0 -j ACCEPT

Примечание

На VPS и выделенных серверах вы можете полностью управлять конфигурацией NGINX. Это позволяет гибко настраивать доступ к файлам, реализовывать IP-фильтры, защиту паролем и блокировку перебора паролей с помощью iptables.

Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам