Stargazer 1 + фичи
Что это будет?
  1. Биллинг с тарифными планами. На основе Stargazer 1
  2. Снятие абонплаты.
  3. Вебинтерфейс.
  4. Ведение подробной статистики.
  5. Вывод статистики пользователям.
  6. В конце статьи скрипт, который сам выполнит все действия по установке.
Что потребуется:
Копируем stargazer-1.1.4.2-beta8_F.tar.gz
 
cp stargazer-1.1.4.2-beta8_F.tar.gz /installs
cd /installs
gunzip stargazer-1.1.4.2-beta8_F.tar.gz
tar -xvf stargazer-1.1.4.2-beta8_F.tar
cd stargazer-1.1.4.2-beta8/server
make
make install
cd ../sgconf
make
make install

Настраиваем соответственно своих нужд.

Документация по настройке содержится в соответствующем разделе сайта.

Легкий пример для быстрой настройки:
Политика файрвола по умолчанию:
 
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

Файл /etc/stargazer/OnConnect:
 
iptables -t nat -A POSTROUTING -s $2 -j MASQUERADE
iptables -t nat -A POSTROUTING -d $2 -j MASQUERADE
iptables -t filter -A FORWARD -s $2 -j ACCEPT
iptables -t filter -A FORWARD -d $2 -j ACCEPT

Файл /etc/stargazer/OnDisconnect:
 
iptables -t nat -D POSTROUTING -s $2 -j MASQUERADE
iptables -t nat -D POSTROUTING -d $2 -j MASQUERADE
iptables -t filter -D FORWARD -s $2 -j ACCEPT
iptables -t filter -D FORWARD -d $2 -j ACCEPT

Файл /etc/stargazer/rules
 
ICMP 192.168.0.0/16 NULL
TCP 192.168.0.0/16 NULL
UDP 192.168.0.0/16 NULL
ALL 0.0.0.0/0 DIR0

Файл /etc/stargazer/stargazer.conf
 
TurnTraff=no
ResetTraff=no
LogBill=yes

Остальные настройки думаю понятны и можно прочитать на сайте
В этом примере будет считаться интернет трафик в направление DIR0.

Соответственно нужно отредактировать и файл /var/stargazer/tariffs
 


Вебинтерфейс


Для вебинтерфейса требуется настроенный Apache + PHP.
Скачиваем вот
этот файл
.

Закачиваем на сервер и распаковываем в папку с документами апача.

Эту директорию стоит закрыть паролем через htaccess, чтобы никто не смог смотреть
общую статистику и пополнять счет.
Настройка крайне проста. Все меняется в файле vars_webiface.
Все хорошо, но есть маленькое НО.

Нужно разрешить апачу выполнять команду sgconf.

Для этого понадобится Sudo, который можно легко найти в Интернете или на диске
с линуксом.

Добавляем пользователя в систему, например
 
adduser apache
passwd apache

Из под этого пользователя нужно заставить стартовать апач.

Для этого заходим в httpd.conf, ищем строки

user и group

и изменяем на

user apache
group apache

Сохраняем и перезагружаем апач.

Теперь в файл /etc/sudoers нужно добавить следующую строку:
 
apache ALL=NOPASSWD: /bin/sgconf

Абонплата

Задача: снимать со счета деньги в заданное время.
Копируем и распаковываем abonka.tar.gz в /etc/stargazer.
 
gunzip abonka.tar.gz
tar -xvf abonka.tar
rm -f abonka.tar

Теперь нужно откомпилировать файл abonka.cpp

Это зависит от компилятора, например можно так:
c++ abonka.cpp

или так:
gcc abonka.cpp

Удаляем файл abonka.cpp:
rm -f abonka.cpp

Переименовываем бинарник:
mv a.out abonka

Далее нужно прописать в /etc/crontab чтоб выполнялся файл /etc/stargazer/abonka.

К примеру записать в crontab такое:
0 0 28 * * /etc/stargazer/abonka

Выполнить:
crontab -u root /etc/crontab
Таким образом абонплата будет взиматься 28 числа каждого месяца в 0:0.
Сумма абонплаты устанавливается в файле module, например тут:

/var/stargazer/users/test/module
abonka=yes если нужно снимать абонплату
abonka=no если не нужно
abon_sum=10 сумма абонплаты. По умолчанию - 10.
 
Статистика

Данный модуль будет записывать значения скачки пользователя в его директорию
для дальнейшего удобного и наглядного выведения.
Потребуется файл
graph.tar.gz


Копируем его в /etc/stargazer
 
cp graph.tar.gz /etc/stargazer
cd /etc/stargazer
gunzip graph.tar.gz
tar -xvf graph.tar

Теперь нужно откомпилировать файл graph.cpp. Например так:
gcc graph.cpp

или так:
c++ graph.cpp

mv a.out graph

Удаляем лишнее:
rm -f graph.tar graph.cpp

Теперь нужно добавить выполнение этой программы в /etc/crontab.
Например так:
*/5 * * * * /etc/stargazer/graph

Выполняем:
crontab -u root /etc/crontab

