[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