Quantcast
Channel: Библиотека знаний
Viewing all articles
Browse latest Browse all 1318

Ограничение доступа средствами Nginx

$
0
0

Ограничение доступа средствами Nginx

Небольшая заметка о том, как средствами Nginx-а закрыть доступ к файлам/папке по паролю. В nginx-е это решение не менее элегантно, чем в apache, а может и еще лучше, кому как нравится.

В конфигурационном файле, в папке, которую хотим закрыть надо только указать файл, где хранятся пароли. Вот два примера для закрытия папки с файлами:

location ^~ /files/ {
    root   /path/to/server;
    autoindex    on;
    autoindex_exact_size  off;
    auth_basic "Hello, please login";
    auth_basic_user_file /usr/nginx/passwords;
    access_log   /usr/nginx/logs/files.log   download;
}

и админовской части c дополнительным ограничением по IP:

location ^~ /admin/ {
    fastcgi_pass unix:/home/project/server.sock;
    include  conf/fastcgi.conf;
    allow 11.11.0.0/16;
    allow 22.22.22.22;
    deny all;
    auth_basic "Hello, Admin, please login";
    auth_basic_user_file /usr/nginx/adminpassword;
    access_log   /usr/nginx/logs/admin.log  main;
}

Добавить пользователя можно с помощью стандартной утилиты от apache: htpasswd -b passwords NewUser NewPassword В файле запись с зашифрованным паролем имеет вид: NewUser:P47ghZ4kloG78: Your Can Comment Here Защиту от перебора паролей можно организовать одновременно двумя методами, основанными на использовании iptables: Блокирование IP на время, если количество запросов в секунду превышает какое-либо разумное количество Вести лог неудачных попыток подбора пароля и скриптом раз в минуту проверять лог и заносить IP адреса в iptables Для первого варианта достаточно создать правила:

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

Можно вместо DROP использовать TARPIT, чтобы усложнить жизнь ломателям :)

Для второго варианта надо добавить в конфиг:

location /401.html {
    root   /usr/nginx;
    access_log   /usr/nginx/logs/denied.log  error401;
}

Формат error401, у меня например такой:

log_format error401  '$remote_addr - $remote_user [$time_local] '
                     '$status "$request"';

Теперь все неправильные попытки будут записываться в отдельный лог, который мы можем обрабатывать по cron-у:

\*/1 * * * * root /usr/nginx/parser401.pl >/dev/null 2>&1

например, таким скриптом: parser401.pl Скрипт проверяет лог, и если обнаруживает больше 4-х попыток неправильного набора пароля, блокирует этот IP. Есть какие-либо идеи, мысли?


Viewing all articles
Browse latest Browse all 1318

Trending Articles


FORECLOSURE OF REAL ESTATE MORTGAGE


FORTUITOUS EVENT


Pokemon para colorear


Sapos para colorear


Smile Quotes


Long Distance Relationship Tagalog Love Quotes


INUMAN QUOTES


RE: Mutton Pies (frankie241)


Hato lada ym dei namar ka jingpyrshah jong U JJM Nichols Roy (Bah Joy) ngin...


EASY COME, EASY GO


UPDATE SC IDOL: TWO BECOME ONE


KASAMBAHAY BILL IN THE HOUSE


Girasoles para colorear


Presence Quotes – Positive Quotes


Maganda Quotes – tagalog Quotes – Inggit Quotes


Love with Heart Breaking Quotes


Re:Mutton Pies (lleechef)


Ka longiing longsem kaba skhem bad kaba khlain ka pynlong kein ia ka...


Vimeo 10.7.0 by Vimeo.com, Inc.


Vimeo 10.7.1 by Vimeo.com, Inc.