Теперь каждые 5 минут будет фиксироваться сколько пользователь скачал.

 
Привязка к Squid
 
  1. Для взаимодействия со Squid'ом можно прибегать к двум вариантам:
  2. Просто изменять файрвол. Таким образом будет очень много записей, можно будет
    запутаться.
  3. Сделать так, чтобы Squid сам понимал кого можно пускать в Интернет а кого нет.

Я пошел вторым путем.

Для этого в файл /etc/stargazer/OnConnect я дописал вот такие строки:
 
echo $2 >> /var/stargazer/squid/squid
/opt/squid/sbin/squid -k reconfigure
где /opt/squid/sbin/squid - путь к Squid'у

Теперь нужно исправить /etc/stargazer/OnDisconnect:
 
echo $2 >> /var/stargazer/squid/squid_d
/etc/stargazer/disconnect
/opt/squid/sbin/squid -k reconfigure
В файле /etc/stargazer/rules перед всеми записями нужно вписать:
 
TCP 192.168.0.1:3128 DIR0
UDP 192.168.0.1:3128 DIR0
Т.е. 192.168.0.1 - IP-адрес сервера
3128 - порт Squid'a
DIR0 - направление, в которое считать этот трафик

В конфигурационном файле Squid'a нужно прописать доступ:
 
acl stg_users src "/var/stargazer/squid/squid"
http_access allow stg_users
Если мы хотим чтобы это был прозрачный прокси, то нужно еще прописать несколько
строк в этом же файле, squid.conf:
 
http_accel_host virtual
http_accel_port 80
http_accel_with_proxy on
http_accel_uses_host_header on

Для того чтобы прокси был прозрачен и на него шли запросы нужно сделать перенаправление
в файрволе.

Т.е. в файле /etc/stargazer/OnConnect одной строкой пишем:
 
iptables -t nat -A PREROUTING -p tcp -s $2 -d ! 192.168.0.0/16 --dport 80 -j
REDIRECT --to-ports 3128

А в /etc/stargazer/OnDisconnect соответственно:
 
iptables -t nat -D PREROUTING -p tcp -s $2 -d ! 192.168.0.0/16 --dport 80 -j
REDIRECT --to-ports 3128

Теперь разберемся с файлом disconnect, который запускается в скрипте отключения.

Его нужно брать здесь.

Поместить его в /etc/stargazer
 
cd /etc/stargazer
gunzip disconnect.tar.gz
tar -xvf disconnect.tar
c++ ondisconnect.cpp
mv a.out disconnect

Теперь в папке /etc/stargazer должен лежать тот нужный файл disconnect.

В папке /var/stargazer нужно создать дополнительную папку и файл.
 
mkdir /var/stargazer/squid
echo 192.168.0.1 >> /var/stargazer/squid/squid

192.168.0.1 - IP адрес сервера
Смысл всех этих действий в следующем:

При подключении пользователя, если у него есть деньги на счету его IP заносится
в файл, который читается Squid'ом. При отключении он оттуда убирается.

Вот таким образом Squid определяет кого пускать в интернет, а кого нет.


 
Подробная статистика

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

Данный раздел будет описывать как можно вести статистику по посещаемому IP, порту,
протоколу.
Берем программу, которая фиксирует все посещения и ведет лог.

Называется NET accounting и лежит здесь.

А так же программу, которая будет сортировать все запросы по пользователям Stargazer'a.

Лежит она здесь (файл netacct.cpp).
Приступим.

Закачиваем все на сервер.
 
gunzip net-acct-0.71-glibc2.tar.gz
tar -xvf net-acct-0.71-glibc2.tar
mv net-acct-0.71-glibc2 /opt/netacct
gunzip disconnect.tar.gz
tar -xvf disconnect.tar
gcc netacct.cpp
mv a.out /etc/stargazer/netacct
cd /opt/netacct/src
make
echo "/opt/netacct/src/nacctd" >> /etc/rc.d/rc.local
echo "*/3 * * * * /etc/stargazer/netacct 1> /dev/null 2> /dev/null" >> /etc/crontab
crontab -u root /etc/crontab

Таким образом все запросы пользователей будут записываться в их папки.

В файл graph/year/month/iplog

Все запросы, которые не относятся к пользовательским будут записываться в файл
/var/stargazer/lognouser

Советую иногда чистить логи. Например после расчета с пользователем за прошедший
месяц, т.е. когда они уже не нужны.


Быстрая установка

Все, что Вы сейчас прочитали, можно быстро соорудить без особого труда с помощью
шелл-скрипта.

Лежит он здесь

Его нужно распаковать в отдельную директорию и запустить.

Он сам все скачает из интернета и установит. Это будет Squid, Stargazer и все
что выше описано.
Для этого нужно иметь gcc компилятор, Iptables.

Ip адрес сервера - 192.168.0.1

После успешной установки все файлы настройки лучше сменить.

Этот скрипт тестировался под LinuX RedHat 7.2 и 9.0.

Полная версия документа для домашнего чтения.
Ви маєте увійти під своїм обліковим записом

loading