Перейти до

den68

Сitizens
  • Всього повідомлень

    251
  • Приєднався

  • Останній візит

Все, що було написано den68

  1. В кавычках проблема остаеться.... притом ковычки разные - и одинарные и двойные - результат один
  2. Консольный конфигуратор непонимает логинов с тире в них. например vasya-1 Как бы патч на этот предмет сообразить ?
  3. den68

    Привязка МАК к IP

    Отца русской демократии (nn) спасет установка свитчей с VLAN'ами, например SURECOM 16 port 19", два общих порт, остальные друг друга не видят, и arp -a показывать будет себя и сервер e.t.c ;-) Решить только программно безопасность - НЕВОЗМОЖНО, какой велосипед не изобретай. А привязка по МАКУ полезна, по крайне мере дисциплинирует прицепление к сети уродцами разнообразных девайсов, + DHCP естесно.
  4. den68

    Stargazer II + VPN + Mysql

    Вот сдесь частично обсуждалось http://local.com.ua/forum/index.php?showtopic=541
  5. А чем шеипить смотря. CBQ дает серьезную (процентов 30 на ЦПУ) нагрузку при нарезании каналов по 64k на 50-70 юзеров. Может речь о Фре ?
  6. Шейпер с ходу дожрет оставшийся ресурс машины.
  7. den68

    Web отоброжение статистики

    Использует если маленько напильником доточить
  8. ИП - может на уровне файла CHAP(PAP)-SECRET, интрфейс - только с патчем (патч приведен выше), хотя если не превязываться к интерфейсу а вести подсчет по маске, на всех ppp* ? Структура файла CHAP(PAP)-SECRET: # client server secret IP addresses # * * "" user01 * passwd01 192.168.100.99 кстати, если pptpctrl (кусок пакета pptpd - сервер запуска ВПН соеденений) научиться пускать сам СТГ, то как параметр он может передовать ИП адрес, номер ppp Интерфейса, скорость соединения итд. - ЭТО ИМХО наиболее правильное решение. (URL: PoPToP: http://www.poptop.org/) Для реализации этой идеи СТГ надо слушать порт 1723/tcp, Один из возможных вариантов запуска отдельно pptpctrl через initd.conf - добавляем строку: pptpctrl stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/pptpctrl 0 0 0 0 0 как пример ... README.inetd: First option: debugging (0 for off, 1 for on) Second option: PPP options file (0 for off, 1 followed by a file name for on) Third option: TTY speed (0 for default, 1 followed by a speed to set a speed) Fourth option: Local IP address (0 for pppd-determined, 1 followed by an address to set) Fifth option: Remote IP address (0 for pppd-determined, 1 followed by an address to set) Another example, debugging on, alternate config file, setting tty speed and specifying the local IP address: pptpctrl 1 1 /etc/ppp/options.PPTP 1 115200 1 192.168.0.1 0
  9. кстати, не втему - но актуально, всю информацию о юзере держать в SQL (mySQL), - это портабельно, - возможность содержать дополнительные данные, такие как номер договора, паспорт/серия/выдан/родился/проживает - группа пользователей (с кого узла ходит, при наличии более одного узла) - МАК адрес - возможность авторизовываться за почтой через mySQL с почовых серверов в сети находящихся на других машинах. - удобные групповые операции по пользователям (SQL). - возможность с помощью внешних скрипотв лего генерить MAC->IP таблицу - возможность с помощью внешних скрипотв лего генерить SCAP-SECRET в случае с VPN Для pppd - многие приятные мелочи - все и не упомянуть
  10. верно но лучше ИМХО как-то хардверно заранее фиксить в СТГ ИП и ИНТЕРФЕЙС. Хотя и так работать ИМХО будет (должно). Невольно закрадываються мылси о глюках, возможности неправильной подмены связки ppp*1*2*3 и ИП 192.168.22.33. Хотя наверно это более относиться к паранои.... :00:
  11. Максимально вычурное решение для ИПТаблес: OnConnect: #!/bin/bash . /etc/stargazer/ip_config.conf CDATA=`date +"%d-%m-%Y %H:%M"` user=$1 ip=$2 cash=$3 echo "${CDATA} CONNECT [USER:${user},IP:${ip},CASH:${cash}]" >> /var/log/stargazer.logon iptables -t nat -D POSTROUTING -o ${INET_IFACE} -s $ip -d 0.0.0.0/0 -j DROP while [ $? -eq 0 ] do iptables -t nat -D POSTROUTING -o ${INET_IFACE} -s $ip -d 0.0.0.0/0 -j DROP done iptables -t nat -I POSTROUTING -o ${INET_IFACE} -s $ip -d 0.0.0.0/0 -j MASQUERADE ################################################################ # 110 port ###################################################### iptables -t nat -D PREROUTING -p tcp -s $ip --dport 110 -j DROP while [ $? -eq 0 ] do iptables -t nat -D PREROUTING -p tcp -s $ip --dport 110 -j DROP done iptables -t nat -D PREROUTING -p udp -s $ip --dport 110 -j DROP while [ $? -eq 0 ] do iptables -t nat -D PREROUTING -p udp -s $ip --dport 110 -j DROP done ################################################################ # 25 port ###################################################### iptables -t nat -D PREROUTING -p tcp -s $ip --dport 25 -j DROP while [ $? -eq 0 ] do iptables -t nat -D PREROUTING -p tcp -s $ip --dport 25 -j DROP done iptables -t nat -D PREROUTING -p udp -s $ip --dport 25 -j DROP while [ $? -eq 0 ] do iptables -t nat -D PREROUTING -p udp -s $ip --dport 25 -j DROP done ################################################################ # 80 port ###################################################### iptables -t nat -D PREROUTING -p tcp -s $ip --dport 80 -j DROP while [ $? -eq 0 ] do iptables -t nat -D PREROUTING -p tcp -s $ip --dport 80 -j DROP done iptables -t nat -D PREROUTING -p udp -s $ip --dport 80 -j DROP while [ $? -eq 0 ] do iptables -t nat -D PREROUTING -p udp -s $ip --dport 80 -j DROP done ################################################################ # 3128 port ###################################################### iptables -t nat -D PREROUTING -p tcp -s $ip --dport 3128 -j DROP while [ $? -eq 0 ] do iptables -t nat -D PREROUTING -p tcp -s $ip --dport 3128 -j DROP done iptables -t nat -D PREROUTING -p udp -s $ip --dport 3128 -j DROP while [ $? -eq 0 ] do iptables -t nat -D PREROUTING -p udp -s $ip --dport 3128 -j DROP done ################################################################ #iptables -t filter -I INPUT -p icmp -s $ip -j ACCEPT # iptables -t filter -I INPUT -s $ip -j ACCEPT iptables -t filter -I FORWARD -s $ip -j ACCEPT iptables -t filter -I FORWARD -d $ip -j ACCEPT iptables -t filter -I OUTPUT -d $ip -j ACCEPT OnDisconnect: #!/bin/bash . /etc/stargazer/ip_config.conf CDATA=`date +"%d-%m-%Y %H:%M"` user=$1 ip=$2 cash=$3 echo "${CDATA} DISCONNECT [USER:${user},IP:${ip},CASH:${cash}]" >> /var/log/stargazer.logon iptables -t filter -D INPUT -s $ip -j ACCEPT while [ $? -eq 0 ] do iptables -t filter -D INPUT -s $ip -j ACCEPT done ################################## iptables -t filter -D FORWARD -s $ip -j ACCEPT while [ $? -eq 0 ] do iptables -t filter -D FORWARD -s $ip -j ACCEPT done ################################## iptables -t filter -D FORWARD -d $ip -j ACCEPT while [ $? -eq 0 ] do iptables -t filter -D FORWARD -d $ip -j ACCEPT done ################################## iptables -t filter -D OUTPUT -d $ip -j ACCEPT while [ $? -eq 0 ] do iptables -t filter -D OUTPUT -d $ip -j ACCEPT done ################################## # iptables -t nat -D POSTROUTING -o ${INET_IFACE} -s $ip -d 0.0.0.0/0 -j MASQUERADE while [ $? -eq 0 ] do iptables -t nat -D POSTROUTING -o ${INET_IFACE} -s $ip -d 0.0.0.0/0 -j MASQUERADE done #=================# # # iptables -t filter -I INPUT -i ${LOCAL_IFACE} -p udp -s $ip --dport 8000:65535 -j REJECT # # 110 port iptables -t nat -I PREROUTING -p tcp -s $ip --dport 110 -j DROP iptables -t nat -I PREROUTING -p udp -s $ip --dport 110 -j DROP # # 25 port iptables -t nat -I PREROUTING -p tcp -s $ip --dport 25 -j DROP iptables -t nat -I PREROUTING -p udp -s $ip --dport 25 -j DROP # # 80 port iptables -t nat -I PREROUTING -p tcp -s $ip --dport 80 -j DROP iptables -t nat -I PREROUTING -p udp -s $ip --dport 80 -j DROP # # 3128 port iptables -t nat -I PREROUTING -p tcp -s $ip --dport 3128 -j DROP iptables -t nat -I PREROUTING -p udp -s $ip --dport 3128 -j DROP # iptables -t nat -I POSTROUTING -o ${INET_IFACE} -s $ip -d 0.0.0.0/0 -j DROP Избыточно - но зато с гарантией.
  12. den68

    Web отоброжение статистики

    Да нет, МАК надо брать из SQL, собственно МАК и все данные о юзере, и кстати туда их и складывать, не портабельно это все хранить в текстовых файлах ИМХО. Все за и против описывать не буду, но для правильного распределения учета, ведения договоров, почтовых ящиков, авторизации итд. мы более 5 лет используем хранение всего в SQL. Кстати и с радиусом проще, если на WirlessLANы по авторизации пускать.
  13. Вот кусок не очень доработанного плагина для pppd коротрый сливает через заданный промежуток времени статистику. Так сказать СЕМПЛ, сливает в лог файл, на это место можно прикрутить в: СТГ, SQL, итд. - по желанию. П.С. Данный пост в основном для СТГ-34, так ка я вроде обещал показать как это реализовать. Дальше - точить напильником ИМХО. #include <stddef.h> #include <time.h> #include "pppd.h" static int pppdstat=0; char pppd_version[] = VERSION; extern u_int32_t remoteIP; static option_t my_options[] = { { "pppdstat", o_int, &pppdstat, "ppp statistics... " }, { NULL } }; void print_info() { update_link_stats(0); info("pppdstat: remoteIP=%I sent %u bytes, recv %u bytes.",remoteIP,link_stats.bytes_out, link_stats.bytes_in); }; static int my_idle(struct ppp_idle *idle) { print_info(); return (idle_time_limit); } static int my_holdoff(void) { if (link_stats_valid) print_info(); return (holdoff); }; void plugin_init(void) { info("pppdstat: plugin running..."); add_options(my_options); idle_time_hook = my_idle; holdoff_hook = my_holdoff; }
  14. den68

    Web отоброжение статистики

    В ОнКоннект добавить ____________________________ iptables -t filter -D INPUT -i eth0 -s 192.168.0.х -m mac --mac-source ! 00:00:00:00:00:00 -j DROP iptables -t filter -I INPUT -i eth0 -s 192.168.0.х -m mac --mac-source ! us:er:ma:ca:dd:rs -j DROP В ОнДисКоннект добавить ____________________________ iptables -t filter -D INPUT -i eth0 -s 192.168.0.х -m mac --mac-source ! us:er:ma:ca:dd:rs -j DROP iptables -t filter -I INPUT -i eth0 -s 192.168.0.х -m mac --mac-source ! 00:00:00:00:00:00 -j DROP
  15. В догонку к патчу: проверка на IP адрес пдключающегося, вставить в /etc/ppp/ip-up: RET1=`echo $REMOTE_IP_ADDRESS | sed -e 's/.*\.[0-9][0-9][0-9]//'` RET2=`echo $IFNAME | sed -e s/ppp/.$*/g` if [ $RET1 != $RET2 ] then /bin/kill -2 $PPPD_PID fi
  16. Для страждущих, наваял тут патч для pptpd, теперь можно VPN прикрутить к текущему СТГ без глобальных переделок. Смысл патча: - привязка номера ppp интрфейса к IP адресу Пример: наружная сеть: 10.0.100.0 Внутренняя сеть: 192.168.90.0 (где живет СТГ) DHCPD выдает адреса для сети 10.0.100.0 идентичные по последней цифре с сетью 192.168.90.0, например: Пользователь прописан в СТГ с IP адресом 192.168.90.77, как следствие, интерфейс для подсчета трафика ему прописывается ppp77. DHCPD должен выдавать ему IP адрес во внешней сети 10.0.100.77 в CHAP-SECRET в директории /etc/ppp/ соответственно заноситься <логин СТГ> * <пароль СТГ> 192.168.90.77 как следствие, ему при установлении ВПН соеденения присваивается ИП 192.168.90.77 внутренней сети, а интерфейс в результате применения патча становиться ppp77 - СТГ считает трафик. При тестах использовались: pptpd 1.2.1 pppd 2.4.2 mppe pppd + kernel 2.4.26 patch (не обязательно) stargazer-1 (последний релиз (бета ?)) Сам патч: (pptpd 1.2.1) *** /INSTALL/PPTPD/pptpd-1.2.1/pptpctrl.c Tue Aug 10 17:55:12 2004 --- /INSTALL/PPTPD-PATCH/pptpd-1.2.1/pptpctrl.c Thu Aug 12 23:56:24 2004 *************** *** 101,112 **** { char pppLocal[16]; /* local IP to pass to pppd */ char pppRemote[16]; /* remote IP address to pass to pppd */ struct sockaddr_in addr; /* client address */ socklen_t addrlen; int arg = 1; int flags; struct in_addr inetaddrs[2]; ! char *pppaddrs[2] = { pppLocal, pppRemote }; gargc = argc; gargv = argv; --- 101,115 ---- { char pppLocal[16]; /* local IP to pass to pppd */ char pppRemote[16]; /* remote IP address to pass to pppd */ + char ConnectIP[16]; /* Connect IP address to pass to pppd */ + struct sockaddr_in addr; /* client address */ socklen_t addrlen; int arg = 1; int flags; struct in_addr inetaddrs[2]; ! // char *pppaddrs[2] = { pppLocal, pppRemote }; ! char *pppaddrs[3] = { pppLocal, pppRemote, ConnectIP }; gargc = argc; gargv = argv; *************** *** 183,190 **** signal(SIGTERM, &bail); NOTE_VALUE(PAC, call_id_pair, htons(-1)); NOTE_VALUE(PNS, call_id_pair, htons(-1)); ! syslog(LOG_INFO, "CTRL: Client %s control connection started", inet_ntoa(addr.sin_addr)); pptp_handle_ctrl_connection(pppaddrs, inetaddrs); syslog(LOG_DEBUG, "CTRL: Reaping child PPP[%i]", pppfork); if (pppfork > 0) --- 186,198 ---- signal(SIGTERM, &bail); NOTE_VALUE(PAC, call_id_pair, htons(-1)); NOTE_VALUE(PNS, call_id_pair, htons(-1)); ! /* ! !!!!!!!!!!!!!!!!! Insert CONNECT address !!!!!!!!!!!!!!!!!!!!!! ! */ syslog(LOG_INFO, "CTRL: Client %s control connection started", inet_ntoa(addr.sin_addr)); + // + inetaddrs[2] = addr.sin_addr; + // pptp_handle_ctrl_connection(pppaddrs, inetaddrs); syslog(LOG_DEBUG, "CTRL: Reaping child PPP[%i]", pppfork); if (pppfork > 0) *************** *** 374,379 **** --- 382,390 ---- inet_ntoa(inetaddrs[1]), ntohs(((struct pptp_out_call_rply *) (rply_packet))->call_id_peer), ntohs(((struct pptp_out_call_rply *) (rply_packet))->call_id)); + /* + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! startCall !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 + */ if ((pty_fd = startCall(pppaddrs, inetaddrs)) > maxfd) maxfd = pty_fd; *************** *** 595,600 **** --- 606,614 ---- #elif clientSocket > 1 close(clientSocket); #endif + /* + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! launch_pppd !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ launch_pppd(pppaddrs, inetaddrs); syslog(LOG_ERR, "CTRL: PPPD launch failed! (launch_pppd did not fork)"); _exit(1); *************** *** 620,625 **** --- 634,641 ---- { char *pppd_argv[14]; int an = 0; + char m[4][4]; // = {'\0','\0','\0','\0'}; + int z = 0; sigset_t sigs; pppd_argv[an++] = ppp_binary; *************** *** 739,744 **** --- 755,775 ---- pppd_argv[an++] = inet_ntoa(inetaddrs[1]); } + /* + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! PPP-INTERFACE OCTET !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ + + z = sscanf(inet_ntoa(inetaddrs[2]), "%s.%s.%s.%s", m[0], m[1], m[2], m[3]); + if ( z > 0 ) + { + pppd_argv[an++] = "unit"; + pppd_argv[an++] = m[3]; + syslog(LOG_DEBUG, "CTRL (PPP-INTERFACE OCTET): ( planed: ppp%s )", m[3]); + } else { + syslog(LOG_DEBUG, "CTRL (PPP-INTERFACE OCTET): ( NOT CONVERT ppp IFACE )"); + } + + /* argv arrays must always be NULL terminated */ pppd_argv[an++] = NULL; /* make sure SIGCHLD is unblocked, pppd does not expect it */ С вопросами - обращайтесь. З.Ы. Патч не претендует на лучшую реализацию, будут поправки - в студию.
  17. В дополнение к сказанному - для просветления понятий о ВПН := http://www.inode.ru/content/admin/2004/06/24/17_1088068255 http://opensource.fstyle.ru/index.php?opti...id=25&Itemid=27
  18. 1. - Авторизатор ИМХО можно не испльзовать, (или переделать его под запуск созданнго ВПН соеденения). Все необхдимое для поднятия ВПН есть в любых Вин и Юникс платфрмах. Детальн описано например: http://spacegate.com.ua/rus/install/vpnwin9x.html 2. Сервер должен запускать сеанс pppd при обращении - стветственно слушать порт 1723 3. Статистику должен сбирать СТГ, с помощью плагина к pppd. За оснву для изготовления плагина мжно взять ppp_radius плагин. Он с заданной передичнстью может сливать информацию о времени и трафике в СТГ. В принципе проще взять пакет pppd и ознакомиться с файлом PLUGINS в крневой деректории, там описано API взаимотношений pppd и возможных плагинов, есть примеры. P.S. Кстати, при этом подходе возможно использвать СТГ как билинг и для Dial-Up! 4.5. Убивать pppd по пиду через тот-же плагин. Кстати, там есть сответствующая функция.
  19. ПО пункту 3 - связка pptpd + pppd + плагин для pppd pppd_radius + *radius server. тлько завязываться на всю эту мутоту вместе ИМХО не имеет смысла при прикручивании к СТГ. Уж больно мнго разнообразного (кривоватого) софта (Радиус имелся в виду). 1. pptpd - собственно слушает порт 1723 и поднимает pppd. 2. в pppd происходит авторизация присвоение ИП итд, на сновании файла pap-secret или chap-secret, или через pppd_radius плугин путем запроса у радиус сервера. 3. Радиус сервер поддерживает верефикацию клиента на момент коннекта, аккаунтинг по времени, трафику итд. - но имеет ИМХО не чень удобный конфиг и вывод информации. 2.а pppd_radius - собственно вот этот плагин и надо переписать под протокол общения с СТГ.
  20. den68

    Stargazer-2 Hack

    Как-то не горячо воспринимается пддержка ВПН в СТГ, к сожалению.
  21. А за чем в схеме с ВПН иметь одинаквые IP, и впрос весьма спорный - как заламать ВПН при правильн поднятом файрволе между входным и выходным (ппп) интерфейсами. А тот факт что могут появиться два пользвателя с одним ИП в принципе исключен самой схемомой реализации: например пптпд или выделяет адрес из пула адресов, соответственно два раза один и тотже адрес он выделить не сможет, или адреса жестко привязаны к логину и паролю в файле *ap-secrets - что тоже исключает двойное назначение. И ествено поскольку линк Поинт-ту-Поинт пользователь не может поменять адрес на выходном интерфейсе, и т.д.
  22. Ну а зачем париться с этй тулзой и внедрять протокол радиуса в СТГ. Ты сам написал ответ - "отношение к VPN он имеет потомучто VPN использует pppd для которого существует плагин radius_client.o" - кстати плагинов к ПППД намного болеше, т третьих разработчиков. Так надо наваять собственный плагин, с протоколом к СТГ, тем более что исходники есть, там все довольно просто.
  23. В догонку - за основу подхода к проблеме можно взять плагин к пппд: http://www.chelcom.ru/~anton/projects/pppd-tacacs+radius/ http://www.chelcom.ru/~anton/projects/file...us-1.4.1.tar.gz и собственно изменить формат слива статистики (аккоунтига), + повыкидывать лишнее, приципить к СТГ килялку процесса ПППД с 0 или отрицательным балансом... :vah: (на первый взгляд)
  24. Да, я смотрел примеры плагинов для ПППД, он понимает , там есть реализация опроса. Я попозднее соберу все что у меня есть по данному поводу и кину тебе в мыло. Пока приведу пару ссылк: http://www.chelcom.ru/~anton/projects/pppd-stacker/ http://linux.uatel.net.ua/soft/ppp/ppp-verbose.phtml http://nsg.net.ru:8100/Lists/nsg-linux/Message/237.html http://nsg.net.ru:8100/Lists/nsg-linux/Message/232.html http://nsg.net.ru:8100/Lists/nsg-linux/Message/234.html http://freshmeat.net/projects/pppd-tacacsradius/ http://packages.debian.org/unstable/net/pppdcapiplugin.html мжно пйти и таким путем: http://nibs.net.ua/src/radpppd/radpppd.tgz http://nibs.net.ua/src/radpppd/ http://shs.sumy.ua/cgi-bin/index.cgi?actio...rch&type=recent
  25. Если всеже кому интересно видеть ВПН, давайте совместно примем усилия, например на исходниках СТГ1, там только интерфейсы по маске слушать, например ppp*. Или вообще от прослушивания отказаться и наваять внешний модуль к pppd, что-бы заливал статистику непосредственно в СТГ, но это ИМХО надо делать в цикле (например раз в 2-5 минут), кто с АПИ ПППД близко общался? В заключение еще базу пользователей в SQL перенести и будет тот самый НАТУР ПРОДУКТ о котором мечты. P.S. Билинг в первую голову должен отвечать требованиям безопасности ПОТРЕБЛЕНИЯ трафика, другими словами что-б трафик (деньги) не перли. При системе открытой сети, пусть и с авторизацией, никто не мешает прописать "хакеру" ИП и МАК того кто уже зарегистрировался в сети, и жрать его трафик по малу или по многу - в зависимости от настроения. С ВПН такая схема невозможна, у каждого свой интерфейс, а доступ пользователей можно регулировать добавлением/удалением ЛОГИН, ПАРОЛЬ,ИП в chap-secret например. В общем - кому интересна данная теме - пишите, вместе чего либо сваяем.
×
×
  • Створити нове...