Марионетка: преобразование пользовательского шаблона в файл конфигурации

Я принял административные обязанности для среды Linux приблизительно 20 полей. Попытка консолидировать управление конфигурацией с Марионеткой. Большинство просто, однако я наткнулся на правила брандмауэра.

Предыдущий администратор полагался на пользовательский сценарий, который создал iptables правила для каждого поля из общего шаблона.

Шаблонные правила похожи на это:

hostname:   Action   Interface   Source    Protocol   destPort

Некоторые примеры:

ALL:          Accept   eth0    any           tcp   80
server4:       Accept   All    x.x.x.x/24   tcp/udp   111
node5:         Deny     All    y.y.y.y

Правила для ВСЕХ относились бы ко всем полям. Остальная часть параметрических усилителей используется для заполнения правил iptables. В шаблоне существует приблизительно 250 правил.

Действительно ли возможно снова использовать этот общий шаблон через марионетку и создать iptables ruleset для каждого узла? Действительно ли это - вид текста, искажающего даже возможный с марионеткой?

2
задан 24 August 2015 в 08:24
5 ответов

Не совсем.

Точнее; это технически возможно. Но поскольку ни DSL марионетки, ни сама марионетка не предназначены для таких задач¹, у вас накапливается технический долг за хрупкое решение из резинок и скрепок .³

ИМХО, поскольку вы хотите сохранить этот шаблон, лучший способ действий - написать сценарий, который преобразует данные из этого явно устаревшего формата в собственный марионеточный DSL (генерируя файлы .pp , которые вы включите соответствующим образом) ², используя любые типы / модули, которые наиболее подходят для вашего бокса. .

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


¹) Это должно быть очевидно, если вы кратко обдумаете: обязанность CM - быть авторитетным источником данных конфигурации, а не искажать данные. Это то, что sed , awk , Pipes и др. предназначены для.

²) Считайте также hiera.

³) Скорее всего, ваш преемник возненавидит вас за это, и, что более важно, вы возненавидите себя после некоторого расстояния в кроличьей норе.

4
ответ дан 3 December 2019 в 09:34

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

Вы можете использовать ipfilter в марионеточной кузнице в качестве отправной точки.

Быстрый и грязный способ сделать это - использовать ] определить , чтобы обернуть ipfilter и брандмауэр в зависимости от операционной системы узла.

1
ответ дан 3 December 2019 в 09:34

Похоже, кто-то хотел переопределить shorewall и не дошел до этого ...

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

Если вместо этого вы хотите сохранить сумасшедший пользовательский формат файла, но используйте Puppet как посредник для отправки «скомпилированных» наборов правил на машины, я бы не советовал делать что-либо особенно необычное. Я бы, вероятно, попытался «скомпилировать» наборы правил на Puppetmaster при развертывании дерева, чтобы в случае изменений в «исходном» файле новые наборы правил были доступны на файловом сервере для отправки клиентам, когда они следующие.

0
ответ дан 3 December 2019 в 09:34

Я не верю, что вы можете реализовать такое преобразование внутри Puppet DSL.

Вы захотите написать Ruby-функцию , которая потребляет ввод текста и ] создает ресурсы для модуля брандмауэра .

0
ответ дан 3 December 2019 в 09:34

ما برای دستیابی به این هدف از Shorewall استفاده می کنیم. Shorewall بر اساس iptables (نت فیلتر) ساخته می شود. در اتومبیل های عروسکی ماژول های مختلفی برای اتوماسیون Shorewall در عروسک وجود دارد.

معمولاً چند منبع داده در Puppet دارید ، به عنوان مثال Hiera و ENC. در این حالت ، اگر Hiera را به روش صحیح تنظیم کرده باشید ، می توانید پیکربندی فایروال خود را در آن جا انجام دهید. نکته خوب در Hiera این است که می توانید پیکربندی را برای شبکه های خاص / میزبان / خدمات / و غیره "لغو" کنید (به عنوان مثال: default.yaml -> webserver.yaml -> apache.yaml). اختصاصی ترین کلید حاوی کلید شما خواهد بود.

اگر لازم است از یک پایگاه داده قوانینی بگیرید (به عنوان مثال MySQL) می توانید ENC را به Puppet منتقل کنید.

در Puppet می توانید الگوهایی برای Shorewall ایجاد کنید. (به عنوان مثال: webserver.erb) و آنها را در پیکربندی shorewall خود قرار دهید. آنها می توانند شامل مواردی مانند:

# This file is managed by Puppet
<% @firewall_rules.each do |entry| -%>
<%= entry['ip'] %>/<%= entry['mask'] %> - - src,dst
<% end -%>
0
ответ дан 3 December 2019 в 09:34

Теги

Похожие вопросы