Ограничение доступа к сайту через 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.