Перейти к содержимому
Калькуляторы

Наоборот. session_max_duration - это промежуток времени, через который радиусу будут посланы Stop и Start пакеты. При этом сессия не отключается, трафик ходит, авторизация не повторяется. Просто одна сессия разбивается на несколько, пользователь этого не замечает.

А вот session_idle_timeout - это время, после которого при условии отсутствия трафика сессия завершится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Наоборот. session_max_duration - это промежуток времени, через который радиусу будут посланы Stop и Start пакеты. При этом сессия не отключается, трафик ходит, авторизация не повторяется. Просто одна сессия разбивается на несколько, пользователь этого не замечает.

А вот session_idle_timeout - это время, после которого при условии отсутствия трафика сессия завершится.

Ну наверно так должно быть, но я поставил idle = 60 , max = 600,

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

 

PS: и после session_max_duration сессия все еще есть.

Изменено пользователем e-AI

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Wingman, какую ревизию используете?
lISG-0.11.3-alpha из git

 

 

Ну наверно так должно быть, но я поставил idle = 60 , max = 600,

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

 

PS: и после session_max_duration сессия все еще есть.

А трафика точно на ней не было больше? Может, продлилась? =)

 

Вообще я эти параметры радиусом отдаю:

        UNION SELECT '', '%{SQL-User-Name}', 'Session-Timeout', '86400', '='\
        UNION SELECT '', '%{SQL-User-Name}', 'Idle-Timeout', '600', '='

И в графиках четко видно, как постоянно чучуть скачет число сессий - оно берётся из "Approved sessions count", т.е. никаких "disconnected" сессий у нас не возникает, сессия просто исчезает

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

После max_duration она должна оставаться. А по поводу обнулившихся счётчиков стоит почитать лог lISG, действительно ли сессия завершилась.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

lISGd сообщает, что

Service 'TESTSERV2' for '10.128.1.150' finished

 

при этом

> ./ISG.pl show_services Virtual1
User IP-address NAT IP-address  Port number   Uniq. Identifier Durat.  Octets-in  Octets-out Rate-in    Rate-out   Service name     Flags
10.128.1.150    0.0.0.0         Virtual1      5F66DE790FFEE324 0       0          0          1000000    1000000    TESTSERV2        SO   
10.128.1.150    0.0.0.0         Virtual1      C10FA709BA5DE6EE 0       0          0          256000     256000     TESTSERV         S

 

Комп просто выключен, уже больше 10 минут точно.

м.б. потому что назначено 2 сервиса на сессию. Правда вторая не была активирована.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

lISGd сообщает, что

Service 'TESTSERV2' for '10.128.1.150' finished

 

при этом

> ./ISG.pl show_services Virtual1
User IP-address NAT IP-address  Port number   Uniq. Identifier Durat.  Octets-in  Octets-out Rate-in    Rate-out   Service name     Flags
10.128.1.150    0.0.0.0         Virtual1      5F66DE790FFEE324 0       0          0          1000000    1000000    TESTSERV2        SO   
10.128.1.150    0.0.0.0         Virtual1      C10FA709BA5DE6EE 0       0          0          256000     256000     TESTSERV         S

 

Комп просто выключен, уже больше 10 минут точно.

м.б. потому что назначено 2 сервиса на сессию. Правда вторая не была активирована.

Может быть, где-то в сервисах косяк, я передаю скорость Class=..., сервисы не использую

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут надо реализовать такую схему

DHCP запрос от клиента

LISG ловит этот запрос выступая скажем релеем/прокси DHCP

LISG отправляет Radius auth запрос на биллинг

LISG получив ответ от Радиуса выдает IP клиенту и отправляет radius acct с параметрами клиента (IP, MAC, opt82 И т.п.)

Неверно.

lISG предполагает, что адрес у клиента уже есть, и их надо фильтровать.

DHCP-сервер должен быть отдельным.

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

 

Насчет FreeRADIUS где-то тут же говорилось: это лишняя прослойка. В Net::DHCP::Packet есть все необходимое, включая example. Сейчас над этим работаю.

Готов спорить :)

Radius вовсе не лишняя прослойка, т.к. знаете ли, кое кто использует радиус для аутентификации и аккаутинга, в качестве альтернативы скриптам которые делают выкл/вкл фильтров на SrcIP и сбора статистики по netflow для аккаутинга.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Насчет FreeRADIUS где-то тут же говорилось: это лишняя прослойка. В Net::DHCP::Packet есть все необходимое, включая example. Сейчас над этим работаю.

