# Практическая работа №1. Межсетевые экраны iptables и pfSense.
###### tags: `2 сем`
---

---
## Задание к практической работе:
- [ ] Импортировать шаблон практической работы в систему EVE-NG и настроить оборудование в соответсвии со схемой сети
[2_sem_topol.zip](https://disk.yandex.ru/d/YagkVH5NOzgjSw)
- [ ] Настроить NAT на M-R-1
- [ ] Настроить динамическую маршрутизацию между роутерами для прохождения трафика, а также выхода в интернет каждого межсетевого устройства в сети
- [ ] Настроить межсетевые экраны Linux FW (используя iptables)
- [ ] Настроить межсетевые экраны pfSense FW (используя Web интерфейс pfSense Firewall)
---
При описании примеров настроек используются комментарии "//". Данную часть НЕ НУЖНО переписывать/копировать при настройке обственных практик. В комментариях либо кратко описывается смысл/принцип данной строчки конфига, либо поясняется, на каких именно устройствах нужно применять данный конфиг. Пример:
```
[admin@M-R-1] > ip dhcp-client rem 0 // для устройств C-R-3, C-R-4
```
> З.ы: если комментария нет, то "это база"
>
---
## WAN
- M-Router
- C-Router
Данный раздел представляет описание настройки "промежуточной" сети, имитирующей глобальный интернет. В настройку WAN входит базовая настройка Cisco/Mikrotik-роутеров: динамическая маршрутизация по протоколу OSPF и PNAT для выхода в интернет.
### Настройка mirkotik-роутеров на примере M-R-1
1) Меняем название устройства
```
[admin@MikroTik] > sys id set name=M-R-1
```
2) Настраиваем ip-адреса на всех интерфейсах
```
[admin@M-R-1] > ip add add add=10.0.10.2/24 interface=ether3
[admin@M-R-1] > ip add add add=10.0.20.2/24 interface=ether2
[admin@M-R-1] > ip dhcp-client rem 0 // для M-R-3, M-R-4
```
3) На данном роутере ether1 получает ip-add по dhcp, поэтому желательно проверить, тот ли интерфейс является dhcp-client
```
[admin@M-R-1] > ip dhcp-client exp // для M-R-1
/ip dhcp-client
add disabled=no interface=ether1
```
4) Настраиваем OSPF
```
[admin@M-R-1] > interface bridge add name=loopback
[admin@M-R-1] > ip add add add=3.255.255.3/32 interface=loopback
[admin@M-R-1] > routing ospf instance set 0 router-id=3.255.255.3
[admin@M-R-1] > routing ospf network add network=10.0.10.0/30 area=backbone
[admin@M-R-1] > routing ospf network add network=10.0.20.0/30 area=backbone
```
5) На данном роутере будет прямой выход в интернет, следовательно нужно раздать путь до него всей сети роутеров (адрес gateway можно узнать либо прописав `/tool traceroute 8.8.8.8`)
```
[admin@M-R-1] > ip route add dst-address=0.0.0.0/0 gateway=192.168.65.2 // для M-R-1
[admin@M-R-1] > routing ospf instance set 0 distribute-default=always-as-type-1 // для M-R-1
```
6) Настройка NAT для выхода в интернет других устройств
```
[admin@M-R-1] /ip firewall nat> add chain=srcnat out-interface=ether1 action=masquerade // для M-R-1
```
---
### Настройка Cisco-роутеров на примере C-R-3:
1) Меняем название устройства
```
Router(config)#hostname C-R-3
```
2) Настраиваем ip-адреса на всех интерфейсах
```
C-R-3(config)#int e0/0
C-R-3(config-if)#no sh
C-R-3(config-if)#ip add 10.0.10.1 255.255.255.252
C-R-3(config)#int e0/1
C-R-3(config-if)#no sh
C-R-3(config-if)#ip add 10.10.30.2 255.255.255.252
C-R-3(config)#int e0/2
C-R-3(config-if)#no sh
C-R-3(config-if)#ip add 10.10.10.2 255.255.255.252
```
3) Настраиваем OSPF
```
C-R-3(config)#router ospf 1
C-R-3(config-router)#network 10.0.10.0 0.0.0.3 area 0
C-R-3(config-router)#network 10.10.10.0 0.0.0.3 area 0
C-R-3(config-router)#network 10.10.30.0 0.0.0.3 area 0
C-R-3(config-router)#do wr
```
---
## LANv1
Данный раздел описывает первый вариант настройки локальной сети LANv1, который подходит для сетей 172.16.2.0/24 и 172.16.4.0/24. Здесь будет представлена более простая конфигурация локальной сети (по сравнению с LANv2), которая будет состоять из следующих подразделов
- Switch (без использования vlan)
- Kali-pc (статическая адресация)
- Debian-pc (статическая адресация)
### Настройка Switch на примере SW-2
1) Меняем название устройства
```
Switch(config)# hostname SW-2
SW-2(config)# do wr
```
> Для работы локальной сети без использования vlan данной настройки достаточно
---
### Настройка Kali-pc на примере Kali-2
> (user/eve@123)
1. Изменяем файл сетевых настроек командой `nano /etc/network/interfaces`, дописывая ip-адрес, маску и дефолтный шлюз
```
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 172.16.2.10
netmask 255.255.255.0
gateway 172.16.2.254
```
2. Указываем адрес DNS-сервера командой `nano /etc/resolv.conf` путем записи в конце файла еще одного сервера
```
nameserver 8.8.8.8
```
3. Перезагружаем машинку, чтобы все изменения в сетевых настройках начали работать: в терминале вводим команду `reboot`
---
### Настройка Debian-pc на примере Debian-20
> (root/eve@123)
1. Изменяем файл сетевых настроек командой `nano /etc/network/interfaces`, дописывая ip-адрес, маску и дефолтный шлюз
```
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto ens3
allow-hotplug ens3
iface ens3 inet static
address 172.16.2.20
netmask 255.255.255.0
gateway 172.16.2.254
```
2. Указываем адрес DNS-сервера командой `nano /etc/resolv.conf` путем записи в конце файла еще одного сервера
```
nameserver 8.8.8.8
```
3. Перезагружаем машинку, чтобы все изменения в сетевых настройках начали работать: в терминале вводим команду `reboot`
---
## FWv1
Данный раздел описывает первый вариант настройки FW, которая будет состоять из следующих разделов
- базовая настройка
- обновление системы
- iptables
### Настройка FW-linux-2
> (root / eve@123)
1. Изменяем файл сетевых настроек командой `nano /etc/network/interfaces`, дописывая статические адреса, маски и дефолтный шлюз.
```
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto ens3
allow-hotplug ens3
iface ens3 inet static
address 192.168.2.1
netmask 255.255.255.0
gateway 192.168.2.2
auto ens4
allow-hotplug ens4
iface ens4 inet static
address 172.16.2.254
netmask 255.255.255.0
```
2. Указываем адрес DNS-сервера командой `nano /etc/resolv.conf` путем записи в конце файла еще одного сервера
```
nameserver 8.8.8.8
```
3. Перезагружаем машинку, чтобы все изменения в сетевых настройках начали работать: в терминале вводим команду `reboot`
> На данном этапе у машинки есть все необходимые настройки для выхода в интернет и обновления системы. Это нужно для корректной работы вспомогательных утилит
4. Обновляем машинку следующими командами
```
root@Debian-10:~$ apt update
...
root@Debian-10:~$ apt upgrade
...
```
5. Переводим систему в режим фильтрации пакетов путем ввода команды `nano /etc/sysctl.conf` и раскомментированием строки `net.ipv4.ip_forward=1` в данном файле. Затем в терминале вводим следующую команду
```
root@Debian-10:~ sysctl -p
```
6. Подготавливаем дополнительные ip-адреса на внешнем интерфейсе FW, на которые будут заменяться локальные адреса. Для этого изменяем файл сетевых настроек командой `nano /etc/network/interfaces`, дописывая три вспомогательных ip-адреса
```
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto ens3
allow-hotplug ens3
iface ens3 inet static
address 192.168.2.1
netmask 255.255.255.0
gateway 192.168.2.2
auto ens3:1
iface ens3:1 inet static
address 192.168.2.10
netmask 255.255.255.0
auto ens3:2
iface ens3:2 inet static
address 192.168.2.20
netmask 255.255.255.0
auto ens3:3
iface ens3:3 inet static
address 192.168.2.30
netmask 255.255.255.0
auto ens4
allow-hotplug ens4
iface ens4 inet static
address 172.16.2.254
netmask 255.255.255.0
```
7. Настраиваем SNAT через iptables. Для этого задаем три правила
```
iptables -t nat -A POSTROUTING -o ens3 -s 172.16.2.10 -j SNAT --to-source 192.168.2.10
iptables -t nat -A POSTROUTING -o ens3 -s 172.16.2.20 -j SNAT --to-source 192.168.2.20
iptables -t nat -A POSTROUTING -o ens3 -s 172.16.2.30 -j SNAT --to-source 192.168.2.30
```
8. Сохраняем данный конфиг при помощи утилиты iptables-persistent. Для этого устанавливаем ее командой `apt install iptables-persistent`. Затем записываем существующий конфиг правил iptables в специальный файл командой `iptables-save > /etc/iptables/rules.v4`. После этого запускаем сервис командой `systemctl enable netfilter-persistent.service` для автоматического считывания правил и их применения в iptables. Таким образом, при перезагрузке FW правила, которые были записаны в архиве `/etc/iptables/rules.v4`
---
## LANv2
Данный раздел описывает второй вариант настройки локальной сети LANv2, который подходит для сетей 172.16.1.0/24 и 172.16.3.0/24. Здесь будет представлена более сложная конфигурация локальной сети (по сравнению с LANv1), которая будет состоять из следующих подразделов
- Switch
- Kali-pc
- Debian-pc
### Настройка свитчей на примере SW-1
1) Производим базовую настройку SW-1
```
Switch(config)# hostname SW-1
SW-1(config)# int e0/0
SW-1(config-if)# switchport trunk encapsulation dot1q
SW-1(config-if)# switchport mode trunk
SW-1(config)# int e0/2
SW-1(config-if)# switchport mode access
SW-1(config-if)# switchport access vlan 10
SW-1(config)# int e0/3
SW-1(config-if)# switchport mode access
SW-1(config-if)# switchport access vlan 11
SW-1(config-if)# do wr
```
---
### Настройка Kali-pc на примере kali-1
> (user/eve@123)
1. Получение машинкой сетевых настроек будет проходить по DHCP, для этого заходим в файл командой `nano /etc/network/interfaces` и редактируем его
```
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
```
2. Перезагружаем машинку, чтобы все изменения в сетевых настройках начали работать: в терминале вводим команду `reboot`
---
### Настройка Debian-pc на примере Debian-10
> (root/eve@123)
1. Получение машинкой сетевых настроек будет проходить по DHCP, для этого заходим в файл командой `nano /etc/network/interfaces` и редактируем его
```
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto ens3
allow-hotplug ens3
iface ens3 inet dhcp
```
2. Перезагружаем машинку, чтобы все изменения в сетевых настройках начали работать: в терминале вводим команду `reboot`
---
## FWv2
- настройка
- обновление системы
- iptables
### Настройка iptables на Debian на примере FW-linux-1
> (root / eve@123)
1. Изначально проводим конфигурацию файла сетевых настроек командой `nano /etc/network/interfaces`. В данной файле изменяем конфиги существующих интерфейсов: ens3 - WAN-inteface, ens4 - LAN-interface.
```
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto ens3
allow-hotplug ens3
iface ens3 inet static
address 192.168.1.1
netmask 255.255.255.0
gateway 192.168.1.2
auto ens4
allow-hotplug ens4
iface ens4 inet static
address 172.16.1.254
netmask 255.255.255.0
```
2. Следующая конфигурация файла сетевых настроек нужна для того, чтобы у данного FW был доступ до DNS-сервера, поэтому добавляем его командой `nano /etc/resolv.conf` в конец файла
```
nameserver 8.8.8.8
```
3. Переводим систему в режим фильтрации пакетов путем ввода команды `nano /etc/sysctl.conf` и раскомментированием строки `net.ipv4.ip_forward=1` в данном файле. Затем в терминале вводим следующую команду `sysctl -p` и перезагружаем машинку, чтобы все изменения в сетевых настройках начали работать: в терминале вводим команду `reboot`
4. На данном этапе FW нужно обновить для корректной работы утилит, нужных для настройки VLAN, DHCP-srv и iptables, поэтому обновляем систему с помощью следующих команд
```
root@Debian-10:~$ apt update
...
root@Debian-10:~$ apt upgrade
...
```
5. Настраиваем vlan на FW, для этого скачиваем пакет настроек командой `apt install vlan`. Затем создаем два sub-интерфейса (ens4.10 для vlan 10 и ens4.11 для vlan 11) для работы с тегированным трафиком, записывая командой `nano /etc/network/interfaces` в конец файла следующие настройки
```
auto ens4.10
iface ens4.10 inet static
address 172.16.10.254
netmask 255.255.255.0
vlan_raw_device ens4
auto ens4.11
iface ens4.11 inet static
address 172.16.11.254
netmask 255.255.255.0
vlan_raw_device ens4
```
6. После создания вспомогательных интерфейсов нужно настроить DHCP-сервер, чтобы по этим интерфейсам FW раздавал ip и другие сетевые настройки устройствам в локальной сети. Для этого устанавливаем утилиту по настройке DHCP-сервера
```
apt install isc-dhcp-server
```
После этого в файле `nano /etc/default/isc-dhcp-server` изменяем конфиги:
```
DHCPDv4_CONF=/etc/dhcp/dhcpd.conf - раскомментить
DHCPDv4_PID=/var/run/dhcpd.pid - раскомментить
INTERFACESv4="ens ens4.10@ens4 ens4.11@ens4" - внутрь ковычек интерфейс для раздачи инфы по dhcp
```
Оставшаяся настройка будет проходить в файле `nano /etc/dhcp/dhcpd.conf`.
```
subnet 172.16.1.0 netmask 255.255.255.0 {
range 172.16.1.10 172.16.1.20;
option domain-name-servers 8.8.8.8;
option domain-name "local1";
option routers 172.16.1.254;
option broadcast-address 172.16.1.255;
default-lease-time 600;
max-lease-time 7200;
}
subnet 172.16.10.0 netmask 255.255.255.0 {
range 172.16.10.10 172.16.10.20;
option domain-name-servers 8.8.8.8;
option domain-name "local10";
option routers 172.16.10.254;
option broadcast-address 172.16.10.255;
default-lease-time 600;
max-lease-time 7200;
}
subnet 172.16.11.0 netmask 255.255.255.0 {
range 172.16.11.10 172.16.11.20;
option domain-name-servers 8.8.8.8;
option domain-name "local11";
option routers 172.16.11.254;
default-lease-time 600;
max-lease-time 7200;
}
```
Далее создаем файл для хранения базы dhcp `touch /var/db/dhcp.leases`, последним действием будет запуск демона командой `/usr/local/sbin/dhcpd -q -lf /var/db/dhcp.leases -cf /etc/dhcpd.conf`. Для автозапуска данного сервиса (чтобы он начинал работать при включении машинки) нужно прописать `systemctl enable isc-dhcp-server`.
> И не забудьте изменить файл `nano /etc/init.d/isc-dhcp-server`:
Было
`start-stop-daemon --start --pidfile $PIDFILE --exec /usr/sbin/dhcpd -- $VERSION -cf $CONF $INTERFACES`
Стало
`start-stop-daemon --start --quiet --pidfile $PIDFILE --exec /bin/bash -- -c "/usr/sbin/dhcpd -lf /var/lib/dhcp/$NAME.leases -cf $CONF > /tmp/dhcp.log 2>&1"`
6. Настраиваем PNAT через iptables. Для этого задаем правило
```
iptables -t nat -A POSTROUTING -j MASQUERADE
```
7. Сохраняем данный конфиг при помощи утилиты iptables-persistent. Для этого устанавливаем ее командой `apt install iptables-persistent`. Затем записываем существующий конфиг правил iptables в специальный файл командой `iptables-save > /etc/iptables/rules.v4`. После этого запускаем сервис командой `systemctl enable netfilter-persistent.service` для автоматического считывания правил и их применения в iptables. Таким образом, при перезагрузке FW правила, которые были записаны в архиве `/etc/iptables/rules.v4`
---
### Настройка pfSense-FW-4
1) Назначение интерфейсов - Assign Interfaces
Assign Interfaces -> VLANs set up (no) -> WAN interface (em0) -> LAN interface (em1) -> vse norm (yes)
2) Назначение ip-адресов - Set Int IP address
Set interface(s) IP address -> number of the Int (1) -> DHCP? (no) -> enter new ip add (192.168.4.1) -> subnet/mask (24) -> gateway? (192.168.4.2) -> IPv6 DHCP? (no/no) -> http? (no, https)
Set interface(s) IP address -> number of the Int (2) -> enter the new ip address (172.16.4.254) -> subnet (24) -> gateway (no) -> IPv6? (no) -> DHCP? (no) -> http (no, https)
3) Web-настройка - https://172.16.4.254 (admin/pfsense)
Добавить ip через Firewall -> Virtual IPs -> add: type - Proxy ARP, int - WAN, add type - single add, address - 192.168.4.10/32
Добавить ip через Firewall -> Virtual IPs -> add: type - Proxy ARP, int - WAN, add type - single add, address - 192.168.4.20/32
Добавить ip через Firewall -> Virtual IPs -> add: type - Proxy ARP, int - WAN, add type - single add, address - 192.168.4.30/32
Выключаем действующий NAT через Firewall -> NAT -> Outbound -> Mode - Disable Outbound NAT
Создаем правила для NAT 1:1
NAT 1:1 -> add: int - WAN, external ip - 192.168.4.10, internal ip - 172.16.4.10 -> save
NAT 1:1 -> add: int - WAN, external ip - 192.168.4.20, internal ip - 172.16.4.20 -> save
NAT 1:1 -> add: int - WAN, external ip - 192.168.4.30, internal ip - 172.16.4.30 -> save
Добавить DNS-server через System general -> add DNS-srv 8.8.8.8
---
### Настройка pfSense-FW-3
1) Назначение интерфейсов - Assign Interfaces
Assign Interfaces -> VLANs set up (yes) -> parent interface for new VLAN (em1) -> VLAN tag (30) -> parent interface for new VLAN (em1) -> VLAN tag (31) -> finished -> WAN interface (em0) -> LAN interface (em1) -> Opt1 (em1.30) -> Opt2 (em1.31) -> vse norm (yes)
2) Назначение ip-адресов - Set Int IP address
Set interface(s) IP address -> number of the Int (1) -> DHCP? (no) -> enter new ip add (192.168.3.1) -> subnet/mask (24) -> gateway? (192.168.3.2) -> IPv6 DHCP? (no/no) -> http? (no, https)
Set interface(s) IP address -> number of the Int (2) -> enter the new ip address (172.16.3.254) -> subnet (24) -> gateway (no) -> IPv6? (no) -> DHCP? (yes) -> 172.16.3.10 - 172.16.3.20 -> http (no, https)
Set interface(s) IP address -> number of the Int (3) -> enter the new ip address (172.16.30.254) -> subnet (24) -> gateway (no) -> IPv6? (no) -> DHCP? (yes) -> 172.16.30.10 - 172.16.30.20 -> http (no, https)
Set interface(s) IP address -> number of the Int (4) -> enter the new ip address (172.16.31.254) -> subnet (24) -> gateway (no) -> IPv6? (no) -> DHCP? (yes) -> 172.16.31.10 - 172.16.31.20 -> http (no, https)
3) Web-настройка - https://172.16.3.254 (admin/pfsense)
Переименовать Opt1, Opt2, добавить им такое же правило на разрешение трафика из vlan_30 и vlan_31 куда угодно.
Добавить DNS-server через System -> General Setup - add DNS-srv 8.8.8.8
---
## Дополнительные материалы
Мини-курс по iptables ([1](https://interface31.ru/tech_it/2020/02/osnovy-iptables-dlya-nachinayushhih-chast-1.html),[2](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwiw_p3Qlcj3AhWVSvEDHeT8A_AQFnoECBIQAQ&url=https%3A%2F%2Finterface31.ru%2Ftech_it%2F2020%2F09%2Fosnovy-iptables-dlya-nachinayushhih-chast-2-tablica-filter.html&usg=AOvVaw3vdFH1VNWAZmfZGZgt_t7d),[3](https://interface31.ru/tech_it/2021/07/osnovy-iptables-dlya-nachinayushhih-chast-3-tablica-nat.html) и [4](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwiiib__mcj3AhUstYsKHUXdC4oQFnoECA4QAQ&url=https%3A%2F%2Finterface31.ru%2Ftech_it%2F2021%2F08%2Fosnovy-iptables-dlya-nachinayushhih-chast-4-tablica-nat-tipovye-scenarii-ispolzovaniya.html&usg=AOvVaw3AtvK2ymdoovXp09gdO5Jk) части)
[Сохранение конфигов](https://www.cyberciti.biz/faq/how-to-save-iptables-firewall-rules-permanently-on-linux/) в iptables
Мануал iptables на русском
Установка [dhcp-сервера](https://aeb-blog.ru/debian/ustanovka-dhcp-servera-v-debian-10/) на Debian
[Примеры настройки](https://wiki.debian.org/ru/NetworkConfiguration) сетевых сервисов на Debian