LINUX.ORG.RU
ФорумAdmin

Нужно ли?

 , , ,


0

1

Последнее время пришлось много работать с OpenVPN, с серверами и клиентами.
Пришла мысль написать приложение на java 1.6 и не большой веб-сервис.

Суть такова:
1. Приложения на яве - обычный исполняемый jar файла. Он будет выполняться при подключении или отключении OpenVPN клиента от сервера. Приложение будет, например, писать в базу данных (не важно какой sqllite[в данный момент самая приоритетная для меня], mysql, postgres, oracle etc.) данные о пользовательской сессии (трафик, время сессии, ip и т.д)

2. Маленький веб-сервис будет в читать с базы эти данные и выводить их красиво на веб-страничке и добавлять новых пользователей VPN, тесть с вебки генерить им ключи и все такое. Еще хочу сделать роли. Что-то вроде: админ - может смотреть всю инфу о всех, пользователь - может смотреть инфу о себе.

Для работы нужно будет openjre-16 и контейнер типа tomcat, jetty или другой. Посмотрел подобные проекты на сайте OpenVPN так они какие-то старые и уже заброшены.

Ваше мнение, господа. Нужно ли начинать? Хотели бы вы что-то подобное?

Ответ на: комментарий от pyatak123

Видел, но не тестил. Он инфу или статистики показывает по пользователях? Или например показывает ли список текущих сессий?

windofchange ()

не рекомендую sqlite использовать в случае, если база будет использоваться из нескольких процессов (как раз твой вариант). Если уж так хочется в java использовать встраиваемую бд, то лучше какой-нибудь h2 с autoserver=true.

maloi ★★★★★ ()

Нужно понимать что одним jar файлом это не ограничится, если есть силы довести до конца и интерес то конечно нужно.

invokercd ★★★★ ()
Ответ на: комментарий от invokercd

Есть. В принципе - jar для записи в базу, war - для контейнера.

windofchange ()

данные о пользовательской сессии (трафик, время сессии, ip и т.д)

радиус-то осилишь? Вообще, описанное тобой пишется за неделю практически на любом языке (у меня где-то валяются от старого подобного проекта хранимки постгресовые, на которых здоровый кусок логики был)

leave ★★★★★ ()

Задача если и надо, то java - оверкилл. На ней Гуглы пишутся, а не такое. На такой задаче будет куча расхода лишней памяти, а этого можно избежать

Я бы написал на Java из-за того что учитывая опыт я могу сделать бескостыльно, быстро и использовать мало памяти. Но это нажито. Если тебе все равно, то лучше напиши на каком-то PHP/Python

vertexua ★★★★★ ()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от leave

уже попробывал, шелл скрипт всю нужную инфу собирает.
SELECT id,common_name,trusted_ip,ifconfig_pool_remote_ip,bytes_received,bytes_sent,session_time,time_ascii FROM client_disconnect;
450 laptop Some_IP VPN_IP 18055180 (bytes_received) 168433875(bytes_sent) 0day 2h 14min 50s Mon Feb 25 13:27:12 2013

windofchange ()
Ответ на: комментарий от windofchange

Напиши тогда на Java SE standalone приложение внутри которого Netty/Jetty, Guice, какой-то JAX-RS, статическая html страница + KnockoutJS. Можно влезть метров в 40.

Или Netty/Restlet

vertexua ★★★★★ ()
Последнее исправление: vertexua (всего исправлений: 4)
Ответ на: комментарий от windofchange

я не совсем понял: bytes_(received/sent) на разрыве сессии обновляется или в рантайме?

и посмотри все-таки на радиус: с ним аутентификация погибче делается, плюс можно будет другие типы vpn прикручивать (у меня pptp был)

leave ★★★★★ ()
Ответ на: комментарий от leave

Ок, посмотрю, спасибо.

я не совсем понял: bytes_(received/sent) на разрыве сессии обновляется или в рантайме?

При разрыве.

windofchange ()
Ответ на: комментарий от leave

