ipfw2 позволяет использовать дополнительные образцы (или блоки), сконструированные из not, or, "{}" или "()". То есть, можно сделать так:
goodguys="{ 10.1.2.0/24{20,35,66,18} or 10.2.3.0/28{6,3,11} }"
badguys="10.1.2.0/24{8,38,60}"
ipfw add allow ip from ${goodguys} to any
ipfw add deny ip from ${badguys} to any
//Пример из man 8 ipfw2 во FreeBSD 5
Конечно, когда мы всё это указываем из коммандной строки, то всё понятно. Забабахали список, потом написали ipfw add NNNN allow ip from ${list} to any, к примеру, и всё. А если нужно, что бы эти списки брались из какого-нибудь файла при загрузке?
Посмотрев скрипт /etc/rc.firewall, пока я нашёл 2 решения:
1) Использовать копию скрипта /etc/rc.firewall, указав его в /etc/rc.conf, куда (в копию) вставить строку
. "нужный нам файл" ,
которая вставит в скрипт инструкции вида
some_list=" { 1 or 2 not 3 } "
2) Вставить строку в /etc/rc.conf вида
. "нужный нам файл"
Но в этом случае нужно выбирать оригинальное имя для каждой строки, поскольку файл /etc/rc.conf включают многие скрипты перед запуском, и переменные, которые Вы определите в указанном файле, могут иметь схожее имя с переменными окружения, например; в таком случае, Ваши переменные затрут переменные окружения или ещё какие-нибудь, что чревато последствиями.
Вопрос такой: как ещё можно передать переменные при загрузке to ipfw?