fernir
Маглыfernir's Achievements
Пролетал Мимо (1/9)
0
Репутація
-
Вопрос номер раз: Политика по умолчанию в INPUT OUTPUT FORWARD? Логично что она будет DROP, но всетаки. Да, я видел в основном скрипте файрвола, но всетаки. Просто ты принудительно прописываешь пользователю 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, непонятно через что именно юзер тянет. Смутные подозрения в области прозрачности прокчика...
-
Сколько юзеров ты хочешь к сети подключить? Если один дом - то свич на чердак и провода до каждого пользователя. Если весь город - то подумай о финансовой целессобразности. Подключение одного удаленного узера может обойтись довольно дорого... По твоим вопросам: 1) Сервер - смотря какой. Если файлопомойка - то пень-4 проц, оперативки гиг-два, винтов побольше в рейд-5 или 6. Ибо винты могут навернуться под нагрузкой. Пару гигабитных сетевух в совместный (а лучше асинхронный) режим. Выделенный сервак для игрушек - проц нужен будет пошустрее, оперативы еще больше. Тут смотерть что будет крутиться. Шлюз в интернет - сильно зависит от количества пользователей, и от того что там еще будет крутиться. Если сотка юзеров и страничка со статистикой - то третьего пенька с 256-384 рамы хватит. Если довесить сквида, пару юзерских сайтов, и пользователей пару сотен - будет тормозить. Имхо неплохой дешевый вариант - двухпроцессорная серверная мать - пень-3. У нас стоит и довольно неплохо тянет. 2) Свичи. На пул серверов - гигабитный свич. Можно D-LINK, ибо распостранены, и достаточно надежны. Бери сразу 24-х портовый, ибо хозяйство разрастется. Не забудь про охлаждение, ибо. Юзерам в дома (если домов будет несколько) - 100-мбитные, с 1-м г-битным портом. Итого - до свичей юзерских идет г-бит, юзерам - 100мбит. 3) ОС - а что ты знаешь? Если ты совсем не знаешь линух - то он тебе не по силам. Придется платить или дяде биллу, или тому кто настроит. Можешь посидеть поучиться сам, но это время... Я бы попробовал поучить... Не так все сложно, ка кажется по началу... Выбор дистрибутива. Лучший дистрибутив линукса - тот который исповедует твой ближайший линукс-гуру. Главное чтобы поначалу было у кого что спросить. Или чтобы ктото настроил все изначально. Если есть только интернет - то самые приятные сообщества имхо у генты (gentoo) и дебиана (debian). Общество убунтоидов (ubuntu) довольно большое, но не смотря на популярность там очень много начинающих пользователей, и гуру - маловато (очень ИМХО). Сусю (Suse), мандриву (Mandriva) и т.д. на сервак - не советую. Десктопное оно. Федору или RedHat - можно впринципе, но у меня руки не доходят попробовать их свежие дистры, поэтому оценить их не могу, но Фирма за их спинами стоит серьезная. 4) Запрос в гугл - домовые сети. http://ru.wikipedia.org/wiki/%D0%94%D0%BE%...%B5%D1%82%D1%8C Тут внизу ссылки есть. http://www.homenetworks.ru/ http://x15.ru/ - это будни. Это - крик души сете-домоводов.
-
Патчей нет, а куда корка ляжет?
-
Гента, 1,8 атлонХп, 256 рам, 40-50 юзеров. stg-2.405.9.8 валится вот с такими вот письменами (собран с дебагом): ping.cpp > 11:19:08 > pinger.DelIP 0.0.0.0 ping.cpp > 11:19:08 > pingerCurrIP.AddIP 10.0.0.78 user.cpp > 11:19:08 > USER::WriteStat user=Ibragim inetaccess.cpp > 11:19:08 > Min8(sizeof(ALIVE_SYN)) = 368 inetaccess.cpp > 11:19:08 > 1212131990.928739 368 bytes sent to 10.0.0.78:5555 len=368 inetaccess.cpp > 11:19:08 > Monitor time 1212079955 1212132008 inetaccess.cpp > 11:19:08 > recv from 10.0.1.133 5555 len=64 inetaccess.cpp > 11:19:08 > User OliaSh FOUND! inetaccess.cpp > 11:19:08 > ======================> InitEncrypt dont needed inetaccess.cpp > 11:19:08 > Monitor time 1212079955 1212132008 inetaccess.cpp > 11:19:08 > recv from 10.0.0.40 5555 len=64 inetaccess.cpp > 11:19:08 > User Tarubarova FOUND! inetaccess.cpp > 11:19:08 > ======================> InitEncrypt dont needed inetaccess.cpp > 11:19:08 > CONN_ACK inetaccess.cpp > 11:19:08 > rnd = 682568960 connAck->rnd=682568961 inetaccess.cpp > 11:19:08 > Min8(sizeof(ALIVE_SYN)) = 368 inetaccess.cpp > 11:19:08 > 1212131990.929062 368 bytes sent to 10.0.0.40:5555 len=368 inetaccess.cpp > 11:19:08 > Monitor time 1212079955 1212132008 inetaccess.cpp > 11:19:08 > recv from 10.0.3.13 5555 len=64 inetaccess.cpp > 11:19:08 > User trio FOUND! inetaccess.cpp > 11:19:08 > ======================> InitEncrypt dont needed inetaccess.cpp > 11:19:08 > CONN_ACK inetaccess.cpp > 11:19:08 > rnd = 116568813 connAck->rnd=116568814 inetaccess.cpp > 11:19:08 > Min8(sizeof(ALIVE_SYN)) = 368 inetaccess.cpp > 11:19:08 > 1212131990.930713 368 bytes sent to 10.0.3.13:5555 len=368 inetaccess.cpp > 11:19:08 > Monitor time 1212079955 1212132008 user.cpp > 11:19:08 > USER::WriteStat user=hellstad inetaccess.cpp > 11:19:08 > recv from 10.0.1.152 5555 len=64 inetaccess.cpp > 11:19:08 > User BarsovaA FOUND! inetaccess.cpp > 11:19:08 > ======================> InitEncrypt dont needed inetaccess.cpp > 11:19:08 > CONN_ACK inetaccess.cpp > 11:19:08 > rnd = 283691498 connAck->rnd=283691499 users.cpp > 11:19:08 > Add IP Idx traffcounter.cpp > 11:19:08 > AddUser: BarsovaA ping.cpp > 11:19:08 > pinger.DelIP 0.0.0.0 ping.cpp > 11:19:08 > pingerCurrIP.AddIP 10.0.1.152 Ошибка сегментирования В /var/log/stargazer.log следущее: 2008-05-29 20:53:35 -- Stg v. Stg 2.404 2008-05-29 20:53:35 -- Message queue created successfully. msgKey=5555 msgID=2031616 2008-05-29 20:53:35 -- Timer thread started successfully. 2008-05-29 20:53:35 -- Storage plugin: mysql_store v.0.67. Loading successfull. 2008-05-29 20:53:35 -- Users started successfully. 2008-05-29 20:53:35 -- Traffcounter started successfully. 2008-05-29 20:53:35 -- Module: 'ipq_cap v.1.1'. Start successfull. 0 2008-05-29 20:53:35 -- Module: 'InetAccess authorizator v.1.2'. Start successfull. 50 2008-05-29 20:53:35 -- Module: 'Always Online authorizator v.1.0'. Start successfull. 70 2008-05-29 20:53:37 -- Module: 'Pinger v.1.01'. Start successfull. 100 2008-05-29 20:53:37 -- Module: 'Stg configurator v.0.07'. Start successfull. 220 2008-05-29 20:53:37 -- Stg started successfully. 2008-05-29 20:53:37 -- +++++++++++++++++++++++++++++++++++++++++++++ 2008-05-30 09:29:56 -- User's connect failed. IP '10.0.0.29'. Wrong login or password 2008-05-30 10:29:44 -- User's connect failed. IP '10.0.0.81'. Wrong login or password 2008-05-30 11:35:41 -- Stg v. Stg 2.404 2008-05-30 11:35:41 -- Message queue created successfully. msgKey=5555 msgID=2064384 2008-05-30 11:35:41 -- Timer thread started successfully. 2008-05-30 11:35:41 -- Storage plugin: mysql_store v.0.67. Loading successfull. 2008-05-30 11:35:41 -- Users started successfully. 2008-05-30 11:35:41 -- Traffcounter started successfully. 2008-05-30 11:35:41 -- Module: 'ipq_cap v.1.1'. Start successfull. 0 2008-05-30 11:35:41 -- Module: 'InetAccess authorizator v.1.2'. Start successfull. 50 2008-05-30 11:35:41 -- Module: 'Always Online authorizator v.1.0'. Start successfull. 70 2008-05-30 11:35:41 -- Module: 'Pinger v.1.01'. Start successfull. 100 2008-05-30 11:35:41 -- Module: 'Stg configurator v.0.07'. Start successfull. 220 2008-05-30 11:35:42 -- Stg started successfully. Куда можно покопать?
-
Stg 2.405.9.8 считает трафик в 2 раза увеличенный
тема ответил в lalex пользователя fernir в Питання по Stargazer
Ты через cap_ether или cap_ipq считаешь? -
Ну... нужно слепить авторизатор для сквида. Авторизатор выглядит как висящий процесс, которому время от времени кидают логин и пароль в stdin. Он должен ответить OK или ERR. gate squid # cat auth.sh #!/bin/bash ## Авторизатор squid на БД stargazer'а PrintBases () { ./stga.sh $line } if [ $# -gt 0 ] then PrintBases "$@" else # чтение со stdin while read line do PrintBases $line done fi gate squid # cat stga.sh #!/bin/bash LOGIN=$1 PASSW=$2 ANSW='ERR' DBS=`cat /var/stargazer/users/$LOGIN/conf` for b in $DBS ; do if [ "$b" = "Password=$2" ]; then ANSW="OK" fi done echo $ANSW auth представить сквиду в качестве авторизатора. Это еще на текстовую БД, на мускул лучше переписать на перле.
-
А не предвидется-ли в ближайшее время написание модуля (патчика?) для хранения юзверей в каталогах ldap или на крайний случай AD (samba)? Т.е. статистика пользователей, их траффик в mysql (firebird), а логины-пароли в лдапе? Имхо фича тоже довольно востребована, особенно в организациях. Создавать юзерам по 2-3 учетки лениво (юзерам хотябы один пароль запомнить), хочется все в лдап запихнуть.
-
Шлюз и днс. DNS - или поднять свой, или твоего провайдера. Шлюз - сам сервак старгейзера. Сквид в режиме прозрачного проксирования - http://local.com.ua/forum/index.php?showtopic=10991 тут посмотри.
-
У меня на двух шлюзах стоят, экономия от 17 до 25%. refresh_pattern пока не трогал. Сквид 3.1_rc1. refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 cache_replacement_policy lru memory_replacement_policy lru
-
Можно пример как оно у тебя так получается? Прозрачное проксирование (как я это понимаю) - все HTTP запросы скрытно от юзера заворачиваются на проксю, т.е. : iptables -t nat -A PREROUTING -s $userip -d ! $lanip -p tcp -m multiport --dport 80,81,82,83,88,8000,8001,8002,8080,8081 -j DNAT --to-destination ".$proxy.":3128 Преобразование в PREROUTING. Траффик еще не дошел до правила QUEUE, и не попал в cap_ipq, и соотв еще не обработался старгейзером. Старгейзер, если посмотреть detailstat обсчитывает общение с инетом, как общение с проксей. Alferov, то что ты говоришь, может быть правдой, если прозрачный проксик стоит отдельно, между шлюзом с stg и интернетом, тогда старгейзер действительно не сделает разницы между NAT интернетом, и обработаным проксей. Но всеравно, я бы вписал в правила стг считать общение с проксей интернетом, ибо юзеры могут пронюхать ип-порт. А в чем заключается разница? Разница будет в суммарный размер страниц сообщений об ошибках, которые увидит юзер (из тех что генерит сквид), да в размер иконок (типа папок и типов файлов при посещении фтп). Если ты имеешь ввиду траффик на локальные сайты, типа апача статистики и т.д., это легко решается методами iptables, например вот так: 1) В таблице PREROUTING завернуть все (80,81,82,83,88,8000,8001,8002,8080,8081) запросы в свежесозданную цепочку http (прим. Если например сервер статистики находится в локальной сети пользователся, то он может сам общаться с ним, не прибегая к использованию шлюза. В случае с vpn это не покатит - весь пусть даже локальный траффик пойдет через шлюз) 2) Цепочку http построчно разбирать: а) На сервер статистики, который юзер не видит в локалке? DNAT -> на сервер локалки. б) На хоум-паги пользователей (внутри локалки)? DNAT - тудаже. в) destination address не локалка? Отдать на растерзание сквиду. Для а и б нужно в файрволе прописать чтото вида: iptables -t filter -A FORWARD -p tcp -s $localnet -d $localnet -m multiport ! --dport 3128 -j ACCEPT И как старгейзер, который не рзбирает пакеты, узнает для кого сквид берет этот пакет? У траффика сквида адрес запроса - твой сервер, получатель - сайт. Какому пользователю что отдать, это уже знает сам сквид... Траффик от юзеров сначала обрабатывается iptables, и принимается решение о том куда он пойдет, и только потом его обсчитывает старгейзер. То что должно пойти в локалку (игры, обменник), пойдет в локалку. А по пути его осчитает сквид по тарифу. Траффик, идущий в интернет поделится на 2 части - то что пойдет натом (аська, on-line игры...) посчитается старгейзером и уйдет в интернет, который предназначен сквиду посчитается stg и только потом попадет к нему. А вот например DNS запоросы от твоего собственного сервера, и обновления которые качет сам сервак, к stg не попадут. Точнее они могут быть пропущены через QUEUE, но stg не обратит на них внимания, и спокойно подпишет им ACCEPT. Этот траффик можно посчитать средствами iptables, запихнув каждый из таких сервисов в отдельную цепочку.
-
См мой пост выше - Разрешается общаться с локалкой, _кроме_ порта 3128. Соотв в OnConnect OnDisconect разрешаем общаться с проксей. iptables -t filter -A INPUT -i $iface_lan -p tcp -s $localnet -m multiport ! --dport 3128 -j ACCEPT iptables -t filter -A OUTPUT -o $iface_lan -p tcp -d $localnet -m multiport ! --sport 3128 -j ACCEPT iptables -t filter -A INPUT -i $iface_lan -p udp -s $localnet -m multiport ! --dport 3128 -j ACCEPT iptables -t filter -A OUTPUT -o $iface_lan -p udp -d $localnet -m multiport ! --sport 3128 -j ACCEPT В /etc/stargazer/rules TCP 10.0.0.9/32:3128 DIR1 TCP 10.0.0.10/32:3128 DIR1 TCP 10.0.0.242/32:3128 DIR1 TCP 10.0.0.249/32:3128 DIR1 ALL 10.0.0.0/21 DIR0 ALL 192.168.1.0/24 DIR0 ALL 0.0.0.0/0 DIR1 Порт проксика приравнять к интернету. И все - прокся считается интернетом, и общитыватся stargazer'ом
-
Нууу... Напрмер вот так: Создаем БД в mysql: ip,user,url,bytes,host,trans - и т.д. (Читаем squid.conf про формат файла access.log, и добавляем нужные нам поля - user, host). Создаем таблицу соответствий now (ip=user) - которую поддерживают в актуальном состоянии скрипты OnConnect, OnDisconnect. Создаем трубу (pipe) mkfifo в /var/log/squid/access.log Запускаем скрипт (./s2m < /var/log/squid/access.log), который будет с одной стороны трубы ловить идущий в него поток. Запускаем сквид. Сквид пихает в лог строки, мы это дела разбираем, и тутже кладем в БД. (Долго искал патчик на сквида, чтоб сразу писал в БД, не нашел.) #!/usr/bin/perl use DBI; use DBI::DBD; use Time::localtime; use Data::Dump qw(dump); $dbh=DBI->connect('DBI:mysql:traffics','_USER_','_PASS_'); open(FBLOG,">>"."/tmp/squid-desynchro.log"); open(FBERR,">>"."/tmp/squid-sql-errs.txt"); load_type (); check_now (); $typeid=0; my @type; while(<>) { $original=$_; ($time, $resp_time, $userip, $method, $bytes, $metod, $url , $user, $trans, $type) = split (" ", $original); $url=~s/\"/'``'/egs; $url=~s/\"/'``'/egs; $typen=typer(); $namen=namer(); ($time,$msec)= split (/\./,$time ); check_now (); $act = time(); $delta=$act-$time; #print $delta."\n"; #print $time-$act."\n"; #print $url."\n"; host (); if ( $delta > 3) { print FBLOG $delta." ".$original; } else { #print $original."\n"; namer(); #$sql = "INSERT INTO squid (ip,bytes,link,trans,time,type,user) SELECT '$userip','$bytes','$url','$trans',from_unixtime('$time'),'$typen',now.`username` from now where now.`ip`='$userip'"; $sql = "INSERT INTO squid (ip,bytes,link,trans,time,type,user,host,proto) VALUES ( '$userip','$bytes',\"$url\",'$trans',from_unixtime('$time'),'$typen','$namen','$host','$prota')"; print $sql."\n"; my $sth = $dbh->prepare( $sql ); if ($sth->execute()) { } else { #system "echo $sql >> /tmp/squid-sql-errs.txt"; print FBERR $sql.";\n"; } }} $dbh->disconnect(); close(FBLOG); exit(); sub check_now { $sql = "SELECT UPDATE_TIME FROM information_schema.TABLES where TABLE_NAME='squid'"; my $sth = $dbh->prepare( $sql ); $sth->execute(); $ch_now=$sth->fetchrow_array; #print $update_now." -> ".$ch_now."\n"; if ($update_now eq $ch_now) { } else { #print $update_now." -> ".$ch_now."\n"; $update_now=$ch_now; }} sub read_now { } sub typer () { $type_n=''; for(my $i=0; $i<= $#type;$i++){ if (${$type[$i]}{'type'} eq $type) { $type_n=${$type[$i]}{'id'}; }} if ($type_n eq '') { $sql = "INSERT INTO content (type) VALUES ('$type')"; my $sth = $dbh->prepare( $sql ); $sth->execute(); load_type(); for(my $i=0; $i<= $#type;$i++){ if (${$type[$i]}{'type'} eq $type) { $type_n=${$type[$i]}{'id'}; }}} return $type_n; } sub load_type () { @type=''; $sql = "SELECT * FROM content"; my $sth = $dbh->prepare( $sql ); $sth->execute(); while (@temp=$sth->fetchrow_array) { push @type,{'id'=>$temp[0],'type'=>$temp[1]};} #dump @type; } sub namer () { $sql = "SELECT username FROM now where ip='$userip'"; my $sth = $dbh->prepare( $sql ); if ($sth->execute()){ if ($name_n=$sth->fetchrow_array) {} else { $name_n='name-not-found'; }} else { $name_n='name-not-found'; } return $name_n; } sub host () { my @matches = ('/'); $url =~ /(@matches)/; if ($1 eq '/') { ($prota, $urle) = split ("://", $url); ($host, $temp) = split ("/", $urle); $host=~s/www./''/egs; $prota=~s/ftp/'1'/egs; $prota=~s/http/'2'/egs; } else { $host=$url; $prota="0"; } #print $prota." ".$host."\n"; } Код несколько коряв, но работает. Если интересно, могу выложить все свое самописное, On(Dis)connect, rules, структуру правил файрвола и слепки БД. В результате в БД напротив каждого url, bytes помимо ip есть username. По нему можно делать выборку. Красивых .php пока не написал (и некрасивых тоже). Будет время - поставлю себе творение Алферова, и может добавлю туда логи сквида и топ сайтов.
-
Ну примерно вот так: server0=10.0.0.9 ProxyIP=10.0.0.9 # Поменяй на свои iface_lan=eth0 localnet=10.0.0.0/21 iptables -t filter -A INPUT -i $iface_lan -p tcp -s $localnet -m multiport ! --dport 3128 -j ACCEPT iptables -t filter -A OUTPUT -o $iface_lan -p tcp -d $localnet -m multiport ! --sport 3128 -j ACCEPT iptables -t filter -A INPUT -i $iface_lan -p udp -s $localnet -m multiport ! --dport 3128 -j ACCEPT iptables -t filter -A OUTPUT -o $iface_lan -p udp -d $localnet -m multiport ! --sport 3128 -j ACCEPT Разрешаем общаться с локалкой, кроме портов прокей. В rules - указываем: TCP 10.0.0.9/32:3128 DIR1 ALL 10.0.0.0/21 DIR0 ALL 192.168.1.0/24 DIR0 ALL 0.0.0.0/0 DIR1 Соотв DIR1 - интернет, DIR0 - локалка. iptables -t nat -A PREROUTING -s $localnet -d ! $server0 -p tcp -m multiport --dport 80,81,82,83,88,8000,8001,8002,8080,8081 -j DNAT --to-destination $proxyIP:3128 iptables -t nat -A PREROUTING -s $localnet -d ! $server0 -p udp -m multiport --dport 80,81,82,83,88,8000,8001,8002,8080,8081 -j DNAT --to-destination $proxyIP:3128 OnConnect: 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 Сквид с поддержкой прозрачности. Пользователи даже не подозревают, что где-то есть прокся... Экономия у нас 23%
-
В какой кодировке пишется БД ? Картина : gentoo LANG=ru_RU.UTF-8 LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL= cat /var/log/stargazer.log | grep real 2008-02-02 10:18:59 -- Admin 'admin', 10.0.0.5: User 'test': 'realName' parameter changed from '' to '����'. cat /var/log/stargazer.log | grep real | iconv -f koi8-r -t utf8 2008-02-02 10:18:59 -- Admin 'admin', 10.0.0.5: User 'test': 'realName' parameter changed from '' to 'Мясо'. В текстовой БД текст хранится в кои8. Но ведь локаль-то - ютф!!! В mysql (при ведении БД через него), при вносе текста через "update user set .... ='А' " (Русская А), в конфигураторе виндовом отображается текст, который можно получить путем echo 'А' | iconv -t utf8 -f cp1251 Рђ При работе через mysql модуль stargazer вообще не пишет русский текст в БД. (локаль utf8 - везде), если указать кодировку на таблицу сз1251, в БД появляются символы "?" вместо русских символов. Можно-ли както в mysql модуле stg принудительно указать кодировку для общения с БД?
