Модуль управления фаерволом
для Ansible своими руками
Александр Чистяков
vdsina.ru
Постановка задачи по-взрослому
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 2 / 40
• Я хочу управлять правилами
фаервола в Linux
Постановка задачи по-взрослому
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 3 / 40
• Я хочу управлять правилами
фаервола в Linux
• Я хочу делать это в 2020-м году, по
колено в снегу, несмотря ни на что
Постановка задачи по-взрослому
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 4 / 40
• Я хочу управлять правилами
фаервола в Linux
• Я хочу делать это в 2020-м году, по
колено в снегу, несмотря ни на что
• Я попросил у Санты работающий
Kubernetes на bare metal (зачем?)
Use cases
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 5 / 40
• Я добавляю правило, оно работает
Use cases
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 6 / 40
• Я добавляю правило, оно работает
• Я не заблокировал весь трафик
(валидация)
Use cases
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 7 / 40
• Я добавляю правило, оно работает
• Я не заблокировал весь трафик
(валидация)
• Нет противоречий (валидация)
Use cases
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 8 / 40
• Я добавляю правило, оно работает
• Я не заблокировал весь трафик
(валидация)
• Нет противоречий (валидация)
• После перезагрузки система
находится в известном состоянии
Use cases
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 9 / 40
• Я добавляю правило, оно работает
• Я не заблокировал весь трафик
(валидация)
• Нет противоречий (валидация)
• После перезагрузки система
находится в известном состоянии
• Повторное применение не меняет
состояние системы (идемпотентность)
Use cases
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 10 / 40
• Я удаляю правило, оно удаляется
Use cases
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 11 / 40
• Я удаляю правило, оно удаляется
• Что такое удаление?
Use cases
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 12 / 40
• Я удаляю правило, оно удаляется
• Что такое удаление?
• Правило исчезло из конфигурации -
должно исчезнуть с хоста
Use cases
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 13 / 40
• Я удаляю правило, оно удаляется
• Что такое удаление?
• Правило исчезло из конфигурации -
должно исчезнуть с хоста
• Ansible никогда не был хорош в этом
Use cases
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 14 / 40
• Я применяю конфигурацию к хосту,
где уже есть правила фаервола
Use cases
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 15 / 40
• Я применяю конфигурацию к хосту,
где уже есть правила фаервола
• Что делать, если в конфигурации
правила нет, а на хосте - есть?
Use cases
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 16 / 40
• Я применяю конфигурацию к хосту,
где уже есть правила фаервола
• Что делать, если в конфигурации
правила нет, а на хосте - есть?
• Democracy time! (выдать ошибку,
молча исправить, громогласно
исправить, ...?)
Немного истории
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 17 / 40
• iptables - это не сам фаервол, а его
конфигуратор
Немного истории
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 18 / 40
• iptables - это не сам фаервол, а его
конфигуратор
• Все остальное - это конфигуратор
iptables (мы не должны бояться
шаблонизировать шаблонизаторы)
Немного истории
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 19 / 40
• iptables - это не сам фаервол, а его
конфигуратор
• Все остальное - это конфигуратор
iptables (мы не должны бояться
шаблонизировать шаблонизаторы)
• Пожалуй, лучший из них - Shorewall
Привет из 2001-го
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 20 / 40
• Shorewall - это просто большой
bash-скрипт на языке Perl
Привет из 2001-го
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 21 / 40
• Shorewall - это просто большой
bash-скрипт на языке Perl
• Интеграция с Docker и Kubernetes?
Серьезно?
Привет из 2001-го
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 22 / 40
• Shorewall - это просто большой
bash-скрипт на языке Perl
• Интеграция с Docker и Kubernetes?
Серьезно?
• Идемпотентность? А что это?
firewalld
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 23 / 40
• Работает как сервис
firewalld
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 24 / 40
• Работает как сервис
• Управляется через D-Bus
firewalld
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 25 / 40
• Работает как сервис
• Управляется через D-Bus
• Имеет свой язык конфигурации (куда
же без него!)
firewalld
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 26 / 40
• Работает как сервис
• Управляется через D-Bus
• Имеет свой язык конфигурации (куда
же без него!)
• Однажды будет работать без iptables
firewalld WAT list
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 27 / 40
• Runtime/permanent configs
Ansible роль для firewalld
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 28 / 40
• https://github.com/kofonfor/ansible-
role-firewalld
Ansible роль для firewalld
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 29 / 40
• Я добавляю правило, оно работает
• Я не заблокировал весь трафик
(валидация)
• Нет противоречий (валидация)
• После перезагрузки система
находится в известном состоянии
• Повторное применение не меняет
состояние системы (идемпотентность)
Ansible роль для firewalld
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 30 / 40
• Я удаляю правило, оно удаляется
Ansible роль для firewalld
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 31 / 40
• Декларативная конфигурация
Необходимость в модуле
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 32 / 40
• Я добавляю правило, оно работает
• Я не заблокировал весь трафик
(валидация)
• Нет противоречий (валидация)
• После перезагрузки система
находится в известном состоянии
• Повторное применение не меняет
состояние системы (идемпотентность)
Необходимость в модуле
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 33 / 40
• Я удаляю правило, оно удаляется
Ansible модуль для firewalld
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 34 / 40
• G(T/S)D
Ansible модуль для firewalld
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 35 / 40
• Тот же формат конфигурации, что у
роли
Ansible модуль для firewalld
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 36 / 40
• Тот же формат конфигурации, что у
роли
• Пишем на Haskell
Ansible модуль для firewalld
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 37 / 40
• Тот же формат конфигурации, что у
роли
• Пишем на Haskell
• Сейчас (кажется) готова заглушка для
модуля, которая может принять
параметры и вернуть обратно статус
(всегда одинаковый)
Ansible модуль для firewalld
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 38 / 40
• Тот же формат конфигурации, что у
роли
• Пишем на Haskell
• Сейчас (кажется) готова заглушка для
модуля, которая может принять
параметры и вернуть обратно статус
(всегда одинаковый)
• To be continued...
Выводы
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 39 / 40
• Управление фаерволом - долго,
дорого, неаккуратно
• Но мы, хотя бы, пытаемся
That’s all, folks!
Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 40 / 40
• alexclear@gmail.com
• https://telegram.me/lhommequipleure
• https://telegram.me/demeliorator_pod

