Перейти до

Трафик уходит мимо СТГ


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

Имею CentOS 5.2 и СТГ 2.4. юзеры ходят в интернет через транспарент прокси, натится несколько портов. несколько человек (5-6 где-то) умудряется качать при выключенном авторизаторе. т.е. стартуют закачку при включенном авторизаторе и, выключаясь, продолжают качать дальше. Самостоятельно воссоздать картину не смог, т.к. авторизатор чётко отрабатывает и меня дисконектит. при наблюдении за качающим юзером я смотрел и видел что скрипт дисконекта отрабатывает и в фаерволе появляются строки

iptables -I FORWARD -i $eth_local -s $ip -j DROP
iptables -I FORWARD -o $eth_local -d $ip -j DROP

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

вот настройки СТГ:

 

OnConnect

#!/bin/bash
# Login
LOGIN=$1

#user IP
echo=$2
IP=$2

#cash
CASH=$3

#user ID
ID=$4

test -x /var/stargazer/users/$LOGIN/OnConnect && { /var/stargazer/users/$LOGIN/OnConnect $1 $2 $3; exit 0; };

eth=eth1
eth_local=eth0
mir=xxx.xxx.xxx.xxx

iptables -t filter -A INPUT -s $IP -j ACCEPT
iptables -t filter -A FORWARD -s $IP -j ACCEPT
iptables -t filter -A FORWARD -d $IP -j ACCEPT
iptables -t filter -A OUTPUT -d $IP -j ACCEPT

iptables -D FORWARD -i $eth_local -s $IP -j DROP
while [ $? -eq 0 ]
do
iptables -D FORWARD -i $eth_local -s $IP -j DROP
done

iptables -D FORWARD -o $eth_local -d $IP -j DROP
while [ $? -eq 0 ]
do
iptables -D FORWARD -o $eth_local -d $IP -j DROP
done

iptables -t nat -A POSTROUTING -o $eth -s $IP -p udp -m multiport --dport 21,53,443,25,110,587:27015 -j SNAT --to-source $mir
iptables -t nat -A POSTROUTING -o $eth -s $IP -p tcp -m multiport --dport 21,53,443,25,110,587:27015 -j SNAT --to-source $mir

iptables -t nat -A PREROUTING -s $IP -d ! 10.111.0.1 -p tcp --dport 80 -j REDIRECT --to-port 3128

iptables -I FORWARD -s $IP -d ! 10.111.0.1 -m connlimit --connlimit-above 20 -j DROP

#############################################################

echo "C `date +%Y.%m.%d-%H.%M.%S` $IP $CASH" >> /var/stargazer/users/$LOGIN/connect.log

 

OnDisconnect

#!/bin/bash

LOGIN=$1
ip=$2
CASH=$3

test -x /var/stargazer/users/$LOGIN/OnDisconnect && { /var/stargazer/users/$LOGIN/OnDisconnect $1 $2 $3; exit 0; };

eth_local=eth0
eth=eth1
mir=xxx.xxx.xxx.xxx

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

##################################

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

##################################

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

##################################

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

#################################

iptables -t nat -D POSTROUTING -o $eth -s $ip -p tcp -m multiport --dport 21,53,443,25,110,587:27015 -j SNAT --to-source $mir
while [ $? -eq 0 ]
do
iptables -t nat -D POSTROUTING -o $eth -s $ip -p tcp -m multiport --dport 21,53,443,25,110,587:27015 -j SNAT --to-source $mir
done

#################################

iptables -t nat -D POSTROUTING -o $eth -s $ip -p udp -m multiport --dport 21,53,443,25,110,587:27015 -j SNAT --to-source $mir
while [ $? -eq 0 ]
do
iptables -t nat -D POSTROUTING -o $eth -s $ip -p udp -m multiport --dport 21,53,443,25,110,587:27015 -j SNAT --to-source $mir
done

