ALT Linux sysadmins discussion
 help / color / mirror / Atom feed
* [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
@ 2007-10-21 16:29 Kompan Serge
  2007-10-21 19:59 ` Andrew Kornilov
  0 siblings, 1 reply; 14+ messages in thread
From: Kompan Serge @ 2007-10-21 16:29 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

Здравствуйте!
можно ли реализовать сабж, если да покажите плиз пример.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
  2007-10-21 16:29 [Sysadmins] использование конструкций циклов в правилах firewall в etcnet Kompan Serge
@ 2007-10-21 19:59 ` Andrew Kornilov
  2007-10-21 20:35   ` Peter V. Saveliev
  0 siblings, 1 reply; 14+ messages in thread
From: Andrew Kornilov @ 2007-10-21 19:59 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

Kompan Serge wrote:
> Здравствуйте!
> можно ли реализовать сабж, если да покажите плиз пример.
К сожалению, штатно - нет. Когда я хотел это сделать, не смог
придумать, как это сделать просто и красиво. Если есть предложения,
то пишите.

p.s. Можно обойтись грязным хаком, разместив на одной строке (файл читается построчно)
что-то вроде $(for somerule in something; do $IPTABLES -I $somerule >/dev/null ;done)
Но это, как говорится, потрясение устоев :)



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
  2007-10-21 19:59 ` Andrew Kornilov
@ 2007-10-21 20:35   ` Peter V. Saveliev
  2007-10-21 21:06     ` Andrew Kornilov
  0 siblings, 1 reply; 14+ messages in thread
From: Peter V. Saveliev @ 2007-10-21 20:35 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

В сообщении от Sunday 21 October 2007 23:59:41 Andrew Kornilov написал(а):
> Kompan Serge wrote:
> > Здравствуйте!
> > можно ли реализовать сабж, если да покажите плиз пример.
>
> К сожалению, штатно - нет. Когда я хотел это сделать, не смог
> придумать, как это сделать просто и красиво. Если есть предложения,
> то пишите.
>
<skip />

Если циклы нужны для построения рядов правил, где одно поле с каждым разом 
изменяется на k, то можно же сделать простейший препроцессор, который будет 
проходить файл правил на тему стандартных конструкций, и в, например, пайпе 
отдавать это корке; либо, если решение монолитное, то раскрытие списка делать 
сразу в память. Похожее решение в своё время применял в конфигураторе ровно 
для этих же целей.

-- 
Peter V. Saveliev

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
  2007-10-21 20:35   ` Peter V. Saveliev
@ 2007-10-21 21:06     ` Andrew Kornilov
  2007-10-21 21:46       ` Peter V. Saveliev
                         ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Andrew Kornilov @ 2007-10-21 21:06 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

Peter V. Saveliev wrote:
> Если циклы нужны для построения рядов правил, где одно поле с каждым разом 
> изменяется на k, то можно же сделать простейший препроцессор, который будет 
> проходить файл правил на тему стандартных конструкций, и в, например, пайпе 
> отдавать это корке; либо, если решение монолитное, то раскрытие списка делать 
> сразу в память. Похожее решение в своё время применял в конфигураторе ровно 
> для этих же целей.
Это примерно понятно. Вопрос в другом: как сделать препроцессор, не подключая
ничего нового и тяжёлого, только bash и sed, раз они уже используются? eval
тут не поможет. Просто хотел не изобретать своих конструкций, а использовать
обычный shell синтаксис, безо всяких ограничений. Можно, в принципе, сделать
простейшее: не читать построчно файл, а сначала пройтись по нему bash-ем,
полученный output уже построчно отдавать *tables. Но это накладывает
ограничения на написание этих циклов и прочих конструкций. Каждый ведь
пишет циклы так, как ему больше нравится и тут сильно препроцессором
не обработаешь.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
  2007-10-21 21:06     ` Andrew Kornilov
@ 2007-10-21 21:46       ` Peter V. Saveliev
  2007-10-22  6:42       ` ABATAPA
  2007-10-22  7:30       ` Peter V. Saveliev
  2 siblings, 0 replies; 14+ messages in thread
From: Peter V. Saveliev @ 2007-10-21 21:46 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

В сообщении от Monday 22 October 2007 01:06:01 Andrew Kornilov написал(а):
> Peter V. Saveliev wrote:
> > Если циклы нужны для построения рядов правил, где одно поле с каждым
> > разом изменяется на k, то можно же сделать простейший препроцессор,
> > который будет проходить файл правил на тему стандартных конструкций, и в,
> > например, пайпе отдавать это корке; либо, если решение монолитное, то
> > раскрытие списка делать сразу в память. Похожее решение в своё время
> > применял в конфигураторе ровно для этих же целей.
>
> Это примерно понятно. Вопрос в другом: как сделать препроцессор, не
> подключая ничего нового и тяжёлого, только bash и sed, раз они уже
> используются? eval тут не поможет. Просто хотел не изобретать своих
> конструкций, а использовать обычный shell синтаксис, безо всяких
> ограничений. Можно, в принципе, сделать простейшее: не читать построчно
> файл, а сначала пройтись по нему bash-ем, полученный output уже построчно
> отдавать *tables. Но это накладывает ограничения на написание этих циклов и
> прочих конструкций. Каждый ведь пишет циклы так, как ему больше нравится и
> тут сильно препроцессором не обработаешь.

Я пользовался awk -- мне было проще... С sed можно предложить такое:

[peet@kelisaari peet]$ cat bala.in
iptables -I OUTPUT -d 10.0.0.1 -j ACCEPT
iptables -I INPUT -s 192.168.0.#{1,2,3,4,5,6,7,8,9,10,11} -j DROP

[peet@kelisaari peet]$ cat bala.sed
:l
/#{[[:alnum:],]\+}/ {
        h; s/#{\([^,]\+\).*}/\1/
        p; g; s/\(#{\)[^,]\+\(.*}\)/\1\2/
        s/#{,/#{/; t l
}
/#{}/d

[peet@kelisaari peet]$ cat bala.in | sed -f bala.sed
iptables -I OUTPUT -d 10.0.0.1 -j ACCEPT
iptables -I INPUT -s 192.168.0.1 -j DROP
iptables -I INPUT -s 192.168.0.2 -j DROP
iptables -I INPUT -s 192.168.0.3 -j DROP
iptables -I INPUT -s 192.168.0.4 -j DROP
iptables -I INPUT -s 192.168.0.5 -j DROP
iptables -I INPUT -s 192.168.0.6 -j DROP
iptables -I INPUT -s 192.168.0.7 -j DROP
iptables -I INPUT -s 192.168.0.8 -j DROP
iptables -I INPUT -s 192.168.0.9 -j DROP
iptables -I INPUT -s 192.168.0.10 -j DROP
iptables -I INPUT -s 192.168.0.11 -j DROP


-- 
Peter V. Saveliev

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
  2007-10-21 21:06     ` Andrew Kornilov
  2007-10-21 21:46       ` Peter V. Saveliev
@ 2007-10-22  6:42       ` ABATAPA
  2007-10-22  6:53         ` Peter V. Saveliev
  2007-10-22  7:30       ` Peter V. Saveliev
  2 siblings, 1 reply; 14+ messages in thread
From: ABATAPA @ 2007-10-22  6:42 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

22 октября 2007 г. Andrew Kornilov написал:
> Это примерно понятно. Вопрос в другом: как сделать препроцессор, не
> подключая ничего нового и тяжёлого, только bash и sed, раз они уже
> используются?
Чем не нравится
#!/bin/bash

for i in {1..3}; do ...
for i in $(seq 200 1); do ...


-- 
ABATAPA


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
  2007-10-22  6:42       ` ABATAPA
@ 2007-10-22  6:53         ` Peter V. Saveliev
  0 siblings, 0 replies; 14+ messages in thread
From: Peter V. Saveliev @ 2007-10-22  6:53 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

В сообщении от Monday 22 October 2007 10:42:00 ABATAPA написал(а):
> 22 октября 2007 г. Andrew Kornilov написал:
> > Это примерно понятно. Вопрос в другом: как сделать препроцессор, не
> > подключая ничего нового и тяжёлого, только bash и sed, раз они уже
> > используются?
>
> Чем не нравится
> #!/bin/bash
>
> for i in {1..3}; do ...
> for i in $(seq 200 1); do ...

вероятно, тем, что это опускает соответствующий модуль на уровень rc.local... 
Ибо для того, чтобы писать скрипты на bash, etcnet ставить не обязательно.

Варианты с препроцессингом а) интуитивно понятнее б) легче читаются. Имхо, 
стоит усилий, хотя выбор bash+sed only мне кажется неоправданным -- bash+awk 
уже было бы проще разрабатывать/поддерживать, а awk места откушает не намного 
больше, чем sed.

