[Sysadmins] использование конструкций циклов в правилах firewall в etcnet

Peter V. Saveliev =?iso-8859-1?q?peet_=CE=C1_altlinux=2Eru?=
Пн Окт 22 01:46:07 MSD 2007


В сообщении от 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


Подробная информация о списке рассылки Sysadmins