Автор Тема: IMSLU- “Система за управление на интернета за потребители в локална мрежа”  (Прочетена 13928 пъти)

kiss

  • Участник
  • *****
  • Публикации: 1
    • Профил
Мисля, че оправих проблемите с CSRF и XSS в Профил, Редактиране на потребител и Плащания на потребителя.
Работя и по другите станици. Ако може да тествате, за да съм сигурен, че всичко е наред.

не е зле на paymenta като се кликне да има javascript който да чеква сумата и да пита дали е приета или ако не е да има кенсълиране, друго което мога да ти вметна е да има сторниране от страна на sysadmin:)
Активен

mystical

  • Участник
  • *****
  • Публикации: 326
  • Distribution: Debian, FreeBSD
  • Window Manager: XFCE
    • Профил
    • WWW
не е зле на paymenta като се кликне да има javascript който да чеква сумата и да пита дали е приета или ако не е да има кенсълиране, друго което мога да ти вметна е да има сторниране от страна на sysadmin:)
Ако влезеш в системата като касиер ще видиш, че касиера нямаправо да променя сумата и датата, на която изтича плащането.
Всяка скорост (Тарифен план) има собствена цена, която се взема и добавя автоматично в полето за плащане, освен ако администратора не е задал друга сума за конкретния потребител. В този случай се взема сумата на конкретния потребител.
Администратора може освен това да променя сумата и датата в полето за плащане. Ако има проблеми, може да се кликне на "ID" за съответното плащане и да се промени крайна дата или сумата. Също така може да се изтрие и самото плащане.
Всяка промяна или изтриване на плащане се записва:
Audit->на Resource->се избира Payments->Show
Audit->тук може да се изберат и по-конкретни действия Action->Resource->се избира Payments->Show

Също на "ID" за съответния лог има по-подробна информация.
« Последна редакция: Сеп 29, 2013, 22:27 от mystical »
Активен

Ако не можеш да градиш, поне не руши!

mystical

  • Участник
  • *****
  • Публикации: 326
  • Distribution: Debian, FreeBSD
  • Window Manager: XFCE
    • Профил
    • WWW
След дълго търсене и ровене, мисля, че ако искате да пренасочвате потребители с изтекла дата за предоставената услуга към ваша уеб страница, conntrack НЕ МОЖЕ, да се спре.
След като стигнах до този извод, реших малко да оптимизирам нещата в "/etc/sysctl.conf", което изглежда така:
Код
GeSHi (Bash):
  1. kernel.pid_max = 65536
  2. kernel.randomize_va_space = 1
  3.  
  4. net.core.wmem_max = 11534336
  5. net.core.rmem_max = 11534336
  6.  
  7. net.ipv4.tcp_synack_retries = 3
  8. net.ipv4.tcp_syncookies = 1
  9. net.ipv4.tcp_max_syn_backlog = 2048
  10.  
  11. net.ipv4.tcp_wmem = 4096 87380 11534336
  12. net.ipv4.tcp_rmem = 4096 87380 11534336
  13.  
  14. #net.netfilter.nf_conntrack_expect_max = 4096
  15. #net.ipv4.netfilter.ip_conntrack_generic_timeout = 600
  16. #net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 5
  17. #net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent2 = 5
  18. #net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 5
  19. #net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 86400
  20. #net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 10
  21. #net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 10
  22. #net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 10
  23. #net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 10
  24. #net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 10
  25. #net.ipv4.netfilter.ip_conntrack_tcp_timeout_max_retrans = 300
  26. #net.ipv4.netfilter.ip_conntrack_tcp_loose = 1
  27. #net.ipv4.netfilter.ip_conntrack_tcp_be_liberal = 0
  28. #net.ipv4.netfilter.ip_conntrack_tcp_max_retrans = 3
  29. #net.ipv4.netfilter.ip_conntrack_udp_timeout = 10
  30. #net.ipv4.netfilter.ip_conntrack_udp_timeout_stream = 180
  31. #net.ipv4.netfilter.ip_conntrack_icmp_timeout = 10
  32. #net.ipv4.netfilter.ip_conntrack_max = 16777216
  33.  
  34. net.ipv4.conf.all.accept_redirects = 0
  35. net.ipv4.conf.all.rp_filter = 1
  36. net.ipv4.conf.all.accept_source_route = 0
  37. net.ipv4.conf.all.log_martians = 0
  38. net.ipv4.conf.all.arp_filter = 1
  39. net.ipv4.conf.all.arp_announce = 2
  40. net.ipv4.conf.all.arp_ignore = 1
  41.  
  42. net.ipv4.conf.default.accept_redirects = 0
  43. net.ipv4.conf.default.rp_filter = 1
  44. net.ipv4.conf.default.accept_source_route = 0
  45. net.ipv4.conf.default.log_martians = 0
  46. net.ipv4.conf.default.arp_filter = 1
  47. net.ipv4.conf.default.arp_announce = 2
  48. net.ipv4.conf.default.arp_ignore = 1
  49.  
  50. net.ipv4.icmp_echo_ignore_broadcasts = 1
  51. net.ipv4.icmp_ignore_bogus_error_responses = 1
  52.  
  53. net.ipv6.conf.default.accept_redirects = 0
  54. net.ipv6.conf.default.accept_source_route = 0
  55.  
  56. net.ipv4.ip_forward = 1
  57.  
