Ограничение доступа с помощью .htaccess

В случае использования для работы сайтов веб-сервера Apache есть возможность ограничения доступа с помощью файла .htaccess, действие которого распространяется либо на одну директорию, либо на все вложенные поддиректории. Существует несколько видов ограничения доступа, которые могут пригодиться в разных случаях. Рассмотрим эти возможные варианты:

Ограничение по IP-адресу

Конструкция подобного ограничения очень проста:

order allow,deny
deny from 1.1.1.1
deny from 2a01:230::6d0a:8406:c4e4:9e19
deny from 10.10
deny from 192.168.0.0/24
deny from domain.dom
allow from all

Системные требования для работы этих правил: веб-сервер Apache 2.2.x с подключенным модулем mod_authz_host.

В этом примере я привел все возможные вариации ограничения доступа. И ниже разберем каждую строку в отдельности.

Первая строка задает логику работы последующих правил. В каком порядке будут выполняться блокирующие и разрешающие правила.

Вторая и третья строки блокируют доступ по конкретным IP-адресам (ipv4 и ipv6 соответственно).

Четвертая строка показывает, что можно указывать частично IP-адрес, и в таком случае (как указано в примере) будет обрабатываться как подсеть /16.

Пятая строка — можно блокировать целыми сетями и подсетями, указывая диапазон.

Для работы вариантов блокировки, как в шестой строке, потребуется включить параметр HostnameLookups.

И, наконец, последняя строка allow from all говорит о том, что всем остальным доступ разрешен.

Хотя Apache 2.2.x уже устарел, ог до сих пор часто используется. Для Apache 2.4.x правила будут другими:

<RequireAll>
Require all granted
Require not ip 1.1.1.1
Require not ip 2a01:230::6d0a:8406:c4e4:9e19
Require not ip 10.10
Require not ip 192.168.0.0/24
Require not host domain.dom
</RequireAll>

Первая и последняя строки — директивы, используются для выделения группы правил.

Вторая строка — аналог блока order allow,deny + allow from all в Apache 2.2, задает логику работы правил.

Строки 3-6 — аналогичны строкам 2-5 правил Apache 2.2, а строка 7 — аналог строки 6 в Apache 2.2.

Ограничение по паролю

Рассмотрим простейший вариант ограничения доступа с авторизацией по логину и паролю:

AuthType Basic
AuthName "Доступ ограничен паролем"
AuthUserFile "/path/to/.htpasswd"

Системные требования для работы такой конструкции: веб-сервер Apache 2.2.x или 2.4.x с подключенными модулями auth_basic, authn_file.

Генерация пароля

Создание пары «логин-пароль» происходит с непосредственным участием приложения htpasswd, которая входит в дистрибутивную поставку Apache. При запуске без параметров данная утилита выведет справку, перевод которой я располагаю ниже:

Использование:
        htpasswd [-cmdpsD] passwordfile username
        htpasswd -b[cmdpsD] passwordfile username password

        htpasswd -n[mdps] username
        htpasswd -nb[mdps] username password

 -c  Создать новый файл.
 -n  Не обновлять файл, вывести результат на экран.
 -m  Зашифровать пароль с помощью [[MD5]].
 -d  Зашифровать пароль с помощью [[CRYPT]] (по умолчанию).
 -p  Не шифровать пароль (открытый текст).
 -s  Зашифровать пароль с помощью [[SHA]].
 -b  Указать пароль в параметре командной строки.
 -D  Удалить указанного пользователя.
На [[Windows]], [[NetWare]] и [[TPF]] системах флаг '-m' используется по умолчанию.
На всех остальных системах флаг '-p' может не работать.

 

Примеры работы htpasswd

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

  • htpasswd -bcm /path/to/.htpasswd sampleuser samplepass

Adding password for user sampleuser


Результатом будет файл .htpasswd со строкой:

sampleuser:$apr1$i5Kx715D$qkWbaZLztXohMGOdfCUy5/


Для того, чтобы добавить пользователя к уже существующим в файл, выполните команду

  • htpasswd -bm /path/to/.htpasswd sampleuser1 samplepass1

Updating password for user sampleuser1


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

  • htpasswd -D /path/to/.htpasswd sampleuser2

Deleting password for user sampleuser2

Шпаргалки

Еще некоторые примеры, которые могут пригодиться при работе с .htaccess.

Запретить все в Apache 2.2.x:

Order deny,allow
Deny from all

Запретить все в Apache 2.4.x:

Require all denied

Блокировка ботов в Apache 2.2.x:

SetEnvIfNoCase User-Agent «DotBot» bad_bot
Deny from env=bad_bot

Блокировка ботов в Apache 2.4.x:

<If «%{HTTP_USER_AGENT} =~ m#DotBot#i»>
Require expr %{HTTP_USER_AGENT} != ‘DotBot’

# DotBot — один из примеров, таких ботов может быть много.

Разрешить доступ к определенному файлу с определенного IP в Apache 2.2.x:

<Files путь_к_файлу>
Order Deny,Allow
Deny from all
Allow from 1.1.1.1
</Files>

Разрешить доступ к определенному файлу с определенного IP в Apache 2.4.x:

<Files путь_к_файлу>
Require ip 1.1.1.1
</Files>

Полезные ссылки

Этот материал был полезен?