Перейти до

Рекомендованные сообщения

Опубликовано:

Доброго времени суток, господа. Наступил на грабли, с которых не могу слезть уже несколько месяцев. Посему сначала выложу все свои скрипты для ясности.

 


################################################################################
#                        Файл настроек сервера stargazer                       #
################################################################################



# Имя лог-файла куда пишутся события
LogFile = /var/log/stargazer.log



# Имя файла в котором определяются правила подсчета трафика
Rules = /etc/stargazer/rules



# Время через которое пишется d БД детальная статистика пользователя
# Значения: 1, 1/2, 1/4, 1/6.
# 1 - раз в чаc, 1/2 - раз в пол часа, 1/4 - раз в 15 мин, 1/6 - раз в 10 мин
DetailStatWritePeriod=1/6



# Периодичность записи записи в БД информации о статистике пользователя (минуты)
# При большом кол-ве пользователей эту величину стоит увеличить, т.к.
# запись в БД может занимать длительное время.
# Значения: 1...1440 (минуты)
StatWritePeriod = 10



# День снятия абонплаты
# Значения: 0...31. 0 - Последний день месяца
DayFee = 27



# Абонплата снимается в последний (yes) или первый (no) день учетного периода.
# Это влияет на то, как будет снята абонплата (АП) при переходе на новый тариф.
# Если у пользователя был тариф A с АП=100 и он хочет перейти на тариф B с АП=200,
# то при переходе на новый тариф со счета пользователя снимется 100, если
# DayFeeIsLastDay = yes и 200, если DayFeeIsLastDay = no
DayFeeIsLastDay = no



# День сброса данных о трафике за месяц и день перехода пользователей на новые тарифы
# Значения: 0...31. 0 - Последний день месяца
DayResetTraff = 1



# "Размазанное" снятие абонплаты. Снятие АП не раз в месяц, а каждый
# день 1/30 или 1/31 части АП
# Значения: yes, no
SpreadFee = yes



# Данная опция определяет может ли пользователь получить доступ в интерент
# если у него на счету нет денег, но остался предоплаченный трафик
# Значения: yes, no
FreeMbAllowInet = no



# Эта опция определяет что будет писаться в стоимость трафика в detail_stat.
# Если у пользователя еще есть предоплаченный трафик и WriteFreeMbTraffCost = no,
# то в detail_stat стоимость будет 0. Если у пользователя уже нет
# предоплаченного трафика и WriteFreeMbTraffCost = no, то в detail_stat
# будет записана стоиость трафика. При WriteFreeMbTraffCost = yes стоимость
# трафика будет записана в любом случае.
WriteFreeMbTraffCost = no



# Названия направлений. Направления без названий не будут отображаться в
# авторизаторе и конфигураторе. Названия состоящие из нескольких слов должны
# быть взяты в кавычки
<DirNames>
   DirName0 = INET
   DirName1 = FREE
   DirName2 =
   DirName3 =
   DirName4 =
   DirName5 =
   DirName6 =
   DirName7 =
   DirName8 =
   DirName9 =
</DirNames>



# Кол-во запускаемых процессов stg-exec.
# Эти процессы отвечают за выполнение скриптов OnConnect, OnDisconnect, ...
# Кол-во процессов означает сколько скриптов могут выполнятся одновременно.
# Значения: 1...1024
ExecutersNum = 100



# Message Key для stg-exec.
# Идентификатор очереди сообщений для выполнятеля скриптов.
# Его изменение может понадобится если есть необходимость запустить несколько
# экземпляров stg. Если вы не понимаете, что это, не трогайте этот параметр!
# Значения: 0...2^32
# Значение по умолчанию: 5555
# ExecMsgKey = 5555



# Путь к директории, в которой находятся модули сервера
ModulesPath = /usr/lib/stg



################################################################################
# Store module
# Настройки плагина работающего с БД сервера

# Второй параметр - это имя модуля без mod_ в начале и .so в конце
# Т.е. полное имя модуля mod_store_files.so
<StoreModule store_files>

   # Рабочая директория сервера, тут содержатся данные о тарифах, пользователях,
   # администраторах и т.д.
   WorkDir = /var/stargazer


   # Владелец, группа и права доступа на файлы статистики (stat) пользователя
   ConfOwner = root
   ConfGroup = root
   ConfMode = 600


   # Владелец, группа и права доступа на файлы конфигурации (conf) пользователя
   StatOwner = root
   StatGroup = root
   StatMode = 640

   # Владелец, группа и права доступа на лог-файлы (log) пользователя
   UserLogOwner = root
   UserLogGroup = root
   UserLogMode = 640

