Помогите переделать Perl скрипт

Модератор: Модераторы разделов

NON-STOP
Сообщения: 15

Помогите переделать Perl скрипт

Сообщение NON-STOP »

Всем доброго времени суток.
Первый раз столкнулся вплотную с перлом....
Помогите пожалуйста переделать скриптик.

Вообщем есть пример скрипта, который взаимодействует с фаерволом фрюхи(IPFW ), нужно его переваять для работы с iptables...

Взаимодействие с firewall осуществляется через скрипт fire.pl
В скрипте должны находится 2 подпрограммы: Allow и Deny, которые соответственно вызываются каждый раз когда серверная часть биллинга server.pl разрешает/запрещает определенному ip доступ в интернет.
например функция system передает в новый shell /bin/sh одну строку, которая будет выполняться как команда:

system("/sbin/ipfw -q add 10 allow ip from any to any");

Вот пример стандартного файла fire.pl для freeBSD...

Код: Выделить всё

#!/usr/bin/perl
===========================================================================
# &Allow - Разрешение доступа

sub Allow
{
 return unless $use_ipfw;   # если $use_ipfw=0, то с фаерволом не работаем - выходим
 my ($num,$ip) = @_;
 system("${ipfw} add $num allow ip from $ip to any >/dev/null");
 system("${ipfw} add $num allow ip from any to $ip >/dev/null");
}

sub Deny
{
 return unless $use_ipfw;   # если $use_ipfw=0, то с фаерволом не работаем - выходим
 my ($num,$ip) = @_;
 system("$ipfw del $num >/dev/null");
}

1;

У кого есть какие варианты?
Буду благодарен любой помощи!
Спасибо сказали:
vadiml
Сообщения: 446
ОС: fc12.x86_64

Re: Помогите переделать Perl скрипт

Сообщение vadiml »

у меня все написано на shell'e (сам писал ориентируясь на iptables tutorial):
все настройки в текстовом файле, статистика собирается и обнуляется при перезапуске ( firewall [start|stop|restart] ), что у меня делается раз в сутки
могу сбросить

вообще могу и переписать его на и Perl'e, но не вижу смысла
phenom x4 905e, asus m4a79 deluxe, 4 gb, ati x550, ati 4350, 2 x 17" LCD
Спасибо сказали:
NON-STOP
Сообщения: 15

Re: Помогите переделать Perl скрипт

Сообщение NON-STOP »

Если переписать его на перл незатруднит - буду оч благодарен...
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Помогите переделать Perl скрипт

Сообщение Crazy »

Воспользуйся модулем Perl IPTables-IPv4. Этот модуль работает с iptables на уровне ядра.
Вот пример работы с этим модулем http://www.opennet.ru/base/net/traff_ctl.txt.html

Desipere in loco
Спасибо сказали:
NON-STOP
Сообщения: 15

Re: Помогите переделать Perl скрипт

Сообщение NON-STOP »

Crazy писал(а):
06.11.2006 21:37
Воспользуйся модулем Perl IPTables-IPv4. Этот модуль работает с iptables на уровне ядра.
Вот пример работы с этим модулем http://www.opennet.ru/base/net/traff_ctl.txt.html