sysctl -p

В "/etc/rc.local" се добавя:
Код
GeSHi (Bash):
  1. #!/bin/sh -e
  2.  
  3. #modprobe ip_conntrack
  4. sysctl -p
  5. # change hashsize on the fly
  6. #echo 4194304 > /sys/module/nf_conntrack/parameters/hashsize
  7. # check current hashsize
  8. #cat /sys/module/nf_conntrack/parameters/hashsize
  9. # check current tracked connections
  10. #cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count
  11.  
  12. #/etc/imslu/scripts/global_rules.py
  13. # OR
  14. #/etc/imslu/scripts/global_rules_vlans.py
  15.  

Тези правила все още не са тествани в реална среда. Имат за цел да предпазят сървъра от определени атаки и в същото време да отстранят проблемите с conntrack.

Дали ще има инмормация за публични IP адреси, които се маршрутизират директно (не минават през NAT), във файла "/proc/net/ip_conntrack". Идеята е от някъде да вземам инфо, за всички активни IP адреси в локална мрежа и тази информация да се вижка в уеб интерфейса, под формата на "online" или "offline". Но за тази цел искам да използвам съществуваща информация в линукс.
Има ли друг файл подобен на  "/proc/net/ip_conntrack", от където мога да взема информация. Изключвам "/proc/net/tcp" и "/proc/net/udp", които съдържат информация за отворените tcp и udp сокети за връзки към самия сървър.
« Последна редакция: Окт 23, 2013, 23:40 от mystical »
Активен

Ако не можеш да градиш, поне не руши!

10101

  • Участник
  • *****
  • Публикации: 322
  • Distribution: GNU LINUX
    • Профил
 cat /proc/net/pppoe
Id       Address              Device
00005E01 00:0d:61:18:7b:27 vlan2013
0000F200 00:18:4d:86:1b:7f vlan2009
00004301 00:0c:f6:31:f8:25 vlan0067
0000E801 00:1e:58:11:77:73 vlan2029
0000A600 c8:3a:35:1c:14:3d vlan2007
00005401 00:1e:58:11:77:77 vlan2029
0000E100 1c:c1:de:9e:a3:33 vlan2032
0000B200 00:a1:b0:00:4b:36 vlan0067
00009A00 c8:3a:35:60:ad:95 vlan0067
00001A00 00:c0:26:74:05:3f vlan2007
00002301 a0:f3:c1:79:c5:71 vlan2007
00007F00 00:18:4d:8b:fa:05 vlan2029
0000F000 00:16:36:b6:27:d4 vlan0067
00000101 00:23:cd:17:47:c5 vlan2013

това показва активтите mac адреси тоест логнати потребители
това естествено е на pppoe сървъра.
можеш да си правиш база с физически адреси при логването на потребителя и така ще имаш кой е на линия и кой не е

