dmg 0 Опубликовано: 2007-06-17 11:11:18 Share Опубликовано: 2007-06-17 11:11:18 Доброго времени суток, господа. Наступил на грабли, с которых не могу слезть уже несколько месяцев. Посему сначала выложу все свои скрипты для ясности. ################################################################################ # Файл настроек сервера 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? Ссылка на сообщение Поделиться на других сайтах
egor2fsys 5 Опубліковано: 2007-06-17 12:03:19 Share Опубліковано: 2007-06-17 12:03:19 В конец-начало скриптов поставьте вывод в лог и гляньте, а скрипты ли виноваты. Ссылка на сообщение Поделиться на других сайтах
dmg 0 Опубліковано: 2007-06-17 13:22:34 Автор Share Опубліковано: 2007-06-17 13:22:34 В конец-начало скриптов поставьте вывод в лог и гляньте, а скрипты ли виноваты. спасибо, попробую, но тогда как понять, что не все правила удаляются, а только 1-2 из 4х...? По идее, при выполнении скрипта должны удаляться все.. Ссылка на сообщение Поделиться на других сайтах
dmg 0 Опубліковано: 2007-06-17 16:38:14 Автор Share Опубліковано: 2007-06-17 16:38:14 поставил вывод в лог, буду наблюдать... А не слабовата машина для СТГ у меня? потому что при рестарте сервиса стг могут даже не всем юзерам правила прописаться в iptables... периодически загрузка проца составляет 60 проц - СТГ кушает Ссылка на сообщение Поделиться на других сайтах
egor2fsys 5 Опубліковано: 2007-06-17 17:07:07 Share Опубліковано: 2007-06-17 17:07:07 Ну у вас подсчет через QUEUE, при таком способе подсчета если приложению не удасться обсчитать весь объем трафика то оно его не пропустит к клиенту. Ссылка на сообщение Поделиться на других сайтах
dmg 0 Опубліковано: 2007-06-17 19:39:36 Автор Share Опубліковано: 2007-06-17 19:39:36 Ну у вас подсчет через QUEUE, при таком способе подсчета если приложению не удасться обсчитать весь объем трафика то оно его не пропустит к клиенту. угу, тогда как обойти это ограничение? и "не пропустит" = "удалит правило из iptables"? если при малом кол-ве юзеров все прекрасно работает, может ли причиной являться маленький объем ОЗУ (128мб)? З.Ы. Скриты ОнКоннект и ОнДисконнект при удалении правил не запускались (лог пуст) Ссылка на сообщение Поделиться на других сайтах
egor2fsys 5 Опубліковано: 2007-06-17 20:27:34 Share Опубліковано: 2007-06-17 20:27:34 Значит не СТГ виноват в изменении правил фаервола. Проверьте системные демоны и систему в целом. Не пропустит не равно удалит правило. Если демон не успеет обсчитать поток, то пакеты пройдут только тогда, когда приложение их обработает. Посмотрите на загрузку проца при большом кол-ве пользователей. Если она сильно высока, то значит демон не справляется с обработкой пакетов. Ссылка на сообщение Поделиться на других сайтах
dmg 0 Опубліковано: 2007-06-19 05:38:37 Автор Share Опубліковано: 2007-06-19 05:38:37 причину найти не могу до сих пор, на днях доставлю ОЗУ - посмотрим.. неужели никто не сталкивался? кстати СТГ версии 2.402.9.7 Ссылка на сообщение Поделиться на других сайтах
Max 0 Опубліковано: 2007-06-19 06:29:03 Share Опубліковано: 2007-06-19 06:29:03 попробуйте поставить в начало скриптов #!/bin/bash Ссылка на сообщение Поделиться на других сайтах
dmg 0 Опубліковано: 2007-06-20 10:46:39 Автор Share Опубліковано: 2007-06-20 10:46:39 попробуйте поставить в начало скриптов#!/bin/bash эффекта положительного не заметил. Убрал из системы все "лишние" демоны -остался только СТГ, пптпд+система... То же самое... вероятно либо сами иптейблсы гонят, либо я хз :tongue: Ссылка на сообщение Поделиться на других сайтах
Колян 2 Опубліковано: 2007-06-20 12:53:44 Share Опубліковано: 2007-06-20 12:53:44 а загрузка проца, оперативы и т.д.? Скинь выхлоп команды топ. Ссылка на сообщение Поделиться на других сайтах
egor2fsys 5 Опубліковано: 2007-06-20 19:35:36 Share Опубліковано: 2007-06-20 19:35:36 причину найти не могу до сих пор, на днях доставлю ОЗУ - посмотрим.. неужели никто не сталкивался? кстати СТГ версии 2.402.9.7 По-поводу того что стоит ПППД. Он в момент подключения/отключеняи клиента исполняет скрипты, расположенные в /etc/ppp. Проверьте наличие там скриптов и пустые ли они. Предположение очень как бы шаткое, но других вариантов я не вижу. Ссылка на сообщение Поделиться на других сайтах
Cell 7 Опубліковано: 2007-06-21 04:49:22 Share Опубліковано: 2007-06-21 04:49:22 причину найти не могу до сих пор, на днях доставлю ОЗУ - посмотрим.. неужели никто не сталкивался? кстати СТГ версии 2.402.9.7 По-поводу того что стоит ПППД. Он в момент подключения/отключеняи клиента исполняет скрипты, расположенные в /etc/ppp. Проверьте наличие там скриптов и пустые ли они. Предположение очень как бы шаткое, но других вариантов я не вижу. Очень даже реальное предположение т.к. скрипты там вроде бы и простенькие... но если начинать в них втыкать то понимаешь что там куча инклюдов и что там iptables юзается это 100% Ссылка на сообщение Поделиться на других сайтах
dmg 0 Опубліковано: 2007-06-29 09:51:29 Автор Share Опубліковано: 2007-06-29 09:51:29 причину найти не могу до сих пор, на днях доставлю ОЗУ - посмотрим.. неужели никто не сталкивался? кстати СТГ версии 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 вот это уже ближе к истине, удаляется чаще всего именно форвард у юзеров Ссылка на сообщение Поделиться на других сайтах
vop 370 Опубліковано: 2007-06-29 19:20:26 Share Опубліковано: 2007-06-29 19:20:26 В принципе, самудаляться правило не может. Случайно удалить правило без точного его повторения может только удаление по номеру строки. Так-что надо смотреть все скрипты, где удаляется по номеру. P.S. Вообще-то пихать юзеров в корневые цепочки уже давно не кошерно. Похоже, что стг застыл на этом. Сейчас не кошерно вооще юзеров в цепи пихать, ибо для этого давно существует ipset. Ссылка на сообщение Поделиться на других сайтах
dmg 0 Опубліковано: 2007-06-30 13:40:31 Автор Share Опубліковано: 2007-06-30 13:40:31 В принципе, самудаляться правило не может. Случайно удалить правило без точного его повторения может только удаление по номеру строки. Так-что надо смотреть все скрипты, где удаляется по номеру. P.S. Вообще-то пихать юзеров в корневые цепочки уже давно не кошерно. Похоже, что стг застыл на этом. Сейчас не кошерно вооще юзеров в цепи пихать, ибо для этого давно существует ipset. Удаляться то не может, но... все-таки удалялось т.к. сейчас все пришло в норму, спасибо всем, проблема решена удалением тех строк из скриптов if-up & if-down, которые я приводил в предыдущем посте. З.Ы. Кстати, что именно пытался открывать пппд при поднятии нового интерфейса? Что есть mss? Ссылка на сообщение Поделиться на других сайтах
vop 370 Опубліковано: 2007-06-30 15:58:16 Share Опубліковано: 2007-06-30 15:58:16 З.Ы. Кстати, что именно пытался открывать пппд при поднятии нового интерфейса? Что есть mss? Скрипт пппц пытался сначала определить номер правила, а потом пытался удалить это правило по "угаданному" номеру. Учитывая, что все правила втыкались в корневую цепочку, и между первым и вторым старгейзер умудрялся вставить свои 4 правила - номера смещались. В результате пппц удалял не свое правило. В общем, типично FreeBSD'шный подход на линуксе вылазит боком. Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас