SlideShare a Scribd company logo
Иван Агарков
iptables + consul = :3
v9
2
Кто я?
- Занимаюсь ИБ
последние 15 лет
- Люблю SELinux и Perl
- Делаю новые штуки
- Защищаю Wargaming
от хакеров
3
TL;DR;
➔ динамический
➔ быстрый
➔ распределенный
➔ файрвол
https://github.com/wgnet/befw
Историческая справка
В этом никто не виноват
4
2010
5
Сетевая модель ( 2010 )
6
Хорошие парни
Плохие парни
сервер
backend ( be ) frontend ( fe )x50
2014
7
Сетевая модель ( 2014 )
8
Вроде норм
парни
Плохие парни
сервер
backend ( be )
frontend ( fe )x5000
Хорошие парни
staging ( stg )
2016
9
Сетевая модель ( 2016 )
10
Вроде норм
парни
Не очень
плохие парни
сервер
backend ( be )
frontend ( fe )
x8000
Хорошие парни
staging ( stg )
Плохие парни
partners (3pd)
2018
11
Сетевая модель ( 2018 )
12
Вроде
норм
парни
Не очень
плохие
парни
сервер
backend ( be )
frontend ( fe )
x16000
Хорошие
парни
staging ( stg )
Плохие парни
parthers (3pd)
Странные
парни
containers
Тоже
странные
парни
cloud (aws & co)
business net
Серьезные
парни
Общие
сервисы
common ( vrf )
Способы изоляции ( 2018 )
13
Вроде
норм
парни
Не очень
плохие
парни
сервер
VRF + VLAN ACL
VLAN ACL
x16000
Хорошие
парни
VLAN ACL
Плохие парни
VLAN ACL + VRF
Странные
парни
VLAN ACL + IP2IP
Тоже
странные
парни
VPN + VRF + VLAN
ACL
VLAN ACL
Серьезные
парни
Общие
сервисы
VRF + VLAN ACL
Суть проблемы
14
А что, вообще, не так?
15
24 офиса
80 дата-центров
ACL на цисках кончились
Network Map не влезает в эксель
Опять интеграции с партнерами
Забыл, как мы делали это 4 года назад
Веб опять хочет перенести хосты из стейджинга
Надо прописать 1200 доступов на прод
Сеть продолжает расти
Опять купили компанию
Проблемы
16
➔ Геометрический рост цены для новых
правил
➔ Отсутствие файрвола внутри сегментов
➔ Применение правил доступа занимает t ~ 1h
➔ Сложности с аудитом правил
➔ Низкий уровень контроля за
инфраструктурой
Сетевой инженер ( 2018 )
17
Решение?
18
Проблема Что можно сделать?
Цена интеграций непрерывно растет Убрать человеческий фактор,
автоматизировать предоставление доступа
Решение?
19
Проблема Что можно сделать?
Цена интеграций непрерывно растет Убрать человеческий фактор,
автоматизировать предоставление доступа
Новые правила применяются долго Ускорить применение правил, сделать его
распределенным и параллельным
Решение?
20
Проблема Что можно сделать?
Цена интеграций непрерывно растет Убрать человеческий фактор,
автоматизировать предоставление доступа
Новые правила применяются долго Ускорить применение правил, сделать его
распределенным и параллельным
Отсутствие файрвола внутри сегментов Использовать файрвол на уровне хоста
Решение?
21
Проблема Что можно сделать?
Цена интеграций непрерывно растет Убрать человеческий фактор,
автоматизировать предоставление доступа
Новые правила применяются долго Ускорить применение правил, сделать его
распределенным и параллельным
Отсутствие файрвола внутри сегментов Использовать файрвол на уровне хоста
Сложности с аудитом правил Хранить все правила в едином месте для
обзора и управления
Решение?
22
Проблема Что можно сделать?
Цена интеграций непрерывно растет Убрать человеческий фактор,
автоматизировать предоставление доступа
Новые правила применяются долго Ускорить применение правил, сделать его
распределенным и параллельным
Отсутствие файрвола внутри сегментов Использовать файрвол на уровне хоста
Сложности с аудитом правил Хранить все правила в едином месте для
обзора и управления
Низкий уровень контроля за инфраструктурой Провести инвентаризацию всех сервисов и
доступов между ними
23
СПОЙЛЕР
Сетевой инженер ( 2019 )
24
Решение
Процесс > результат
25
Подход к решению
26
1. Соберем все сервисы, сети и
пользователей
2. Сделаем на их основе правила iptables
3. Автоматизируем контроль
4. ….
5. PROFIT
27
Почему Consul?
➔ Не теряет данные
➔ Peer 2 Peer связи ускоряют распространение
изменений
➔ Можно масштабировать через федерацию
➔ Удобное REST API
➔ Может быть как хранилищем (KV), так и каталогом
(Service Discovery)
➔ Написан на golang, который входит в стек Wargaming
➔ Мощная система ACL
28
Почему не Consul?
➔ Не масштабируется в рамках дата-центра
➔ Очень зависим от качества сети
➔ Очень зависим от загрузки серверов
➔ Сложности с мониторингом доступности
Но всё равно — Consul
29
мастер-
кластер
сервер
мастер-
кластер
кластер
региона
сервер
сервер
кластер
региона
мастер-
кластер
сервер
кластер
региона
сервер
сервер
сервер
сервер
кластер
региона
сервер
кластер
регионакластер
региона
сервер
Про_Консул
30
Вы его ненавидите? Я тоже!
Дата-центр
Связанность (1/6)
31
Дата-центр
сервер сервер
Связанность (2/6)
32
сервер
Дата-центр
сервер сервер
Связанность (3/6)
33
сервер
клиент
клиент
клиент
клиент
клиент
клиент
клиент
Дата-центр
сервер сервер
LAN
Связанность (4/6)
34
сервер
клиент
клиент
клиент
клиент
клиент
клиент
клиент
Дата-центр
Связанность (5/6)
35
Дата-центр
Дата-центр
WAN
Дата-центр
Связанность (6/6)
36
Дата-центр
Дата-центр
WAN
37
Немного фактов (1/10)
38
1. Consul-сервера выбирают мастера из числа голосующих
2. Если мастер не выбран — запросы не обслуживаются никем
3. Если мастер выбран — все запросы идут к нему
4. Если запрос идет в другой дата-центр — он идет от мастера к мастеру
5. Выбранный мастер получает 100% нагрузки
6. Но копия данных есть у всех серверов дата-центра
7. Единственный способ масштабирования — включить stale-режим на
клиенте
8. В stale отвечать можно даже без кворума
Немного фактов (10/10)
39
9. Consul не копирует данные между дата-центрами
10. Атомарность операций не гарантируется вне транзакции
11. Зависание мастера не приводит к перевыборам
12. Блокирующие операции не гарантируют блокировку
13. ACL не гарантирует доступа [во многих случаях]
14. Один зависший мастер в федерации со временем повесит всю
федерацию
15. Consul Enterprise лишен некоторых недостатков выше, но стоит очень
много
16. rm -rf /var/lib/consul — лекарство от всех болезней агента
Ради этой секции вы страдали ?? минут
BEFW
40
41
Почему BEFW?
BackEndFireWall
https://github.com/wgnet/befw
BEFW — шаблон правил
42
➔ -N BEFW
➔ -P INPUT DROP
➔ -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
➔ -A INPUT -i lo -j ACCEPT
➔ -A INPUT -j BEFW
BEFW — сервисы
43
Service
Name=SSH
Node=@self
Port=22
Tags=[befw, tcp, ...]
-A BEFW -p tcp --dport 22 -j ACCEPT
BEFW — клиенты
44
KV
Service=SSH
Port=22
Protocol=TCP
Client=10.0.0.0/8
Valid before=08.11.2019 16:00
BEFW SSH_TCP_22 10.0.0.0/8 1573218000
BEFW — доступы
45
-A BEFW -p tcp --dport 22 -s 10.0.0.0/8 -j ACCEPT
Service
Name=SSH
Node=@self
Port=22
Tags=[befw, tcp, ...]
KV
Service=SSH
Port=22
Protocol=TCP
Client=10.0.0.0/8
Valid before=08.11.2019 16:00
46
BEFW — группы (1/2)
47
BEFW $ALIAS$ $OFFICES$ 10.125.0.0/24 1573218000
10.127.0.0/24 1573218000
10.130.0.0/24 1573218000
192.168.0.0/22 1573218000
172.20.6.0/24 1573218000
88.31.7.244/32 1573218000
KV
Alias Name=$OFFICES$
AddressList=[....]
BEFW — группы (2/2)
48
KV
Alias Name=$OFFICES$
AddressList=[....]
-A BEFW -p tcp --dport 22 -s 10.125.0.0/24 -j ACCEPT
-A BEFW -p tcp --dport 22 -s …. -j ACCEPT
KV
Service=SSH
Port=22
Protocol=TCP
Client=$OFFICES$
Valid before=08.11.2019 16:00
BEFW — интеграция
49
puppet
hiera
puppetdb
Service
Name=SSH
Node=@self
Port=22
Tags=[befw, tcp, ...]
KV
Service=SSH
Port=22
Protocol=TCP
Client=$OFFICES$
Valid before=08.11.2019 16:00
BEFW — оптимизация (1/4)
Пустая цепочка
10000 адресов
????
BEFW — оптимизация (2/4)
Пустая цепочка
10000 адресов
????
10000 адресов в
ipset
BEFW — оптимизация (3/4)
Пустая цепочка
10000 адресов
10000 адресов в
ipset
BEFW — оптимизация (4/4)
Service
Name=SSH
Node=@self
Port=22
Tags=[befw, tcp, ...]
-A BEFW -p tcp --dport 22 --set ssh_tcp_22 -j ACCEPT
-A BEFW -p tcp --dport 22 -j DROP
KV
Service=SSH
Port=22
Protocol=TCP
Client=$OFFICES$
Valid before=08.11.2019 16:00
create ssh_tcp_22 hash:net
add ssh_tcp_22 10.125.0.0/24
add ssh_tcp_22 10.127.0.0/24
add ssh_tcp_22 10.130.0.0/24
add ssh_tcp_22 172.20.6.0/24
add ssh_tcp_22 88.31.7.24/32
Общая схема
54
p
c
puppet puppet+hiera
user клиент сервиса 192.168.0.1
service какой-то сервис ssh, tcp/22
consul consul-кластер
host хост, который
запускает сервис
xakep нелегитимный
клиент сервиса
192.168.0.2
h
-A BEFW -p tcp
--dport 22 -m set
--set ssh_tcp_22 -j
ACCEPT
ipset add
ssh_tcp_22
192.168.0.1
u
s
p
x
BEFW — allow & deny
55
-A BEFW -m set --set rules_deny src -j DROP
-A BEFW -m set --set rules_allow src -j ACCEPT
BEFW $IPSET$ rules_allow
rules_deny
56
BEFW — другие сеты
57
-A BEFW -m set --set test src -j DROP
-A BEFW -m set --set test2 src -j ACCEPT
/etc/befw.conf
set.test=DROP
set.test2=ACCEPT
set.test3=NOOP
ipset create test3 hash:net
BEFW — пользователи
58
RADIUS
BEFW $ALIAS$ $USERNAME$
add 10.125.0.100 now()+dhcp lease
802.1X/WPA-EAP/VPN
KV
Service=SSH
Port=22
Protocol=TCP
Client=$USERNAME$
Valid before=08.11.2019 16:00
BEFW — изоляция
59
BEFW $ALIAS$ $BACKEND$
$STAGINGS$
$3PD$
$CLOUD$
...
BEFW $IPSET$ rules_deny $STAGINGS$ 2573218000
$3PD$ 2573218000
Вроде
норм
парни
Не очень
плохие
парни
backend ( be )
Хорошие
парни
staging ( stg )
partners (3pd)
BEFW — контроль целостности
Контролируются:
➔ ipset из сервисов и списка в
befw.conf
➔ правила сервисов в цепочке
BEFW
Не контролируются:
➔ другие цепочки и правила
➔ другие ipset
При обнаружении изменений:
➔ flush
➔ restore
➔ save
➔ log
BEFW — защита от аварий
61
consul
доступен?
удалось
получить
правила?
state.bin
есть
старый
state.bin?
allow
10.0.0.0/8*
сохранить
состояние
загрузить состояние
Подводные камни
- Петька, знаешь, что такое “нюанс”?
62
ipset add set 0.0.0.0/0
Ожидание
63
➔ Откроем доступ из Интернета
Реальность
ipset add set 0.0.0.0/0
Ожидание
64
➔ Откроем доступ из Интернета
Реальность
➔ RedHat Bugzilla #1297092
➔ Не работает с 2016 года
➔ Стоимость: 2 часа даунтайма
➔ Как нашли: репорт от разработчика
➔ Решение: 0.0.0.0/0 → 0.0.0.0/1 + 128.0.0.0/1
ipset restore set < file
Ожидание
65
➔ Восстановит содержимое из
файла
Реальность
ipset restore set < file
Ожидание
66
➔ Восстановит содержимое из
файла
Реальность
➔ Восстановит отсутствующие
записи, не удаляя лишнее
➔ Стоимость: 0 ( и фейспалм )
➔ Как нашли: при тестировании изоляции
➔ Решение: добавить flush
consul kv get -datacenter=other
Ожидание
67
➔ Получить данные из другого
ДЦ или ошибку
Реальность
consul kv get -datacenter=other
Ожидание
68
➔ Получить данные из другого
ДЦ или ошибку
Реальность
➔ И клиент, и сервер зависли
➔ Стоимость: 999 часов боли
➔ Как нашли: как только сделали большой кластер
➔ Решение: в процессе, готовимся патчить консул
consul leader не отвечает
Ожидание
69
➔ consul info покажет ошибку
➔ другие сервера выберут
нового лидера
Реальность
consul leader не отвечает
Ожидание
70
➔ consul info покажет ошибку
➔ другие сервера выберут
нового лидера
Реальность
➔ consul info покажет, что все ок
➔ другие сервера тоже ничего не
заметят
➔ Стоимость: 99999 часов боли
➔ Как нашли: как только сделали большой кластер
➔ Решение: service consul restart каждый час
Заключение
71
Ну, вообще-то, его можно и не делать, но правила
конференции обязывают суммировать всё рассказанное, хотя
я лично и не вижу в этом смысла
72
Суммируя
Pro
Скорость
Покрытие
Автоматизация
Освобождение железа
Возможности по
интеграции
Есть о чем рассказать :)
Cons
Работа consul
Цена ошибки
73
Стоимость
Разработка
1 человек, ~400 ч/ч
Поддержка
4 человека, около 10 ч/ч в
месяц на всех
Планы
74
Скоро:
➔ Реализация fail2ban на befw
➔ Интеграция с новыми
источниками данных
➔ Расширенный мониторинг
➔ Поддержка nftables и rhel 8
➔ Поддержка SELinux
Постоянно:
➔ Расширение конфигурации
➔ Больше метрик
➔ Больше оптимизации
Не скоро:
➔ Альтернативный транспорт
(не consul)
➔ Поиск аномалий в трафике
Управление картой сети
➔ Поддержка Kubernetes
➔ Сборка пакетов под все системы
➔ Web-UI
Призыв к оружию
75
Зачем я сюда приехал на самом деле
$ git clone
$ git commit
$ git push
$ git blame
Join github.com/wgnet/befw
ТУТ МОГ
БЫ БЫТЬ
ТВОЙ PULL
REQUEST
ВО
П
РО
СЫ
?
@annmuor
@annmuor
@annmuor