-- 
Peter V. Saveliev

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
  2007-10-21 21:06     ` Andrew Kornilov
  2007-10-21 21:46       ` Peter V. Saveliev
  2007-10-22  6:42       ` ABATAPA
@ 2007-10-22  7:30       ` Peter V. Saveliev
  2007-10-22 11:38         ` Andrew Kornilov
  2 siblings, 1 reply; 14+ messages in thread
From: Peter V. Saveliev @ 2007-10-22  7:30 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

<skip />

[peet@kelisaari peet]$ echo  -e "поросёнок N#{0-12} умер\nвсе поросята умерли :(" | ./bala.sh
поросёнок N0 умер
поросёнок N1 умер
поросёнок N2 умер
поросёнок N3 умер
поросёнок N4 умер
поросёнок N5 умер
поросёнок N6 умер
поросёнок N7 умер
поросёнок N8 умер
поросёнок N9 умер
поросёнок N10 умер
поросёнок N11 умер
поросёнок N12 умер
все поросята умерли :(


[peet@kelisaari peet]$ cat bala.sh
#!/bin/sh



while read bala; do {

        r='s/\(.*\)#{\([0-9]\+\)-\([0-9]\+\)}\(.*\)/\'

        a=`echo $bala | sed -n $r"1/p"`
        b=`echo $bala | sed -n $r"2/p"`
        c=`echo $bala | sed -n $r"3/p"`
        d=`echo $bala | sed -n $r"4/p"`

        if [ -z "$b" -o -z "$c" ]; then {
                echo $bala
        } else {
                for i in $(seq $b $c); do {
                        echo $a$i$d
                } done
        } fi

} done


ЗЫ: но имхо -- всё это порядочный изврат.
-- 
Peter V. Saveliev

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
  2007-10-22  7:30       ` Peter V. Saveliev
@ 2007-10-22 11:38         ` Andrew Kornilov
  2007-10-22 17:45           ` Peter V. Saveliev
  0 siblings, 1 reply; 14+ messages in thread
From: Andrew Kornilov @ 2007-10-22 11:38 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

Peter V. Saveliev wrote:
> ЗЫ: но имхо -- всё это порядочный изврат.
Да, в том-то и дело. Можно, конечно, взять пяток каких-то наиболее
распространенных случаев (циклы, условия) и для них что-то нарисовать.
Но всегда найдется тот, кто захочет шестой случай.
Попробую подумать, может все-таки получится легко сделать обычный shell
скрестить до конца. В принципе, оно и сейчас можно...Но делать ЯВУ
типа firehall не хочется, их и так достаточно.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
  2007-10-22 11:38         ` Andrew Kornilov
@ 2007-10-22 17:45           ` Peter V. Saveliev
  2007-10-22 22:20             ` Andrew Kornilov
  0 siblings, 1 reply; 14+ messages in thread
From: Peter V. Saveliev @ 2007-10-22 17:45 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

В сообщении от Monday 22 October 2007 15:38:30 Andrew Kornilov написал(а):
> Peter V. Saveliev wrote:
> > ЗЫ: но имхо -- всё это порядочный изврат.
>
> Да, в том-то и дело. Можно, конечно, взять пяток каких-то наиболее
> распространенных случаев (циклы, условия) и для них что-то нарисовать.
> Но всегда найдется тот, кто захочет шестой случай.
> Попробую подумать, может все-таки получится легко сделать обычный shell
> скрестить до конца. В принципе, оно и сейчас можно...Но делать ЯВУ
> типа firehall не хочется, их и так достаточно.
<skip />

В смысле - сделать обычный шелл? Децл раскрой тему, если не сложно.

-- 
Peter V. Saveliev

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
  2007-10-22 17:45           ` Peter V. Saveliev
@ 2007-10-22 22:20             ` Andrew Kornilov
  2007-10-22 22:44               ` Andrew Kornilov
  2007-10-23 13:29               ` Serge
  0 siblings, 2 replies; 14+ messages in thread
From: Andrew Kornilov @ 2007-10-22 22:20 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

Peter V. Saveliev wrote:
>> Да, в том-то и дело. Можно, конечно, взять пяток каких-то наиболее
>> распространенных случаев (циклы, условия) и для них что-то нарисовать.
>> Но всегда найдется тот, кто захочет шестой случай.
>> Попробую подумать, может все-таки получится легко сделать обычный shell
>> скрестить до конца. В принципе, оно и сейчас можно...Но делать ЯВУ
>> типа firehall не хочется, их и так достаточно.
> <skip />
> 
> В смысле - сделать обычный шелл? Децл раскрой тему, если не сложно.

Ну в смысле, что варианта есть два:
1. сделать поддержку shell syntax, то есть просто парсить это все самим bash-ем и 
как-то обрабатывать; то есть, прямо вот так и писать:
for IP in $IP_LIST; do
  $IPTABLES -mtcp -ptcp -s $IP -j ACCEPT (или allow tcp from $IP)
done
2. сделать некую поддержку неких примитивов типа того, что ты сделал, когда 
токены раскрываются в набор команд или еще что-то подобное

p.s. Пока писал пункт номер один, понял, что я с шеллом не пересекаюсь вроде как по
зарезервированным словам. Гм...можно просто запускать это как набор команд 
в памяти, прямо bash-ем. И обратная совместимость есть. Точно, так и сделаю,
наверное :) Просто до этого читал построчно файл, обрабатывал sed-ом синтаксис,
если надо, и отдавал iptables-у на съедение. А можно ведь весь файл сразу обработать
и запустить через bash, оно и быстрее и весь shell syntax поддерживается в таком
случае. Мда...чего ж я раньше не сообразил ;-)


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
  2007-10-22 22:20             ` Andrew Kornilov
@ 2007-10-22 22:44               ` Andrew Kornilov
  2007-10-23 13:29               ` Serge
  1 sibling, 0 replies; 14+ messages in thread
From: Andrew Kornilov @ 2007-10-22 22:44 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

Andrew Kornilov wrote:
> 
> p.s. Пока писал пункт номер один, понял, что я с шеллом не пересекаюсь вроде как по
> зарезервированным словам. Гм...можно просто запускать это как набор команд 
> в памяти, прямо bash-ем. И обратная совместимость есть. Точно, так и сделаю,
> наверное :) Просто до этого читал построчно файл, обрабатывал sed-ом синтаксис,
> если надо, и отдавал iptables-у на съедение. А можно ведь весь файл сразу обработать
> и запустить через bash, оно и быстрее и весь shell syntax поддерживается в таком
> случае. Мда...чего ж я раньше не сообразил ;-)
Хотя...все равно получается масса граблей, например, придется заставлять пользователя
всегда писать $IPTABLES, имя таблицы и цепочки для применения правила, я просто не смогу
найти во всем коде опции именно для iptables, чтобы сделать это автоматически, как сейчас.
В общем, ладно, пока оставлю эту затею.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
  2007-10-22 22:20             ` Andrew Kornilov
  2007-10-22 22:44               ` Andrew Kornilov
@ 2007-10-23 13:29               ` Serge
  2007-10-23 20:35                 ` Andrew Kornilov
  1 sibling, 1 reply; 14+ messages in thread
From: Serge @ 2007-10-23 13:29 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

В сообщении от Tuesday 23 October 2007 01:20:42 Andrew Kornilov написал(а):
> Peter V. Saveliev wrote:
> >> Да, в том-то и дело. Можно, конечно, взять пяток каких-то наиболее
> >> распространенных случаев (циклы, условия) и для них что-то нарисовать.
> >> Но всегда найдется тот, кто захочет шестой случай.
> >> Попробую подумать, может все-таки получится легко сделать обычный shell
> >> скрестить до конца. В принципе, оно и сейчас можно...Но делать ЯВУ
> >> типа firehall не хочется, их и так достаточно.
> >
> > <skip />
> >
> > В смысле - сделать обычный шелл? Децл раскрой тему, если не сложно.
>
> Ну в смысле, что варианта есть два:
> 1. сделать поддержку shell syntax, то есть просто парсить это все самим
> bash-ем и как-то обрабатывать; то есть, прямо вот так и писать:
> for IP in $IP_LIST; do
>   $IPTABLES -mtcp -ptcp -s $IP -j ACCEPT (или allow tcp from $IP)
> done
если б можно реализовать именно этот вариант...

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Sysadmins] использование конструкций циклов в правилах firewall в etcnet
  2007-10-23 13:29               ` Serge
@ 2007-10-23 20:35                 ` Andrew Kornilov
  0 siblings, 0 replies; 14+ messages in thread
From: Andrew Kornilov @ 2007-10-23 20:35 UTC (permalink / raw)
  To: ALT Linux sysadmin discuss

Serge wrote:
>> Ну в смысле, что варианта есть два:
>> 1. сделать поддержку shell syntax, то есть просто парсить это все самим
>> bash-ем и как-то обрабатывать; то есть, прямо вот так и писать:
>> for IP in $IP_LIST; do
>>   $IPTABLES -mtcp -ptcp -s $IP -j ACCEPT (или allow tcp from $IP)
>> done
> если б можно реализовать именно этот вариант...
Ну если очень нужно, то это можно написать в одну строку, я уже показывал выше.
С выводом в /dev/null. Но придется использовать переменные
$IPTABLES, $TABLE, $CHAIN, автоматом они не подставяться, потому как без
поллитры команды именно для iptables не выцепишь. Можно, в принципе, и
функции из functions-fw использовать.


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2007-10-23 20:35 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-10-21 16:29 [Sysadmins] использование конструкций циклов в правилах firewall в etcnet Kompan Serge
2007-10-21 19:59 ` Andrew Kornilov
2007-10-21 20:35   ` Peter V. Saveliev
2007-10-21 21:06     ` Andrew Kornilov
2007-10-21 21:46       ` Peter V. Saveliev
2007-10-22  6:42       ` ABATAPA
2007-10-22  6:53         ` Peter V. Saveliev
2007-10-22  7:30       ` Peter V. Saveliev
2007-10-22 11:38         ` Andrew Kornilov
2007-10-22 17:45           ` Peter V. Saveliev
2007-10-22 22:20             ` Andrew Kornilov
2007-10-22 22:44               ` Andrew Kornilov
2007-10-23 13:29               ` Serge
2007-10-23 20:35                 ` Andrew Kornilov

ALT Linux sysadmins discussion

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sysadmins/0 sysadmins/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sysadmins sysadmins/ http://lore.altlinux.org/sysadmins \
		sysadmins@lists.altlinux.org sysadmins@lists.altlinux.ru sysadmins@lists.altlinux.com
	public-inbox-index sysadmins

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sysadmins


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git