</StoreModule>



################################################################################
# Прочие модули

<Modules>

   # Настройки плагина авторизации Always Online "mod_auth_ao.so"
   # Второй параметр - это имя модуля без mod_ в начале и .so в конце
   # Т.е. полное имя модуля mod_auth_ao.so
   <Module auth_ao>
   </Module>



   # Настройки плагина авторизации InetAccess "mod_auth_ia.so"
   # Второй параметр - это имя модуля без mod_ в начале и .so в конце
   # Т.е. полное имя модуля mod_auth_ia.so
   <Module auth_ia>

       # Порт на котором принимаются обращения от авторизатора
       # Значения: 1...65534
       Port = 4444


       # Время между посылками запроса пользователю жив ли он
       # и обновлением данных статистики (секунды)
       # Значения: 5...600
       UserDelay = 15


       #Таймаут для пользователя. Если в течение этого времени авторизатор
       #не отвечает, пользователь будет отключен
       # Значения: 15...1200
       UserTimeout = 65


       # Этот параметр определяет что будет передаваться программе InetAccess от сервера
       # как отстаток предоплаченного трафика
       # Значения:
       # FreeMb = 0 - кол-во бесплатных мегабайт в пресчете на цену нулевого направления
       # FreeMb = 1 - кол-во бесплатных мегабайт в пресчете на цену первого направления
       # FreeMb = 2 - кол-во бесплатных мегабайт в пресчете на цену второго направления
       # FreeMb = 3 - кол-во бесплатных мегабайт в пресчете на цену третьего направления
       # ........................
       # FreeMb = 9 - кол-во бесплатных мегабайт в пресчете на цену девятого направления
       # FreeMb = cash - кол-во денег на которые юзер может бесплатно качать
       # FreeMb = none - ничего не передавать
       FreeMb = cash

   </Module>



   # Модули можно использовать несколько раз с разными параметрами
   #<Module auth_ia>
   #    Port = 7777
   #    UserDelay = 15
   #    UserTimeout = 65
   #    FreeMb = 0
   #</Module>



   # Настройки модуля конфигурации SgConfig "mod_conf_sg.so"
   # Второй параметр - это имя модуля без mod_ в начале и .so в конце
   <Module conf_sg>

       # Порт по которому сервер взаимодействует с конфигуратором
       # Значения: 1...65535
       Port = 5555

   </Module>



   # Модуль захвата трафика "mod_cap_ether.so"
   # Второй параметер - это имя модуля без mod_ в начале и .so в конце
   # Без параметров. Только имя модуля.
   <Module cap_ipq>
       # Модуль без параметров
   </Module>



   # Настройки модуля пингующего пользователей "mod_ping.so"
   # Второй параметр - это имя модуля без mod_ в начале и .so в конце
   <Module ping>

       # Время, в секундах, между пингами одного и того же пользователя
       # Значения: 10...3600
       PingDelay = 15

   </Module>

</Modules>
################################################################################

 

 

#OnConnect
ip=$2

iptables -t filter -A INPUT -s $ip -j QUEUE
iptables -t filter -A FORWARD -s $ip -j QUEUE
iptables -t filter -A FORWARD -d $ip -j QUEUE
iptables -t filter -A OUTPUT -d $ip -j QUEUE

 

 

#OnDisconnect
ip=$2

iptables -t filter -D INPUT -s $ip -j QUEUE
while [ $? -eq 0 ]
do
iptables -t filter -D INPUT -s $ip -j QUEUE
done

iptables -t filter -D FORWARD -s $ip -j QUEUE
while [ $? -eq 0 ]
do
iptables -t filter -D FORWARD -s $ip -j QUEUE
done

iptables -t filter -D FORWARD -d $ip -j QUEUE
while [ $? -eq 0 ]
do
iptables -t filter -D FORWARD -d $ip -j QUEUE
done

iptables -t filter -D OUTPUT -d $ip -j QUEUE
while [ $? -eq 0 ]
do
iptables -t filter -D OUTPUT -d $ip -j QUEUE
done

 

 

Скрипт файрволла

 

#!/bin/bash

#clear tables
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X

#block by default
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# allow active connection
#iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A FORWARD -s 192.168.3.13/32 -o eth0 -j ACCEPT
iptables -A FORWARD -d 192.168.3.13/32 -i eth0 -j ACCEPT


iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT


iptables -A FORWARD -i eth0 -j DROP
iptables -A FORWARD -o eth0 -j DROP

