dolphinik Posted December 23, 2009 (edited) · Report post Не получается собрать. Система Debian root /opt/isg/lISG-0.1-alpha/kernel # make && make install echo "" > build.h printf "/* Compilation date.\n * Written by Makefile (userspace) */\n#define _BUILD_DATE \"%s %s\"\n" `date +'%F %T'` > build.h make -C /lib/modules/2.6.25-2-686/build M=/opt/isg/lISG-0.1-alpha/kernel modules make[1]: Entering directory `/usr/src/linux-headers-2.6.25-2-686' Building modules, stage 2. MODPOST 0 modules make[1]: Leaving directory `/usr/src/linux-headers-2.6.25-2-686' gcc -O2 -Wall -Wunused -I/lib/modules/2.6.25-2-686/build/include -I../../iptables-1.4.6/include -DIPTABLES_VERSION=\"1.4.6\" -fPIC -o libipt_ISG_sh.o -c libipt_ISG.c libipt_ISG.c: In function ‘parse’: libipt_ISG.c:37: warning: implicit declaration of function ‘exit_error’ libipt_ISG.c: In function ‘save’: libipt_ISG.c:65: warning: implicit declaration of function ‘save_string’ gcc -shared -o libipt_ISG.so libipt_ISG_sh.o make -C /lib/modules/2.6.25-2-686/build M=/opt/isg/lISG-0.1-alpha/kernel modules_install make[1]: Entering directory `/usr/src/linux-headers-2.6.25-2-686' DEPMOD 2.6.25-2-686 make[1]: Leaving directory `/usr/src/linux-headers-2.6.25-2-686' make: *** Нет правила для сборки цели `ipt_ISG.ko', требуемой для `iinstall'. Останов. Edited December 23, 2009 by dolphinik Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted December 23, 2009 (edited) · Report post Исправил глупую ошибку, выложил новую версию. Попробуйте, теперь модуль ядра должен собираться. Ядро ваше довольно старое (2.6.25), а модуль писался всего пол-года назад, поэтому поддержку старых ядер я не делал, есть вероятность что не соберется. Но попробуйте. Если что, пишите. По поводу iptables. К сожалению придется использовать версию 1.4.2. Это ограничение, которое накладывает IPTables::libiptc. Я подумаю, что можно сделать с этим, но пока это единственный workaround. UPD: Подумал. Скорее всего откажусь от использования IPTables::libiptc. Особого смысла в нем нет. UPD2: Ядро для текущего релиза потребуется не ниже 2.6.28. Либо обновите ядро, либо подождите, пока я допилю модуль для 2.6.25. Edited December 23, 2009 by Умник Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted December 24, 2009 · Report post Выложил 0.3-alpha. http://www.progtech.ru/~oleg/lISG Модуль ядра теперь собирается под ядрами >= 2.6.24, но нужно протестировать как это будет работать. Все еще обязателен iptables 1.4.2. Работаю над этим - ограничение будет снято в 0.4-alpha. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dolphinik Posted December 24, 2009 · Report post Ждём :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted December 25, 2009 · Report post Вышла версия 0.4-alpha. http://www.progtech.ru/~oleg/lISG/ * Исправлен ряд мелких багов * Теперь не требуются модули IPTables::libiptc и Time::HiRes * Поддержка версий iptables 1.4.x Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
shicoy Posted December 26, 2009 · Report post Собственно не до конца понятно, что есть haha в --session-init "haha", т.е. в --session-init можно подставить любую строку? Для чего используется? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted December 26, 2009 · Report post shicoy, можно подставить все что угодно. Имя сессии сейчас не используется. Сделано это для того, чтобы в будущем можно было как-то классифицировать трафик по направлениям. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
shicoy Posted December 26, 2009 · Report post Где можно выставить частоту обновлений аккунтинга через радиус? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted December 26, 2009 · Report post В etc/config.pl $cfg{alive_interval} и $cfg{unlim_alive_interval} (в секундах). Первое значение - для сессий, на которые не назначена скорость через RADIUS-атрибут Class = ... (на них по-умолчанию вешается rate $cfg{default_speed}), второе - для сессий с ограниченной скоростью. Разделение сделано для того, чтобы не перегружать биллинг постоянными Alive-ами от анлимитчиков (для них не требуется real-time accounting). Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
shicoy Posted December 26, 2009 · Report post Ну осталось дождаться CoA что бы отказаться от iptables для блокировки доступа, и будет шикарно =) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted December 26, 2009 (edited) · Report post Постараюсь сделать в этом году. :) У кого-нибудь в текущем виде заработал дистрибутив? Ну или хотя бы без ошибок собрался и загрузился... :) Edited December 26, 2009 by Умник Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dolphinik Posted December 28, 2009 (edited) · Report post Ещё есть просьба добавить атрибут NAS-Identifier в радиус пакет. И, по возможности, в Called-Station-Id добавить значение из --session-init Edited December 28, 2009 by dolphinik Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dolphinik Posted December 28, 2009 · Report post Скомпилилось, iptables съел правила, ISGd запустился, и ничего ISG.pl показывает user /usr/local/ISG/bin # ./ISG.pl show_all 10.10.1.1 0.0.0.0 0.0.0.0 Async0 0000000000000000 0 0 0 0 0 0 0 0 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted December 28, 2009 · Report post dolphinik, NAS-Identifier добавлю. По поводу --session-init: важно только само наличие параметра, значение его игнорируется в текущей реализации. То есть классифицировать трафик не получится. В дальшейшем я планирую сделать классификацию по-другому, чтобы не плодить на каждую подсеть по паре правил -j ISG, как я планировал ранее. По поводу проблемы. Сейчас я попробую воспроизвести у себя, но пока покажите вывод хвоста команды dmesg, файлов /var/log/syslog (или messages) и /tmp/ISGd_dbg.log. Возможно эта информация ускорит процесс поиска причины проблемы. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dolphinik Posted December 28, 2009 (edited) · Report post Проблема решилась. Ошиблись с IP адресом в конфиге. Edited December 28, 2009 by dolphinik Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted December 28, 2009 · Report post dolphinik, странно что проблема решилась. Я нашел ошибку, по идее не должны были уходить запросы на RADIUS-сервер. Скачайте пожалуйста 0.5-alpha. Там еще кое-какие исправления. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dolphinik Posted December 29, 2009 · Report post Есть предложение вынести NAS-Identifier в конфиг. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dolphinik Posted December 29, 2009 · Report post И ещё, просьба, вынести установку NAS-Port-Type = Async до if Нужно как-то отличать запросы на авторизацию ISG от PPTP/PPPOE/DHCP сессий. $p->set_attr('NAS-Port-Type', 'Async'); if ($code eq 'Accounting-Request') { switch ($ev->{'type'}) { case ISG::EVENT_SESS_START { $p->set_attr('Acct-Status-Type', 'Start'); } case ISG::EVENT_SESS_UPDATE { $p->set_attr('Acct-Status-Type', 'Alive'); } case ISG::EVENT_SESS_STOP { $p->set_attr('Acct-Status-Type', 'Stop'); } case ISG::EVENT_SESS_RESTART { $p->set_attr('Acct-Status-Type', 'Stop'); } } $p->set_attr('Framed-IP-Address', ISG::long2ip($ev->{'nat_ipaddr'})); Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dolphinik Posted December 29, 2009 · Report post После некоторых боданий пришёл к следующему набору атрибутов в пакетах: $p->set_password($username, $cfg{radius_secret}); $p->set_attr('User-Name', $username); $p->set_attr('Service-Type', 'Framed-User'); $p->set_attr('NAS-IP-Address', $nas_ip); $p->set_attr('NAS-Identifier', $nas_ip); $p->set_attr('NAS-Port', $ev->{'port_number'}); $p->set_attr('NAS-Port-Type', 'Async'); if ($code eq 'Accounting-Request') { switch ($ev->{'type'}) { case ISG::EVENT_SESS_START { $p->set_attr('Acct-Status-Type', 'Start'); } case ISG::EVENT_SESS_UPDATE { $p->set_attr('Acct-Status-Type', 'Alive'); } case ISG::EVENT_SESS_STOP { $p->set_attr('Acct-Status-Type', 'Stop'); } case ISG::EVENT_SESS_RESTART { $p->set_attr('Acct-Status-Type', 'Stop'); } } $p->set_attr('Framed-IP-Address', ISG::long2ip($ev->{'nat_ipaddr'})); $p->set_attr('Acct-Authentic', 'RADIUS'); $p->set_attr('Acct-Session-Id', $ev->{'session_id'}); $p->set_attr('Calling-Station-Id', $username); $p->set_attr('Called-Station-Id', $nas_ip); $p->set_attr('Acct-Session-Time', $ev->{'duration'}); $p->set_attr('Acct-Input-Packets', $ev->{'in_packets'}); $p->set_attr('Acct-Output-Packets', $ev->{'out_packets'}); { use bigint; $p->set_attr('Acct-Input-String', $ev->{'in_bytes'} & 0xffffffff); $p->set_attr('Acct-Output-String', $ev->{'out_bytes'} & 0xffffffff); $p->set_attr('Acct-Input-Gigawords', $ev->{'in_bytes'} >> 32); $p->set_attr('Acct-Output-Gigawords', $ev->{'out_bytes'} >> 32); } } $rad_reqs{"$src_port"}{'pk_user'} = $username; $rad_reqs{"$src_port"}{'pk_port'} = $ev->{'port_number'}; $rad_reqs{"$src_port"}{'pk_rid'} = $rid; $rad_reqs{"$src_port"}{'pk_time'} = time(); if (!$sock->send($p->pack)) { do_log("err", "Unable to send RADIUS request"); return 0; } return 1; } Ещё прошу привести правильную конфигурацию iptables для работы с этим модулем. Так, как изображено ниже, не работает. Клиент авторизацию проходит успешно, аккаунтинг работает, сессия видна, а данные через маршрутизатор не ходят. ISG all -- 10.10.1.110 0.0.0.0/0 ISG initiator, service `inet' ISG all -- 10.10.1.110 0.0.0.0/0 ISG ACCEPT all -- 10.10.1.110 0.0.0.0/0 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted December 29, 2009 (edited) · Report post dolphinik, в 0.6-alpha NAS-Identifier вынесу в конфиг, сочетание атрибутов сделаю как у вас, спасибо. А это: ISG all -- 10.10.1.110 0.0.0.0/0 ISG initiator, service `inet' ISG all -- 10.10.1.110 0.0.0.0/0 ISG ACCEPT all -- 10.10.1.110 0.0.0.0/0 Должно выглядить так: ISG all -- 10.10.1.110 0.0.0.0/0 ISG initiator, service `inet' ISG all -- 0.0.0.0/0 10.10.1.110 ISG ACCEPT all -- 10.10.1.110 0.0.0.0/0 <-- не уверен, зачем это правило (впрочем, после обработки -j ISG пакет [если ISG его не зарубил] продолжает движение дальше по вашим правилам, так что если политика по-умолачанию для FORWARD - DROP, то после двух ISG должны идти разрешающие правила) Параметр --session-init говорит, что пакеты, попавшие в это правило будут инициализировать сессию. После успешной инициализации это правило будет использоваться для полисинга и для аккаунтинга исходящего трафика (от пользователя). Правило без параметра --session-init используется для аккаунтинга и обработки трафика на клиента. Я планировал также делать классификацию трафика по подсетям на базе "сервисов", где "сервис" это по-сути два зеркальных правила "-j ISG", но сделаю это позже - по-другому. Поэтому значение параметра --session-init (в вашем случае - inet) не имеет смысла. Чтобы больше не путаться, в 0.6-alpha нужно будет писать просто: -j ISG --session-init, а не -j ISG --session-init somename. Edited December 29, 2009 by Умник Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted December 29, 2009 · Report post На всякий случай еще раз замечу, что вместо 10.10.1.110 можно писать сеть - 10.10.1.0/24 или 10.10.1.0/16, не важно. В результате lISG будет учитывать отдельно каждый IP-адрес этой сети, а не сеть целиком (суммарно). Другими словами не нужно плодить по два правила -j ISG для каждого клиента. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Max P Posted December 29, 2009 · Report post наблюдаю за темой с самого начала... пока что не понял как будет клиент блочится, если прописать подсеть? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted December 29, 2009 (edited) · Report post Max P, а в чем проблема? Трафик от конкретного IP, если его отреджектил RADIUS, подропается в первом правиле (initiator, см. выше). Во втором (которое не initiator) подропается трафик на этот IP, потому что сессия для такого IP-адреса не инициирована initiator-ом. В итоге этот клиент не заработает. Если же RADIUS подтвердил доступ, то сессия стартует, трафик для этого IP будет ходить через два правила -j ISG, там учитываться и полиситься. Target ISG выносит вердикт (либо DROP, либо пакет продолжает движение по другим правилам iptables) в зависимости от IP-адреса (src IP для initiator направления и dst IP для не initiator). Edited December 29, 2009 by Умник Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Max P Posted December 29, 2009 · Report post спасибо, понял, попробую поднять на каникулах, как раз сервачок новый появился :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dolphinik Posted December 30, 2009 (edited) · Report post На всякий случай еще раз замечу, что вместо 10.10.1.110 можно писать сеть - 10.10.1.0/24 или 10.10.1.0/16, не важно. В результате lISG будет учитывать отдельно каждый IP-адрес этой сети, а не сеть целиком (суммарно). Другими словами не нужно плодить по два правила -j ISG для каждого клиента. Если я в правиле сейчас пропишу всю сеть, то оставлю её без интернета :) 10.10.1.110 - тестовая клиентская виртуальная машина. Ещё просьба сделать изменение скорости и сессии и её сброс по идентификатору, а не номеру порта. Edited December 30, 2009 by dolphinik Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...