More Related Content

PDF
Антон Карпов - Обзорная лекция по безопасности
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PDF
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
PPTX
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
PDF
Семь тысяч Rps, один go
PPTX
JSQuest d:)
PPT
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Антон Карпов - Обзорная лекция по безопасности
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
Семь тысяч Rps, один go
JSQuest d:)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)

What's hot (20)

PPTX
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
PDF
Алексей Фомкин, Практическое применение Web Workers
PPT
Node.JS: возможности для РНР-разработчика
PDF
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
PDF
Некриптографическое исследование носителей православной криптографии
PPTX
QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...
PPTX
Разбор сложных случаев OutOfMemoryError
PDF
Компиляция скриптов PHP. Алексей Романенко
PDF
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
PDF
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
PDF
NeoQUEST: Tpm.txt.на что способно заморское железо
PDF
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
PDF
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
PPTX
Ловим шеллкоды под ARM
PDF
Алексей Лапаев - Протоколы межкомпонентного взаимодействия
PDF
Проникновение в Docker с примерами
PPTX
Fiddler
PDF
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
PDF
Docker networking
PDF
еще один недостаток современных клиент серверных приложений
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Алексей Фомкин, Практическое применение Web Workers
Node.JS: возможности для РНР-разработчика
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Некриптографическое исследование носителей православной криптографии
QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...
Разбор сложных случаев OutOfMemoryError
Компиляция скриптов PHP. Алексей Романенко
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
NeoQUEST: Tpm.txt.на что способно заморское железо
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
Ловим шеллкоды под ARM
Алексей Лапаев - Протоколы межкомпонентного взаимодействия
Проникновение в Docker с примерами
Fiddler
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
Docker networking
еще один недостаток современных клиент серверных приложений
Ad

