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

altiu

Участник
Сообщения
95
Реакции
57
Сейчас трудно встретить публичный сервер на котором не настроена быстрая закачка файлов используя 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 - папка с ресурсами вашего сервера (относительно корня хоста).
х.х.х.х - адрес вашего сервера.

В общем ещё кое что , если у кого то не работает .htaccess, хотя модуль подгружен, делаем так :

Для того что бы работал .htaccess необходимо в /etc/apache2/sites-available/default изменить AllowOverride None на All в директориях в которых должен работать .htaccess и что важно во всех вложенных тоже, а в основном файле конфигурации /etc/apache2/apache2.conf должна быть запись AccessFileName .htaccess

Вот и всё ! С уважением Алексей !
 
Последнее редактирование:

altiu

Участник
Сообщения
95
Реакции
57
Можно так же применить плагин на сервер что бы исключить узнавание sv_downloadurl
http://hlmod.ru/forum/showpost.php?p=40447&postcount=1

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

LEII4A

Участник
Сообщения
741
Реакции
135
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
так?
 

altiu

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

RewriteEngine On

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

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

LEII4A

Участник
Сообщения
741
Реакции
135
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 для другого
 
Последнее редактирование:

altiu

Участник
Сообщения
95
Реакции
57
LEII4A, для второго сервера путь : /var/www/fastdl/ob/pub/.htaccess

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

RewriteEngine On

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

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

LEII4A

Участник
Сообщения
741
Реакции
135
altiu,
что то не вышло все равно, как будто этого файла и нет)) видать не судьба или в моих руках дело... потом может еще покалупаю... =)
 

LEII4A

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

altiu

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

LEII4A

Участник
Сообщения
741
Реакции
135
altiu, эмм... я же писал
ОС Debian 6.0 Веб-сервер apache, и игровые сервера и веб сервер на одной машине
Версия apache 2.2.16, модуль активен



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

altiu

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

LoadModule rewrite_module modules/mod_rewrite.so

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

LEII4A

Участник
Сообщения
741
Реакции
135
altiu,
посмотри пред. сообщение, кстати httpd.conf в /etc/apache2 пустой файл
 

altiu

Участник
Сообщения
95
Реакции
57
altiu,
посмотри пред. сообщение, кстати httpd.conf в /etc/apache2 пустой файл

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

LEII4A

Участник
Сообщения
741
Реакции
135
altiu,
скайп мой ник тут leii4a , спасибо за отзывчивость, буду ждать

В общем справился, если у кого то не работает .htaccess, хотя модуль подгружен, делаем так, может поможет кому-нибудь еще:
Для того что бы работал .htaccess необходимо в /etc/apache2/sites-available/default изменить AllowOverride None на All в директориях в которых должен работать .htaccess и что важно во всех вложенных тоже, а в основном файле конфигурации /etc/apache2/apache2.conf должна быть запись AccessFileName .htaccess
 
Последнее редактирование:

mazil0

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

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

Например нужно разрешить только моим 5 серверам, то нужно сделать так? правильно?
RewriteEngine On

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

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

RewriteCond %{HTTP_REFERER} !^hl2://127.0.0.6:* [NC]
 

altiu

Участник
Сообщения
95
Реакции
57
Да всё правильно .

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

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
Странно.. Использую Nginx...
В корне есть папка loads - ее можно смотреть, автоиндекс включен. в этой папке есть папка cstrike - ее тоже раньше можно было смотреть, теперь пишет 403 Forbidden, но если вручную прописать имя файла, то скачать можно... Что не так?
 

Andrey

пишу код за еду
Сообщения
3,386
Реакции
4,019
  • Команда форума
  • #19
KorDen, в nginx другой синтаксис, не?
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
KorDen, в nginx другой синтаксис, не?
А я что, запихивал конфиг от апача что ли?
Настройка для nginx

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

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

if ($invalid_referer) {
return 403;
}
}


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