My slides from DevOps-40 meetup Oct 2019

  • 1.
    Модуль управления фаерволом дляAnsible своими руками Александр Чистяков vdsina.ru
  • 2.
    Постановка задачи по-взрослому АлександрЧистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 2 / 40 • Я хочу управлять правилами фаервола в Linux
  • 3.
    Постановка задачи по-взрослому АлександрЧистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 3 / 40 • Я хочу управлять правилами фаервола в Linux • Я хочу делать это в 2020-м году, по колено в снегу, несмотря ни на что
  • 4.
    Постановка задачи по-взрослому АлександрЧистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 4 / 40 • Я хочу управлять правилами фаервола в Linux • Я хочу делать это в 2020-м году, по колено в снегу, несмотря ни на что • Я попросил у Санты работающий Kubernetes на bare metal (зачем?)
  • 5.
    Use cases Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 5 / 40 • Я добавляю правило, оно работает
  • 6.
    Use cases Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 6 / 40 • Я добавляю правило, оно работает • Я не заблокировал весь трафик (валидация)
  • 7.
    Use cases Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 7 / 40 • Я добавляю правило, оно работает • Я не заблокировал весь трафик (валидация) • Нет противоречий (валидация)
  • 8.
    Use cases Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 8 / 40 • Я добавляю правило, оно работает • Я не заблокировал весь трафик (валидация) • Нет противоречий (валидация) • После перезагрузки система находится в известном состоянии
  • 9.
    Use cases Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 9 / 40 • Я добавляю правило, оно работает • Я не заблокировал весь трафик (валидация) • Нет противоречий (валидация) • После перезагрузки система находится в известном состоянии • Повторное применение не меняет состояние системы (идемпотентность)
  • 10.
    Use cases Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 10 / 40 • Я удаляю правило, оно удаляется
  • 11.
    Use cases Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 11 / 40 • Я удаляю правило, оно удаляется • Что такое удаление?
  • 12.
    Use cases Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 12 / 40 • Я удаляю правило, оно удаляется • Что такое удаление? • Правило исчезло из конфигурации - должно исчезнуть с хоста
  • 13.
    Use cases Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 13 / 40 • Я удаляю правило, оно удаляется • Что такое удаление? • Правило исчезло из конфигурации - должно исчезнуть с хоста • Ansible никогда не был хорош в этом
  • 14.
    Use cases Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 14 / 40 • Я применяю конфигурацию к хосту, где уже есть правила фаервола
  • 15.
    Use cases Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 15 / 40 • Я применяю конфигурацию к хосту, где уже есть правила фаервола • Что делать, если в конфигурации правила нет, а на хосте - есть?
  • 16.
    Use cases Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 16 / 40 • Я применяю конфигурацию к хосту, где уже есть правила фаервола • Что делать, если в конфигурации правила нет, а на хосте - есть? • Democracy time! (выдать ошибку, молча исправить, громогласно исправить, ...?)
  • 17.
    Немного истории Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 17 / 40 • iptables - это не сам фаервол, а его конфигуратор
  • 18.
    Немного истории Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 18 / 40 • iptables - это не сам фаервол, а его конфигуратор • Все остальное - это конфигуратор iptables (мы не должны бояться шаблонизировать шаблонизаторы)
  • 19.
    Немного истории Александр Чистяков,vdsina.ru Модуль управления фаерволом для Ansible своими руками 19 / 40 • iptables - это не сам фаервол, а его конфигуратор • Все остальное - это конфигуратор iptables (мы не должны бояться шаблонизировать шаблонизаторы) • Пожалуй, лучший из них - Shorewall
  • 20.
    Привет из 2001-го АлександрЧистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 20 / 40 • Shorewall - это просто большой bash-скрипт на языке Perl
  • 21.
    Привет из 2001-го АлександрЧистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 21 / 40 • Shorewall - это просто большой bash-скрипт на языке Perl • Интеграция с Docker и Kubernetes? Серьезно?
  • 22.
    Привет из 2001-го АлександрЧистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 22 / 40 • Shorewall - это просто большой bash-скрипт на языке Perl • Интеграция с Docker и Kubernetes? Серьезно? • Идемпотентность? А что это?
  • 23.
    firewalld Александр Чистяков, vdsina.ruМодуль управления фаерволом для Ansible своими руками 23 / 40 • Работает как сервис
  • 24.
    firewalld Александр Чистяков, vdsina.ruМодуль управления фаерволом для Ansible своими руками 24 / 40 • Работает как сервис • Управляется через D-Bus
  • 25.
    firewalld Александр Чистяков, vdsina.ruМодуль управления фаерволом для Ansible своими руками 25 / 40 • Работает как сервис • Управляется через D-Bus • Имеет свой язык конфигурации (куда же без него!)
  • 26.
    firewalld Александр Чистяков, vdsina.ruМодуль управления фаерволом для Ansible своими руками 26 / 40 • Работает как сервис • Управляется через D-Bus • Имеет свой язык конфигурации (куда же без него!) • Однажды будет работать без iptables
  • 27.
    firewalld WAT list АлександрЧистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 27 / 40 • Runtime/permanent configs
  • 28.
    Ansible роль дляfirewalld Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 28 / 40 • https://github.com/kofonfor/ansible- role-firewalld
  • 29.
    Ansible роль дляfirewalld Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 29 / 40 • Я добавляю правило, оно работает • Я не заблокировал весь трафик (валидация) • Нет противоречий (валидация) • После перезагрузки система находится в известном состоянии • Повторное применение не меняет состояние системы (идемпотентность)
  • 30.
    Ansible роль дляfirewalld Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 30 / 40 • Я удаляю правило, оно удаляется
  • 31.
    Ansible роль дляfirewalld Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 31 / 40 • Декларативная конфигурация
  • 32.
    Необходимость в модуле АлександрЧистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 32 / 40 • Я добавляю правило, оно работает • Я не заблокировал весь трафик (валидация) • Нет противоречий (валидация) • После перезагрузки система находится в известном состоянии • Повторное применение не меняет состояние системы (идемпотентность)
  • 33.
    Необходимость в модуле АлександрЧистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 33 / 40 • Я удаляю правило, оно удаляется
  • 34.
    Ansible модуль дляfirewalld Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 34 / 40 • G(T/S)D
  • 35.
    Ansible модуль дляfirewalld Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 35 / 40 • Тот же формат конфигурации, что у роли
  • 36.
    Ansible модуль дляfirewalld Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 36 / 40 • Тот же формат конфигурации, что у роли • Пишем на Haskell
  • 37.
    Ansible модуль дляfirewalld Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 37 / 40 • Тот же формат конфигурации, что у роли • Пишем на Haskell • Сейчас (кажется) готова заглушка для модуля, которая может принять параметры и вернуть обратно статус (всегда одинаковый)
  • 38.
    Ansible модуль дляfirewalld Александр Чистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 38 / 40 • Тот же формат конфигурации, что у роли • Пишем на Haskell • Сейчас (кажется) готова заглушка для модуля, которая может принять параметры и вернуть обратно статус (всегда одинаковый) • To be continued...
  • 39.
    Выводы Александр Чистяков, vdsina.ruМодуль управления фаерволом для Ansible своими руками 39 / 40 • Управление фаерволом - долго, дорого, неаккуратно • Но мы, хотя бы, пытаемся
  • 40.
    That’s all, folks! АлександрЧистяков, vdsina.ru Модуль управления фаерволом для Ansible своими руками 40 / 40 • alexclear@gmail.com • https://telegram.me/lhommequipleure • https://telegram.me/demeliorator_pod