Страница 1 из 1
Freebsd Hotspot
Добавлено: 2014-06-26 18:58:13
wien
Имеется FreeBSD 9.2 с установленными:
1. isc-dhcp43-server-4.3.0 -раздаю ип адреса
2. lightsquid-1.8_2 - анализ логов сквида
3. rejik-3.2.11 - режу негативные сайты
4. squid-2.7.9_4 - сам сквид(прозрачный)
5. apache22-2.2.26 - нужно будет для хотспота
6. php5-5.4.25
7. phpMyAdmin-4.1.8
8. mysql55-server-5.5.36
9. mysql55-client-5.5.36
10. ipfw(firewall+kernel nat)
2 интерфейса:
vr0 - в инет
re0 - в локалку
А так же D-LINK DIR 615.
Цель: организовать хотспот, который в качестве страницы приветствия показывает мою страницу, при этом не надо лигинов, паролей и т.д.
Схема такая: юзер подключился, ввел какой-либо адрес сайта в браузере, его перекинуло на мою страницу, потом может набрать адрес и уже куда хочет идет.
Подскажите как лучше сделать, буду признателен за готовое решение (скрипты, статьи и т.д.)
Надо добавить, что перечитал много статей, но ничего подходящего для себя не нашел, поскольку предложенные решения, например как
тут не отличаются элегантностью, безопасностью и масштабируемостью. Да, у меня еще сервер настроен таким образом, чтобы выдавать инет привилегированным пользователям без всяких ограничений.
Re: Freebsd Hotspot
Добавлено: 2014-06-27 9:45:31
Гость
wien,
сдаётся, что вы сильно привередничаете!

В статье
http://www.lissyara.su/articles/freebsd ... s/hotspot/ прекрасно описано, как осуществить всё, кроме учёта нужды обслуживания привилегированных юзеров: последнее только и останется вам видоизменить в тех скриптах. (Наводка: по списку логинов привилегированных юзеров, создаваемому отдельно в БД мускула, отменяется для такого юзера ограничение времени/полосы пропускания. Точка!)
Ну да и в выше вами указанной ссылке, в конце статьи пояснено, что её автор поменял (отказался вообще от авторизации) в исходных скриптах...
Так что разум вам в руки (как флаг) и вперёд на баррикады информатики!

"Дам наводку, но не подаю на водку!" (С)
Re: Freebsd Hotspot
Добавлено: 2014-06-27 9:48:02
Гость
ЗЫ, а вот ето ваше:
> Да, у меня еще сервер настроен таким образом, чтобы выдавать инет привилегированным пользователям без всяких ограничений
есть весьма сомнительное утверждение

, - коли спрашиваете здесь как осуществить сей проект...

Re: Freebsd Hotspot
Добавлено: 2014-06-27 12:27:58
wien
Вот это единственная трудность,
чтобы гости перенаправлялись на указанную мной страницу. Т.е. сейчас это работает так: в конфиге дхцп прописаны маки превилигированных юзеров, им выдаются постоянные ип при подключении. Далее имеется файлик на сервере, где в каждой строчке по одному ип, ес-но вип персон. Скорость режется только для посетителей сквидом, которому в свою очередь указан этот файл и создан соответствующий acl, им нет ограничений вообще (выдержка из squid.conf):
Код: Выделить всё
acl privileged src "/usr/local/etc/squid/privileged"
# Day mode for localnet acl. No limits for privileged users
delay_access 1 allow localnet day !privileged
# Night mode, no limits for localnet and privileged users
delay_access 2 allow localnet !privileged !day
delay_access 3 allow localnet multimedia !privileged
Если будут идеи - подкидывайте, а с той статьей чую конфиг ipfw полностью перепахать придется

Re: Freebsd Hotspot
Добавлено: 2014-06-28 11:23:52
Гость
wien,
идей нет и скорее всего вообще не предвидится: похоже, вы "не туда зашли", точнее -- не с того начали... боюсь, что нужное можно организовать лишь по той примерно технологии, что разобрана в указ статьях...
(Или заюзать некий... гм, "гибрид" - но это уже типо изврат, имхо.)
Ну а с прикручиванием ipfw ТАМ вам что не нравится? (Навскидку) особо сложного и сомнительного в статьях не проповедуется...
Как-то так навскидку (сиречьт рассмотрев вопрос "теоретические", без практических проб метода...)
Re: Freebsd Hotspot
Добавлено: 2014-06-28 12:23:16
Гость
UPD. Единственное, что приходит тут на ум, это попытаться зацепиться за факт выдачи фикс.ip для привилег.юз... точнее, отфильтровать их, отделив от непривилиг.юз. по списку из того вашего файлика...
Если осилите решение и придумаете, КАК конкретно осуществить переброску последних куда вам надо - будет вам то самое "изящное" решение... (Сиречь, без заюзания http/php технологии, которая вам похоже "не нравится"... и скорее всего из-за не знания её в должной мере...

)
Удачи!
Re: Freebsd Hotspot
Добавлено: 2014-06-28 18:29:34
wien
Реализовал для посетителей, по большому счету работает с некоторыми "НО". Еще предстоит подумать как VIP юзеров пропускать, думаю стоит посмотреть в строну работы с таблицами.
Тут дело даже не в слабом скиле php, меня коробит от таких вещей:
Код: Выделить всё
define('RULE_ADD_IP', '/usr/local/bin/sudo /sbin/ipfw add %s pipe 1 ip from any to %s');
define('RULE_ADD_IP2', '/usr/local/bin/sudo /sbin/ipfw add %s pipe 2 ip from %s to any');
define('RULE_DEL_IP', '/usr/local/bin/sudo /sbin/ipfw delete %s');
define('RULE_DEL_IP2', '/usr/local/bin/sudo /sbin/ipfw delete %s');
Что пользователь от которого работает апач имеет право на это, дыра в безопасности... Но другого решения я быстро придумать не могу пока.
Продолжение темы
тут
Re: Freebsd Hotspot
Добавлено: 2014-07-05 15:13:09
Гость
Хм... чуть ли не 2 недели в ступе воду толочь! (Ето вместо того, чтобы - в худшем случае немного покурить пхп-маны - в каких-то пару-тройку дней приспособить готовое решение к своему ТЗ!) Убедились наконец, что все ваши потуги решить задачу на одном лишь файере/сквиде (т.е. без нативных http+php технологий) есть... хм, ересь, достойная разного рода псевдорешаниям хм, от "волшебника-недоучки" (с) ?
Дам лишь пару хинтов... //"Дам наводку, но не подаю на водку" (с)
Ваше утверждение, - здесь в последнем посте, - дескать, "пользователь от которого работает апач имеет право на это, дыра в безопасности" -- просто есть типичнейшая глупость... либо твердолобость упёртого технократа, знающего вместо всего поля проф-деятельности лишь небольшую частичку реальности. Ибо при правильной организации метода доступа*, соответствующей существующей реальности, для того самого (из статей) виртуального юзера "васи" (надеюсь, вы понимаете, что ето имя условное и НИЗЗЯ юзать ничего похожего, подбираемого по словарям) ето решение АБСОЛЮТНО правильное и в достаточной мере (для реального, а не абстрактного применения) вполне безопасное.
* Стародавнее правило никс-профи: для таких юзверей создаётся учётка БЕЗ шелла! (Всякий "автоматический" нет-юзверь обычно так и создаётся... По крайней мере, таковой она должна стать на момент после отладки: при включания системы "в боевые условия". И тогда все кулхацкеры идут лесом...

А взломать весь [веб-]сервак, конечно, при его типовой нормальной защите и адекватной конфе - ето достаточно высококвалиф. взлом... оно им надо?)
Второе, во всех тутошних (по пруфам) статьях в пхп-скриптах заюзаны примитивные решения - так, как будто не существует такого мощного инструмента, как пхп-сессии. Ввод последних (ето несложно, всего в несколько строчек в тех 2-3 заюзанных автором скриптах) позволит кардинально решить отмеченные комментаторами недостатки авторских скриптов...
Как-то так вкратце.
Успехов! (И прежде всего в изменении реальности в своих мозгах: для избавления от технократисткого /или ака "волшебник-недоучкинского"/ э-э-э... "монизма" решений, прикладываемых к реализации задачи!

)
Re: Freebsd Hotspot
Добавлено: 2014-07-08 19:46:21
wien
Хотспот к боевой эксплуатации почти готов. Воспользовался статьей с
хабра. Однако, в статье имеются существенные недостатки. Я опишу для тех в первую очередь, кто последует советам из статьи и наступит на те же грабли.
1. Синтаксис (скрипт не отрабатывал)
Код: Выделить всё
$temp = 0;
$sql = 'SELECT rule_num FROM hotspot ORDER BY rule_num';
$res = mysql_query($sql);
if ($res)
{
$t = mysql_fetch_array($res);
if (!$t) $rule_num = RULE_NUM_MIN;
else {
while ($temp = mysql_fetch_array($res))
{
if (($t[0]+1) < $temp[0]) break;
$t = $temp;
}
$rule_num = $t[0]+1; //у автора небыло тут точки с запятой
}
} else return false;
2. Принципиальная ошибка(недоработка или как хотите). Согласно статье разрешающие правила в фаерволе с номера 200 по 600, итого 400, по 2 на юзера, а значит что одновременно может принять не более 200 юзеров, ну это в идеале. Далее самое интересное. Если обновить страницу
open.php 200 раз, то можно занять все правила своим ип и пока не выйдет лимит никто подключиться не сможет. Окей, написал небольшой патч. В файл
open.php добавляем строчки:
Код: Выделить всё
////////Фрагмент////////
<?php
require_once('config.php');
$user_ip = $_SERVER['REMOTE_ADDR'];
$current_date = time();
/////////////////////патчим/////////////////////
// Предотвращаем повторную регистрацию IP
$cmd="/usr/local/bin/sudo /sbin/ipfw list";
$result = "";
if (is_callable("exec"))
{
exec($cmd,$result); $result = join("\n",$result);
}
else echo "no exec";
if(substr_count($result, $user_ip)>=2)
{
exit();
}
////////////////////////////////////////////////
//Тут мы находим первый свободный номер правил файрвола. У нас они начинаются с 200. Это прописано в RULE_NUM_MIN.
$temp = 0;
$sql = 'SELECT rule_num FROM hotspot ORDER BY rule_num';
$res = mysql_query($sql);
if ($res)
{
////Конец фрагмента/////
3. Считаю негоже неизвестных тебе людей пускать без прокси, поэтому поставил squid и заменил в файле
config.php строчки
Код: Выделить всё
//Команды, которыми открывается или закрывается доступ к интернету
define('RULE_ADD_IP', '/usr/local/bin/sudo /sbin/ipfw add %s pipe 1 ip from any to %s');
define('RULE_ADD_IP2', '/usr/local/bin/sudo /sbin/ipfw add %s pipe 2 ip from %s to any');
На
Код: Выделить всё
//Команды, которыми открывается доступ к интернету
define('RULE_ADD_IP', '/usr/local/bin/sudo /sbin/ipfw add %s fwd 127.0.0.1,3128 tcp from %s to any 80 via vr0');
define('RULE_ADD_IP2', '/usr/local/bin/sudo /sbin/ipfw add %s nat 1 ip from %s to any via vr0');
4.Добавил возможность в скрипте
config.php регулировать выдачу трафика и времени в рабочее и свободное время. Патчим:
Строки
Код: Выделить всё
define('CLIENTS_TIME', '1800'); //Время для клиента 30 минут (в секундах)
define('CLIENTS_TRAF', '30'); //Лимит трафика в мегабайтах
Убираем и вместо них вписываем:
Код: Выделить всё
if(date("w")>=1 and date("w")<=5 and date("H")>=8 and date("H")<=17)
{
// Лимит для периода пн-пт(08.00-17.59)
define('CLIENTS_TIME', '600'); //Время для клиента 10 минут (в секундах)
define('CLIENTS_TRAF', '20'); //Лимит трафика в мегабайтах
}
else
{
// Лимит для периода пн-пт(18.00-07.59) и выходных.
define('CLIENTS_TIME', '1200'); //Время для клиента 20 минут (в секундах)
define('CLIENTS_TRAF', '50'); //Лимит трафика в мегабайтах
}
Re: Freebsd Hotspot
Добавлено: 2014-07-08 19:54:08
wien
Намеренно разбил на 2 сообщения, ибо одно это многабукаф.
Немного о логике работы скриптов. Допустим подключился первый клиент, для него создались 200 и 400 правила. Второй, создались 201 и 401. Третий, 202 и 402. И тут первый клиент исчерпал свой лимит, правила 200 и 400 удалились. Подключился четвертый клиент, для него создались 203 и 403 правила. Имхо не есть гуд, что счетчик тупо инкрементирует, а не смотрит в первую очередь на первый свободный номер начиная с 200-го. Я к тому, что при данной схеме народ может ожидать своей порции инета пока 200 клиент не исчерпает лимит, т.е. не удаляться 399 и 599 правила соответственно. Помогите поправить багу, ковырялся, пока решение не пришло. Ссылка на статью по которой делал постом выше.
Re: Freebsd Hotspot
Добавлено: 2014-07-17 21:16:02
wien
Народ, ну что есть идеи как пофиксить?
Re: Freebsd Hotspot
Добавлено: 2014-07-18 8:50:34
Bayerische
Ответа не имею, не копал.
Имею вопрос. Есть мысль сделать простейший лог кто подключился, кто отключился, кто подбирал пароль на WiFi. А то купил антенну 5/8, она стреляет по всему двору. Надо бы контролировать безопасность.
Re: Freebsd Hotspot
Добавлено: 2015-01-14 13:28:09
wien
Bayerische писал(а):...сделать простейший лог кто подключился, кто отключился...
На это у меня есть dhcpd.log
...кто подбирал пароль на WiFi. А то купил антенну 5/8, она стреляет по всему двору. Надо бы контролировать безопасность.
В данном случае Hotspot, т.е. сеть открытая.