у меня есть /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