Быстрое скачивание файлов по HTTP - защита от халявы

Тема в разделе "Статьи и мануалы", создана пользователем altiu, 27 янв 2012.

  1. altiu

    altiu

    Сообщения:
    96
    Симпатии:
    58
    Сейчас трудно встретить публичный сервер на котором не настроена быстрая закачка файлов используя http протокол. Многие серво-держатели задумывались над вопросом о том , как защитить свой веб сервер или арендуемый хост от чужаков.
    Для тех кто не понял , чужаки - это те кто узнав ваш адрес загрузки , который прописан в sv_downloadurl , подключают к вам свой сервер , не тратя на это ни копейки затрат.
    В этом мануале я постараюсь вам подробно изложить информацию о том как защитить от этого.
    Немного теории - буду говорить обычными русскими словами , ибо обычные термины многие не поймут. И так представим , что мы имеем на своём хосте некую папку server , в которой находится папка cstrike ( пример буду приводить для CSS ) в которой и находятся ресурсы для быстрой закачки. Соотвественно полный путь для ваших ресурсов будет таким "http://www.mydomain.com/server/cstrike" и соответственно этот путь указан в переменной sv_douloadurl вашего сервера.
    Суть защиты такова - мы посадим так сказать охранника в папку server , который будет проверять пропуска и пропускать или не пропускать в папку cstrike. Пропускать он будет только тех клиентов , которые пришли именно с вашего сервера , оставльных он будет отсылать. И так , реализуем это.
    Существуют 2 веб сервера , которые наиболее часто используются в хостингах . Это Apache и nginx

    Настройка для Apache

    Если у вас всего одна папка для использования быстрой закачки и ничем больше не используется (например сайт ) , то вам просто необходимо найти в корне вашего хоста
    файл .htaccess и работать с ним . Если у вас несколько папок (например server_gg , server_dm и так далее ) , то вам необходимо из корня сайта скопировать файл .htaccess в каждую папку и работать только с ними .
    Открываем файл и в конце файла добавляем строки :

    RewriteEngine On

    RewriteCond %{HTTP_REFERER} !^hl2://х.х.х.х:* [NC]
    RewriteRule .* - [F]


    , где х.х.х.х - адрес вашего сервера.

    Сохраняем файл. Теперь просмотреть содержимое папки server невозможно будет даже с броузера , но клиенты пришедшие с вашего сервера смогут спокойно брать оттуда ресурсы.

    Настройка для nginx

    Процедура такая же как и в инструкции для Apache , но там можно явно указать вашу папку server в локации. Вставьте эти строки в корневом файле :

    location /server/ {
    valid_referers none blocked hl2://x.x.x.x;

    if ($invalid_referer) {
    return 403;
    }
    }


    , где server - папка с ресурсами вашего сервера (относительно корня хоста).
    х.х.х.х - адрес вашего сервера.

    Вот и всё ! С уважением Алексей !
     
    Последнее редактирование: 2 фев 2012
    Z-RAY-Z, zavmag, Besenok_Kid и 6 другим нравится это.
  2. Alcone

    Alcone optizone.ru

    Сообщения:
    319
    Симпатии:
    72
    Fenomen нравится это.
  3. altiu

    altiu

    Сообщения:
    96
    Симпатии:
    58
    Я уже в той теме писал про этот плагин. Он только скрывает значение команды , которое вычислить с помощью сниффера не составит труда. А второе то , что если халявщик знает твой хост , то ты уже никуда не денешся.
     
  4. LEII4A

    LEII4A

    Сообщения:
    631
    Симпатии:
    116
    altiu,
    что то я туплю, помоги пожалуйста
    PHP:
    RewriteEngine On

    RewriteCond 
    %{HTTP_REFERER} !^hl2://0.0.0.0:* [NC]
    RewriteRule .* - [F]
    нужно указывать ip и порт своего игрового сервера для каждой папки с fastdl, если много серверов?
    например
    PHP:
    RewriteEngine On

    RewriteCond 
    %{HTTP_REFERER} !^hl2://1.1.1.1:27017* [NC]
    RewriteRule .* - [F]
    ну и положить в папку www.ru/fastdl/ob/pub
    PHP:
    RewriteEngine On

    RewriteCond 
    %{HTTP_REFERER} !^hl2://1.1.1.1:27019* [NC]
    RewriteRule .* - [F]
    для www.ru/fastdl/ob/dm
    так?
     
  5. altiu

    altiu

    Сообщения:
    96
    Симпатии:
    58
    У тебя в корне хоста должен быть файл .htaccess , если конечно у тебя хост на Аппаче. Ты возми и раскопируй его по папкам ( в твоём случае папки dm и pub) . Теперь в каждом файле .htaccess , которые у тебя в этих папках добавь текст :

    RewriteEngine On

    RewriteCond %{HTTP_REFERER} !^hl2://1.1.1.1:* [NC]
    RewriteRule .* - [F]

    Порт указывать не надо , там стоит уже * , что означает все порты.
     
    Последнее редактирование: 27 янв 2012
  6. LEII4A

    LEII4A

    Сообщения:
    631
    Симпатии:
    116
    altiu,
    хм... что то не выходит, с браузера в папку пускает, или мой ip есть hl2://1.1.1.1:* то должно пускать?
    ОС Debian 6.0 Веб-сервер apache, и игровые сервера и веб сервер на одной машине.
    путь к фастдл имеет такой вид
    /var/www/fastdl/ob/2000only/cstrike путь к файлу - /var/www/fastdl/ob/2000only/.htaccess для одного сервера
    /var/www/fastdl/ob/pub/cstrike путь к файлу - /var/www/pub/ob/2000only/.htaccess для другого
     
    Последнее редактирование: 27 янв 2012
  7. altiu

    altiu

    Сообщения:
    96
    Симпатии:
    58
    LEII4A, для второго сервера путь : /var/www/fastdl/ob/pub/.htaccess

    Так , как серверы и аппач на одной машине , попробуй прописать

    RewriteEngine On

    RewriteCond %{HTTP_REFERER} !^hl2://127.0.0.1:* [NC]
    RewriteRule .* - [F]

    Хотя может и не сработать , так как игроки приходят с внешним реферальным адресом.
    По идее с браузера пускать не должно , так как RewriteRule .* - [F] запрещает остальным доступ.
     
  8. LEII4A

    LEII4A

    Сообщения:
    631
    Симпатии:
    116
    altiu,
    что то не вышло все равно, как будто этого файла и нет)) видать не судьба или в моих руках дело... потом может еще покалупаю... =)
     
  9. LEII4A

    LEII4A

    Сообщения:
    631
    Симпатии:
    116
    поколупал, на хостинге эта штука прокатила, а у меня на домашнем пк нет... хмм наверно дело в конфигурации apache
    altiu, не знаешь, может нужно какую-нибуть переменную изменить, чтобы сервер мог использовать .htaccess?
    P.S. у модеров прошу прощения за дубляж, думал добавить в прошлое сообщение, мол я его дополнил...
     
    Последнее редактирование: 3 фев 2012
  10. altiu

    altiu

    Сообщения:
    96
    Симпатии:
    58
    LEII4A, дак какой у тебя добашний http сервер ? appache ? у тя скорее всего nginx . Если аппач , то сам создай этот файл . Модуль RewriteEngine присутствует во всех последних версиях апппача.
     
  11. LEII4A

    LEII4A

    Сообщения:
    631
    Симпатии:
    116
    altiu, эмм... я же писал
    Версия apache 2.2.16, модуль активен

    [​IMG]

    так я тоже делал, перекинул его на халявный хост hostinger.ru (не реклама) там сработало, папку видно не было... на домашнем фиг =( там по всем папкам раскидывать не обязательно, кинул в одну fastdl и остальные которые в ней видно не будит, помимо самой fastdl
     
  12. altiu

    altiu

    Сообщения:
    96
    Симпатии:
    58
    LEII4A, в файле конфигурации апача httpd.conf попробуй раскоментировать строку :

    LoadModule rewrite_module modules/mod_rewrite.so

    Видимо у тебя модуль RewriteEngine в самом аппаче отключен.
     
  13. LEII4A

    LEII4A

    Сообщения:
    631
    Симпатии:
    116
    altiu,
    посмотри пред. сообщение, кстати httpd.conf в /etc/apache2 пустой файл
     
  14. altiu

    altiu

    Сообщения:
    96
    Симпатии:
    58
    Тут уж извини , у меня нет домашнего веба чтобы проверить. По идее он должен работать . А домен у тебя имеется на дом. вебе ? Ты адрес сервера прописываешь внешку ? Пиши свой скайп , попробую помочь
     
  15. LEII4A

    LEII4A

    Сообщения:
    631
    Симпатии:
    116
    altiu,
    скайп мой ник тут leii4a , спасибо за отзывчивость, буду ждать

    В общем справился, если у кого то не работает .htaccess, хотя модуль подгружен, делаем так, может поможет кому-нибудь еще:
     
    Последнее редактирование: 2 фев 2012
  16. mazil0

    mazil0

    Сообщения:
    84
    Симпатии:
    5
    И так у меня иная ситуация, у меня одна папка, но с неё качают клиенты с разных моих серверов, тоесть ip у каждого сервера разный, как мне сделать запрет на все кроме моих.

    Вот так, я правильно понел?

    Например нужно разрешить только моим 5 серверам, то нужно сделать так? правильно?
    Да и если у меня например на одной машине стоит 3 сервера на портах 27015;27016 и 27017 то только нужно написать ip? или как?

     
  17. altiu

    altiu

    Сообщения:
    96
    Симпатии:
    58
    Да всё правильно .

    Проcто пишешь ip . * ,которая там стоит заменяет все порты ..
     
  18. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    Странно.. Использую Nginx...
    В корне есть папка loads - ее можно смотреть, автоиндекс включен. в этой папке есть папка cstrike - ее тоже раньше можно было смотреть, теперь пишет 403 Forbidden, но если вручную прописать имя файла, то скачать можно... Что не так?
     
  19. Andrey

    Andrey Администратор

    Сообщения:
    3.234
    Симпатии:
    3.507
    KorDen, в nginx другой синтаксис, не?
     
  20. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    А я что, запихивал конфиг от апача что ли?