За dhcp сървър arping .... или web login за dhcp сървър(клиента се логва с юзер и парола), като на микротик hotspot-a.Тогава отпада редиректа, при неплащане.

« Последна редакция: Окт 17, 2013, 17:47 от 10101 »
Активен

А печат ?

mystical

  • Участник
  • *****
  • Публикации: 326
  • Distribution: Debian, FreeBSD
  • Window Manager: XFCE
    • Профил
    • WWW
можеш да си правиш база с физически адреси при логването на потребителя и така ще имаш кой е на линия и кой не е
Колкото и да не ми се иска, за момента ще използвам "/proc/net/ip_conntrack" в "info" и "edit" за съответния потребител. Решението е просто:
Код
GeSHi (Bash):
  1. # Get info for active IP addresses from file /var/log/ip_status.log.
  2. */5 * * * * root awk '!a[$11]++ { print substr($11,5) }' /var/log/ip_status.log > /tmp/imslu_online_ip_addresses.tmp && cat /dev/null > /var/log/ip_status.log
  3.  
  4. # Get info for active IP addresses from file /proc/net/ip_conntrack.
  5. #*/5 * * * * root awk '{ if ($1 == "tcp" && $4 == "ESTABLISHED" && !a[$5]++) print substr($5,5); else if ($1 == "udp" && !a[$4]++) print substr($4,5); else if ($1 == "icmp" && !a[$4]++) print substr($4,5); }' /proc/net/ip_conntrack > /tmp/imslu_online_ip_addresses.tmp
  6.  
  7. # Get info for active IP addresses from file /proc/net/ip_conntrack. This script will find only IP addresses from network 10.111.2
  8. #*/5 * * * * awk '{ if ($1 == "tcp" && $4 == "ESTABLISHED" && substr($5,5,8) == "10.111.2" && !a[$5]++) print substr($5,5); else if ($1 == "udp" && substr($4,5,8) == "10.111.2" && !a[$4]++) print substr($4,5); else if ($1 == "icmp" && substr($4,5,8) == "10.111.2" && !a[$4]++) print substr($4,5); }' /proc/net/ip_conntrack > /tmp/imslu_online_ip_addresses.tmp

Първият вариянт взима всички активни IP  адреси на всеки 5 минути, а вторият взима всички активни IP адреси от мрежа "10.111.2" на всеки 5 минути и ги записва в " /tmp/imslu_online_ip_addresses.tmp". След което php чете от " /tmp/imslu_online_ip_addresses.tmp" и сравнява, ако IP  адреса е там - статус "online", ако не  - статус "offline". При втория вариянт php би използвал сравнително по-малко ресурси за обработка на информацията, за сметка на awk.

За dhcp сървър arping .... или web login за dhcp сървър(клиента се логва с юзер и парола), като на микротик hotspot-a.Тогава отпада редиректа, при неплащане.
Този метод ми се струва труден за прилагане. Системата поддържа и PPPoE сесии, която възможност може да замени това. dhcp мисля, че не е добър избор, за професионални мрежи, понеже кабел поставен в грешна дупка на рутер, ще обърка много неща, и ще създаде доста излишна работа.

Благодаря за предложенията.
« Последна редакция: Окт 25, 2013, 22:42 от mystical »
Активен

Ако не можеш да градиш, поне не руши!

mystical

  • Участник
  • *****
  • Публикации: 326
  • Distribution: Debian, FreeBSD
  • Window Manager: XFCE
    • Профил
    • WWW
Хрумна ми следната идея, за пренасочване на неплатили потребители към уеб страница на доставчика с ИЗКЛЮЧЕН conntrack.

В експеримента използвам три компютъра:
- главен сървър с vlan-ни
- втори сървър - vlan21; IP: 10.111.2.5
- потребител -  vlan11; IP: 10.111.2.6, на който е спрян интернета.

Трафика на неплатилите потребители се маршрутизира към  втория линукс сървър. За целта са необходими следните неща:

1. Да се добави нова таблица за маршрутизиране
Код
GeSHi (Bash):
  1. echo "3 EXPIRED" >> /etc/iproute2/rt_tables
  2.  