#################################
iptables -t nat -D PREROUTING -s $ip -d ! 10.111.0.1 -p tcp --dport 80 -j REDIRECT --to-port 3128
while [ $? -eq 0 ]
do
iptables -t nat -D PREROUTING -s $ip -d ! 10.111.0.1 -p tcp --dport 80 -j REDIRECT --to-port 3128
done

iptables -D FORWARD -s $ip -d ! 10.111.0.1 -m connlimit --connlimit-above 20 -j DROP
while [ $? -eq 0 ]
do
iptables -D FORWARD -s $IP -d ! 10.111.0.1 -m connlimit --connlimit-above 20 -j DROP
done

iptables -I FORWARD -i $eth_local -s $ip -j DROP
iptables -I FORWARD -o $eth_local -d $ip -j DROP

echo "D `date +%Y.%m.%d-%H.%M.%S` $ip $CASH" >> /var/stargazer/users/$LOGIN/connect.log

 

скрипт, выполняемый перед стартом СТГ

#!/bin/bash
#external ip
wan=ххх.ххх.ххх.ххх

#internal ip
lan=10.111.0.1

EXT_IFACE=eth1
INT_IFACE=eth0
echo "1" > /proc/sys/net/ipv4/ip_forward

#
#echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
#echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
#echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
#echo 0 > /proc/sys/net/ipv4/tcp_sack
#echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog

# 
#echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#echo "65535" > /proc/sys/net/ipv4/ip_conntrack_max

modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

iptables -F
iptables -t nat -F
iptables -t filter -F

iptables -X
iptables -t nat -X
iptables -t filter -X

iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

iptables -t filter -A INPUT -s $wan -j ACCEPT
iptables -t filter -A INPUT -d $wan -j ACCEPT
iptables -t filter -A OUTPUT -s $wan -j ACCEPT

iptables -t filter -A OUTPUT -s $lan -j ACCEPT
iptables -t filter -A INPUT -d $lan -j ACCEPT

#
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

# SYN
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

#new rules
#iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
#end
#iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

#iptables -N syn-flood
#iptables -A syn-flood -m limit --limit 100/second --limit-burst 150 -j RETURN
#iptables -A syn-flood -j LOG --log-prefix "SYN flood: "
#iptables -A syn-flood -j DROP

iptables -A INPUT -p ! icmp -m state --state INVALID -j DROP
iptables -A FORWARD -p ! icmp -m state --state INVALID -j DROP
iptables -A OUTPUT -p ! icmp -m state --state INVALID -j DROP

# UDP
iptables -A INPUT -p udp -s 0/0 --dport 135:139 -j DROP
#iptables -A INPUT -p udp -s 0/0 --dport 138 -j DROP
iptables -A INPUT -p udp -s 0/0 --dport 113 -j REJECT 
iptables -A INPUT -p udp -s 0/0 --sport 67 --dport 68 -j ACCEPT  

#SMTP
iptables -t filter -A FORWARD -p tcp --dport 25 -j DROP
iptables -t filter -A FORWARD -p tcp --sport 25 -j DROP

#Microsoft drop
iptables -t filter -A FORWARD -p tcp -d 131.107.115.40/32 --dport 443 -j DROP

iptables -t filter -A INPUT -p tcp --dport 135:139 -j DROP
iptables -t filter -A FORWARD -p udp --dport 135:139 -j DROP
iptables -t filter -A INPUT -p tcp --dport 445 -j DROP
iptables -t filter -A FORWARD -p udp --dport 445 -j DROP

#authorizer
iptables -t filter -A INPUT -p udp -s 10.111.0.0/255.255.252.0 -d $lan --dport 5555 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -d 10.111.0.0/255.255.252.0 -s $lan --sport 5555 -j ACCEPT

#ssh
iptables -t filter -A INPUT -p tcp -s 10.111.0.0/255.255.252.0 -d $lan --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d 10.111.0.0/255.255.252.0 -s $lan --sport 22 -j ACCEPT