Готов спорить :)

Radius вовсе не лишняя прослойка, т.к. знаете ли, кое кто использует радиус для аутентификации и аккаутинга, в качестве альтернативы скриптам которые делают выкл/вкл фильтров на SrcIP и сбора статистики по netflow для аккаутинга.

Скажу лучше: в C есть всё необходимое, включая кучу примеров в инете! В asm, в принципе, тоже!

Вопрос - зачем, если радиус в любом случае нужен и используется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Насчет FreeRADIUS где-то тут же говорилось: это лишняя прослойка. В Net::DHCP::Packet есть все необходимое, включая example. Сейчас над этим работаю.

Готов спорить :)

Radius вовсе не лишняя прослойка, т.к. знаете ли, кое кто использует радиус для аутентификации и аккаутинга, в качестве альтернативы скриптам которые делают выкл/вкл фильтров на SrcIP и сбора статистики по netflow для аккаутинга.

Скажу лучше: в C есть всё необходимое, включая кучу примеров в инете! В asm, в принципе, тоже!

Вопрос - зачем, если радиус в любом случае нужен и используется?

Для DHCP, скорее всего, будет использоваться еще один радиус. Ибо держать все на одном - тот еще ад. Так зачем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для DHCP, скорее всего, будет использоваться еще один радиус. Ибо держать все на одном - тот еще ад. Так зачем?

Один и тот же радиус одним модулем обрабатывает авторизацию и аккаунтинг, другим - dhcp, в чем заключается ад?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для DHCP, скорее всего, будет использоваться еще один радиус. Ибо держать все на одном - тот еще ад. Так зачем?

Один и тот же радиус одним модулем обрабатывает авторизацию и аккаунтинг, другим - dhcp, в чем заключается ад?

В конфигурировании.

И вообще, KISS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Стоп стоп, коллеги, вы хотите радиус для dhcp server юзать?

Не я имел в виду, что LISG-DHCP по идее должено быть пофиг какой там DHCP Server.

Смысл в чем, LISG-DHCP юзается как relay, который ловит DHCP-Request, отправляет запрос на Радиус-Биллинг и получив утвердительный ответ ретранслирует запрос клиента на DHCP Server. Получив от DHCP-Server ответ DHCP-ACK, отправляет на Радиус-Биллинг Acct-Start.

Ну и попутно для Биллинг-Радиус можно через поля прикнутить Opt82, IP клиента и т.д. и т.п.

Изменено пользователем shicoy

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для DHCP, скорее всего, будет использоваться еще один радиус. Ибо держать все на одном - тот еще ад. Так зачем?

Один и тот же радиус одним модулем обрабатывает авторизацию и аккаунтинг, другим - dhcp, в чем заключается ад?

В конфигурировании.

И вообще, KISS.

Написать два конфига для разных модулей одного радиус-сервера, или два конфига для разных модулей двух серверов - в чём разница?

И в чём усложнение (с точки зрения kiss)? Даже если один из двух модулей (виртуальных серверов) заглючит - другой продолжает работу как ни в чём не бывало.

 

Стоп стоп, коллеги, вы хотите радиус для dhcp server юзать?

Не я имел в виду, что LISG-DHCP по идее должено быть пофиг какой там DHCP Server.

Смысл в чем, LISG-DHCP юзается как relay, который ловит DHCP-Request, отправляет запрос на Радиус-Биллинг и получив утвердительный ответ ретранслирует запрос клиента на DHCP Server. Получив от DHCP-Server ответ DHCP-ACK, отправляет на Радиус-Биллинг Acct-Start.

Ну и попутно для Биллинг-Радиус можно через поля прикнутить Opt82, IP клиента и т.д. и т.п.

Тут спитч о том, что проще/удобне/лучше - написать под фрирадиус логику dhcp-сервера, воспользовавшись его сетевым API, или написать dhcp-сервер на перле с нуля =)

 

Изменено пользователем Wingman

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Стоп стоп, коллеги, вы хотите радиус для dhcp server юзать?

Не я имел в виду, что LISG-DHCP по идее должено быть пофиг какой там DHCP Server.

Смысл в чем, LISG-DHCP юзается как relay, который ловит DHCP-Request, отправляет запрос на Радиус-Биллинг и получив утвердительный ответ ретранслирует запрос клиента на DHCP Server. Получив от DHCP-Server ответ DHCP-ACK, отправляет на Радиус-Биллинг Acct-Start.

