Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
nginx:ограничение_доступа_средствами_nginx [2016/01/31 15:06] mirocownginx:ограничение_доступа_средствами_nginx [2019/09/26 16:07] (текущий) mirocow
Строка 8: Строка 8:
 В конфигурационном файле, в папке, которую хотим закрыть надо только указать файл, где хранятся пароли. В конфигурационном файле, в папке, которую хотим закрыть надо только указать файл, где хранятся пароли.
 Вот два примера для закрытия папки с файлами: Вот два примера для закрытия папки с файлами:
-  location ^~ /files/ {+ 
 +<code nginx>  location ^~ /files/ {
       root   /path/to/server;       root   /path/to/server;
       autoindex    on;       autoindex    on;
Строка 16: Строка 17:
       access_log   /usr/nginx/logs/files.log   download;       access_log   /usr/nginx/logs/files.log   download;
   }   }
 +</code>
 +
 и админовской части c дополнительным ограничением по IP: и админовской части c дополнительным ограничением по IP:
-  location ^~ /admin/ {+<code nginx>  location ^~ /admin/ {
       fastcgi_pass unix:/home/project/server.sock;       fastcgi_pass unix:/home/project/server.sock;
       include  conf/fastcgi.conf;       include  conf/fastcgi.conf;
Строка 27: Строка 30:
       access_log   /usr/nginx/logs/admin.log  main;       access_log   /usr/nginx/logs/admin.log  main;
   }   }
 +</code>
 Добавить пользователя можно с помощью стандартной утилиты от apache: Добавить пользователя можно с помощью стандартной утилиты от apache:
 htpasswd -b passwords NewUser NewPassword htpasswd -b passwords NewUser NewPassword
Строка 35: Строка 39:
 Вести лог неудачных попыток подбора пароля и скриптом раз в минуту проверять лог и заносить IP адреса в iptables Вести лог неудачных попыток подбора пароля и скриптом раз в минуту проверять лог и заносить IP адреса в iptables
 Для первого варианта достаточно создать правила: Для первого варианта достаточно создать правила:
 +
   iptables -A INPUT -p tcp --syn --dport 80 -i eth0 -m state --state NEW   iptables -A INPUT -p tcp --syn --dport 80 -i eth0 -m state --state NEW
               -m recent --name bhttp --set               -m recent --name bhttp --set
Строка 41: Строка 46:
               --hitcount 360 -j DROP               --hitcount 360 -j DROP
   iptables -A INPUT -p tcp --syn --dport 80 -i eth0 -j ACCEPT   iptables -A INPUT -p tcp --syn --dport 80 -i eth0 -j ACCEPT
 +  
 Можно вместо DROP использовать TARPIT, чтобы усложнить жизнь ломателям :)  Можно вместо DROP использовать TARPIT, чтобы усложнить жизнь ломателям :) 
  
 Для второго варианта надо добавить в конфиг: Для второго варианта надо добавить в конфиг:
 +<code nginx>
   location /401.html {   location /401.html {
       root   /usr/nginx;       root   /usr/nginx;
       access_log   /usr/nginx/logs/denied.log  error401;       access_log   /usr/nginx/logs/denied.log  error401;
   }   }
 +</code>
 +
 Формат error401, у меня например такой: Формат error401, у меня например такой:
   log_format error401  '$remote_addr - $remote_user [$time_local] '   log_format error401  '$remote_addr - $remote_user [$time_local] '
                        '$status "$request"';                        '$status "$request"';
 +                       
 Теперь все неправильные попытки будут записываться в отдельный лог, который мы можем обрабатывать по cron-у: Теперь все неправильные попытки будут записываться в отдельный лог, который мы можем обрабатывать по cron-у:
-  \*/1 * * * * root /usr/nginx/parser401.pl >/dev/null 2>&1+<code bash>  \*/1 * * * * root /usr/nginx/parser401.pl >/dev/null 2>&1</code> 
 +  
 например, таким скриптом: parser401.pl Скрипт проверяет лог, и если обнаруживает больше 4-х попыток неправильного набора пароля, блокирует этот IP. например, таким скриптом: parser401.pl Скрипт проверяет лог, и если обнаруживает больше 4-х попыток неправильного набора пароля, блокирует этот IP.
 Есть какие-либо идеи, мысли? Есть какие-либо идеи, мысли?