ipfw на удаленном маршрутизаторе
ipfw на удаленном маршрутизаторе
По каким-то причинам не отключаются пользователи на удаленном сервере.
На этом сервере создан пользователь ipfw, в конфиге sudoers прописано следующее ipfw ALL = NOPASSWD: /sbin/ipfw
На сервере, где стоит УТМ 4, в правилах фаервола прописано
отключение /sbin/ipfw add RULE_ID deny ip from UIP to any
включения /sbin/ipfw delete RULE_ID
В маршрутизаторах: тип-Удаленный UNIX, ip-IP, логин-ipfw, пароль-*** ....
В utm.conf
sudo_path=/usr/local/bin/sudo (и он там есть)
В чем может быть причина?
На этом сервере создан пользователь ipfw, в конфиге sudoers прописано следующее ipfw ALL = NOPASSWD: /sbin/ipfw
На сервере, где стоит УТМ 4, в правилах фаервола прописано
отключение /sbin/ipfw add RULE_ID deny ip from UIP to any
включения /sbin/ipfw delete RULE_ID
В маршрутизаторах: тип-Удаленный UNIX, ip-IP, логин-ipfw, пароль-*** ....
В utm.conf
sudo_path=/usr/local/bin/sudo (и он там есть)
В чем может быть причина?
в inet.d просто расскоментил стандартную строчку
exec stream tcp nowait root /usr/libexec/rexecd rexecd
10:07:37.224568 192.168.0.1.exec > 192.168.0.3.52917: R 0:0(0) ack 2847903422 win 0
10:07:37.225442 192.168.0.3.59288 > 192.168.0.1.exec: S 3506599317:3506599317(0) win 65535 <mss 1460,nop,nop,sackOK,nop,wscale 1,nop,nop,timestamp 6546559 0> (DF)
10:07:37.225467 192.168.0.1.exec > 192.168.0.3.59288: R 0:0(0) ack 3506599318 win 0
10:07:37.231096 192.168.0.3.50538 > 192.168.0.1.exec: S 2461080045:2461080045(0) win 65535 <mss 1460,nop,nop,sackOK,nop,wscale 1,nop,nop,timestamp 6546560 0> (DF)
логов sudo нет ...
exec stream tcp nowait root /usr/libexec/rexecd rexecd
10:07:37.224568 192.168.0.1.exec > 192.168.0.3.52917: R 0:0(0) ack 2847903422 win 0
10:07:37.225442 192.168.0.3.59288 > 192.168.0.1.exec: S 3506599317:3506599317(0) win 65535 <mss 1460,nop,nop,sackOK,nop,wscale 1,nop,nop,timestamp 6546559 0> (DF)
10:07:37.225467 192.168.0.1.exec > 192.168.0.3.59288: R 0:0(0) ack 3506599318 win 0
10:07:37.231096 192.168.0.3.50538 > 192.168.0.1.exec: S 2461080045:2461080045(0) win 65535 <mss 1460,nop,nop,sackOK,nop,wscale 1,nop,nop,timestamp 6546560 0> (DF)
логов sudo нет ...
Такая же проблема.
Тоже юзер ipfw.
Причем вот че пишут логи:
Aug 31 09:16:57 katrine sudo: nobody : TTY=unknown ; PWD=/usr/www/utm/cgi-bin/utm ; USER=root ; COMMAND=/sbin/ipfw delete 1002
Aug 31 09:16:57 katrine sudo: nobody : TTY=unknown ; PWD=/usr/www/utm/cgi-bin/utm ; USER=root ; COMMAND=/sbin/ipfw delete 1002
Aug 31 09:16:57 katrine rexecd[564]: pA^E^H LOGIN REFUSED from ***.***.***.***
Aug 31 09:16:57 katrine kernel: Aug 31 09:16:57 katrine rexecd[564]: pA^E^H LOGIN REFUSED from ***.***.***.***
Aug 31 09:16:57 katrine rexecd[565]: pA^E^H LOGIN REFUSED from ***.***.***.***
Aug 31 09:16:57 katrine kernel: Aug 31 09:16:57 katrine rexecd[565]: pA^E^H LOGIN REFUSED from ***.***.***.***
Тоесть передаеться неправельный логин и походу дела пароль...
В мускуле проверил там пароль и логин нормальные прописанны:
{10:11:14}{Wed Aug 31}{root@katrine}{~}#mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 21 to server version: 4.1.13
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> \u UTM
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from remote_fw;
+----+---------+------------+---------+-------------+-------------+
| id | fw_type | fw_ip | fw_user | fw_password | fw_comments |
+----+---------+------------+---------+-------------+-------------+
| 1 | 0 | NULL | | | кНЙЮКЭМШИ |
| 2 | 1 | ********* | ipfw | *** | ipfw |
+----+---------+------------+---------+-------------+-------------+
2 rows in set (0.00 sec)
Ктонить сталкивался с таким?????
Тоже юзер ipfw.
Причем вот че пишут логи:
Aug 31 09:16:57 katrine sudo: nobody : TTY=unknown ; PWD=/usr/www/utm/cgi-bin/utm ; USER=root ; COMMAND=/sbin/ipfw delete 1002
Aug 31 09:16:57 katrine sudo: nobody : TTY=unknown ; PWD=/usr/www/utm/cgi-bin/utm ; USER=root ; COMMAND=/sbin/ipfw delete 1002
Aug 31 09:16:57 katrine rexecd[564]: pA^E^H LOGIN REFUSED from ***.***.***.***
Aug 31 09:16:57 katrine kernel: Aug 31 09:16:57 katrine rexecd[564]: pA^E^H LOGIN REFUSED from ***.***.***.***
Aug 31 09:16:57 katrine rexecd[565]: pA^E^H LOGIN REFUSED from ***.***.***.***
Aug 31 09:16:57 katrine kernel: Aug 31 09:16:57 katrine rexecd[565]: pA^E^H LOGIN REFUSED from ***.***.***.***
Тоесть передаеться неправельный логин и походу дела пароль...
В мускуле проверил там пароль и логин нормальные прописанны:
{10:11:14}{Wed Aug 31}{root@katrine}{~}#mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 21 to server version: 4.1.13
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> \u UTM
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from remote_fw;
+----+---------+------------+---------+-------------+-------------+
| id | fw_type | fw_ip | fw_user | fw_password | fw_comments |
+----+---------+------------+---------+-------------+-------------+
| 1 | 0 | NULL | | | кНЙЮКЭМШИ |
| 2 | 1 | ********* | ipfw | *** | ipfw |
+----+---------+------------+---------+-------------+-------------+
2 rows in set (0.00 sec)
Ктонить сталкивался с таким?????
Последний раз редактировалось Connor Ср авг 31, 2005 09:28, всего редактировалось 1 раз.
kstati poproboval sdelat' tak
inetd.conf:
exec stream tcp nowait root /usr/libexec/rexecd rexecd -i
sudoers:
root ALL=(ALL) ALL
nobody ALL= NOPASSWD: /sbin/ipfw
nobody ALL= NOPASSWD: /usr/sbin/arp
ipfw ALL= NOPASSWD: /sbin/ipfw
ipfw ALL= NOPASSWD: /bin/echo
netup:
{10:24:35}{Wed Aug 31}{root@katrine}{~}#mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 31 to server version: 4.1.13
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> \u UTM
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from remote_fw;
+----+---------+------------+---------+--------------+-------------+
| id | fw_type | fw_ip | fw_user | fw_password | fw_comments |
+----+---------+------------+---------+--------------+-------------+
| 1 | 0 | NULL | | | кНЙЮКЭМШИ |
| 2 | 1 | 3650538909 | root | ************ | ipfw |
+----+---------+------------+---------+--------------+-------------+
2 rows in set (0.00 sec)
i vot che logi pishut:
Aug 31 10:22:04 katrine rexecd[730]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:04 katrine kernel: Aug 31 10:22:04 katrine rexecd[730]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:04 katrine rexecd[731]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:04 katrine kernel: Aug 31 10:22:04 katrine rexecd[731]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:09 katrine sudo: nobody : TTY=unknown ; PWD=/usr/www/utm/cgi-bin/utm ; USER=root ; COMMAND=/sbin/ipfw add 1002 allow ip from any to ***.***.***.***
Aug 31 10:22:09 katrine sudo: nobody : TTY=unknown ; PWD=/usr/www/utm/cgi-bin/utm ; USER=root ; COMMAND=/sbin/ipfw add 1002 allow ip from ***.***.***.*** to any
Aug 31 10:22:09 katrine rexecd[738]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:09 katrine kernel: Aug 31 10:22:09 katrine rexecd[738]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:09 katrine rexecd[739]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:09 katrine kernel: Aug 31 10:22:09 katrine rexecd[739]: root LOGIN REFUSED from ***.***.***.***
inetd.conf:
exec stream tcp nowait root /usr/libexec/rexecd rexecd -i
sudoers:
root ALL=(ALL) ALL
nobody ALL= NOPASSWD: /sbin/ipfw
nobody ALL= NOPASSWD: /usr/sbin/arp
ipfw ALL= NOPASSWD: /sbin/ipfw
ipfw ALL= NOPASSWD: /bin/echo
netup:
{10:24:35}{Wed Aug 31}{root@katrine}{~}#mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 31 to server version: 4.1.13
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> \u UTM
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from remote_fw;
+----+---------+------------+---------+--------------+-------------+
| id | fw_type | fw_ip | fw_user | fw_password | fw_comments |
+----+---------+------------+---------+--------------+-------------+
| 1 | 0 | NULL | | | кНЙЮКЭМШИ |
| 2 | 1 | 3650538909 | root | ************ | ipfw |
+----+---------+------------+---------+--------------+-------------+
2 rows in set (0.00 sec)
i vot che logi pishut:
Aug 31 10:22:04 katrine rexecd[730]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:04 katrine kernel: Aug 31 10:22:04 katrine rexecd[730]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:04 katrine rexecd[731]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:04 katrine kernel: Aug 31 10:22:04 katrine rexecd[731]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:09 katrine sudo: nobody : TTY=unknown ; PWD=/usr/www/utm/cgi-bin/utm ; USER=root ; COMMAND=/sbin/ipfw add 1002 allow ip from any to ***.***.***.***
Aug 31 10:22:09 katrine sudo: nobody : TTY=unknown ; PWD=/usr/www/utm/cgi-bin/utm ; USER=root ; COMMAND=/sbin/ipfw add 1002 allow ip from ***.***.***.*** to any
Aug 31 10:22:09 katrine rexecd[738]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:09 katrine kernel: Aug 31 10:22:09 katrine rexecd[738]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:09 katrine rexecd[739]: root LOGIN REFUSED from ***.***.***.***
Aug 31 10:22:09 katrine kernel: Aug 31 10:22:09 katrine rexecd[739]: root LOGIN REFUSED from ***.***.***.***
Est' predpologenie chto vo vsem vinovata nesovmestimost' rexecd v FreeBSD katrine.******.ru 5.4-RELEASE FreeBSD 5.4-RELEASE #0: Tue Aug 23 15:20:16 UTC 2005 root@katrine.********.ru:/usr/src/sys/i386/compile/katrine i386
i rexec clienta v utm moei versii
kto stalkivalsia plzzz podskagite v chem trabla??? i kak eto pobarot'???
i rexec clienta v utm moei versii
kto stalkivalsia plzzz podskagite v chem trabla??? i kak eto pobarot'???
Obnarugilis' novie podrobnosti:
kogda password ne pravel'nii ili useru s takim loginom zapreshen dostu to rexec normal'no otrabativaet login i v errore pishet chto pol'zovateliu dostub zapreshen a esli vse po idee dolgno bit' normal'no i pol'zovatel' dolgen ispolnit' komandu to login meniaet'sia na pA^E^H+bukvi esli login dlinnii...
pohoge na gliuki konkretno rexeca... no vsege esli kto stalkivalsia podskagite...
kogda password ne pravel'nii ili useru s takim loginom zapreshen dostu to rexec normal'no otrabativaet login i v errore pishet chto pol'zovateliu dostub zapreshen a esli vse po idee dolgno bit' normal'no i pol'zovatel' dolgen ispolnit' komandu to login meniaet'sia na pA^E^H+bukvi esli login dlinnii...
pohoge na gliuki konkretno rexeca... no vsege esli kto stalkivalsia podskagite...
Проблема явно не в этом - у меня все симптомы такие же, но стоит одна и таже система - FreeBSD 5.4 RELEASE.Connor писал(а):Est' predpologenie chto vo vsem vinovata nesovmestimost' rexecd v FreeBSD katrine.******.ru 5.4-RELEASE FreeBSD 5.4-RELEASE #0: Tue Aug 23 15:20:16 UTC 2005 root@katrine.********.ru:/usr/src/sys/i386/compile/katrine i386
i rexec clienta v utm moei versii
kto stalkivalsia plzzz podskagite v chem trabla??? i kak eto pobarot'???
Нельзя ли эту проблему обойти, через ssh к примеру...
Спасибо заработало. Но, по моему я нашел более оптимальное решение, собственно это обход сразу нескольких проблем...Skylord писал(а):Сталкивался с такой проблемой. Посмотрите cvs - rexecd действительно сильно ковыряли. Я не стал разбираться, в чем дело, а просто положил в 5.4 бинарник от 5.2. Работает по старому.
Пишутся три скрипта, первый указывается в качестве локального файрвола, второй заменяет стандартный tsave от netup, третий выполняется на удаленном маршрутизаторе. Связь между маршрутизатром и биллингом выполняется через ssh причем на каждый цикл tsave выполняется всего 2 соединения.
====скрипт ipfw_ (заменяет стандартный ipfw в правилах)
#!/usr/bin/perl
local $rule_file="/netup/rule_lst";
local $cmd="/bin/echo @ARGV >> $rule_file";
system "$cmd";
===========
правило должно выглядеть примерно так "ipfw_ add RULE_ID allow ip from any to UIP". Скрипт записывает правила в файл "/netup/rule_lst"
====скрипт tsave_ заменяет стандартный tsave
#!/bin/sh
/netup/utm/bin/tsave
/usr/bin/scp -i /root/.ssh/remoteuser.key /netup/rule_lst remoteuser@remotehost:/home/remoteuser/bin/rule_lst
/bin/rm /netup/rule_lst
/usr/bin/ssh -i /root/.ssh/remoteuser.key remoteuser@remotehost /usr/local/bin/sudo /home/remoteuser/bin/ipfw_add
============
скрипт запускает tsave копирует файл с правилами (/netup/rule_lst) на удаленный хост (remotehost), и запускает там скрипт, обновляющий правила файрвола на основании скопированного файла.
====скрипт ipfw_add обновляет файрволл
#!/usr/bin/perl
#путь к файлу с правилами
local $rule_lst='/home/remoteuser/bin/rule_lst';
#команда для выполнения правил
local $ipfw='/usr/local/bin/sudo /sbin/ipfw ';
local $ipfw_list=$ipfw.'list';
open(FILE,"$ipfw_list|");
while(<FILE>)
{
chomp;
/(\d+)\s(.+)/;
$rules{$_}=$1;
}
close(FILE);
open(FILE,"$rule_lst") || die "can`t open file";
while(<FILE>)
{
chomp;
if(/^delete/i)
{
$comands{$_}=1;
}
else
{
/(\w+)\s(\d+)\s(.+)/;
my $rule=sprintf("%05s",$2).' '.$3;
if(!$rules{$rule})
{
$comands{$rule}=$1;
}
}
}
close(FILE);
foreach my $rule (keys %comands)
{
if($rule=~/delete/i)
{
$cmd= "$ipfw$rule";
}
else
{
$cmd= "$ipfw$comands{$rule} $rule";
}
system("$cmd");
}
Вот примерно так обходится эта проблема, проблема с колличеством соединений с rexecd (он вообще становится не нужным), снижается нагрузка на канал связи и сервера, а так же в виде бонуса не гоняется пароль на доступ к удаленному маршрутизатору по сети в открытом виде.
Гм.... Это, конечно, все замечательно, но как при таком раскладе рулить файрволлами из админского интерфейса в реальном времени?
А что за проблема с количеством соединений rexecd? Никогда не встречался... Есть ограничение на количество соединений в inetd, но оно снимается установкой соответствующей опции командной строки.
Гоняние по сети пароля не напрягает ни фига - он гоняется внутри core и никто, кроме серверов его не видит. ИМХО, надо вообще стараться избегать контактов через незащищенную среду... А у себя я скорее на rsh перешел бы - проще и быстрее (при большом количестве удаленных маршрутизаторов и пользователей, даже использование rexec напрягает, а ведь ssh при установке соединения тормозит еще больше...).
Опять же - все эти скрипты - это заведомо менее гибкое решение. Вот, скажем, у меня правила простым " add RULE_ID allow ip from any to UIP" не ограничиваются. У меня такого вообще нет.
У меня все правила написаны заранее, а биллинг только добавляет/удаляет IP пользователя из соответствующей таблицы (вообще, рекомендую идти в ногу со временем и изучить возможности ipfw2/pf/iptables). А таблиц несколько - в зависимости от тарифов, так как на анлимах юзерам скорость в зависимости от таблиц урезается... Плюс в добавок, работает одновременно два файрволлы: pf - делает роутинг на два внешних канала и nat, ipfw - ограничивает скорость посредством dummynet. Одним словом, сомневаюсь, что приведенные скрипты нормально справились бы с более-менее сложной организацией маршрутизации и файрволлов... Много пришлось бы доделывать... А на фига? Уж лучше бинарник заменить на старый... А когда до конца rexecd доковыряют - тогда уж просто разобраться, в чем там с ним дело и сделать все по-человечески. А не через дополнительные "прокладки".
А что за проблема с количеством соединений rexecd? Никогда не встречался... Есть ограничение на количество соединений в inetd, но оно снимается установкой соответствующей опции командной строки.
Гоняние по сети пароля не напрягает ни фига - он гоняется внутри core и никто, кроме серверов его не видит. ИМХО, надо вообще стараться избегать контактов через незащищенную среду... А у себя я скорее на rsh перешел бы - проще и быстрее (при большом количестве удаленных маршрутизаторов и пользователей, даже использование rexec напрягает, а ведь ssh при установке соединения тормозит еще больше...).
Опять же - все эти скрипты - это заведомо менее гибкое решение. Вот, скажем, у меня правила простым " add RULE_ID allow ip from any to UIP" не ограничиваются. У меня такого вообще нет.

Точно так же как и обычным... Только в настройках прописывается не "Удаленный UNIX", а локальный, и вместо "/sbin/ipfw" пишется "/path_to_script/ipfw_" и вся разница.Skylord писал(а):Гм.... Это, конечно, все замечательно, но как при таком раскладе рулить файрволлами из админского интерфейса в реальном времени?
Ну да, это я не правильно написал, конечно имелся ввиду inetd.Skylord писал(а):А что за проблема с количеством соединений rexecd? Никогда не встречался... Есть ограничение на количество соединений в inetd, но оно снимается установкой соответствующей опции командной строки.
Так я и написал - бонус, вроде особо не нужно, но приятно.Skylord писал(а):Гоняние по сети пароля не напрягает ни фига - он гоняется внутри core и никто, кроме серверов его не видит. ИМХО, надо вообще стараться избегать контактов через незащищенную среду...
Тут с тобой не поспоришь, но есть одно но - при настройке "по инструкции" при каждом цикле tsave устанавливается не хилое количестово соединений, при 500 и более пользователей это выльется в нехилую нагрузку, причем многие правила просто дублиются или обновляются, а в моем способе происходит всего 2 соединения, вне зависимости от количества правил и при обработке выполняются только те правила, которые должны измениться (вонсятся новые, удаляются старые и тп).Skylord писал(а):А у себя я скорее на rsh перешел бы - проще и быстрее (при большом количестве удаленных маршрутизаторов и пользователей, даже использование rexec напрягает, а ведь ssh при установке соединения тормозит еще больше...).
Ты удивишся, прекрасно справляются... И потом, эти примеры - только примеры, но примеры работающие.Skylord писал(а):Одним словом, сомневаюсь, что приведенные скрипты нормально справились бы с более-менее сложной организацией маршрутизации и файрволлов...
ОК. В конце концов, каждый делает так, как ему удобнее. 
Я у себя сейчас хочу немножко поковырять tsave, чтобы он применял правила файрволла только для тех пользователей, которых заблокировал непосредственно в данный момент (т.е. по сути тех, у кого стоит галочка блокировка, но интернет еще включен). После этого моя жизнь будет полностью беспроблемна.
Тебе тоже успехов!

Я у себя сейчас хочу немножко поковырять tsave, чтобы он применял правила файрволла только для тех пользователей, которых заблокировал непосредственно в данный момент (т.е. по сути тех, у кого стоит галочка блокировка, но интернет еще включен). После этого моя жизнь будет полностью беспроблемна.

Тебе тоже успехов!