Similar to HighLoad++ 2019: iptables + consul = :3 (20)

PPTX
Пост-эксплуатация веб-приложений в тестах на проникновение
ODP
Обзор Continuous integration инструментов
PDF
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
PDF
DDOS mitigation software solutions
PDF
Программные интерфейсы управления (API) архитектурой, ориентированной на прил...
PDF
Программируемость коммутаторов для ЦОД Cisco Nexus
PPT
Log+
PDF
Zero Downtime PHP Deployment with Envoyer And Forge
PDF
Автономные Сети: упрощение развертывания уровня доступа в сети сервис-провайдера
PDF
Другая виртуализация
PDF
Обзор Cisco CVP
PDF
Методики и инструменты для самостоятельного решения проблем в сети
PDF
Компиляция скриптов PHP (Алексей Романенко)
PPTX
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
PDF
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
PDF
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
PDF
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
PDF
Cовременный станок верстальщика
PDF
Cisco StealthWatch. Использование телеметрии для решения проблемы зашифрованн...
PPT
Анализ работы антивирусных лабораторий
Пост-эксплуатация веб-приложений в тестах на проникновение
Обзор Continuous integration инструментов
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
DDOS mitigation software solutions
Программные интерфейсы управления (API) архитектурой, ориентированной на прил...
Программируемость коммутаторов для ЦОД Cisco Nexus
Log+
Zero Downtime PHP Deployment with Envoyer And Forge
Автономные Сети: упрощение развертывания уровня доступа в сети сервис-провайдера
Другая виртуализация
Обзор Cisco CVP
Методики и инструменты для самостоятельного решения проблем в сети
Компиляция скриптов PHP (Алексей Романенко)
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Cовременный станок верстальщика
Cisco StealthWatch. Использование телеметрии для решения проблемы зашифрованн...
Анализ работы антивирусных лабораторий
Ad

HighLoad++ 2019: iptables + consul = :3

  • 2. 2 Кто я? - Занимаюсь ИБ последние 15 лет - Люблю SELinux и Perl - Делаю новые штуки - Защищаю Wargaming от хакеров
  • 3. 3 TL;DR; ➔ динамический ➔ быстрый ➔ распределенный ➔ файрвол https://github.com/wgnet/befw
  • 4. Историческая справка В этом никто не виноват 4
  • 6. Сетевая модель ( 2010 ) 6 Хорошие парни Плохие парни сервер backend ( be ) frontend ( fe )x50
  • 8. Сетевая модель ( 2014 ) 8 Вроде норм парни Плохие парни сервер backend ( be ) frontend ( fe )x5000 Хорошие парни staging ( stg )
  • 10. Сетевая модель ( 2016 ) 10 Вроде норм парни Не очень плохие парни сервер backend ( be ) frontend ( fe ) x8000 Хорошие парни staging ( stg ) Плохие парни partners (3pd)
  • 12. Сетевая модель ( 2018 ) 12 Вроде норм парни Не очень плохие парни сервер backend ( be ) frontend ( fe ) x16000 Хорошие парни staging ( stg ) Плохие парни parthers (3pd) Странные парни containers Тоже странные парни cloud (aws & co) business net Серьезные парни Общие сервисы common ( vrf )
  • 13. Способы изоляции ( 2018 ) 13 Вроде норм парни Не очень плохие парни сервер VRF + VLAN ACL VLAN ACL x16000 Хорошие парни VLAN ACL Плохие парни VLAN ACL + VRF Странные парни VLAN ACL + IP2IP Тоже странные парни VPN + VRF + VLAN ACL VLAN ACL Серьезные парни Общие сервисы VRF + VLAN ACL
  • 14. Суть проблемы 14 А что, вообще, не так?
  • 15. 15 24 офиса 80 дата-центров ACL на цисках кончились Network Map не влезает в эксель Опять интеграции с партнерами Забыл, как мы делали это 4 года назад Веб опять хочет перенести хосты из стейджинга Надо прописать 1200 доступов на прод Сеть продолжает расти Опять купили компанию
  • 16. Проблемы 16 ➔ Геометрический рост цены для новых правил ➔ Отсутствие файрвола внутри сегментов ➔ Применение правил доступа занимает t ~ 1h ➔ Сложности с аудитом правил ➔ Низкий уровень контроля за инфраструктурой
  • 18. Решение? 18 Проблема Что можно сделать? Цена интеграций непрерывно растет Убрать человеческий фактор, автоматизировать предоставление доступа
  • 19. Решение? 19 Проблема Что можно сделать? Цена интеграций непрерывно растет Убрать человеческий фактор, автоматизировать предоставление доступа Новые правила применяются долго Ускорить применение правил, сделать его распределенным и параллельным
  • 20. Решение? 20 Проблема Что можно сделать? Цена интеграций непрерывно растет Убрать человеческий фактор, автоматизировать предоставление доступа Новые правила применяются долго Ускорить применение правил, сделать его распределенным и параллельным Отсутствие файрвола внутри сегментов Использовать файрвол на уровне хоста
  • 21. Решение? 21 Проблема Что можно сделать? Цена интеграций непрерывно растет Убрать человеческий фактор, автоматизировать предоставление доступа Новые правила применяются долго Ускорить применение правил, сделать его распределенным и параллельным Отсутствие файрвола внутри сегментов Использовать файрвол на уровне хоста Сложности с аудитом правил Хранить все правила в едином месте для обзора и управления
  • 22. Решение? 22 Проблема Что можно сделать? Цена интеграций непрерывно растет Убрать человеческий фактор, автоматизировать предоставление доступа Новые правила применяются долго Ускорить применение правил, сделать его распределенным и параллельным Отсутствие файрвола внутри сегментов Использовать файрвол на уровне хоста Сложности с аудитом правил Хранить все правила в едином месте для обзора и управления Низкий уровень контроля за инфраструктурой Провести инвентаризацию всех сервисов и доступов между ними
  • 26. Подход к решению 26 1. Соберем все сервисы, сети и пользователей 2. Сделаем на их основе правила iptables 3. Автоматизируем контроль 4. …. 5. PROFIT
  • 27. 27 Почему Consul? ➔ Не теряет данные ➔ Peer 2 Peer связи ускоряют распространение изменений ➔ Можно масштабировать через федерацию ➔ Удобное REST API ➔ Может быть как хранилищем (KV), так и каталогом (Service Discovery) ➔ Написан на golang, который входит в стек Wargaming ➔ Мощная система ACL
  • 28. 28 Почему не Consul? ➔ Не масштабируется в рамках дата-центра ➔ Очень зависим от качества сети ➔ Очень зависим от загрузки серверов ➔ Сложности с мониторингом доступности
  • 29. Но всё равно — Consul 29 мастер- кластер сервер мастер- кластер кластер региона сервер сервер кластер региона мастер- кластер сервер кластер региона сервер сервер сервер сервер кластер региона сервер кластер регионакластер региона сервер
  • 37. 37
  • 38. Немного фактов (1/10) 38 1. Consul-сервера выбирают мастера из числа голосующих 2. Если мастер не выбран — запросы не обслуживаются никем 3. Если мастер выбран — все запросы идут к нему 4. Если запрос идет в другой дата-центр — он идет от мастера к мастеру 5. Выбранный мастер получает 100% нагрузки 6. Но копия данных есть у всех серверов дата-центра 7. Единственный способ масштабирования — включить stale-режим на клиенте 8. В stale отвечать можно даже без кворума
  • 39. Немного фактов (10/10) 39 9. Consul не копирует данные между дата-центрами 10. Атомарность операций не гарантируется вне транзакции 11. Зависание мастера не приводит к перевыборам 12. Блокирующие операции не гарантируют блокировку 13. ACL не гарантирует доступа [во многих случаях] 14. Один зависший мастер в федерации со временем повесит всю федерацию 15. Consul Enterprise лишен некоторых недостатков выше, но стоит очень много 16. rm -rf /var/lib/consul — лекарство от всех болезней агента
  • 40. Ради этой секции вы страдали ?? минут BEFW 40
  • 42. BEFW — шаблон правил 42 ➔ -N BEFW ➔ -P INPUT DROP ➔ -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ➔ -A INPUT -i lo -j ACCEPT ➔ -A INPUT -j BEFW
  • 43. BEFW — сервисы 43 Service Name=SSH Node=@self Port=22 Tags=[befw, tcp, ...] -A BEFW -p tcp --dport 22 -j ACCEPT
  • 44. BEFW — клиенты 44 KV Service=SSH Port=22 Protocol=TCP Client=10.0.0.0/8 Valid before=08.11.2019 16:00 BEFW SSH_TCP_22 10.0.0.0/8 1573218000
  • 45. BEFW — доступы 45 -A BEFW -p tcp --dport 22 -s 10.0.0.0/8 -j ACCEPT Service Name=SSH Node=@self Port=22 Tags=[befw, tcp, ...] KV Service=SSH Port=22 Protocol=TCP Client=10.0.0.0/8 Valid before=08.11.2019 16:00
  • 46. 46
  • 47. BEFW — группы (1/2) 47 BEFW $ALIAS$ $OFFICES$ 10.125.0.0/24 1573218000 10.127.0.0/24 1573218000 10.130.0.0/24 1573218000 192.168.0.0/22 1573218000 172.20.6.0/24 1573218000 88.31.7.244/32 1573218000 KV Alias Name=$OFFICES$ AddressList=[....]
  • 48. BEFW — группы (2/2) 48 KV Alias Name=$OFFICES$ AddressList=[....] -A BEFW -p tcp --dport 22 -s 10.125.0.0/24 -j ACCEPT -A BEFW -p tcp --dport 22 -s …. -j ACCEPT KV Service=SSH Port=22 Protocol=TCP Client=$OFFICES$ Valid before=08.11.2019 16:00
  • 49. BEFW — интеграция 49 puppet hiera puppetdb Service Name=SSH Node=@self Port=22 Tags=[befw, tcp, ...] KV Service=SSH Port=22 Protocol=TCP Client=$OFFICES$ Valid before=08.11.2019 16:00
  • 50. BEFW — оптимизация (1/4) Пустая цепочка 10000 адресов ????
  • 51. BEFW — оптимизация (2/4) Пустая цепочка 10000 адресов ???? 10000 адресов в ipset
  • 52. BEFW — оптимизация (3/4) Пустая цепочка 10000 адресов 10000 адресов в ipset
  • 53. BEFW — оптимизация (4/4) Service Name=SSH Node=@self Port=22 Tags=[befw, tcp, ...] -A BEFW -p tcp --dport 22 --set ssh_tcp_22 -j ACCEPT -A BEFW -p tcp --dport 22 -j DROP KV Service=SSH Port=22 Protocol=TCP Client=$OFFICES$ Valid before=08.11.2019 16:00 create ssh_tcp_22 hash:net add ssh_tcp_22 10.125.0.0/24 add ssh_tcp_22 10.127.0.0/24 add ssh_tcp_22 10.130.0.0/24 add ssh_tcp_22 172.20.6.0/24 add ssh_tcp_22 88.31.7.24/32
  • 54. Общая схема 54 p c puppet puppet+hiera user клиент сервиса 192.168.0.1 service какой-то сервис ssh, tcp/22 consul consul-кластер host хост, который запускает сервис xakep нелегитимный клиент сервиса 192.168.0.2 h -A BEFW -p tcp --dport 22 -m set --set ssh_tcp_22 -j ACCEPT ipset add ssh_tcp_22 192.168.0.1 u s p x
  • 55. BEFW — allow & deny 55 -A BEFW -m set --set rules_deny src -j DROP -A BEFW -m set --set rules_allow src -j ACCEPT BEFW $IPSET$ rules_allow rules_deny
  • 56. 56
  • 57. BEFW — другие сеты 57 -A BEFW -m set --set test src -j DROP -A BEFW -m set --set test2 src -j ACCEPT /etc/befw.conf set.test=DROP set.test2=ACCEPT set.test3=NOOP ipset create test3 hash:net
  • 58. BEFW — пользователи 58 RADIUS BEFW $ALIAS$ $USERNAME$ add 10.125.0.100 now()+dhcp lease 802.1X/WPA-EAP/VPN KV Service=SSH Port=22 Protocol=TCP Client=$USERNAME$ Valid before=08.11.2019 16:00
  • 59. BEFW — изоляция 59 BEFW $ALIAS$ $BACKEND$ $STAGINGS$ $3PD$ $CLOUD$ ... BEFW $IPSET$ rules_deny $STAGINGS$ 2573218000 $3PD$ 2573218000 Вроде норм парни Не очень плохие парни backend ( be ) Хорошие парни staging ( stg ) partners (3pd)
  • 60. BEFW — контроль целостности Контролируются: ➔ ipset из сервисов и списка в befw.conf ➔ правила сервисов в цепочке BEFW Не контролируются: ➔ другие цепочки и правила ➔ другие ipset При обнаружении изменений: ➔ flush ➔ restore ➔ save ➔ log
  • 61. BEFW — защита от аварий 61 consul доступен? удалось получить правила? state.bin есть старый state.bin? allow 10.0.0.0/8* сохранить состояние загрузить состояние
  • 62. Подводные камни - Петька, знаешь, что такое “нюанс”? 62
  • 63. ipset add set 0.0.0.0/0 Ожидание 63 ➔ Откроем доступ из Интернета Реальность
  • 64. ipset add set 0.0.0.0/0 Ожидание 64 ➔ Откроем доступ из Интернета Реальность ➔ RedHat Bugzilla #1297092 ➔ Не работает с 2016 года ➔ Стоимость: 2 часа даунтайма ➔ Как нашли: репорт от разработчика ➔ Решение: 0.0.0.0/0 → 0.0.0.0/1 + 128.0.0.0/1
  • 65. ipset restore set < file Ожидание 65 ➔ Восстановит содержимое из файла Реальность
  • 66. ipset restore set < file Ожидание 66 ➔ Восстановит содержимое из файла Реальность ➔ Восстановит отсутствующие записи, не удаляя лишнее ➔ Стоимость: 0 ( и фейспалм ) ➔ Как нашли: при тестировании изоляции ➔ Решение: добавить flush
  • 67. consul kv get -datacenter=other Ожидание 67 ➔ Получить данные из другого ДЦ или ошибку Реальность
  • 68. consul kv get -datacenter=other Ожидание 68 ➔ Получить данные из другого ДЦ или ошибку Реальность ➔ И клиент, и сервер зависли ➔ Стоимость: 999 часов боли ➔ Как нашли: как только сделали большой кластер ➔ Решение: в процессе, готовимся патчить консул
  • 69. consul leader не отвечает Ожидание 69 ➔ consul info покажет ошибку ➔ другие сервера выберут нового лидера Реальность
  • 70. consul leader не отвечает Ожидание 70 ➔ consul info покажет ошибку ➔ другие сервера выберут нового лидера Реальность ➔ consul info покажет, что все ок ➔ другие сервера тоже ничего не заметят ➔ Стоимость: 99999 часов боли ➔ Как нашли: как только сделали большой кластер ➔ Решение: service consul restart каждый час
  • 71. Заключение 71 Ну, вообще-то, его можно и не делать, но правила конференции обязывают суммировать всё рассказанное, хотя я лично и не вижу в этом смысла
  • 73. 73 Стоимость Разработка 1 человек, ~400 ч/ч Поддержка 4 человека, около 10 ч/ч в месяц на всех
  • 74. Планы 74 Скоро: ➔ Реализация fail2ban на befw ➔ Интеграция с новыми источниками данных ➔ Расширенный мониторинг ➔ Поддержка nftables и rhel 8 ➔ Поддержка SELinux Постоянно: ➔ Расширение конфигурации ➔ Больше метрик ➔ Больше оптимизации Не скоро: ➔ Альтернативный транспорт (не consul) ➔ Поиск аномалий в трафике Управление картой сети ➔ Поддержка Kubernetes ➔ Сборка пакетов под все системы ➔ Web-UI
  • 75. Призыв к оружию 75 Зачем я сюда приехал на самом деле
  • 76. $ git clone $ git commit $ git push $ git blame Join github.com/wgnet/befw ТУТ МОГ БЫ БЫТЬ ТВОЙ PULL REQUEST