Могу предложить такой вариант:
Создаём текстовый файл для table 1 (допустим, это группа компьютеров с неограниченным доступом в инет, назовём его full_allow):
Код: Выделить всё
#ee /usr/tables/full_allow
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
192.168.0.6
В скрипте (допустим, это файл /usr/local/etc/ipfw.rules) допишем:
Код: Выделить всё
#ee /usr/local/etc/ipfw.rules:
# Переменные
fwcmd='/sbin/ipfw'
if_out='bge0' # Внешний интерфейс
ip_out='215.87.24.33' # IP внешнего интерфейса
if_in='bge1' # Внутренний интерфейс
ip_in='192.168.0.254' # IP внутреннего интерфейса
MyLan='192.168.0.0/24' # Локальная сеть
dns='213.177.98.1,213.177.97.1' # DNS-серверы
${fwcmd} -f -q flush # Сброс всех правил
${fwcmd} add check-state # Контроль соответствия пакетов динамическим правилам
# Заполнение таблиц
${fwcmd} table 1 flush
cat /usr/tables/full_allow | while read ip; do
# echo ${fwcmd} table 1 add $ip 1
${fwcmd} table 1 add $ip 1
done
# Неограниченный доступ
${fwcmd} add allow ip from table\(1\) to any in via ${if_in}
${fwcmd} add allow ip from any to table\(1\) out via ${if_in}
Ясное дело, это не весь скрипт, а только фрагмент, относящийся к использованию текстового файла для заполнения таблиц.
После этого Firewall надо перезапускать:
И так каждый раз после внесения изменений в текстовые файлы либо в сам скрипт.