Первый раз столкнулся вплотную с перлом!
без понятия как и что делать... (((
Есть реально работающие примеры, но под Freebsd
Спасибо сказали:
NON-STOP
Сообщения: 15

Re: Помогите переделать Perl скрипт

Сообщение NON-STOP »

Народ, неужели никто из местных гуру не может переписать данный скрипт?

Если вопрос стоит в оплате - невопрос, готов отблагодарить!
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Помогите переделать Perl скрипт

Сообщение madskull »

А причем тут перл? Если я правильно понял, то надо просто заменить
(NON-STOP @ Nov 6 2006, в 16:39) писал(а):system("${ipfw} add $num allow ip from $ip to any >/dev/null");
system("${ipfw} add $num allow ip from any to $ip >/dev/null");

на что-то вроде

Код: Выделить всё

system("${ipfw} -A FORWARD -s $ip -j ACCEPT >/dev/null");
system("${ipfw} -A FORWARD -d $ip -j ACCEPT >/dev/null");
ArchLinux / IceWM
Спасибо сказали:
NON-STOP
Сообщения: 15

Re: Помогите переделать Perl скрипт

Сообщение NON-STOP »

Помогли решить проблему на lafox.net

Получился скрипт такого содержания

Код: Выделить всё

#===========================================================================
# &Allow - Разрешение доступа

sub Allow
{
my ($num,$ip) = @_;
system ("iptables -t filter -A INPUT -s $ip -j ACCEPT"); return $?;
system ("iptables -t filter -A FORWARD -s $ip -j ACCEPT"); return $?;
system ("iptables -t filter -A FORWARD -d $ip -j ACCEPT"); return $?;
system ("iptables -t filter -A OUTPUT -d $ip -j ACCEPT"); return $?;
}

sub Deny
{
my ($num,$ip) = @_;
system("iptables -t filter -D INPUT -s $ip -j ACCEPT "); return $?;
system("iptables -t filter -D FORWARD -s $ip -j ACCEPT "); return $?;
system("iptables -t filter -D FORWARD -d $ip -j ACCEPT "); return $?;
system("iptables -t filter -D OUTPUT -d $ip -j ACCEPT "); return $?;

}
1;

Скрипт добавляет правило в iptables. разрешающее ходить данному ip в инет.

Теперь необходимо реализовать нарезку скорости по пакетам тарификации, указанных в биллнге.
Помогите пожалуйста реализовать это в Linux!

Есть также пример для FreeBSD

Код: Выделить всё

Для каждого пакета тарификации должна быть своя скорость в инет и город,
#  например
#  1й пакет: с инета - 256 кб/сек, с города - 1024 кбит/сек, в инет/город - 128 кб/сек
#  2й пакет: с инета - 512 кб/сек, с города - 2048 кбит/сек, в инет/город - 150 кб/сек
#  и т.д
# Вы должны заранее (/etc/rc.firewall) заготовить pipe-ы для всех пакетов:
# 1й пакет:
# ipfw pipe 1 config bw 256Kbit/s mask dst-ip 0XFFFFFFFF
# ipfw pipe 2 config bw 1024Kbit/s mask dst-ip 0XFFFFFFFF
# ipfw pipe 3 config bw 128Kbit/s mask src-ip 0XFFFFFFFF
# 2й пакет:
# ipfw pipe 4 config bw 512Kbit/s mask dst-ip 0XFFFFFFFF
# ...
# Т.е пакет 1 занимает пайпы 1,2,3
# пакет 2 - 4,5,6
# пакет 3 - 7,8,9
# и т.д.
# Обратите внимание на обязательное указание маски dst-ip 0XFFFFFFFF
# что означает "создавать для каждого ip отдельный pipe"
# Если не указать маску, то все клиенты данного пакета попадут в один pipe
# и скорость будет делиться на всех. Хотя ничто вам не запрещает
# продавать полосу  на нескольких клиентов, т.н "негарантированный канал"
# Однако в этом случае  pipe лучше заменить на queue с указанием приоритетов
# чтобы один клиент не смог монопольно забить всю доступную полосу (например,
# менеджером закачки, качающим файл в несколько потоков)
# Также обратите внимание на указание направления: dst - к клиенту, src - от клиента

# ===========================================================================
# &Allow - Разрешение доступа
# Вход:
# 1 - номер правила в ipfw (для других фаерволов игнорировать либо считать "id правила")
# 2 - ip
# 3 - 'yes' - необходимо разрешить доступ только к направлению класса 2
# 4 - пакет тарификации
# 5 - =1 если контракт клиента='adm', 0 в иных случаях
# 6 - "дополнительный параметр"
# 7 - =1 если в настройках данного клиента стоит указание полностью детализировать трафик, 0 в ином случае
sub Allow
{
return unless $use_ipfw;   # если $use_ipfw=0, то с фаерволом не работаем - выходим
my $p;
my ($num,$ip,$gorod,$paket,$adm,$dop,$detail) = @_;

# вычислим номера пайпов исходя из номера пакета тарификации
my ($pipe1,$pipe2,$pipe3) = ($paket*3-2,$paket*3-1,$paket*3);

# В table(2) billing  заносит городские сети (направление 2)

# Gorod -> Users
system("$ipfw add $num pipe $pipe2 ip from \"table(2)\" to $ip >/dev/null");

unless ($gorod)
  {# авторизовался в режиме "внешний инет"
   # Inet -> Users
   system("$ipfw add $num pipe $pipe1 ip from any to $ip >/dev/null");
   # Users -> Inet
   system("$ipfw add $num pipe $pipe3 ip from $ip to any >/dev/null");
  } else
  {
   # Users -> Gorod
   system("$ipfw add $num pipe $pipe3 ip from $ip to \"table(2)\" >/dev/null");
  }
}

sub Deny
{
return unless $use_ipfw;   # если $use_ipfw=0, то с фаерволом не работаем - выходим
my ($num,$ip) = @_;
system("$ipfw del $num >/dev/null");
}



1;
Спасибо сказали:
NON-STOP
Сообщения: 15

Re: Помогите переделать Perl скрипт

Сообщение NON-STOP »

Есть кто живой???? :blink:
Народ, кто чем траффик нарезает??????????????????
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Помогите переделать Perl скрипт

Сообщение sash-kan »

(NON-STOP @ Nov 19 2006, в 01:41) писал(а):Народ, кто чем траффик нарезает?
и причем здесь перл?
новый вопрос — новая тема.
а эту закрываю.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: