👩🦽 Настройка bridge на Debian , выполняющий роль межсетевого экрана |

👩🦽 Настройка bridge на Debian , выполняющий роль межсетевого экрана

Мануал

# Задача: хотим внедрить в своей сети мост (bridge) на Debian,

# выполняющий также задачи межсетевого экрана,

# т.е. получить возможность фильтрации трафика, не сильно меняя топологию

# и совсем не меняя адресацию в сети и шлюз по умолчанию.

# Желательно, чтобы мост-МЭ при этом вообще не имел IP-адресов

# на интерфейсах (обращенном наружу и смотрящему в защищаемую сеть)

# Администрировать его и смотреть на нем логи предлагается локально

# или путем подключения к выделенной сети администрирования

# Ставим его в сети так, чтобы одним интерфейсом моста он был

# подключен к провайдеру или другому уже имеющемуся шлюзу по умолчанию,

# а другой «смотрел» в защищаемую ЛВС, например в порт коммутатора

# Таким образом, приходящий извне трафик прежде чем попасть в защищаемую сеть

# будет всегда проходить через мост на котором мы его будем фильтровать

# с помощью iptables

Схема тестового стенда

# сначала приведем вариант,как НЕ надо,зато попробуем использовать

# командный интерфейс для Network Manager (nmcli) и посмотрим,

# почему всё-таки другой вариант предпочтительнее

# Смотрим, какие есть вообще на МЭ сетевые устройства

 nmcli dev show 

# Если есть проводные соединения для интерфейсов, например eth1 и eth3

# которые мы будем привязывать к мосту, то удаляем их

sudo nmcli con del "Wired connection 2"
sudo nmcli con del "Wired connection 4"

# Добавляем соединение типа bridge
# с именем интерфейса bridge0
# и именем соединения тоже bridge0:

sudo nmcli con add ifname bridge0 type bridge con-name bridge0

# Добавляем подчиненные (slave) соединения для интерфейсов, включаемых в мост

sudo nmcli con add type bridge-slave ifname eth1 master bridge0
sudo nmcli con add type bridge-slave ifname eth3 master bridge0

# Отключаем для моста поддержку spanning tree protocol

sudo nmcli con modify bridge0 bridge.stp no

# Смотрим, как выглядят поля свойств соединения bridge0, связанные с bridge

nmcli -f bridge con show bridge0

# Для проверки результата ещё раз смотрим все соединения

nmcli con show

# Получим что-то типа
# NAME UUID TYPE DEVICE
# bridge0 b38659f3-2863-43ea-a899-ea9c2b393827 bridge bridge0
# bridge-slave-eth1 01ff1133-67a0-497b-a909-56df91c3db1d ethernet eth1
# bridge-slave-eth3 741c03f6-7c73-442a-9c05-60c9372e06cf ethernet eth3
# Wired connection 6 7008b0d6-2589-30a4-99de-420c0879724d ethernet –

# Теперь загружаем модуль ядра br_netfilter

sudo modprobe br_netfilter

# Разрешаем ему фильтровать пакеты

sudo sysctl -w net.bridge.bridge-nf-call-iptables=1

# Стартуем соединение

sudo nmcli con up bridge0

# и тут нас ждёт засада — у моста появляется IP-адрес,
# так как по умолчанию для соединения, создаваемого через nmcli
# метод присвоения адреса ipv4.method – auto, т.е. мост получает адрес по DHCP,
# а нам нужен «невидимый» bridge-firewall
# Если задать для ipv4.method значение manual и не задать значение адреса,
# то nmcli ругается, что адрес не может быть пустым

# Поэтому если для вас факт наличия адреса не страшен,
# то можно оставить адрес, полученный по DHCP

# если хотите задать этот адрес и шлюз по умолчанию статически, то делаем так:

sudo nmcli con mod bridge0 ipv4.method manual
sudo nmcli con mod bridge0 ip4 192.168.2.5/24 gw4 192.168.2.6

# впоследствии можно изменить шлюз по умолчанию или сделать его пустым:
# sudo nmcli con mod bridge0 ipv4.gateway 0.0.0.0

# статические маршруты можем прописывать через ip route

sudo ip route add 192.168.110.0/24 dev bridge0

# но тогда вам придется позаботиться о том, чтобы они заново
# прописывались после перезагрузки, или тоже через nmcli,
# как именно, предлагаю разобраться самостоятельно

# проверим, что адрес присвоен правильно и мост работает,
# пропинговав кого-нибудь во внешней сети с компьютера в защищаемой сети

ping 1.1.1.1
# 64 bytes from 1.1.1.1: icmp_seq=1 ttl=128 time=0.441 ms
# 64 bytes from 1.1.1.1: icmp_seq=2 ttl=128 time=0.433 ms
# ...

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

sudo iptables -A FORWARD -m physdev --physdev-in eth3 --physdev-out eth1 \
--src 10.10.2.75 --dst 192.168.2.23 --proto tcp --dport 22 -j DROP

# где, –physdev-in eth3 это входной интерфейс eth3 моста,
# на котором у нас провайдер или шлюз по умолчанию
# –src 10.10.2.75 – IP адрес источника
# где, –physdev-out eth1 это интерфейс eth1 моста,
# на котором у нас порт коммутатора, в который в свою очередь
# включен защищаемый сервер SSH
# –dst 192.168.2.23 – IP адрес назначения,
# в данном случае защищаемого сервера SSH
# –proto tcp –dport 22 – протокол tcp, порт назначения 22
# -j DROP – действие, отбрасываем пакет без уведомления отправителя

# А теперь как надо, чтобы получить мост без IP-адреса:

# Удалим мост и slave соединения, созданные через Network Managercode

sudo nmcli con del bridge0
sudo nmcli conn del bridge-slave-eth3
sudo nmcli conn del bridge-slave-eth1

# Останавливаем Network Manager

sudo systemctl stop network-manager

# Как вариант, вообще его отключаем

sudo systemctl mask --now network-manager

# Мост создаем через bridge-utils

sudo brctl addbr br0
sudo brctl addif br0 eth1
sudo brctl addif br0 eth3

# Переводим интерфейсы в promisc mode и делаем их активными

sudo ifconfig eth1 0.0.0.0 promisc up
sudo ifconfig eth3 0.0.0.0 promisc up

# Загружаем модуль ядра br_netfilter

sudo modprobe br_netfilter

# Разрешаем ему фильтровать пакеты

sudo sysctl -w net.bridge.bridge-nf-call-iptables=1

# задаем правила для фильтрации с использованием -m physdev:

sudo iptables -A FORWARD -m physdev --physdev-in eth3 --physdev-out \
eth1 --src 10.10.2.75 --dst 192.168.2.23 --proto tcp --dport 22 -j DROP

# PROFIT!!111

# Дополнение:
# Для того, чтобы каждый раз после перезагрузки системы не настраивать интерфейс
# br0, настроим /etc/network/interfaces.
# Пример файла с настройками ниже.

# The loopback network interface

auto lo
iface lo inet loopback

iface eth1 inet manual

iface eth3 inet manual

# Bridge setup

auto br0
iface br0 inet static
bridge_ports eth1 eth3
address 0.0.0.0
bridge_stp off

# Обратите внимание, что для br0 задан адрес 0.0.0.0,
# что равносильно отсутствию адреса
# Если этого не сделать,то при попытке поднять интерфейс

sudo ifup br0

# Получим сообщения об ошибке вида

ifup: missing required variable: address
ifup: missing required configuration variables for interface br0/inet
ifup: failed to bring up br0

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий

  1. cryptoparty

    Если у Вас есть какие-либо дополнения или замечания, не стесняйтесь оставлять их тут! 🙂

    Ответить