Назад | Перейти на главную страницу

Как включить все файлы из каталога в сценарий оболочки (в данном случае /etc/init.d/iptables)

у меня есть /etc/init.d/iptables start|stop|restart сценарий на разных серверах ubuntu (это обычный сценарий оболочки)

Для каждой новой службы мне нужно отредактировать и вставить строку, чтобы открыть порт. Это приводит к появлению множества разных версий сценария init.d на разных машинах.

Можно ли автоматически включать, скажем, все файлы в /etc/iptables/include.d/ ?

Цель состоит в том, чтобы в Начало функция /etc/init.d/iptables, например

include /etc/iptables/include.d/*

И после дополнительного файла в /etc/iptables/include.d/ Я бы просто сказал

/etc/init.d/iptables restart

Редактировать: Как указал Саураб, это может привести к проблемам, когда командам нужен определенный порядок. В расширенной настройке могут быть разные каталоги, например:

/etc/iptables/include01.d/
/etc/iptables/include02.d/
/etc/iptables/include03.d/

и включив их так:

    include /etc/iptables/include01.d/*
    ... maybe some code goes here in the main file...
    include /etc/iptables/include02.d/*
    include /etc/iptables/include03.d/*

Добавьте следующую строку в свой сценарий init.d.

run-parts --report /etc/iptables/include.d

Он будет запускать все в каталоге как сценарий оболочки (должен быть исполняемым).

Если вы хотите выполнять только файлы, которые заканчиваются на .port, вы можете использовать что-то вроде:

run-parts --regex '\.port$' /etc/iptables/include.d/

Если вы хотите убедиться в правильности порядка, вы можете назвать файлы:

10_web.port
20_ssh.port
etc..
for f in /etc/iptables/include.d/*
 . $f
done

обратите внимание на пробел между точкой и% f

Саураб прав - это не обязательно будет работать так, как вы предполагаете, но используйте некоторые соглашения об именах, например 10-xxx, 20-yyy и так далее, и это может быть управляемо.

Вы также можете рассмотреть возможность создания сценария iptables из файлов шаблонов, одним из которых будет исходный сценарий iptables. создайте сценарий, который будет читать ваши файлы шаблонов в соответствующих каталогах и создавать из них новый сценарий iptables. Таким образом, когда вам нужно внести изменения, вы сделаете это в шаблонах и просто перезапустите свой генератор сценариев.

Используя этот метод, вы даже можете придумать и разместить маркеры в базовом шаблоне, которые можно использовать, чтобы сигнализировать, когда включать файлы из определенных каталогов в ваше дерево шаблонов.

Вы можете определить простую функцию в bash:

function include() {
    for FILE in $( find "$1" -type f -print | sort )
    do
        source $FILE
    done
}

а потом:

include some_dir/*

или даже:

include some_dir/*.conf

Я не думаю, что вы можете включать файлы в конфигурацию iptables. Выбор имеет смысл, поскольку правила брандмауэра во многом зависят от порядка, в котором они написаны. Если мы просто включим файлы в папку, iptables не будет знать, какие правила поставить первыми, а какие позже.

Хорошо вести себя с пустым каталогом include.d/ ты можешь сделать:

for f in /etc/iptables/include.d/*; do
  [[ -e "${f}" ]] && . "${f}"
done