Page 1 of 15 12311 ... LastLast
Results 1 to 15 of 220

Thread: Статистика и ограничение доступа по ip и mac

  1. #1
    Join Date
    Apr 2009
    Location
    Тамбов
    Posts
    123

    Post Статистика и ограничение доступа по ip и mac

    Новый скрипт (февраль 2011)
    Старую версию перенес сюда.

    Для работы этого скрипта необходимы установленные и настроенные пакеты lighttpd, php и cron.

    Для чего этот скрипт:
    Этот скрипт предназначен только для подсчета трафика. Также в нем существует возможность автоматически отключать интернет пользователям, которые превысили лимит трафика за месяц.

    Настройка подсчета трафика

    1.Создаем директории и необходимые файлы
    Code:
    touch /usr/local/sbin/lst/ip_piring.lst
    touch /usr/local/sbin/makestat
    touch /usr/local/sbin/makefilter
    chmod +x /usr/local/sbin/makestat
    chmod +x /usr/local/sbin/makefilter
    распаковываем содержимое statistic.zip в DocumentRoot lighttpd (/opt/share/www/)

    2.Создаем таблицу пользователей
    Code:
    touch /usr/local/etc/ethers
    в этот файл (/usr/local/etc/ethers) вписываем MAC и IP адреса пользователей для которых хотим открыть доступ к интернету и считать статистику
    Пример:
    Code:
    00:00:1c:1c:1a:00 192.168.1.2
    00:00:11:11:11:00 192.168.1.11
    00:00:1a:1a:1a:00 192.168.1.15
    После последнего пользователя необходимо ставить перевод строки.

    3.Создаем файл с пиринговыми сетями провайдера
    У моего провайдера есть пиринговые зоны для которых я хочу отдельно считать статистику
    В файл /usr/local/sbin/lst/ip_piring.lst пишем пиринговые зоны провайдера.
    Мой файл выглядит так (провайдер Домолинк-Тамбов):
    Code:
    78.132.128.0/17
    213.135.128.0/19
    193.203.60.0/22
    93.186.96.0/20
    193.33.62.0/23
    91.202.20.0/22
    193.34.12.0/22
    82.179.144.0/20
    195.19.96.0/19
    178.75.64.0/18
    4.Редактируем crontab
    Добавляем строчку
    Code:
    4-59/5 * * * * root cd /opt/share/www/statistic/ &&  /opt/bin/php ./billing.php > /dev/null 2>&1
    Будьте внимательны: если у вас имя пользователя отличается от root и DocumentRoot отличается от /opt/share/www/, то пропишите свои значения.

    5.Редактируем файл /usr/local/sbin/post-firewall
    Добавляем в него
    Code:
    #!/bin/sh
    /usr/local/sbin/makefilter
    - ограничение доступа в интернет по mac и ip.
    Фильтр работает независимо от того подключен или не подключен у вас жесткий диск/флешка.

    6.Редактируем файл /usr/local/sbin/makefilter
    код скрипта в прикрепленном файле

    7.Добавляем цепочки для подсчетата трафика:
    В файл /usr/local/sbin/post-boot добавим строчки:
    Code:
    #!/bin/sh
    /usr/local/sbin/makestat
    8.Редактируем файл /usr/local/sbin/makestat
    код скрипта в прикрепленном файле

    Сделаем файлы исполняемыми
    Code:
    chmod +x /usr/local/sbin/post-firewall
    chmod +x /usr/local/sbin/post-boot
    Code:
    flashfs save && flashfs commit && flashfs enable
    Можно запустить подсчет трафика не перезагружая роутер запустив:
    Code:
    /usr/local/sbin/makefilter
    /usr/local/sbin/makestat
    Дополнительно
    Если у вас не безлимитный трафик и необходимо отключать интернет пользователям при достижении определенного лимита внешнего трафика, делаем следующие:

    Разархивируйте limit.php (из архива limit.zip) в каталог со статистикой (/opt/share/www/statistic/).
    В каталоге billing (/opt/share/www/statistic/billing) создайте файл limit
    с таким форматом
    1)ip-адрес пользователя; 2)лимит входящего трафика; 3)лимит исходящего трафика; 4)суммарный лимит трафика.
    все лимиты задаются в мегабайтах
    например:
    Code:
    192.168.100.97 1750 275 2010
    Все лимиты задаются целыми числами.
    пользователю дано 1750МБ входящего, 275МБ исходящего трафик и 2010МБ суммарного трафика (входящий+исходящий). При достижении пользователем хотя бы одного из ограничений он будет отключен.
    В этот файл можно не вписывать всех пользователей, если мы не хотим задавать для них лимит.

    + Необходимо настроить кроны:
    В кронтаб добавить:
    Code:
    */5 * * * * root cd /opt/share/www/statistic/ &&  /opt/bin/php ./limit.php > /dev/null 2>&1
    1 0 1 * * root /user/local/sbin/makefilter
    Будьте внимательны: если у вас имя пользователя отличается от root и DocumentRoot отличается от /opt/share/www/, то пропишите свои значения.
    Первого числа каждого месяца все пользователи, заблокированные по лимиту трафика, будут разблокированы.


    Дополнительно у меня работает nshaper http://wl500g.info/showpost.php?p=161206&postcount=138
    сам скрипт у меня находится здесь /user/local/sbin/nshaper чтоб работать независимо от подключенной флешки/жесткого диска
    В настройках nshaper необходимо прописать путь к уже созданным файлам
    Code:
    # zone IP files search path
    ZONE_PATH="/usr/local/sbin/lst/ip_%ZONE%.lst"
    В /usr/local/sbin/post-firewall добавить строчку
    Code:
    /usr/local/sbin/nshaper start
    для сохранения настроек выполнить
    Code:
    flashfs save && flashfs commit && flashfs enable && reboot


    Немного о работе скрипта:
    Статистику смотрим http://192.168.1.1:8081/statistic/ или там где у вас находится роутер и настроен lighttpd.
    Скрипт считает весь трафик проходящий через роутер к пользователям прописанным в /usr/local/etc/ethers и внешний трафик самого роутера.
    World - внешний трафик (Интернет).
    City - пиринговый трафик (заданный в файле ip_piring.lst).

    DELTA - трафик за последние 5 минут.

    Содержимое страниц обновляется раз в 5 минут.

    Подсчет статистики за новый месяц будет начнется "с чистого листа". Статистику за прошлые месяцы работы скрипта можно будет посмотреть по адресу http://192.168.1.1:8081/statistic/2010-08.html - август 2010 года (аналогично другие месяцы).
    Attached Images Attached Images  
    Attached Files Attached Files
    Last edited by KinoMan; 28-02-2011 at 17:13. Reason: UPDATE

  2. #2
    К этому добавить бы ограничение скорости по IP download/upload
    D-link DIR-320 (1.9.2.7-d-r1000) rTorrent ...

  3. #3
    Join Date
    Apr 2009
    Location
    Тамбов
    Posts
    123
    Quote Originally Posted by rromcic View Post
    К этому добавить бы ограничение скорости по IP download/upload
    А зачем жестко резать скорость?
    Ведь есть nshaper.

    Если вам очень надо повысить приоритет для конкретного ip, то посмотрите тут http://wl500g.info/showthread.php?p=175534#post175534

  4. #4
    Quote Originally Posted by KinoMan View Post
    А зачем жестко резать скорость?
    Ведь есть nshaper.

    Если вам очень надо повысить приоритет для конкретного ip, то посмотрите тут http://wl500g.info/showthread.php?p=175534#post175534
    Мне просто нужно каждому юзеру поставить 2048/128 кб, с download работает даже через веб настройки а upload пока никак.
    D-link DIR-320 (1.9.2.7-d-r1000) rTorrent ...

  5. #5
    Join Date
    Mar 2009
    Location
    Minsk, Belarus
    Posts
    71
    Неплохо),
    Мот кто напишет статистику для tc на shell-e?
    Code:
    tc -s class ls dev imq1
    class htb 1:11 parent 1:1 leaf 11: prio 1 rate 320Kbit ceil 1900Kbit burst 1499b cburst 4031b
     Sent 155843415 bytes 131248 pkts (dropped 0, overlimits 0)
     rate 137794bps 114pps
     lended: 26123 borrowed: 105125 giants: 0
     tokens: -57391 ctokens: 19449
    
    class htb 1:1 root rate 2000Kbit ceil 2000Kbit burst 15Kb cburst 4159b
     Sent 176398358 bytes 150395 pkts (dropped 0, overlimits 0)
     rate 176660bps 149pps
     lended: 110878 borrowed: 0 giants: 0
     tokens: 94915 ctokens: 13567
    
    class htb 1:13 parent 1:1 leaf 13: prio 5 rate 320Kbit ceil 1900Kbit burst 1499b cburst 4031b
     Sent 10200866 bytes 7304 pkts (dropped 0, overlimits 0)
     rate 11652bps 8pps
     lended: 5563 borrowed: 1741 giants: 0
     tokens: -20903 ctokens: 19279
    
    class htb 1:12 parent 1:1 leaf 12: prio 1 rate 6Kbit ceil 6Kbit burst 1499b cburst 1606b
     Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
     lended: 0 borrowed: 0 giants: 0
     tokens: 3631591 ctokens: 3890643
    
    class htb 1:15 parent 1:1 leaf 15: prio 5 rate 320Kbit ceil 1900Kbit burst 1499b cburst 4031b
     Sent 10353988 bytes 11842 pkts (dropped 0, overlimits 0)
     rate 23987bps 23pps
     lended: 7831 borrowed: 4011 giants: 0
     tokens: -14343 ctokens: 22696
    
    class htb 1:14 parent 1:1 leaf 14: prio 0 rate 320Kbit ceil 1900Kbit burst 1499b cburst 4031b
     Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
     lended: 0 borrowed: 0 giants: 0
     tokens: 68092 ctokens: 30824
    чтоб из этого такаяжа краста получилась. а то мои мысли заши в тупик.
    вот то что есть:
    Code:
    cat stat 
    #!/bin/sh                              
    TC="tc -s class ls dev"                                                
    $TC  imq1 | awk '                                
    BEGIN{user=0;rate=0}                             
    {                                                
     #if(user != 0){rate=0;user=0}                   
     if($1 == "class"){                              
       if($3 == "1:1"){user="common"}                
       if($3 == "1:11"){user="user1"}              
       if($3 == "1:12"){user="user2"}             
       if($3 == "1:13"){user="user3"}             
       if($3 == "1:14"){user="user4"}
       if($3 == "1:15"){user="user5"}
     }
      if($1 == "rate"){rate=$2}
     if(rate != 0){
      print(user,rate)
      user=0
      rate=0
     }
    }
    END{}' | sort
    Last edited by lsd_wiz; 18-01-2010 at 21:45.

  6. #6
    Join Date
    Oct 2008
    Location
    Saint-Petesburg, Russia
    Posts
    253
    Не сочтите за придирку, но мне кажется, что вместо:
    Quote Originally Posted by KinoMan View Post
    awk '{system("iptables -A STAT_IP -s "$2" -j RETURN")
    system("iptables -A STAT_IP -d "$2" -j RETURN"); }' < /etc/ethers
    Вы хотели написать:
    Code:
    awk '{system("iptables -A STAT_IP -s "$2" -j RETURN")
    system("iptables -A STAT_IP -d "$2" -j RETURN");  }' < /usr/local/etc/ethers
    Quote Originally Posted by akm2008 View Post
    Подскажите как с эти бороться ???
    Я детально не разбирался и списал это на то, что запускал скрипт end, когда еще не все было настроено. Поэтому тупо грохнул (вместе со статистикой!) файлы:
    /opt/share/www/statistic/index.html
    /opt/Billing/users/*
    /opt/Billing/total
    и перезагрузил.... вот.
    Last edited by Omega; 20-11-2011 at 15:28. Reason: fixed
    WL500gp-1.9.2.7-d-r2624

  7. Quote Originally Posted by GUID View Post
    Я детально не разбирался и списал это на то, что запускал скрипт end, когда еще не все было настроено. Поэтому тупо грохнул (вместе со статистикой!) файлы:
    /opt/share/www/statistic/index.html
    /opt/Billing/users/*
    /opt/Billing/total
    и перезагрузил.... вот.
    хм.... сейчас сел чтоб подправить и чудо новые сутки пошли без проблем )))

  8. #8
    Join Date
    Apr 2009
    Location
    Тамбов
    Posts
    123
    Строки с нулями появляются при перезагрузке роутера видимо в тот момент когда срабатывает скрипт. За 2 месяца у меня такое было 1 раз.
    Как исправить:
    зайти в /opt/Billing/users/
    найти файл с датой, где появились нули
    открыть его и отредактировать, удалив первые несколько строчек с нулями.

    Quote Originally Posted by GUID View Post
    Не сочтите за придирку, но мне кажется, что вместо:

    Вы хотели написать:
    Code:
    awk '{system("iptables -A STAT_IP -s "$2" -j RETURN")
    system("iptables -A STAT_IP -d "$2" -j RETURN");  }' < /usr/local/etc/ethers
    Исправил. но это не существенно.
    Last edited by KinoMan; 11-02-2010 at 20:51.

  9. #9
    Join Date
    Apr 2009
    Location
    Тамбов
    Posts
    123
    Старый скрипт
    (ноябрь 2010)


    Для работы этого скрипта необходимы установленные и настроенные пакеты lighttpd, php, cron и gawk.

    Для чего этот скрипт:
    Этот скрипт предназначен только для подсчета трафика. Также в нем существует возможность автоматически отключать интернет пользователям, которые превысили лимит трафика за месяц.

    Настройка подсчета трафика

    1.Создаем директории и необходимые файлы
    Code:
    mkdir /opt/etc/billing
    mkdir /opt/etc/billing/city
    mkdir /opt/etc/billing/world
    mkdir /opt/etc/billing/router
    mkdir /opt/share/www/statistic
    touch /opt/etc/cron.5mins/billing
    chmod +x /opt/etc/cron.5mins/billing
    touch /opt/etc/billing/limit
    touch /usr/local/sbin/lst/ip_piring.lst
    touch /usr/local/sbin/makestat
    touch /usr/local/sbin/makefilter
    chmod +x /usr/local/sbin/makestat
    chmod +x /usr/local/sbin/makefilter
    2.Создаем таблицу пользователей
    Code:
    touch /usr/local/etc/ethers
    в этот файл (/usr/local/etc/ethers) вписываем MAC и IP адреса пользователей для которых хотим открыть доступ к интернету и считать статистику
    Пример:
    Code:
    00:00:1c:1c:1a:00 192.168.1.2
    00:00:11:11:11:00 192.168.1.11
    00:00:1a:1a:1a:00 192.168.1.15
    После последнего пользователя необходимо ставить перевод строки.

    3.Создаем файл с пиринговыми сетями провайдера
    У моего провайдера есть пиринговые зоны для которых я хочу отдельно считать статистику
    В файл /usr/local/sbin/lst/ip_piring.lst пишем пиринговые зоны провайдера.
    Мой файл выглядит так (провайдер Домолинк-Тамбов):
    Code:
    78.132.128.0/17
    213.135.128.0/19
    193.203.60.0/22
    93.186.96.0/20
    193.33.62.0/23
    91.202.20.0/22
    193.34.12.0/22
    82.179.144.0/20
    195.19.96.0/19
    4.Для того чтобы задать лимиты трафика пользователям необходимо:
    отредактировать файл /opt/etc/billing/limit
    формат файла таков
    1)ip-адрес пользователя; 2)лимит входящего трафика; 3)лимит исходящего трафика; 4)суммарный лимит трафика.
    все лимиты задаются в мегабайтах
    например:
    Code:
    192.168.1.2 10 1.0e+20 500
    После последнего пользователя необходимо ставить перевод строки.

    пользователю дано 10МБ входящего, практически не ограниченный исходящий трафик и 500МБ суммарного трафика (входящий+исходящий). При достижении пользователем хотя бы одного из ограничений он будет отключен.
    В этот файл можно не вписывать всех пользователей, если мы не хотим задавать для них лимит. У меня например этот файл пустой.

    5.Редактируем файл /opt/etc/cron.5mins/billing
    код скрипта в прикрепленном файле

    6.Редактируем файл /opt/share/www/statistic/index.php
    код скрипта в прикрепленном файле

    7.Редактируем файл /usr/local/sbin/post-firewall
    Добавляем в него
    Code:
    #!/bin/sh
    /usr/local/sbin/makefilter
    - ограничение доступа в интернет по mac и ip.
    Фильтр работает независимо от того подключен или не подключен у вас жесткий диск/флешка.

    8.Редактируем файл /usr/local/sbin/makefilter
    код скрипта в прикрепленном файле

    9.Добавляем цепочки для подсчетата трафика:
    В файл /usr/local/sbin/post-boot добавим строчки:
    Code:
    #!/bin/sh
    /usr/local/sbin/makestat
    10.Редактируем файл /usr/local/sbin/makestat
    код скрипта в прикрепленном файле

    Сделаем файлы исполняемыми
    Code:
    chmod +x /usr/local/sbin/post-firewall
    chmod +x /usr/local/sbin/post-boot
    Code:
    flashfs save && flashfs commit && flashfs enable && reboot
    Дополнительно у меня работает nshaper http://wl500g.info/showpost.php?p=161206&postcount=138
    сам скрипт у меня находится здесь /user/local/sbin/nshaper чтоб работать независимо от подключенной флешки/жесткого диска
    В настройках nshaper необходимо прописать путь к уже созданным файлам
    Code:
    # zone IP files search path
    ZONE_PATH="/usr/local/sbin/lst/ip_%ZONE%.lst"
    В /usr/local/sbin/post-firewall добавить строчку
    Code:
    /usr/local/sbin/nshaper start
    для сохранения настроек выполнить
    Code:
    flashfs save && flashfs commit && flashfs enable && reboot
    Немного о работе скрипта:
    Статистику смотрим http://192.168.1.1:8081/statistic/ или там где у вас находится роутер и настроен lighttpd.
    Скрипт считает весь трафик проходящий через роутер к пользователям и внешний трафик самого роутера.
    World - внешний трафик (Интернет).
    City - пиринговый трафик (заданный в файле ip_piring.lst).

    DELTA - трафик за последние 5 минут.
    Если были заданы лимиты для пользователей, то для этих пользователей будет отображаться графа с остатком (BALANCE).
    Порядок отображения пользователей в браузере точно такой же, как вы задали в файле ethers. Для поля BALANCE порядок пользователей такой же, как в файле limit.

    Содержимое страниц обновляется раз в 5 минут.

    Подсчет статистики за новый месяц будет начнется "с чистого листа". Все пользователи, заблокированные по лимиту трафика, будут восстановлены. Статистику за прошлые месяцы работы скрипта можно будет посмотреть по адресу http://192.168.1.1:8081/statistic/2010-08.html - август 2010 года (аналогично другие месяцы).
    Attached Files Attached Files
    Last edited by KinoMan; 23-02-2011 at 09:24.

  10. #10
    установил статистику и nshaper. В iptables вижу, что подсчёт ведётся. Шейпер режет. Но вот на сайте статистика не обновляется. Куда копать?

    Code:
     iptables -nxvL | grep STAT -A 15
      408398 192348821 STAT_IP    all  --  *      *       0.0.0.0/0            0.0.0.0/0
      199999 37466458 MAC_IP     all  --  *      !br0    0.0.0.0/0            0.0.0.0/0
           0        0 ACCEPT     all  --  br0    br0     0.0.0.0/0            0.0.0.0/0
           0        0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID
        6859   361636 TCPMSS     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:0x17/0x02 TCPMSS clamp to PMTU
      387259 190737467 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
           0        0 DROP       all  --  !br0   ppp0    0.0.0.0/0            0.0.0.0/0
           0        0 DROP       all  --  !br0   vlan1   0.0.0.0/0            0.0.0.0/0
           0        0 SECURITY   all  --  !br0   *       0.0.0.0/0            0.0.0.0/0           state NEW
           0        0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           ctstate DNAT
    
    --
    Chain STAT_IP (1 references)
        pkts      bytes target     prot opt in     out     source               destination
       21319  4332932 RETURN     all  --  *      *       192.168.0.39         0.0.0.0/0
       22721 10732361 RETURN     all  --  *      *       0.0.0.0/0            192.168.0.39
       11519  1245372 RETURN     all  --  *      *       192.168.0.3          0.0.0.0/0
       12509 15281613 RETURN     all  --  *      *       0.0.0.0/0            192.168.0.3
       11739   667399 RETURN     all  --  *      *       192.168.0.5          0.0.0.0/0
       13060 14931916 RETURN     all  --  *      *       0.0.0.0/0            192.168.0.5
        6072  1872269 RETURN     all  --  *      *       192.168.0.21         0.0.0.0/0
        5251  3716919 RETURN     all  --  *      *       0.0.0.0/0            192.168.0.21
        8649  3163000 RETURN     all  --  *      *       192.168.0.200        0.0.0.0/0
        6509  3408964 RETURN     all  --  *      *       0.0.0.0/0            192.168.0.200
           0        0 RETURN     all  --  *      *       192.168.0.202        0.0.0.0/0
           0        0 RETURN     all  --  *      *       0.0.0.0/0            192.168.0.202
         432    22736 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
    в то же время файл total представляет собой
    Code:
     cat /opt/Billing/total
    192.168.0.39   0
    192.168.0.3   0
    192.168.0.5   0
    192.168.0.21   0
    192.168.0.200   0
    192.168.0.202   0

  11. #11
    Join Date
    Apr 2009
    Location
    Тамбов
    Posts
    123
    gingerino
    крон установлен? проверьте, работает ли он.
    еще для скрипта статистики необходим пакет gawk: ipkg install gawk

  12. #12
    gawk стоит:
    ipkg list_installed | grep gawk
    gawk - 3.1.7-1 - Gnu AWK interpreter

    да похоже что cron не запускает задачи...
    сейчас проверил права на файл end - 755
    буду курить крон....

    В файле /opt/etc/cron.5mins/end прописан параметр USRS="/opt/Billing/users/*" но такого файла "*" в указанном каталоге не лежит...

    крон вроде работает, так как rrd крутится и график трафика обновляет...
    Last edited by Omega; 20-11-2011 at 15:31. Reason: fixed

  13. #13
    Join Date
    Apr 2009
    Location
    Тамбов
    Posts
    123
    Quote Originally Posted by gingerino View Post
    В файле /opt/etc/cron.5mins/end прописан параметр USRS="/opt/Billing/users/*" но такого файла "*" в указанном каталоге не лежит...
    и не должно

    выполните команду
    /opt/etc/cron.5mins/end
    если статистика обновилась, то крон просто не запускает этот скрипт

  14. #14
    Quote Originally Posted by KinoMan View Post
    выполните команду
    /opt/etc/cron.5mins/end
    если статистика обновилась, то крон просто не запускает этот скрипт
    статистика так и не обновилась даже после запуска...

  15. #15
    Join Date
    Apr 2009
    Location
    Тамбов
    Posts
    123
    Quote Originally Posted by gingerino View Post
    статистика так и не обновилась даже после запуска...
    ну и? какие ошибки выдал скрипт?

Page 1 of 15 12311 ... LastLast

Similar Threads

  1. Роутер Asus как точка доступа для HotSpot ?
    By balamut in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 118
    Last Post: 20-03-2014, 15:30
  2. Вопросы по перепрошивке dir-320
    By gweri in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 344
    Last Post: 29-10-2011, 11:36
  3. Pppoe doesn't work on Oleg fw 1.9.2.7-10
    By mandgeo in forum WL-500gP Firmware Discussion
    Replies: 7
    Last Post: 18-01-2009, 16:04

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •