Almost Over

Запретить прямой доступ к файлам через NGINX и/или Apache

Запретить прямой доступ к файлам через NGINX и/или Apache

Наверное, многие вебмастера пользуются бекапером баз данных Sypex Dumper’ом. И, полагаю, большинство делают авто-бекапы через cron. И дело в том, что в Sypex’е бекапы формируются названиями типа %job-name%_%YYYY%-%MM%-%DD%_%hh%-%mm%-%ss%.sql.gz. А при прямом доступе по URL %full_sxd_path%/backup/%backup_name.gz% архив бекапа попросту скачивается безо всяких авторизаций. Поэтому, зная лишь %job-name%, в большинстве случаев можно путём перебора найти постоянное время автоматических резервных копий БД. Следовательно, любой смекалистый злоумышленник может получить постоянный доступ к любой вашей базе данных на сервере, что не есть хорошо.

Ситуация фиксится следующими вариантами:

  1. Запретить доступ через NGINX.
  2. Запретить доступ через Apache.

Запрещаем доступ через NGINX

$ nano /etc/nginx/sites/%site.com%

Находим строчку location ~* и добавляем нужные нам расширения.
В нашем случае это gz|bz2|sql.
Заметим, что именно в этом локейшене и происходит прямая отдача указанных файлов NGINX’ом, не затрагивая при этом Apache/PHP.

Далее, нужно прописать пред-авторизацию для ограничения доступа к этим расширениям. Если не знаете, как создать файл htpasswd для NGINX, читайте статью Сгенерировать htpasswd для NGINX или Apache.

Сразу же после строчки location ~* ниже прописываем:

1
2
auth_basic "Pre-Auth";
auth_basic_user_file /var/www/htpasswd;

И, естественно, перезаряжаем NGINX:

$ service nginx reload

Запрещаем доступ через Apache

Убираем расширения gz|bz2|sql из location ~* в файле:

$ nano /etc/nginx/sites/%site.com%
$ service nginx reload

Редактируем .htaccess для ограничения доступа к файлам в этом каталоге и самому каталогу:

$ nano /var/www/vhosts/%site.com%/sxd/backup/.htaccess
1
2
3
4
5
6
AddType application/octetstream .gz .bz2 .sql

<Files ~ "\.(php|log|rtl|stp|gz|bz2|sql)$">
order allow,deny
deny from all
</Files>