Название: freebsd, pf проблема с доступом Отправлено: serg_sk от 16 Ноября 2012, 15:14:21 Суть проблемы такая. Есть сателит на фре с pf.nat. Запускаем noserver.pl, который добавляет юзеров в фаерволл и кажется все хорошо, но некоторых пользователей он туда не добавляет. Приходится в биллинге вручную делать юзеру запрет доступа, потом доступ разрешаем и скрипт добавляет в фаерволл.
Пользователь комп выключает и утром после включения компа, опять приходится проводить процедуру включения и отключения доступа. В биллинге на всех юзерах авторизиция "всегда онлайн". Выкладываю скрипты: nofire.pl Цитировать nas4# cat nofire.pl #!/usr/bin/perl # ==============================================================================# # # # NoDeny - подпрограммы разрешения/блокировки доступа # # # # ==============================================================================# $FW='/sbin/ipfw -q '; sub Flush { system("$FW table 1 flush"); system("$FW table 10 flush"); system("$FW table 11 flush"); system("$FW table 12 flush"); system("$FW table 13 flush"); system("$FW table 14 flush"); system("$FW pipe flush"); } sub Deny { my ($p, $id, $num, $main_num, $pipe_in, $pipe_out, $ip); $p=$_[0]; $id=$p->{id}; $num=$p->{num}; $main_num=$p->{main_num}; $ip=$p->{ip}; $pipe_in=&Get_Pipe_Num($main_num); $pipe_out=$pipe_in+1; $pipe=$Pipe_used{$num}; &Add_Rule("table 10 delete $ip"); &Add_Rule("table 11 delete $ip"); &Add_Rule("table 12 delete $ip"); &Add_Rule("table 13 delete $ip"); &Add_Rule("table 14 delete $ip"); if( --$Pipe_count{$pipe}<=0 ) { $pipe2=$pipe+1; system("$FW pipe $pipe delete"); system("$FW pipe $pipe2 delete"); } } sub Allow { my($p, $num, $main_num, $id, $ip, $speed_in, $speed_out, $pipe_in, $pipe_out, $auth, $dop_param, $s_in, $s_out, $a_ports, $options, $traf); $p=$_[0]; $num=$p->{num}; $main_num=$p->{main_num}; $id=$p->{id}; $ip=$p->{ip}; $speed_in=$p->{speed_in}; $speed_out=$p->{speed_out}; $auth=$p->{auth}; $dop_param=$p->{dop_param}; $s_in=$dop_param->{_speed_in}; $s_out=$dop_param->{_speed_out}; $a_ports=$dop_param->{_open_ports}; $udp=$dop_param->{_udp}; $alldata=$p->{alldata}; $d_traf=$p->{traf}; # $options=$alldata->{options}; # $options=$p->{options}; $pipe_in=&Get_Pipe_Num($main_num); $pipe_out=$pipe_in+1; $Pipe_used{$num}=$pipe_in; $Pipe_count{$pipe_in}++; system("$FW pipe $pipe_in config bw ${speed_in}Kbit/s"); system("$FW pipe $pipe_out config bw ${speed_out}Kbit/s"); # system("$FW pipe $pipe_in config bw 2Mbit/s"); # system("$FW pipe $pipe_out config bw 2Mbit/s"); if ($s_in>0) { system("$FW pipe $pipe_in config bw ${s_in}Kbit/s"); system("$FW pipe $pipe_out config bw ${s_in}Kbit/s"); } #system("$FW table 10 add $ip"); &Add_Tbl_Rule(10,$ip,0); return if $auth eq 'ong'; ############UA-IX##################### foreach $i (2..4) { $speed=$alldata->{"speed$i"}; $speed or next; $pipe=$pipe_in+$i; system("$FW pipe $pipe config bw ${speed}Kbit/s"); # system("$FW table 13 add $ip $pipe"); # system("$FW table 14 add $ip $pipe"); &Add_Tbl_Rule(13,$ip,$pipe); &Add_Tbl_Rule(14,$ip,$pipe); } ###################################### # system("$FW table 11 add $ip $pipe_in"); # system("$FW table 12 add $ip $pipe_out"); &Add_Tbl_Rule(11,$ip,$pipe_in); &Add_Tbl_Rule(12,$ip,$pipe_out); } sub Add_Tbl_Rule { # return if $Tbl{$_[1]}{$_[0]}; # $Tbl{$_[1]}{$_[0]}=1; $Rules.="table $_[0] add $_[1] $_[2]\n"; } sub Get_Pipe_Num { return($_[0]*2+1000); } ############################################# sub Add_Rule { $Rules.=$_[0]."\n"; $nRules++; } ############################################# sub Add_To_Allow_Ip { # &Add_Rule("table 1 add $_[0]"); } ############################################ $Del_Files=1; sub Run_Ipfw_Rules { return unless $Rules; my $fname=$Program_dir.'/addip/'.time(); if (open(F,">>$fname")) { print F $Rules; close (F); $Rules=''; system("$FW $fname"); unlink $fname if $Del_Files; } } ############################################ sub Delete_From_Allow_Ip { # &Add_Rule("table 1 delete $_[0]"); } sub Add_To_All_Ip {} sub Delete_From_All_Ip {} sub Add_To_Table {} sub Delete_From_Table {} 1; Цитировать nas4# ipfw show 00100 0 0 check-state 00200 15222 865560 allow ip from any to any via lo0 00300 777497647 670981331801 allow ip from me to any keep-state 01100 3596451893 1774843751869 allow ip from table(10) to table(10) 01200 115026104 11258846233 allow ip from table(5) to 172.16.21.124,91.214.163.7 01300 12646486 11223258034 allow ip from 172.16.21.124,91.214.163.7 to table(5) 01310 165688 32798812 skipto 1370 ip from table(5) to table(6) 01500 165688 32798812 allow ip from table(5) to table(6) 01510 159942 113297462 allow ip from table(6) to table(5) 01600 374630847462 298612205697016 allow ip from any to any via vlan5 01700 17116634527 14374602295967 allow ip from any to any via vlan11 01900 2301 214136 allow tcp from any to me dst-port 22 02000 635 50166 allow icmp from any to me 02100 0 0 allow ip from table(5) to me dst-port 161 02300 4563 360026 deny ip from any to me 02400 16439030 986825125 deny ip from table(5) to table(5) 02420 599797 36899024 deny ip from table(50) to any 02450 20099405962 25367215063865 allow ip from table(20) to table(13) 02455 160620032436 117274836040441 skipto 2600 ip from table(12) to not table(20) 02460 7823323619 1975828000034 allow ip from table(14) to any 02500 161009480895 142962674475760 allow ip from any to table(11) 02600 146061490331 103193757214633 allow ip from table(12) to any 65400 380659943 26753533506 deny ip from any to any Название: Re: freebsd, pf проблема с доступом Отправлено: serg_sk от 16 Ноября 2012, 15:22:41 а, да. В логах noserver.pl вот такое:
Цитировать DBD::mysql::st execute failed: ����������� ������� 'revision' � 'field list' at nosat.pm line 245. Название: Re: freebsd, pf проблема с доступом Отправлено: serg_sk от 16 Ноября 2012, 15:37:58 а, да. В логах noserver.pl вот такое: Цитировать DBD::mysql::st execute failed: ����������� ������� 'revision' � 'field list' at nosat.pm line 245. Это пофиксил. Но проблема осталась. Название: Re: freebsd, pf проблема с доступом Отправлено: versus от 16 Ноября 2012, 16:05:21 носервер точно работает постоянно ? если пользователи всегда онлайн то как бы вобще не должно их выкидывать
Название: Re: freebsd, pf проблема с доступом Отправлено: serg_sk от 16 Ноября 2012, 16:48:46 Да, работает постоянно. Выкидывает. :/
Название: Re: freebsd, pf проблема с доступом Отправлено: serg_sk от 20 Ноября 2012, 16:21:38 Какие-то предложения будут? Скажите хоть в какую сторону рыть?
Название: Re: freebsd, pf проблема с доступом Отправлено: serg_sk от 21 Ноября 2012, 14:02:03 Указал в настройках сателита группы, которые он должен обслуживать.
Цитировать id групп клиентов с которыми работаем, перечислите через запятую. Пустая строка - все группы. Если в таблице клиентов доступны только наши группы - ставьте пустую строку Через запяту прописал пару групп. В итоге noserver.pl все равно смотрит по всем группам. Когда в noserver.pl изменил строку: Код: our $Where_grp=$c{Usr_nosrvr_groups}? " AND grp IN($c{Usr_nosrvr_groups})" : ''; Код: our $Where_grp=" AND grp IN(1,2,3,4,5,6,7,8)"; Название: Re: freebsd, pf проблема с доступом Отправлено: 0xbad0c0d3 от 21 Ноября 2012, 16:45:54 Возможно вы не дождались пока рестартанется носервер (при изменении конфига сателита, соответствующий сателит перезагружается сам). Ну или вносились какие-то правки в код
Название: Re: freebsd, pf проблема с доступом Отправлено: stix от 21 Ноября 2012, 16:51:53 нужно бы посмотреть, что находится в $c{Usr_nosrvr_groups}
Название: Re: freebsd, pf проблема с доступом Отправлено: 0xbad0c0d3 от 21 Ноября 2012, 21:17:12 Код: select config from conf_sat where login='satellite_login'; Название: Re: freebsd, pf проблема с доступом Отправлено: serg_sk от 22 Ноября 2012, 13:50:05 Цитировать Db_server xxx.xxx.xxx.1 Db_mysql_connect_timeout 5 Db_server_a xxx.xxx.xxx.6 Db_mysql_connect_timeouta 5 Db_name nodeny Db_usr_table users_kitsman Usr_nosrvr_groups 1,2,3,4,5,6,7,8 Noserver_monitor 1 Noserver_dopdata_tmpl 1 Period_load_user_info 8 Period_load_all_info 30 Allow_auth_off 0 Allow_unauth 0 Allow_overlimits 0 Start_num_ipfw 5000 End_num_ipfw 32000 Start_num2_ipfw 33000 End_num2_ipfw 60000 DefaultSpeedIn 4096 DefaultSpeedOut 512 Denied_ports 25 Usr_auth_groups L2_auth_monitor 0 V_auth_Ip T_usr_block 120 T_get_old 120 T_get_new 10 My_server_ip 0 My_port 7723 Ver_client 14 Nomake_monitor 0 Название: Re: freebsd, pf проблема с доступом Отправлено: 0xbad0c0d3 от 22 Ноября 2012, 14:34:22 Ну надо глянуть тогда, что, в результате в переменной...
В noserver.pl найти: Код: $t=&TimeNow(); Код: $t=&TimeNow(); а дальше смотрим на вывод и ищем SQL: SELECT ..... Название: Re: freebsd, pf проблема с доступом Отправлено: serg_sk от 05 Декабря 2012, 11:40:57 Цитировать nas2# perl noserver.pl -v | grep SQL Кажется, все хорошо.DBD::mysql::st execute failed: ����������� ������� 'revision' � 'field list' at nosat.pm line 245. SQL: SELECT SQL_BUFFER_RESULT id,mid,ip,auth,lstate,paket FROM users_kitsman WHERE state<>'off' 05.12.2012 11:30:06 Error: SELECT SQL_BUFFER_RESULT id,mid,ip,auth,lstate,paket FROM users_dunaivtsi WHERE state<>'off' SQL: SELECT SQL_BUFFER_RESULT id,mid,ip,auth,lstate,paket FROM users_kitsman WHERE state<>'off' AND auth<>'off' AND (auth<>'no' OR lstate<>0) SQL: SELECT SQL_BUFFER_RESULT id,mid,ip,auth,lstate,paket FROM users_kitsman WHERE state<>'off' AND auth<>'off' AND (auth<>'no' OR lstate<>0) Название: Re: freebsd, pf проблема с доступом Отправлено: stix от 05 Декабря 2012, 12:09:56 DBD::mysql::st execute failed:
05.12.2012 11:30:06 Error: не совсем все хорошо SELECT SQL_BUFFER_RESULT id,mid,ip,auth,lstate,paket FROM users_dunaivtsi WHERE state<>'off' это что за таблица users_dunaivtsi ? Название: Re: freebsd, pf проблема с доступом Отправлено: ser970 от 05 Декабря 2012, 12:22:36 DBD::mysql::st execute failed: 05.12.2012 11:30:06 Error: не совсем все хорошо SELECT SQL_BUFFER_RESULT id,mid,ip,auth,lstate,paket FROM users_dunaivtsi WHERE state<>'off' это что за таблица users_dunaivtsi ? это походу должна быть вьюха CREATE ALGORITHM = UNDEFINED VIEW users_dunaivtsi AS SELECT * FROM users WHERE grp IN (группы); Название: Re: freebsd, pf проблема с доступом Отправлено: stix от 05 Декабря 2012, 12:29:47 DROP VIEW 'users_dunaivtsi';
CREATE ALGORITHM = UNDEFINED VIEW users_dunaivtsi AS SELECT * FROM users WHERE grp IN (через запятую ID твоих групп); Название: Re: freebsd, pf проблема с доступом Отправлено: serg_sk от 05 Декабря 2012, 12:55:29 там users_kitsman должно быть. очепятка)
Название: Re: freebsd, pf проблема с доступом Отправлено: serg_sk от 05 Декабря 2012, 13:36:35 Есть вьюха. и на users_dunaivtsi и на users_kitsman
Название: Re: freebsd, pf проблема с доступом Отправлено: stix от 05 Декабря 2012, 14:20:06 а че ж он тогда ругался на
SELECT SQL_BUFFER_RESULT id,mid,ip,auth,lstate,paket FROM users_dunaivtsi WHERE state<>'off' ? Название: Re: freebsd, pf проблема с доступом Отправлено: ser970 от 05 Декабря 2012, 15:24:30 cтукни в аську - помогу
Название: Re: freebsd, pf проблема с доступом Отправлено: serg_sk от 05 Декабря 2012, 16:48:39 SELECT SQL_BUFFER_RESULT id,mid,ip,auth,lstate,paket FROM users_kitsman WHERE state<>'off'
Вот так должно быть. Нету там dunaivtsi. |