#webmin
#iptables -t filter -A INPUT -p tcp -s 10.111.0.0/255.255.252.0 -d $lan -m multiport --destination-port 9999,10000 -j ACCEPT
#iptables -t filter -A OUTPUT -p tcp -d 10.111.0.0/255.255.252.0 -s $lan -m multiport --destination-port 9999,10000 -j ACCEPT

#www
iptables -t filter -A INPUT -p tcp -s 10.111.0.0/255.255.252.0 -d $lan --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d 10.111.0.0/255.255.252.0 -s $lan --sport 80 -j ACCEPT

#DHCP
iptables -t filter -A INPUT -p udp -s 10.111.0.0/255.255.252.0 -d $lan --dport 67 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -d 10.111.0.0/255.255.252.0 -s $lan --sport 67 -j ACCEPT

iptables -t filter -A INPUT -p udp -s 10.111.0.0/255.255.252.0 -d $lan --dport 68 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -d 10.111.0.0/255.255.252.0 -s $lan --sport 68 -j ACCEPT

 

и конфигурационный файл самого СТГ:

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

# Имя PID-файла куда пишется идентификатор процесса
# По умолчанию /var/run/pid
# PIDFile = /var/run/stargazer.pid

# Имя файла в котором определяются правила подсчета трафика
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 = 1

# Абонплата снимается в последний (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 = no

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

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

# Необязательный параметр. Указывает снимать полную абонплату у пользователя даже
# если он быз заморожен только часть учетного периода.
# По умолчанию установлен в no
# FullFee=no

# Необязательный параметр указывающий показывать на счету и позволять 
# использовать пользователю абонплату. По умолчанию установлен в yes
# ShowFeeInCash=yes

# Названия направлений. Направления без названий не будут отображаться в
# авторизаторе и конфигураторе. Названия состоящие из нескольких слов должны
# быть взяты в кавычки
<DirNames>
DirName0 = Local
DirName1 = Internet
</DirNames>

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

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

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

# Определяет директорию, в которой будут находится файлы "монитора"
# работы сервера. В этой директории будут созданы пустые файлы, время 
# модификации которых будет меняться примерно раз в минуту. Если какой-то 
# компонент сервера зависнет, файл(ы) перестанет обновлятся, и по этому 
# признаку можно определить сбой в работе сервера и при надобности 
# перезапустить. Если параметр не указан или пустой, мониторинг производится 
# не будет. Параметр не является обязательным, по умолчанию пустой.
# MonitorDir=/var/stargazer/monitor

################################################################################
# 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

# Удалять резервные копии после успешной записи conf/stat
# Значения: yes, no
# По умолчанию: yes
# RemoveBak = yes

# Восстанавливать файлы conf/stat из резервных копий при ошибке чтения
# Значения: yes, no
# По умолчанию: no
# ReadBak = no

</StoreModule>

#<StoreModule store_firebird>
#	# Адрес сервера БД
#	server=localhost
#
#	# Путь к БД на сервере или ее алиас
#	database=/var/stg/stargazer.fdb
#
#	# Имя пользователя БД
#	user=stg
#
#	# Пароль пользователя БД
#	password=123456
#</StoreModule>

#<StoreModule store_mysql>
#	# Имя пользователя БД
#	dbuser = stg
#
#	# Пароль пользователя БД
#	rootdbpass = 123456
#
#	# Имя БД на сервере
#	dbname = stg
#
#	# Адрес сервера БД
#	dbhost = localhost
#</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 = 5555

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

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

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

</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_ether>
	# Модуль без параметров
</Module>

#	<Module cap_ipq>
	# Модуль без параметров
#	</Module>

# Модуль захвата трафика "mod_cap_nf.so"
# Принимает информацию о трафике по протоколу NetFlow
# Второй параметер - это имя модуля без mod_ в начале и .so в конце
#	<Module cap_nf>
	# TCPPort - порт для TCP-соединений
#		TCPPort = 42111

	# UDPPort - порт для UDP-соединений
