Что потребуется:
Копируем 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
- Для взаимодействия со Squid'ом можно прибегать к двум вариантам:
- Просто изменять файрвол. Таким образом будет очень много записей, можно будет
запутаться. - Сделать так, чтобы 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.
Полная версия документа для домашнего чтения.
You should to log in