2. Втори линукс сървър, който ще следи за трафик от съответните мрежи и ще го пренасочва към себе си.
Код
GeSHi (Bash):
  1. iptables -t nat -A PREROUTING ! -d 10.111.2.5 -p tcp --dport 80 -j REDIRECT --to-ports 80
  2.  
3. След като знаем IP адреса и VLAN-а на този сървър, добавяме рутиращи правила в ново създадената таблица в главния сървър
Код
GeSHi (Bash):
  1. ip route add default via 10.111.2.5 dev vlan21 table EXPIRED
  2. ip rule add from 10.111.2.6/32 lookup EXPIRED

Бележка:
Първоначалните тестове минаха успешно!
Заменям "ipset" с "ip rule" в pytho скриптовете и уеб интерфейса. Когато всичко е готово, ще добавя новата версия.
Този метод ще минимизира натоварването върху сървъра.
« Последна редакция: Окт 23, 2013, 23:47 от mystical »
Активен

Ако не можеш да градиш, поне не руши!

martos

  • Участник
  • *****
  • Публикации: 110
    • Профил
    • WWW
Може много лесно да се направи пренасочването с "ip rule" без да товариш излишно с CONNTRACK.

Активен

edmon

  • Гост
нали е пппое, когато достъпът на потребителя не е валиден по някаква причина,
просто му дай друго ип и друг гейт!  :)
Активен

mystical

  • Участник
  • *****
  • Публикации: 326
  • Distribution: Debian, FreeBSD
  • Window Manager: XFCE
    • Профил
    • WWW
PPPoE и/или статични IP адреси (извън PPPoE).
Само PPPoE в някои случаи остава недостатъчно.

След като проблема с conntrack е решен, остава въпроса с информацията за активните IP адреси.

Не можах да измисля нищо читаво, колкото и да не ми се иска, за момента мисля да използвам "-j LOG".
Код
GeSHi (Bash):
  1. iptables -A FORWARD -s 10.111.2.0/24 -m limit --limit 3/s --limit-burst 1 -j LOG --log-level info --log-prefix "IP_STATUS: "

nano /etc/rsyslog.d/ip_status.conf
Код
GeSHi (Bash):
  1. :msg, regex, "^\[ *[0-9]*\.[0-9]*\] IP_STATUS: " -/var/log/ip_status.log
  2. & ~
/etc/init.d/rsyslog restart

cat /var/log/ip_status.log

Този метод е отворен към големи статистически грешки. В конкретния случай,  през 3 секунди ще записва информаци за един пакет от произволнен IP адрес от мрежа 10.111.2.0/24.
Съмнително е, колко реална може да бъде информацията. А ако води отчет за повече пакети, лавинообразно ще се увеличи и използването на ресурси от iptables и awk.
« Последна редакция: Окт 25, 2013, 00:12 от mystical »
Активен

Ако не можеш да градиш, поне не руши!

mystical

  • Участник
  • *****
  • Публикации: 326
  • Distribution: Debian, FreeBSD
  • Window Manager: XFCE
    • Профил
    • WWW
Проекта се хоства в https://sourceforge.net/projects/imslu/, от където може да следите за нови версии.

Последна версия на разработчиците.
git clone https://github.com/mysticall/imslu.git

Имайте в предвид, че до излизане на стабилна версия, новите промени може да изискат и нова инсталация на системата.

Може да има грешки в описанието, използвано е google за превод.  :)
« Последна редакция: Ное 19, 2013, 22:02 от mystical »
Активен

Ако не можеш да градиш, поне не руши!

Naka

  • Участник
  • *****
  • Публикации: 2630
    • Профил
А така?

Цитат
The system performs administration of the users with Internet access through a static IP addresses or PPPoE sessions, limits their speed and automatically stops the service provided after a specified date.

Много често се налага да се пуска някаква информация или документация на Чужд език. Затова според мен ако се ползва например гого за превод (или друг сървис) правилният подход е следният:

Пуска се текста машинно преведен. Обаче най-отдолу пишем:
Мachine Тranslated
Original text (Bulgarian):