А не сильно силен в радиусе, но вот чуть прикрутил свой тестовый впн к фри радису.
1. Правильно ли я понимаю, вся инфа о клиенте лежит в таблице radacct ?:
desc radacct;
+----------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+-------------+------+-----+---------+----------------+
| radacctid | bigint(21) | NO | PRI | NULL | auto_increment |
| acctsessionid | varchar(64) | NO | MUL | | |
| acctuniqueid | varchar(32) | NO | MUL | | |
| username | varchar(64) | NO | MUL | | |
| groupname | varchar(64) | NO | | | |
| realm | varchar(64) | YES | | | |
| nasipaddress | varchar(15) | NO | MUL | | |
| nasportid | varchar(15) | YES | | NULL | |
| nasporttype | varchar(32) | YES | | NULL | |
| acctstarttime | datetime | YES | MUL | NULL | |
| acctstoptime | datetime | YES | MUL | NULL | |
| acctsessiontime | int(12) | YES | MUL | NULL | |
| acctauthentic | varchar(32) | YES | | NULL | |
| connectinfo_start | varchar(50) | YES | | NULL | |
| connectinfo_stop | varchar(50) | YES | | NULL | |
| acctinputoctets | bigint(20) | YES | | NULL | |
| acctoutputoctets | bigint(20) | YES | | NULL | |
| calledstationid | varchar(50) | NO | | | |
| callingstationid | varchar(50) | NO | | | |
| acctterminatecause | varchar(32) | NO | | | |
| servicetype | varchar(32) | YES | | NULL | |
| framedprotocol | varchar(32) | YES | | NULL | |
| framedipaddress | varchar(15) | NO | MUL | | |
| acctstartdelay | int(12) | YES | | NULL | |
| acctstopdelay | int(12) | YES | | NULL | |
| xascendsessionsvrkey | varchar(10) | YES | | NULL | |
+----------------------+-------------+------+-----+---------+----------------+

Просто в opevpn есть еще свои специфические данные которые я тоже хотел бы логировать.

2. Правильно ли я понимаю, пароль от склиент к радиус-сервера идет в отрытом виде? (тоесть можно поймать свободно)

windofchange ()
Ответ на: комментарий от windofchange

1. Правильно ли я понимаю, вся инфа о клиенте лежит в таблице radacct?

да. Какие дополнительные данные нужно логировать?

2. Правильно ли я понимаю, пароль от склиент к радиус-сервера идет в отрытом виде? (тоесть можно поймать свободно)

http://www.cisco.com/en/US/tech/tk59/technologies_tech_note09186a00800945cc.s... :

Typically, a user login consists of a query (Access-Request) from the NAS to the RADIUS server and a corresponding response (Access-Accept or Access-Reject) from the server. The Access-Request packet contains the username, encrypted password, NAS IP address, and port.

leave ★★★★★ ()
Ответ на: комментарий от leave

Например, openvpn не сильно хорошо маштабируется, видел как на хорошем сервере было запущено много процессов в разными конфигами.
Например такие данные:

SELECT * FROM client_disconnect LIMIT 1;
---------------------------------------------------
id = 1
common_name = laptop
bytes_received = 55844
bytes_sent = 17316
session_time = 0day 0h 1min 9sec
trusted_ip = CLIENT_IP_WHITE
trusted_port = CLIENT_PORT
ifconfig_pool_local_ip = CLIENT_VPN_GW
ifconfig_pool_remote_ip = CLIENT_VPN_IP
config = /etc/openvpn/server.conf
daemon = 1
daemon_log_redirect = 1
dev = tun0
ifconfig_local = xxx
ifconfig_remote = xxx
link_mtu = 1558
route_net_gateway = SERVER_GW_FOR_CLIENT
route_vpn_gateway = xxx
tun_mtu = 1500
untrusted_ip = xxx
untrusted_port = 33194
time_ascii = Sat Feb 9 11:21:36 2013
time_duration = 69
time_unix = 1360408896
---------------------------------------------------
Профит от радиуса вижу:
- Можно получать инфу о сессии в ран тайме (в опен впн тоже кста можно);
- Более гибкая авторизация по ло логину и паролю.
- Возможность прикрутить pptp, и, наврное, IPSec.

windofchange ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.