Ну и попутно для Биллинг-Радиус можно через поля прикнутить Opt82, IP клиента и т.д. и т.п.

Я некоторое время назад выкладывал патч, который реализует (криво) примерно это. Чтоб работало не криво, надо дальше доделывать ISGd.pl, и видимо, ядерный модуль тоже. Короч, делаю именно это, наверно таки сделаю, если никто раньше не сделает :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут спитч о том, что проще/удобне/лучше - написать под фрирадиус логику dhcp-сервера, воспользовавшись его сетевым API, или написать dhcp-сервер на перле с нуля =)
Разве? :) А я думал мы обсужадем LISG :))))

 

Я некоторое время назад выкладывал патч, который реализует (криво) примерно это. Чтоб работало не криво, надо дальше доделывать ISGd.pl, и видимо, ядерный модуль тоже. Короч, делаю именно это, наверно таки сделаю, если никто раньше не сделает :)
Это врядли... Так что ждем-с :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Разве? :) А я думал мы обсужадем LISG :))))

ж)) Я имел в виду между мной и Abram =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут спитч о том, что проще/удобне/лучше - написать под фрирадиус логику dhcp-сервера, воспользовавшись его сетевым API, или написать dhcp-сервер на перле с нуля =)
Мой рабочий сорс уже работает. Включает в себя 300 строк.

Предыдущий вариант (rlm_perl) тоже работал, но мне не понравился. Слишком много FreeRADIUS-специфичных баг вылазило.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мой рабочий сорс уже работает. Включает в себя 300 строк.

Общественности покажите?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мой рабочий сорс уже работает. Включает в себя 300 строк.
Общественности покажите?

Стыдно :-D.

Могу костяк выложить (вырезать спефичные для меня куски кода), когда доделаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не ссать в компот.
Abram ( 15:25:46 )

тут?

Умник ( 15:26:00 )

Привет

Abram ( 15:26:02 )

привет

Abram ( 15:26:20 )

хочется поинтересоваться: lISG дальше развиваться будет?

Умник ( 15:26:52 )

Да, конечно. Я там сроки поставил и не выдержал их... :(

Умник ( 15:27:00 )

Свалилось тут на голову

Abram ( 15:27:23 )

в общем, будем считать это вынужденной паузой =)

Abram ( 15:27:31 )

а то народ, я смотрю, уже вовсю волноваться начал

Умник ( 15:27:39 )

Пусть не волнуются.

Умник ( 15:27:42 )

Передай им.

Abram ( 15:27:58 )

спасибо :). в принципе, всё, что хотел знать

Умник ( 15:28:01 )

В этом году я обязательно вернусь.

Подскажите последнюю версию lISG ? (ссылочку на нее)

Буду пытаться городить полисинг сетей ..

Проект жалко .

Изменено пользователем kww

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не спалось. За пару часов накидал патч для учета и полисинга подсетей.

Естественно придется пересобрать модули iptables и ядра.

Не забыть перезагрузить модуль ядра.

В цепочку FORWARD в оба правила (-s и -d) добавить в конец параметр --init-net

 

например:

-A FORWARD -s 192.168.0.0/16 -j ISG --session-init --init-net 24

-A FORWARD -d 192.168.0.0/16 -j ISG --init-net 24

 

Это разобъет всю сеть 192.168.0.0/16 на подсети /24

Логины и пароли с-но будут 192.168.0.0, 192.168.1.0 ... 192.168.254.0

 

можно бить на любые подсети, хоть /31

 

использую вот эту версию http://bitbucket.org/sysoleg/lisg/get/tip.tar.gz

 

diff -ruN lisg-oct-2-neon/kernel/isg_main.c lisg-oct-2-neon-net/kernel/isg_main.c
--- lisg-oct-2-neon/kernel/isg_main.c	2010-10-02 22:10:08.000000000 +0300
+++ lisg-oct-2-neon-net/kernel/isg_main.c	2011-01-11 07:44:46.500072709 +0200
@@ -477,7 +477,7 @@
    return 1;
}

