# **Защита периметра с помощью межсетевого экрана**
###### tags: `Межсетевые экраны`
***В данной работе будет показано использования двух межсетевых экранов в рамках защиты периметра сети. Для выполнения данной работы необходимо подготовить следующий стенд (в данной инструкции использовался EVE-NG).***
* Межсетевой экран (готовое решение PfSense)
* Межсетевой экран (создадим на базе Debian)
* Свичи для имитации DMZ и LAN (cisco в примере)
* Машина в DMZ (в примере kali для возможности конфигурировать PfSense) + имитация веб-сервера
* Несколько рабочих машин в различных VLAN (для возможности настройки доступа через iptables)
****В результате у вас должен быть следующий стенд.

*Итак, начнем!*
1. Для начала собираем данную инфраструктуру в единое целое (обязательно обращаем внимание на e0 и e1 интерфейсов, также, сеть можно указывать любую, у меня используется те, что на скриншоте). После того, как наша инфраструктура собрана заходим на pfsense для настройки интерфейса LAN зоны. Для этого выбираем следующие пункты:
> Вначале выбираем **2**
> Далее, снова **2**
> На запрос сетевого адреса LAN, указываем адрес из выбранной вами сети, у меня это **192.168.20.254** (для удобства указываем последний адрес подсети)
> Маску указываем **24**
> На вопрос про gateway просто нажимаем **Enter**
> DHCP - n
> HTTP - n
> На этом настройка завершена, наша будующая DMZ сеть настроена.
> 
2. Далее, заходим на нашу машину Debian, которая будет являться нашим вторым межсетвым экраном, на ней нам также нужно настроить адресацию, а также превратить ее в DHCP сервер для машин расположенных в данной LAN зоне (будем использовать dnsmasq). Заходим на нее(для удобства определения по имени сразу рекомендую поправить файл hosts и hostname, затем перезагрузить) и настраиваем сеть, как мы уже это делали ранее через команду nano /etc/network/interfaces. Пример конечной настройки на скриншоте.

Статический адрес можно выбрать любой. На скриншоте ens3 это интерфейс смотрящий в DMZ, а ens4 в LAN зону. Также, необходимо поправить файлик **/etc/resolve.conf** там необходимо ns на **8.8.8.8**. После этого сохраняем и выходим, затем перезагружаем машину.
После этого, машина должна иметь доступ в интернет.
Обновляем полностью данную машину командой - **apt update && apt upgrade**
3. Теперь, настроим машину kali linux внутри DMZ. Заходим на неё и аналогично как на машине Debian настраиваем сеть и dns. С помощью команды **nano /etc/network/interfaces** и указываем статический ip, можно указать любой из данной подсети.

После, с помощью команды **nano /etc/resolv.conf** необходимо поправить ns на **8.8.8.8**
Затем, перезагружаем машину.
4. Настройка dnsmasq
Переходим к нашему фаерволлу Debian. В консоль вводим следующие команды для настройки dnsmasq:
> **apt install dnsmasq**
Устанавливаем утилиту dnsmasq
**nano /etc/dnsmasq.conf**
Переходим в конфигурационный файл.
В конец файла вводим параметры для DHCP сервера:
**interface=ens4
dhcp-range=192.168.50.20,192.168.50.100,24h
dhpc-option=3,192.168.50.254
dhcp-option=6,8.8.8.8**

где, опции 3 - шлюз по-умолчанию, а 6 - DNS, которые будет раздавать сервер на машины, которые подключаються к интерфейсу ens4.
После, сохраняем конфиг и выходим. Перезагружаем службу dnsmasq - **systemctl restart dnsmasq**
Также, необходимо разрешить нашему Debian файерволлу роутить трафик. Для этого выполняем следующую команду - **nano /etc/sysctl.conf** и внутри исправляем раскомментируем строчку **net.ipv4.ip_forward=1**, а затем применяем настройки **sysctl -p**
Для проверки зайдем на машину Windows 7, она должна получить настройки по DHCP.

5. Настройка pfSense
Для того, чтобы мы могли из LAN сети выходить в инет, нужно настроить pfsense. Запускаем kali в DMZ и заходим в консоль управления pfsense через браузер (у меня это 192.168.20.254). После входа на pfsense переходим во вкладку **System > Routing > Gateways** и там создаем новый Gateway кнопкой **Add**.
В параметрах нового Gateway указываем имя (любое у меня LAN_GW), интерфейс(должен быть LAN), Gateway (ip адрес интерфейса Debian, смотрящий в сторону сети 192.168.20.0/24, у меня это **192.168.20.1**)

После, нажимаем Save и применяем настройки.
Теперь, нам необходимо прописать статический маршрут в нашу LAN сеть, для этого переходим по пути **System > Routing > Static Routes** и там также нажимаем **Add** для создания нового маршрута. Указываем только что созданный gateway и адрес сети LAN.

Также, выключаем последние две галочки по пути **Interfaces > WAN**

Для того, чтобы LAN зона могла выходить в инет через pfsense, необходимо прописать разрешения нужной нам сети. Настроим данный момент. Заходим в **Interfaces > LAN** и переименовываем LAN в DMZ для удобства.
Для разрешения нужной нам сети воспользуемся так называемыми алиасами, которые есть в pfsense, они позволяют создавать отдельные ns для определенного пула адресов и затем применять к ним определенные правила. Переходим по пути **Firewall > Aliases > IP** и добавляем сеть. Я добавляю нужную мне сеть (на скриншоте), вам необходимо добавить свою (также обратите внимания на все параметры, необходимо выставить как на скриншоте).

Сохранияем и применяем настройки.
Теперь нужно добавить разрешающее правило для обеспечения доступности LAN сети. Переходим **Firewall > Rules > DMZ**
выбираем разрешающее правило DMZ net и копируем его. Выставляем параметры как на скриншоте (указываем наш созданный алиас в нужной графе). Сохраняем и применяем настройки.