Така хем вълкът сит, хем агнето цяло. Никой няма да се възмути защо е толкова кофти езика - Най отдолу си пишем, че е машинно преведен. А пък за да няма двусмислици и неправилно разбиране на прочетеното - даваме и ликн към оригиналният текст. Който иска да си го сравнява и да си го превежда както ще. Мисля че този подход е и юридически правилен.
 


« Последна редакция: Ное 18, 2013, 00:06 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

mystical

  • Участник
  • *****
  • Публикации: 326
  • Distribution: Debian, FreeBSD
  • Window Manager: XFCE
    • Профил
    • WWW
Благодаря на всички, които са взели участие в темата и са допринесли за развитието на системата. Прочетох темата отново, след толкова години и ми подейства добре.
Някой има ли информация за gat3way?

Малко информация за това какво се случва с проекта.

След като имаше нещо работещо, макар и с доста въпросителни относно използваните решения, не се занимавах сериозно със системата.
Еднин администратор се престраши да я използва в реална среда и оправях само бъговете, които намираше. Според хронологията в github, това е продължило до Apr 8, 2015.

Във фирма, където работя, мигрирахме на Ipacct. След като видях, какво са направили хората, тотално изоставих проекта. Това продължи към една година. Вече не помня, какво ме мотивира да започна, отново да разработвам проекта.
Част от отговорите, които търсех преди, за да мога, да продължа с развитието на системата, бяха в Ipacct. Но тези от вас, които са имали достъп до Ipacct, добре знаят, че Боян добре се е погрижил, за да заключи системата  :) Поздрави на Боян, въпреки, че Ipacct е комерсиален продук, има голяма заслуга за развитието на много интернет доставчици в България! Също много поздрави и на колегата networker, който сподели опита си с мен, за да се спра на работещи решения.

След доста работа, която продължи по-малко от колкото очаквах, около 2-3 месеца голяма част от системата беше променена. Няма да се спирам подробно на промените, най-важните ги описах тук. Какъв е резултата?

Ако не са ми дали грешна информация, новата версия на системата поддържа 1000+ PPPoE потребителя и 1 - 2Gb трафик с 6 ядрен xeon (старо поколение).

Мисля, че постигнах първоначалните си цели. Създадох алтернатива на комерсиалните продукти. Какво следва?

freebsd-11-howto свърших с голяма част от интеграцията на системата. Остана да разгледам как стоят нещата с mpd5 и dns сървърите под FreeBSD. Нямам информация, някой да използва системата под FreeBSD и за това не си давам много зор.

Ако някой иска да помогне с развитието на системата, всяка помощ е добре дошла. Ако изпратите "pull request" през github, още по-добре  :)
Активен

Ако не можеш да градиш, поне не руши!

go_fire

  • Участник
  • *****
  • Публикации: 5169
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Кой е този  Боян?!? Оня идиот от StorePull?

Твоето нещо ползва bash. По политически причини във FreeBSD се избягва ГНУ. Никой няма да го ползва там.

Поздрави за добрата работа!

Мога само да кажа — браво!

Макар за мен това да не е полезно по никакъв начин, вярвам, че ще има много заинтересовани.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

mystical

  • Участник
  • *****
  • Публикации: 326
  • Distribution: Debian, FreeBSD
  • Window Manager: XFCE
    • Профил
    • WWW
Боян Бонев - ipacct.com

Всички скриптове за FreeBSD са пренаписани на sh, примерен скрипт shaper.sh. Bourne Shell е писан за Unix и почти всички скриптове във FreeBSD са на Bourne Shell.
Активен

Ако не можеш да градиш, поне не руши!

go_fire

  • Участник
  • *****
  • Публикации: 5169
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Значи е някакъв друг Боян, дето не го знам.

В описанието на програмата пишеш, че всичко е пренаписано на Bash. Преди на какво е било? Браво, че си помислил за FreeBSD!

п.п. Гейта понякога рядко се вясва в Dev BG. Най-лесно можеш да се свържеш с него през Twitter. Gat3way.eu гледам, че нещо е побягнал, няма го. Не знам дали за постоянно.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear