это от u-375 ответ
Основа предложенного мною подхода описана в "Руководство по iptables (Iptables Tutorial 1.1.19)"
http://www.opennet.ru/docs/RUS/iptables/Можно по статье соорудить себе аналогичный файл-скрипт. Для начала можно прямо в нём вести все списки. Только хорошенько продумать систему разбиения правил на цепочки. В ISA тоже ведь надо как-то вносить каждого пользователя, никуда не денешся, и тут и там придётся или щёлкать мышкой или копи-пастить строчки.
Дальше можно внутрь этого файла делать вставки на языке Bash, например. В инете довольно много книг про Linux, в которых есть краткие или продвинутые руководства по программированию на Bash.
То что ниже, как раз такая идея. При этом нужно уметь писать примитивные скрипты. И то что ниже имеет мало отношения к iptables. Это больше приём автоматизации настройки Linuxа...
Разберём:
Код:
find /ipt-allow -type f | while read filename ; do
while read argv1 argv2 argv3 argv_void ; do
echo "$argv1"
iptables bla bla bla -j allow
done < $filename
done
find /ipt-allow -type f
построчно печатает список файлов в каталоге /ipt-allow
Символ | направляет эти строки на вход цикла while.
Конструкция
Код:
while read filename ; do
...
done
за один проход цикла, командой read считывает в переменную filename одну стрку из числа появляющися "на входе" от команды find.
Значение переменной filename можно получить через выражение $filename.
Конструкция
Код:
while read argv1 argv2 argv3 argv_void ; do
echo "$argv1"
done < $filename
на вход получает содержимое файла с именем "$filename" и построчно считывает это содержимое командой read в переменные argv1, argv2, argv3, argv_void
Команда read читает "вход" и всё до первого пробела помещает в первую переменную, всё между первым и вторым пробелами помещает во вторую переменную и т.д. пока не наткнётся на конец строки. Если указана только одна переменная, то вся строка окажется в этой переменной. Если указано две переменные, а слов в строке 10, то первое слово окажется в первой переменной, последние 9 слов окажутся во второй переменной. Если есть "лишняя" переменная - слов в строке меньше чем переменных, то "лишние" переменные не заполняются, остаются пустыми.
echo "$argv1" тупо печатает значение переменной argv1
А теперь если создать каталог /ipt-allow и туда положить файлы. По одному на пользователя. Файлы заполнить подходящими данными, то таким способом можно считывать из файла данные в переменные, а значения переменных использовать при вызове iptables.
Например, там где стоит строка "iptables bla bla bla -j allow". Bla, bla, bla надо заменить на нечто осмысленное и нужное.
Например, в файл можно записывать локальный ip адрес пользователя, ip адрес разрещённого (или запрещённого ресурса в интернете) и номер порта. Считывать это в переменные и ...
Кстати, имена файлов не анализируются в скрипте, подбираются все подряд файлы из указанной папки.
Дальше можно это использовать как угодно, как удобно, как подсказывает необходимость. Например, в скрипте задающем правила iptables, можно вместо 50 строк отличающихся только ip адресом пользователя вставить этот цикл. Вообще это всё сильно зависит от идеи автора...
Отдельно можно сделать скрипт, который через команду nslookup или host формирует списки ip адресов для доменных имён. Т.е. файлы пользователей заполнять доменными именами, автоматически генерить аналогичные списки, но списки по ip адресам. И уже эти ip списки использовать в скрипте задающем правила iptables.
Могу пример опубликовать, но он заточен под мои цели. И содержит лишние для начала сложности.
P.S. Пример скрипта не рассчитан на пробелы в именах файлов. Если есть пробелы, то значения переменных надо использовать в кавычках...
Наверное вместо файлов, как хранилищ списков, даже можно SQL базу приделать, но не нужно...