-static struct isg_session *isg_create_session(struct isg_net *isg_net, u_int32_t ipaddr, u_int8_t *src_mac) {
+static struct isg_session *isg_create_session(struct isg_net *isg_net, u_int32_t ipaddr, u_int8_t *src_mac, u_int32_t init_net) {
    struct isg_session *is;
    unsigned int port_number;
    struct timespec ts_now;
@@ -493,6 +493,7 @@
    is->info.ipaddr = ipaddr;
    is->start_ktime = ts_now.tv_sec;
    is->isg_net = isg_net;
+    is->init_net = init_net;

    port_number = find_next_zero_bit(isg_net->port_bitmap, PORT_BITMAP_SIZE, 1);
    set_bit(port_number, isg_net->port_bitmap);
@@ -690,7 +691,7 @@
static inline int isg_equal(struct isg_in_event *ev, struct isg_session *is) {
    if ((ev->si.sinfo.id && ev->si.sinfo.id == is->info.id) ||
	(is->info.port_number == ev->si.sinfo.port_number) ||
-	(is->info.ipaddr == ev->si.sinfo.ipaddr)) {
+	(is->info.ipaddr == ((is->init_net) ? (ev->si.sinfo.ipaddr & is->init_net) : ev->si.sinfo.ipaddr))) {
	return 1;
    } else {
	return 0;
@@ -964,6 +965,7 @@
    struct nehash_entry *ne;
    struct traffic_class **tc_list;
    __be32 laddr, raddr;
+    u_int32_t init_net = 0;
    struct isg_net *isg_net;

    u_int32_t pkt_len, pkt_len_bits;
@@ -998,6 +1000,12 @@
	raddr = iph->saddr;
    }

+    if (iinfo->flags & INIT_NET) { /* Init NET */
+	init_net = htonl(0xFFFFFFFF << (32 - iinfo->init_net));
+	laddr &= init_net;
+	raddr &= init_net;
+    }
+
    is = isg_lookup_session(isg_net, laddr);

    if (is == NULL) {
@@ -1010,7 +1018,7 @@
		}
	    }

-	    isg_create_session(isg_net, laddr, src_mac);
+	    isg_create_session(isg_net, laddr, src_mac, init_net);
	} else if (isg_net->pass_outgoing) {
	    goto ACCEPT;
	}
diff -ruN lisg-oct-2-neon/kernel/isg_main.h lisg-oct-2-neon-net/kernel/isg_main.h
--- lisg-oct-2-neon/kernel/isg_main.h	2010-10-02 22:10:08.000000000 +0300
+++ lisg-oct-2-neon-net/kernel/isg_main.h	2011-01-11 06:47:54.342145989 +0200
@@ -21,6 +21,7 @@
#define INIT_SESSION		0x01
#define INIT_BY_SRC		0x02
#define INIT_BY_DST		0x04
+#define INIT_NET		0x08

#define ISG_DIR_IN		0x01
#define ISG_DIR_OUT		0x02
@@ -77,6 +78,7 @@

struct ipt_ISG_info {
    u_int8_t flags;
+    u_int8_t init_net;		/* Init NETWORK */
};

struct isg_session_info {
@@ -119,6 +121,8 @@
    u_int64_t in_last_seen;
    u_int64_t out_last_seen;

+    u_int32_t init_net;		/* Init NETWORK */
+
    time_t start_ktime;
    time_t last_export;

diff -ruN lisg-oct-2-neon/kernel/libipt_ISG.c lisg-oct-2-neon-net/kernel/libipt_ISG.c
--- lisg-oct-2-neon/kernel/libipt_ISG.c	2010-10-02 22:10:08.000000000 +0300
+++ lisg-oct-2-neon-net/kernel/libipt_ISG.c	2011-01-11 07:22:49.369311708 +0200
@@ -9,11 +9,13 @@

struct ipt_ISG_info {
    u_int8_t flags;
+    u_int8_t init_net;		/* Init NETWORK */
};

static const struct option opts[] = {
    { "session-init", 0, NULL, '1' },
    { "init-mode", 1, NULL, '2' },
+    { "init-net", 1, NULL, '3' },
    { .name = NULL }
};

@@ -24,12 +26,14 @@
" --init-mode <mode>		Session initialization mode:\n"
"				  src - use src IP-address as username\n"
"				  dst - use dst IP-address as username\n"
-"				If --init-mode is not specified, `src' is assumed\n");
+"				If --init-mode is not specified, `src' is assumed\n"
+" --init-net			Net Prefix\n");
}

#define INIT_SESSION 0x01
#define INIT_BY_SRC  0x02
#define INIT_BY_DST  0x04
+#define INIT_NET     0x08

#if defined NEWSTYLE
    #define _EXIT_ERROR  xtables_error
@@ -73,6 +77,20 @@

        break;

+    case '3':
+	if (*flags & INIT_NET) {
+	    _EXIT_ERROR(PARAMETER_PROBLEM, "Can't specify --init-net twice\n");
+	}
+
+	isg->flags |= INIT_NET;
+	if (strlen(optarg)) {
+	    isg->init_net = atoi(optarg);
+	} else {
+	    isg->init_net = 24;
+	}
+
+        break;
+
    default:
	return 0;
    }
@@ -92,6 +110,10 @@
	    printf("--init-mode dst");
	}
    }
+
+    if (isg->flags & INIT_NET) {
+	printf(" --init-net %d", isg->init_net);
+    }
}

static void print(const void *ip,
@@ -111,6 +133,10 @@
	    printf("dst mode");
	}
    }
+
+    if (isg->flags & INIT_NET) {
+	printf(" net %d", isg->init_net);
+    }
}

static void check(unsigned int flags) {
diff -ruN lisg-oct-2-neon/kernel/old_iptables/libipt_ISG.c lisg-oct-2-neon-net/kernel/old_iptables/libipt_ISG.c
--- lisg-oct-2-neon/kernel/old_iptables/libipt_ISG.c	2010-10-02 22:10:08.000000000 +0300
+++ lisg-oct-2-neon-net/kernel/old_iptables/libipt_ISG.c	2011-01-11 07:22:54.146230240 +0200
@@ -9,11 +9,13 @@

struct ipt_ISG_info {
    u_int8_t flags;
+    u_int8_t init_net;		/* Init NETWORK */
};

static struct option opts[] = {
    { "session-init", 0, NULL, '1' },
    { "init-mode", 1, NULL, '2' },
+    { "init-net", 1, NULL, '3' },
    { .name = NULL }
};

@@ -24,12 +26,14 @@
" --init-mode <mode>		Session initialization mode:\n"
"				  src - use src IP-address as username\n"
"				  dst - use dst IP-address as username\n"
-"				If --init-mode is not specified, `src' is assumed\n");
+"				If --init-mode is not specified, `src' is assumed\n"
+" --init-net			Net Prefix\n");
}

#define INIT_SESSION 0x01
#define INIT_BY_SRC  0x02
#define INIT_BY_DST  0x04
+#define INIT_NET     0x08

static int parse(int c, char **argv, int invert, unsigned int *flags,
		 const struct ipt_entry *entry,
@@ -65,6 +69,20 @@

        break;

+    case '3':
+	if (*flags & INIT_NET) {
+	    exit_error(PARAMETER_PROBLEM, "Can't specify --init-net twice\n");
+	}
+
+	isg->flags |= INIT_NET;
+	if (strlen(optarg)) {
+	    isg->init_net = atoi(optarg);
+	} else {
+	    isg->init_net = 24;
+	}
+
+	break;
+
    default:
	return 0;
    }
@@ -84,6 +102,10 @@
	    printf("--init-mode dst");
	}
    }
+
+    if (isg->flags & INIT_NET) {
+	printf(" --init-net %d", isg->init_net);
+    }
}

static void print(const struct ipt_ip *ip,
@@ -103,6 +125,10 @@
	    printf("dst mode");
	}
    }
+
+    if (isg->flags & INIT_NET) {
+	printf(" net %d", isg->init_net);
+    }
}

static void check(unsigned int flags) {

Изменено пользователем SNeon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Красивое решение.

К сожалению намного чаще надо полисить/считать сети разного размера.

Притом вперемешку с выдачей одиночных IP /32.

Но за ваш вариант все равно скажу огромное спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тогда надо придумать алгоритм. что будет посылать радиус(билинг) и каким образом на это реагировать.

когда я раньше поднимал этот вопрос, ответ сводился к одному - не заводить кучу правил в iptables под разные нужды. А следовательно информацию надо брать либо из конфига либо из билинга.

Предлагайте варианты - сделаем.

Мне нужно было как минимум побить подсеть на сети класса С и подсеть на сети /30.

Теперь 4 правила в iptables с этим справляются.

 

Патч писал ночью от бессонницы и скуки. Для начала чтоб хотя бы разобраться с кодом (комментариев в нем к сожалению очень мало).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Было-бы неплохо с биллинга для каждого клиента отдать Framed-IP-Netmask , если его нет то /32 .

Тогда каждый клиент будет сетью, хоть из 1 IP, хоть из 255.

Но дело в том что в rfc3576 (CoA) такого атрибута нет. Или я что-то путаю )))

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.