#allow VPN
iptables -t filter -A INPUT -p tcp -s 10.9.0.0/16 --dport 1723 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d 10.9.0.0/16 --sport 1723 -j ACCEPT

#allow GRE
iptables -t filter -A INPUT -p 47 -j ACCEPT
iptables -t filter -A OUTPUT -p 47 -j ACCEPT

#allow other icmp
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A FORWARD -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

#allow lo
iptables -t filter -A INPUT -d 127.0.0.1 -j ACCEPT
iptables -t filter -A OUTPUT -s 127.0.0.1 -j ACCEPT

#DNS resolving
iptables -t filter -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p udp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

# SSH
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT

# Stargazer configurator
iptables -t filter -A INPUT -p tcp --dport 5555 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 5555 -j ACCEPT

# UDP stargazer InetAccess
iptables -t filter -A INPUT -p udp -s 192.168.3.0/24 --sport 4444 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -d 192.168.3.0/24 --dport 4444 -j ACCEPT

#NAT
iptables -t nat -A POSTROUTING -s 192.168.3.13 -d 0.0.0.0/0 -j MASQUERADE

iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j SNAT --to-source 90.188.134.1

iwconfig wlan0 key restricted xxxxxxxx

 

Итак, есть локалка 10.9.0.0/16 (eth0 на серве), из нее юзера по ВПН коннектятся к серверу, получают IP подсети 192.168.3.0/24 и вопщем-то прекрасно бегают по инету... Траф считается, все красиво... 192.168.3.13 - мой айпи, сижу на ВиФи и вижу локальную сеть (форвард через eth0 и маскарад для этого айпи в скрипте файрволла). Но когда пользователей стало не 10, а 50, периодически из iptables отваливаются правила, произвольно:

 


root@wsgate:/etc# iptables -L | grep 3.31
QUEUE      all  --  192.168.3.31         anywhere
QUEUE      all  --  192.168.3.31         anywhere
QUEUE      all  --  anywhere             192.168.3.31
QUEUE      all  --  anywhere             192.168.3.31
root@wsgate:/etc#

 

 

через определенное время (час-два-три):


root@wsgate:/etc# iptables -L | grep 3.31
QUEUE      all  --  192.168.3.31         anywhere
QUEUE      all  --  anywhere             192.168.3.31
QUEUE      all  --  anywhere             192.168.3.31
root@wsgate:/etc#

 

И все, у человека нет инета... Причем баланс у него положительный. Сначала грешил на то что скрипты не успевает обрабатывать один поток stg-exec, поставил 100 - эффекта нет... По крону запускаю маленький скриптик раз в сутки, но и этого иногда недостаточно - к вечеру слетает инет у некоторых юзеров:

 

killall -9 stargazer
killall -9 pptpd

/etc/stargazer/fw
stargazer
pptpd

 

Конфигурация серва: Селерон 1.4, 128мб ОЗУ... Живет на UBUNTU server (2.6.15-18-686) Крутится апач, самба, дхцп, фтп.

Особой нагрузки на апач, фтп и самбу не возлагается - это для личных нужд.

Ах да, каждую минуту происходит бэкап баз СТГ...

 

Так вот собственно вопрос: кто сталкивался с чем-либо подобным и как это решать? Кто может удалять правила из iptables?

Опубліковано:
В конец-начало скриптов поставьте вывод в лог и гляньте, а скрипты ли виноваты.

спасибо, попробую, но тогда как понять, что не все правила удаляются, а только 1-2 из 4х...? По идее, при выполнении скрипта должны удаляться все..

Опубліковано:

поставил вывод в лог, буду наблюдать... А не слабовата машина для СТГ у меня? потому что при рестарте сервиса стг могут даже не всем юзерам правила прописаться в iptables... периодически загрузка проца составляет 60 проц - СТГ кушает

Опубліковано:

Ну у вас подсчет через QUEUE, при таком способе подсчета если приложению не удасться обсчитать весь объем трафика то оно его не пропустит к клиенту.

Опубліковано:
Ну у вас подсчет через QUEUE, при таком способе подсчета если приложению не удасться обсчитать весь объем трафика то оно его не пропустит к клиенту.

угу, тогда как обойти это ограничение? и "не пропустит" = "удалит правило из iptables"? если при малом кол-ве юзеров все прекрасно работает, может ли причиной являться маленький объем ОЗУ (128мб)?

 

З.Ы.

 

Скриты ОнКоннект и ОнДисконнект при удалении правил не запускались (лог пуст)

Опубліковано:

Значит не СТГ виноват в изменении правил фаервола. Проверьте системные демоны и систему в целом. Не пропустит не равно удалит правило. Если демон не успеет обсчитать поток, то пакеты пройдут только тогда, когда приложение их обработает. Посмотрите на загрузку проца при большом кол-ве пользователей. Если она сильно высока, то значит демон не справляется с обработкой пакетов.

Опубліковано:

причину найти не могу до сих пор, на днях доставлю ОЗУ - посмотрим.. неужели никто не сталкивался? кстати СТГ версии 2.402.9.7

Опубліковано:
попробуйте поставить в начало скриптов

#!/bin/bash

эффекта положительного не заметил. Убрал из системы все "лишние" демоны -остался только СТГ, пптпд+система... То же самое... вероятно либо сами иптейблсы гонят, либо я хз :tongue:

Опубліковано:
причину найти не могу до сих пор, на днях доставлю ОЗУ - посмотрим.. неужели никто не сталкивался? кстати СТГ версии 2.402.9.7

По-поводу того что стоит ПППД. Он в момент подключения/отключеняи клиента исполняет скрипты, расположенные в /etc/ppp. Проверьте наличие там скриптов и пустые ли они. Предположение очень как бы шаткое, но других вариантов я не вижу.

Опубліковано:
причину найти не могу до сих пор, на днях доставлю ОЗУ - посмотрим.. неужели никто не сталкивался? кстати СТГ версии 2.402.9.7

По-поводу того что стоит ПППД. Он в момент подключения/отключеняи клиента исполняет скрипты, расположенные в /etc/ppp. Проверьте наличие там скриптов и пустые ли они. Предположение очень как бы шаткое, но других вариантов я не вижу.

Очень даже реальное предположение т.к. скрипты там вроде бы и простенькие... но если начинать в них втыкать то понимаешь что там куча инклюдов и что там iptables юзается это 100%

  • 2 weeks later...
Опубліковано:
причину найти не могу до сих пор, на днях доставлю ОЗУ - посмотрим.. неужели никто не сталкивался? кстати СТГ версии 2.402.9.7

По-поводу того что стоит ПППД. Он в момент подключения/отключеняи клиента исполняет скрипты, расположенные в /etc/ppp. Проверьте наличие там скриптов и пустые ли они. Предположение очень как бы шаткое, но других вариантов я не вижу.

при просмотре скриптов, обнаружил что при поднятии pppN интерфейса выполняется

 

iptables -o "$PPP_IFACE" --insert FORWARD 1 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu

 

не уверен что это может влиять на удаление правил, но строчку закомментил... буду смотреть...

 

тааак, при отключении фейса выполняется

 

iptables -L -n -v --line-numbers | grep "TCPMSS.*$PPP_IFACE.*clamp" | cut -f1 -d " " | xargs -n1 -r iptables -D FORWARD

 

вот это уже ближе к истине, удаляется чаще всего именно форвард у юзеров

Опубліковано:

В принципе, самудаляться правило не может. Случайно удалить правило без точного его повторения может только удаление по номеру строки. Так-что надо смотреть все скрипты, где удаляется по номеру.

 

P.S. Вообще-то пихать юзеров в корневые цепочки уже давно не кошерно. Похоже, что стг застыл на этом. Сейчас не кошерно вооще юзеров в цепи пихать, ибо для этого давно существует ipset.

Опубліковано:
В принципе, самудаляться правило не может. Случайно удалить правило без точного его повторения может только удаление по номеру строки. Так-что надо смотреть все скрипты, где удаляется по номеру.

 

P.S. Вообще-то пихать юзеров в корневые цепочки уже давно не кошерно. Похоже, что стг застыл на этом. Сейчас не кошерно вооще юзеров в цепи пихать, ибо для этого давно существует ipset.

Удаляться то не может, но... все-таки удалялось т.к. сейчас все пришло в норму, спасибо всем, проблема решена удалением тех строк из скриптов if-up & if-down, которые я приводил в предыдущем посте.

 

З.Ы.

Кстати, что именно пытался открывать пппд при поднятии нового интерфейса? Что есть mss?

Опубліковано:

З.Ы.

Кстати, что именно пытался открывать пппд при поднятии нового интерфейса? Что есть mss?

Скрипт пппц пытался сначала определить номер правила, а потом пытался удалить это правило по "угаданному" номеру. Учитывая, что все правила втыкались в корневую цепочку, и между первым и вторым старгейзер умудрялся вставить свои 4 правила - номера смещались. В результате пппц удалял не свое правило. В общем, типично FreeBSD'шный подход на линуксе вылазит боком. :)

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
×
×
  • Створити нове...