После этого, с Windows7 машины должен появиться доступ в интернет.
6. Добавление машин, распределение их по VLAN, настройка VLAN и настройка pfsense.
Добавляем несколько машин Debian, они будут необходимы далее. Затем заходим на cisco и настраиваем VLAN (как настроено у меня можно посмотреть на скриншоте - дубликат первого скрина)
, настройку VLAN отдельно расписывать не буду, для настройки VLAN обратитесь ко 2 пункту инструкции по ссылке: https://hackmd.io/eMyez9UlSzm0JzhhyulHnA
После того, как мы настроили VLAN, настроим наш файерволл(DHCP) для возможности работы с нашими VLAN. Выполняем следующие команды:
> **nano /etc/network/interfaces**
Добавляем в конфиг наши VLAN, конечный конфиг и адресация у меня выглядит вот так (можно использовать любую адресацию):

Выходим с сохранением.
> **nano /etc/dnsmasq**
Аналогично добавляем наши VLAN в конфиг dnsmasq.

И также, выходим с сохранением.
Перезапускаем сетевую службу и службу dnsmasq:
> **systemctl restart networking**
> **systemctl restart dnsmasq**
После всех настроек машины с VLAN должны получить адрес и другие соответствующие параметры.
7. Настройка определенных доступов через межсетевые экраны
Определим конкретные правила доступа для некоторых машин в сети LAN и DMZ. На скриншоте представлены правила, которые должны быть обеспечены:

Итак, для обеспечения первого правила воспользуемся pfsense. Заходим на него через kali(DMZ), логин и пароль - admin:pfsense. Переходим по пути **Interfaces > NAT** попадаем во вкладку **PortForwarding**. Тут нам необходимо пробросить порт внутрь, выбираем соответствующую кнопку **Add**(та, что со стрелкой вниз, то есть внутрь). Параметры указываем как на скриншоте (адрес машины, ваша kali).

Сохраняем, применяем настройки. 80 порт проброшен.
Все остальные правила, относяться к Debian файерволлу. Переходим к нему. Для всех правил будем использовать утилиту **iptables**. Ссылки для использования iptables:
https://selectel.ru/blog/setup-iptables-linux/
https://losst.ru/nastrojka-iptables-dlya-chajnikov
https://1cloud.ru/help/linux/nastrojka_linus-firewall_iptables
Чтобы удобно было конфигурировать сервер, пропишем правила для возможности с kali подключиться к debian файерволлу.
> **iptable -A INPUT --source 192.168.20.10 -p tcp --dport 22 -j ACCEPT**
> **iptable -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT**
> **iptables -A INPUT -i ens3 -j DROP**
Первое правило позволяет непосредственно подключаться по 22 порту, второе позволяет удерживать соединение и обмениваться пакетами, третье блокировать все остальные попытки обратиться на данный интерфейс. **!!!ОБРАТИТЕ ВНИМАНИЕ, ЧТО ПРИОРИТЕТ ПО ЦЕПОЧКЕ ИДЕТ ОТ ПЕРВОГО ПРАВИЛА К ПОСЛЕДНЕМУ.**
Для просмотра правил рекомендуеться использовать команду: **iptables --line-numbers -L -v -n**
Далее, установим утилиту для сохранения правил:
**apt install iptables-persistent**
Для примера, добавим необходимые правила и сохраним их с помощью установленной утилиты:
> **iptable -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT**
> **iptables -A FORWARD -i ens3 -j DROP**
И сохраняем командой:
**service netfilter-persistent save**
Теперь после перезагрузки или сбоя данные команды сохраняться.
Теперь, непосредственно приступим к правилам со скриншота. Покажу сразу конечный результат, который получился у меня, а затем перечень команд, которые я использовал. Скриншот с правилами у меня:

Кроме того, для того, чтобы был доступ во WAN из VLAN, я прописал правило:
**iptables -t nat -A POSTROUTING -o ens3 MASQUERADE**
В остальных правилах, я использовал иногда вместо -A (добавить правило в конец) ключ -I (добавление в указанное место, указывать место цифрой). Итак, правила я использовал такие:
**iptables -I FORWARD 1 - i ens3 --src 192.168.20.0.24 --dst 192.168.51.54 -p tcp --dport 22 -j ACCEPT**
Для правила из DMZ к DEB1 по 22 порту.
**iptables -I FORWARD 1 - i ens4 --dst 192.168.51.54 -p tcp --dport 22 -j ACCEPT**
**iptables -I FORWARD 1 - i ens4.10 --dst 192.168.51.54 -p tcp --dport 22 -j ACCEPT**
**iptables -I FORWARD 1 - i ens4.20 --dst 192.168.51.54 -p tcp --dport 22 -j ACCEPT**
Для правила из VLAN к DEB1 по 22 порту.
**iptables -A FORWARD -j DROP**
Запрещаем любой доступ кроме разрешенного(добавляем в конец).
**iptables -I FORWARD 1 -o ens3 -j ACCEPT**
Разрешаем весь трафик выходящий из ens3, для доступа в DMZ и WAN.
**iptables -I FORWARD 2 - i ens4 --dst 192.168.51.54 -p tcp --dport 80 -j ACCEPT**
**iptables -I FORWARD 2 - i ens4.10 --dst 192.168.51.54 -p tcp --dport 80 -j ACCEPT**
**iptables -I FORWARD 2 - i ens4.20 --dst 192.168.51.54 -p tcp --dport 80 -j ACCEPT**
Разрешаем доступ по http из VLAN к DEB1.
Более правил я не добавлял, функционал по таскам реализован.
Не забываем сохранить - **service netfilter-persistent save**