#		UDPPort = 42111

	# Могут иметь совпадающие значения.
	# Если параметр не указан - соответствующий порт не "прослушивается".
#	</Module>

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

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

</Module>

#	# Настройки модуля для удаленного выполнения скриптов OnConnect и
#	# OnDisconnect "mod_remote_script.so"
#	# Второй параметр - это имя модуля без mod_ в начале и .so в конце
#	<Module remote_script>
#
#		# Время, в секундах, между посылками подтверждений, того, что пользователь
#		# всё еще онлайн
#		# Значения: 10...600
#		SendPeriod = 15
#
#		# Соответствие подсетей, в которой находится пользователь и
#		# соответствующего роутера. Первая часть строки - подсеть, заданная
#		# как IP-адрес и маска, через пробел - IP-адрес роутера на котором
#		# должны выполняться скрипты
#		# Например эта запись "192.168.1.0/24 192.168.1.1" означает, что для
#		# всех пользователей из подсети 192.168.1.0/24, скрипты будут
#		# выполняться на роутере с адресом 192.168.1.1
#		# Subnet0...Subnet100
#		Subnet0 = 192.168.1.0/24 192.168.1.7
#		Subnet1 = 192.168.2.0/24 192.168.2.5
#		Subnet2 = 192.168.3.0/24 192.168.2.5
#		Subnet3 = 192.168.4.0/24 192.168.2.5
#
#		# Пароль для шифрования пакетов между stg-сервером и сервером,
#		# выполняющим скрипты
#		Password = 123456
#
#		# Этот параметр определяет какие параметры пользователя передаются
#		# на удаленный сервер
#		# Cash, FreeMb, Passive, Disabled, AlwaysOnline, TariffName, NextTariff, Address,
#		# Note, Group, Email, RealName, Credit, EnabledDirs, Userdata0...Userdata9
#		UserParams=Cash Tariff EnabledDirs
#
#		# Порт по которому сервер отсылает сообщения на роутер
#		# Значения: 1...65535
#		Port = 9999
#
#	</Module>
#	<Module radius>
#		Password = 123456
#		ServerIP = 127.0.0.1
#		Port = 6666
#		AuthServices = Login-User
#		AcctServices = Framed-User
#	</Module>
</Modules>
################################################################################

 

З.Ы. Хочу остановить это беспредел, пока ситуация не достигла угрожающего масштаба :)

Ссылка на сообщение
Поделиться на других сайтах

это из-за сквида, делай правила блокирующие пользователя при выполнении OnDisconnect.

Ссылка на сообщение
Поделиться на других сайтах
это из-за сквида, делай правила блокирующие пользователя при выполнении OnDisconnect.

так дело в том, что все правила добавляющиеся в скрипте конекта, убираются в скрипте дисконекта и добавляется форвардное правило блокирующее адрес, с которого был инициирован дисконект.

Ссылка на сообщение
Поделиться на других сайтах

Вопрос номер раз:

Политика по умолчанию в INPUT OUTPUT FORWARD? Логично что она будет DROP, но всетаки.

Да, я видел в основном скрипте файрвола, но всетаки. Просто ты принудительно прописываешь пользователю DROP, а поидее хватает дефолтных политик.

iptables -t filter -P INPUT DROP

iptables -t filter -P FORWARD DROP

iptables -t filter -P OUTPUT DROP

Просто вот это:

iptables -I FORWARD -i $eth_local -s $ip -j DROP
iptables -I FORWARD -o $eth_local -d $ip -j DROP

Никак не влияет на соединение с проксей.

Посомтри, где может быть утечка...

watch -n1 'netstat -a -n -p -t | grep 10.0.0.13 & netstat-nat -n | grep 10.0.0.13 & iptables -L -v -n -x | grep 10.0.0.13'

Чтонибудь типа вот этого...

Покажи кусок выхлопа tcpdump, непонятно через что именно юзер тянет. Смутные подозрения в области прозрачности прокчика...

Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

Вхід

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

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...