Freebsd Hotspot

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
wien
сержант
Сообщения: 151
Зарегистрирован: 2014-06-26 18:38:44
Откуда: DafaultCity
Контактная информация:

Freebsd Hotspot

Непрочитанное сообщение wien » 2014-06-26 18:58:13

Имеется 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.

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

Подскажите как лучше сделать, буду признателен за готовое решение (скрипты, статьи и т.д.)

Надо добавить, что перечитал много статей, но ничего подходящего для себя не нашел, поскольку предложенные решения, например как тут не отличаются элегантностью, безопасностью и масштабируемостью. Да, у меня еще сервер настроен таким образом, чтобы выдавать инет привилегированным пользователям без всяких ограничений.
Последний раз редактировалось f_andrey 2014-06-27 1:10:24, всего редактировалось 1 раз.
Причина: Автору. пожалуйста, выбирайте соответствующий раздел форума.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Гость
проходил мимо

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

ЗЫ, а вот ето ваше:
> Да, у меня еще сервер настроен таким образом, чтобы выдавать инет привилегированным пользователям без всяких ограничений
есть весьма сомнительное утверждение :oops: , - коли спрашиваете здесь как осуществить сей проект... ;)

Аватара пользователя
wien
сержант
Сообщения: 151
Зарегистрирован: 2014-06-26 18:38:44
Откуда: DafaultCity
Контактная информация:

Re: Freebsd Hotspot

Непрочитанное сообщение wien » 2014-06-27 12:27:58

Вот это единственная трудность, чтобы гости перенаправлялись на указанную мной страницу. Т.е. сейчас это работает так: в конфиге дхцп прописаны маки превилигированных юзеров, им выдаются постоянные ип при подключении. Далее имеется файлик на сервере, где в каждой строчке по одному ип, ес-но вип персон. Скорость режется только для посетителей сквидом, которому в свою очередь указан этот файл и создан соответствующий 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 полностью перепахать придется :st:

Гость
проходил мимо

Re: Freebsd Hotspot

Непрочитанное сообщение Гость » 2014-06-28 11:23:52

wien,
идей нет и скорее всего вообще не предвидится: похоже, вы "не туда зашли", точнее -- не с того начали... боюсь, что нужное можно организовать лишь по той примерно технологии, что разобрана в указ статьях...
(Или заюзать некий... гм, "гибрид" - но это уже типо изврат, имхо.)
Ну а с прикручиванием ipfw ТАМ вам что не нравится? (Навскидку) особо сложного и сомнительного в статьях не проповедуется...
Как-то так навскидку (сиречьт рассмотрев вопрос "теоретические", без практических проб метода...)

Гость
проходил мимо

Re: Freebsd Hotspot

Непрочитанное сообщение Гость » 2014-06-28 12:23:16

UPD. Единственное, что приходит тут на ум, это попытаться зацепиться за факт выдачи фикс.ip для привилег.юз... точнее, отфильтровать их, отделив от непривилиг.юз. по списку из того вашего файлика...
Если осилите решение и придумаете, КАК конкретно осуществить переброску последних куда вам надо - будет вам то самое "изящное" решение... (Сиречь, без заюзания http/php технологии, которая вам похоже "не нравится"... и скорее всего из-за не знания её в должной мере... :))
Удачи!

Аватара пользователя
wien
сержант
Сообщения: 151
Зарегистрирован: 2014-06-26 18:38:44
Откуда: DafaultCity
Контактная информация:

Re: Freebsd Hotspot

Непрочитанное сообщение wien » 2014-06-28 18:29:34

Реализовал для посетителей, по большому счету работает с некоторыми "НО". Еще предстоит подумать как 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 заюзанных автором скриптах) позволит кардинально решить отмеченные комментаторами недостатки авторских скриптов...
Как-то так вкратце.
Успехов! (И прежде всего в изменении реальности в своих мозгах: для избавления от технократисткого /или ака "волшебник-недоучкинского"/ э-э-э... "монизма" решений, прикладываемых к реализации задачи! ;))

Аватара пользователя
wien
сержант
Сообщения: 151
Зарегистрирован: 2014-06-26 18:38:44
Откуда: DafaultCity
Контактная информация:

Re: Freebsd Hotspot

Непрочитанное сообщение wien » 2014-07-08 19:46:21

Хотспот к боевой эксплуатации почти готов. Воспользовался статьей с хабра. Однако, в статье имеются существенные недостатки. Я опишу для тех в первую очередь, кто последует советам из статьи и наступит на те же грабли.
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');    //Лимит трафика в мегабайтах
}

Аватара пользователя
wien
сержант
Сообщения: 151
Зарегистрирован: 2014-06-26 18:38:44
Откуда: DafaultCity
Контактная информация:

Re: Freebsd Hotspot

Непрочитанное сообщение wien » 2014-07-08 19:54:08

Намеренно разбил на 2 сообщения, ибо одно это многабукаф.
Немного о логике работы скриптов. Допустим подключился первый клиент, для него создались 200 и 400 правила. Второй, создались 201 и 401. Третий, 202 и 402. И тут первый клиент исчерпал свой лимит, правила 200 и 400 удалились. Подключился четвертый клиент, для него создались 203 и 403 правила. Имхо не есть гуд, что счетчик тупо инкрементирует, а не смотрит в первую очередь на первый свободный номер начиная с 200-го. Я к тому, что при данной схеме народ может ожидать своей порции инета пока 200 клиент не исчерпает лимит, т.е. не удаляться 399 и 599 правила соответственно. Помогите поправить багу, ковырялся, пока решение не пришло. Ссылка на статью по которой делал постом выше.

Аватара пользователя
wien
сержант
Сообщения: 151
Зарегистрирован: 2014-06-26 18:38:44
Откуда: DafaultCity
Контактная информация:

Re: Freebsd Hotspot

Непрочитанное сообщение wien » 2014-07-17 21:16:02

Народ, ну что есть идеи как пофиксить?

Bayerische
капитан
Сообщения: 1820
Зарегистрирован: 2010-12-25 20:41:50
Откуда: Хлебная столица

Re: Freebsd Hotspot

Непрочитанное сообщение Bayerische » 2014-07-18 8:50:34

Ответа не имею, не копал.
Имею вопрос. Есть мысль сделать простейший лог кто подключился, кто отключился, кто подбирал пароль на WiFi. А то купил антенну 5/8, она стреляет по всему двору. Надо бы контролировать безопасность.

Аватара пользователя
wien
сержант
Сообщения: 151
Зарегистрирован: 2014-06-26 18:38:44
Откуда: DafaultCity
Контактная информация:

Re: Freebsd Hotspot

Непрочитанное сообщение wien » 2015-01-14 13:28:09

Bayerische писал(а):...сделать простейший лог кто подключился, кто отключился...
На это у меня есть dhcpd.log
...кто подбирал пароль на WiFi. А то купил антенну 5/8, она стреляет по всему двору. Надо бы контролировать безопасность.
В данном случае Hotspot, т.е. сеть открытая.