diff --git a/lab4/README.md b/lab4/README.md
new file mode 100644
index 0000000..393316b
--- /dev/null
+++ b/lab4/README.md
@@ -0,0 +1,569 @@
+Сетевые адаптеры:
+
+Adapter 1: NAT
+
+для выхода в интернет (DNS, HTTP)
+
+Adapter 2: Internal Network
+
+имя: intnet
+для связи с VM2
+
+
+sudo vim /etc/netplan/01-netcfg.yaml
+
+network:
+ version: 2
+ ethernets:
+ enp0s3: # NAT
+ dhcp4: true
+ enp0s8: # internal
+ addresses: [192.168.100.1/24]
+
+network:
+ version: 2
+ ethernets:
+ enp0s3: # NAT
+ dhcp4: true
+ enp0s8: # internal
+ addresses: [192.168.100.2/24]
+
+
+sudo chmod 600 /etc/netplan/01-netcfg.yaml
+sudo netplan apply
+
+
+
+
+sudo iptables -F
+sudo iptables -X
+sudo iptables -t nat -F
+
+
+
+Ниже — учебная инструкция **только для настройки и проверки iptables**, без шагов про установку ОС, VirtualBox, netplan и утилит. Будем исходить из твоего текущего стенда:
+
+* `firewall-host` — защищаемый хост, IP `192.168.100.1`
+* `external-client` — внешний клиент, IP `192.168.100.2`
+* у обеих машин есть NAT-интерфейс `enp0s3`
+* внутренний интерфейс — `enp0s8`
+* SSH к обеим машинам у тебя уже работает через проброс портов VirtualBox на `127.0.0.1:40001` и `127.0.0.1:40002`
+
+Политика лабы: разрешить loopback, DNS, ping наружу, ping к защищаемому хосту только с одного IP, HTTP/HTTPS, а всё остальное запретить. Это прямо соответствует тексту задания.
+
+---
+
+# 2. Сначала разрешаем SSH, чтобы не отрезать себе доступ
+
+Так как ты подключаешься к `firewall-host` по SSH, нужно **до включения блокировки** разрешить входящие SSH-подключения.
+
+В твоём случае подключение приходит на саму Ubuntu-машину уже **после NAT VirtualBox**, то есть для Linux это обычный входящий TCP на порт `22`.
+
+Выполни на `firewall-host`:
+
+```bash
+sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
+```
+
+Пояснение:
+
+* `-A INPUT` — добавить правило в конец цепочки `INPUT`, которая обрабатывает пакеты, входящие на этот хост.
+* `-p tcp` — правило относится только к протоколу TCP.
+* `--dport 22` — порт назначения 22, то есть SSH-сервер.
+* `-j ACCEPT` — разрешить такой трафик.
+
+Теперь разрешим ответы сервера по уже установленному SSH-соединению:
+
+```bash
+sudo iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
+```
+
+Пояснение:
+
+* `-A OUTPUT` — добавить правило в цепочку `OUTPUT`, то есть для пакетов, исходящих с этого хоста.
+* `-p tcp` — правило касается TCP.
+* `--sport 22` — исходный порт 22; это ответы SSH-сервера клиенту.
+* `-j ACCEPT` — разрешить.
+
+Такой вариант рабочий, но в Linux обычно лучше использовать правило состояний соединений. Поэтому следующим шагом мы добавим его тоже.
+
+---
+
+# 3. Разрешаем уже установленные и связанные соединения
+
+Это одно из самых важных правил. Оно позволяет не расписывать вручную каждый ответный пакет.
+
+```bash
+sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+```
+
+Пояснение:
+
+* `-A INPUT` — правило для входящих пакетов.
+* `-m conntrack` — подключить модуль отслеживания состояний соединений.
+* `--ctstate ESTABLISHED,RELATED` — матчить пакеты:
+
+ * `ESTABLISHED` — относящиеся к уже установленному соединению;
+ * `RELATED` — связанные с уже существующим соединением.
+* `-j ACCEPT` — разрешить.
+
+И аналогично для исходящих:
+
+```bash
+sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+```
+
+Пояснение:
+
+* здесь то же самое, но для исходящих пакетов.
+
+Это правило особенно важно для:
+
+* SSH-сессии, в которой ты уже сидишь;
+* ответов от DNS-сервера;
+* ответов от HTTP/HTTPS-серверов;
+* ответов на ping.
+
+---
+
+# 4. Разрешаем loopback
+
+Loopback — это локальное взаимодействие внутри самой ОС через интерфейс `lo`. По условию лабы его нужно разрешить.
+
+```bash
+sudo iptables -A INPUT -i lo -j ACCEPT
+```
+
+Пояснение:
+
+* `-i lo` — входящий интерфейс `lo`, то есть loopback.
+* `-j ACCEPT` — разрешить.
+
+```bash
+sudo iptables -A OUTPUT -o lo -j ACCEPT
+```
+
+Пояснение:
+
+* `-o lo` — исходящий интерфейс `lo`.
+* `-j ACCEPT` — разрешить.
+
+---
+
+# 5. Разрешаем DNS
+
+По условию нужно разрешить взаимодействие с DNS-сервером. Обычно DNS-запросы идут по UDP на порт `53`. Иногда может использоваться и TCP 53, поэтому для учебной работы лучше разрешить оба варианта.
+
+## UDP DNS
+
+```bash
+sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
+```
+
+Пояснение:
+
+* `-A OUTPUT` — правило для исходящих запросов.
+* `-p udp` — DNS чаще всего использует UDP.
+* `--dport 53` — порт назначения 53, стандартный порт DNS.
+* `-j ACCEPT` — разрешить.
+
+```bash
+sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
+```
+
+Пояснение:
+
+* `-A INPUT` — правило для входящих ответов.
+* `-p udp` — протокол UDP.
+* `--sport 53` — исходный порт удалённого DNS-сервера равен 53.
+* `-j ACCEPT` — разрешить.
+
+## TCP DNS
+
+```bash
+sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
+```
+
+Пояснение:
+
+* TCP используется реже, но может понадобиться для больших DNS-ответов или специальных случаев.
+
+```bash
+sudo iptables -A INPUT -p tcp --sport 53 -j ACCEPT
+```
+
+Пояснение:
+
+* разрешает входящие TCP-ответы от DNS-сервера.
+
+---
+
+# 6. Разрешаем HTTP и HTTPS
+
+По заданию нужно разрешить доступ к любым внешним серверам по HTTP/HTTPS.
+
+## HTTP
+
+```bash
+sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
+```
+
+Пояснение:
+
+* `-p tcp` — HTTP работает по TCP.
+* `--dport 80` — порт назначения 80, стандартный HTTP.
+* правило разрешает открывать веб-страницы по HTTP.
+
+```bash
+sudo iptables -A INPUT -p tcp --sport 80 -j ACCEPT
+```
+
+Пояснение:
+
+* разрешает входящие ответы от HTTP-сервера, у которого исходный порт 80.
+
+## HTTPS
+
+```bash
+sudo iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
+```
+
+Пояснение:
+
+* порт 443 — стандартный HTTPS.
+
+```bash
+sudo iptables -A INPUT -p tcp --sport 443 -j ACCEPT
+```
+
+Пояснение:
+
+* разрешает входящие ответы от HTTPS-сервера.
+
+---
+
+# 7. Разрешаем ping наружу
+
+По заданию нужно разрешить использование `ping` для проверки достижимости любых компьютеров во внешней сети. Для `ping` используется протокол ICMP. Конкретно запрос — это `echo-request`, ответ — `echo-reply`.
+
+```bash
+sudo iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
+```
+
+Пояснение:
+
+* `-p icmp` — правило для протокола ICMP.
+* `--icmp-type echo-request` — ICMP-пакеты типа “эхо-запрос”, то есть сам ping-запрос.
+* `-j ACCEPT` — разрешить отправку.
+
+```bash
+sudo iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
+```
+
+Пояснение:
+
+* `echo-reply` — ответ на ping.
+* правило разрешает принимать ответы на отправленные запросы.
+
+---
+
+# 8. Разрешаем ping к защищаемому хосту только с одного адреса
+
+По заданию защищаемый хост должен отвечать на ping только от одного конкретного внешнего адреса. В твоём стенде таким адресом будет `192.168.100.2`, то есть `external-client`.
+
+```bash
+sudo iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.100.2 -d 192.168.100.1 -j ACCEPT
+```
+
+Пояснение:
+
+* `-p icmp` — ICMP.
+* `--icmp-type echo-request` — входящий ping-запрос.
+* `-s 192.168.100.2` — источник должен быть именно `192.168.100.2`.
+* `-d 192.168.100.1` — адрес назначения — защищаемый хост.
+* `-j ACCEPT` — разрешить.
+
+```bash
+sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -s 192.168.100.1 -d 192.168.100.2 -j ACCEPT
+```
+
+Пояснение:
+
+* это правило разрешает отправку ответа ping именно этому клиенту.
+* `-s 192.168.100.1` — источник ответа, сам firewall-host.
+* `-d 192.168.100.2` — получатель ответа, только разрешённый клиент.
+
+---
+
+# 9. Только теперь включаем политику DROP по умолчанию
+
+Когда все разрешающие правила уже стоят, можно включить запрет всего остального.
+
+```bash
+sudo iptables -P INPUT DROP
+```
+
+Пояснение:
+
+* `-P` — установить политику по умолчанию для цепочки.
+* `INPUT` — цепочка входящих пакетов.
+* `DROP` — все пакеты, которые не подошли ни под одно разрешающее правило, будут отбрасываться.
+
+```bash
+sudo iptables -P OUTPUT DROP
+```
+
+Пояснение:
+
+* то же самое для исходящих пакетов.
+
+```bash
+sudo iptables -P FORWARD DROP
+```
+
+Пояснение:
+
+* цепочка `FORWARD` нужна для транзитных пакетов через хост.
+* в этой лабораторной маршрутизатор делать не требуется, поэтому безопасно оставить `DROP`.
+
+---
+
+# 10. Проверяем, что SSH не отвалился
+
+Сразу после установки политик выполни:
+
+```bash
+sudo iptables -L -n -v --line-numbers
+```
+
+Пояснение:
+
+* убедись, что правила SSH, loopback, DNS, HTTP/HTTPS и ICMP стоят в списке.
+* также удобно смотреть счётчики пакетов: если SSH работает, у соответствующих правил будут увеличиваться значения.
+
+Открой **вторую SSH-сессию** к `firewall-host`:
+
+```bash
+ssh -p 40001 arity@127.0.0.1
+```
+
+Пояснение:
+
+* это контрольная проверка.
+* пока первая сессия ещё жива, ты проверяешь, что новое подключение тоже проходит.
+* если вторая сессия открылась, значит SSH точно не заблокирован.
+
+---
+
+# 11. Проверка правил по заданию
+
+## Проверка DNS
+
+На `firewall-host`:
+
+```bash
+nslookup example.com
+```
+
+Пояснение:
+
+* `nslookup` отправляет DNS-запрос серверу имён.
+* если команда возвращает IP-адрес сайта, значит DNS разрешён.
+
+## Проверка HTTP
+
+```bash
+curl http://example.com
+```
+
+Пояснение:
+
+* `curl` делает HTTP-запрос к веб-серверу.
+* если приходит HTML-ответ, правило HTTP работает.
+
+## Проверка HTTPS
+
+```bash
+curl https://example.com
+```
+
+Пояснение:
+
+* то же самое, но по HTTPS на порт 443.
+
+## Проверка ping наружу
+
+```bash
+ping -c 4 8.8.8.8
+```
+
+Пояснение:
+
+* `ping` — утилита проверки достижимости узла.
+* `-c 4` — отправить только 4 запроса, а не бесконечно.
+* `8.8.8.8` — внешний IP-адрес.
+* если ответы приходят, исходящий ping разрешён.
+
+## Проверка ping к защищаемому хосту с разрешённого адреса
+
+На `external-client`:
+
+```bash
+ping -c 4 192.168.100.1
+```
+
+Пояснение:
+
+* клиент `192.168.100.2` должен успешно пинговать `firewall-host`, потому что именно этот источник разрешён.
+
+## Проверка блокировки лишнего трафика
+
+Например, попробуй на `firewall-host`:
+
+```bash
+nc -vz example.com 22
+```
+
+Пояснение:
+
+* `nc` — netcat, утилита для проверки TCP/UDP-подключений.
+* `-v` — подробный режим.
+* `-z` — не передавать данные, а только проверить возможность подключения.
+* `example.com 22` — попытка открыть TCP-соединение на порт 22.
+* так как доступ наружу разрешён только для DNS, HTTP, HTTPS и ping, это подключение должно не пройти.
+
+Если `nc` не установлен, можно проверить другим способом, но ты писал, что инструменты уже есть, так что, скорее всего, всё нормально.
+
+---
+
+# 12. Контроль трафика через tcpdump
+
+По заданию нужно показать прохождение пакетов через `tcpdump`.
+
+Общий просмотр трафика:
+
+```bash
+sudo tcpdump -i any -n
+```
+
+Пояснение:
+
+* `tcpdump` — сниффер пакетов.
+* `-i any` — слушать все интерфейсы сразу.
+* `-n` — не преобразовывать адреса в имена.
+
+Просмотр только ICMP:
+
+```bash
+sudo tcpdump -i any -n icmp
+```
+
+Пояснение:
+
+* фильтр `icmp` покажет только ping-трафик.
+
+Просмотр DNS:
+
+```bash
+sudo tcpdump -i any -n port 53
+```
+
+Пояснение:
+
+* `port 53` — показать DNS-пакеты.
+
+Просмотр HTTP/HTTPS:
+
+```bash
+sudo tcpdump -i any -n 'tcp port 80 or tcp port 443'
+```
+
+Пояснение:
+
+* кавычки нужны, чтобы shell корректно передал выражение целиком.
+* `or` — логическое “или”.
+* выражение показывает трафик к HTTP и HTTPS.
+
+Просмотр SSH:
+
+```bash
+sudo tcpdump -i any -n tcp port 22
+```
+
+Пояснение:
+
+* поможет убедиться, что SSH-пакеты действительно проходят через фильтр.
+
+---
+
+# 13. Сохранение правил
+
+Когда убедишься, что всё работает, сохрани конфигурацию:
+
+```bash
+sudo netfilter-persistent save
+```
+
+Пояснение:
+
+* `netfilter-persistent` сохраняет текущие правила iptables, чтобы они восстановились после перезагрузки.
+
+Можно дополнительно сохранить в файл:
+
+```bash
+sudo iptables-save > ~/iptables-lab4.rules
+```
+
+Пояснение:
+
+* это текстовый дамп всех правил.
+* удобно приложить к отчёту или использовать для восстановления.
+
+---
+
+# 14. Готовый набор команд в правильном порядке
+
+Ниже — тот же порядок, но компактным блоком, чтобы ты мог выполнять по шагам:
+
+```bash
+sudo iptables-save > ~/iptables-before-lab.rules
+
+sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
+sudo iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
+
+sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+
+sudo iptables -A INPUT -i lo -j ACCEPT
+sudo iptables -A OUTPUT -o lo -j ACCEPT
+
+sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
+sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
+sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
+sudo iptables -A INPUT -p tcp --sport 53 -j ACCEPT
+
+sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
+sudo iptables -A INPUT -p tcp --sport 80 -j ACCEPT
+sudo iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
+sudo iptables -A INPUT -p tcp --sport 443 -j ACCEPT
+
+sudo iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
+sudo iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
+
+sudo iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.100.2 -d 192.168.100.1 -j ACCEPT
+sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -s 192.168.100.1 -d 192.168.100.2 -j ACCEPT
+
+sudo iptables -P INPUT DROP
+sudo iptables -P OUTPUT DROP
+sudo iptables -P FORWARD DROP
+```
+
+---
+
+# 16. Что написать в учебном смысле про SSH как “дополнение”
+
+Можно формулировать так:
+
+> В базовом задании SSH не входит в перечень разрешённого трафика, однако для сохранения удалённого доступа к стенду было добавлено дополнительное правило, разрешающее входящие TCP-соединения на порт 22 защищаемого хоста. Правило было установлено до включения политик DROP по умолчанию, чтобы не потерять административный доступ к системе.
+
+Это хорошо звучит и по сути верно.
diff --git a/lab4/lab4.md b/lab4/lab4.md
new file mode 100644
index 0000000..636d6a5
--- /dev/null
+++ b/lab4/lab4.md
@@ -0,0 +1,69 @@
+# Защита информации, 2026
+
+## Практическая работа №4
+**по дисциплине «Защита информации»**
+
+**Тема работы:** «Межсетевое экранирование»
+**Преподаватель:** Силиненко А.В.
+**Email:** a_silinenko@mail.ru
+
+## 1. Цель работы
+Получение базовых знаний по настройке межсетевого экрана (МЭ) в ОС Linux/MacOS.
+
+## 2. Задачи практической работы
+### 2.1.
+Изучение МЭ iptables или любого другого, обеспечивающего выполнение задания.
+
+### 2.2.
+Реализация заданной политики доступа.
+
+## 3. Ход практической работы
+### 3.1.
+Установить или убедиться в наличии iptables.
+
+### 3.2.
+Изучить МЭ iptables, в том числе:
+- установка МЭ;
+- принципы и порядок обработки пакетов, основные цепочки (таблицы) обработки;
+- действия по умолчанию;
+- возможные параметры правил фильтрации.
+
+### 3.3.
+Изучить команды вывода таблиц фильтрации, добавления, редактирования и удаления правил фильтрации.
+
+### 3.4.
+Реализовать следующую политику доступа:
+- разрешить локальное взаимодействие через интерфейс loopback;
+- разрешить взаимодействие с DNS-сервером;
+- разрешить использование утилиты ping для проверки достижимости компьютеров с любыми IP-адресами во внешней сети;
+- разрешить использование утилиты ping для проверки достижимости защищаемого хоста только с конкретного адреса внешней сети;
+- разрешить доступ по протоколам HTTP/HTTPS к любым внешним серверам;
+- блокировать все пакеты, не удовлетворяющие указанным выше условиям.
+
+Правила политики доступа должны содержать (там, где это уместно):
+- IP-адрес (сеть) источника;
+- IP-адрес (сеть) приемника;
+- транспортный протокол;
+- для протоколов TCP и UDP: порт приемника;
+- для протокола ICMP: тип и код сообщения.
+
+### 3.5.
+Произвести проверку корректности реализации заданной политики, используя программы ping, nslookup (или аналоги), web-браузер.
+
+Также убедиться, что весь трафик, кроме разрешенного, блокируется.
+
+### 3.6.
+Проконтролировать прохождение пакетов утилитой tcpdump.
+
+## 4. Требования к отчету
+### 4.1.
+В разделе отчета, посвященному данной работе, должны быть приведены:
+- актуальность темы работы в контексте курса;
+- цели и задачи работы;
+- схема стенда, в т.ч. защищаемый компьютер с МЭ, внешняя сеть, DNS-сервер(а), IP-адреса хостов;
+- принципы обработки пакетов в цепочках (таблицах) iptables;
+- примеры команд добавления правил фильтрации;
+- набор правил фильтрации, реализующий заданную политику доступа;
+- проверку реализованной политики – демонстрацию примеров пропуска разрешенного трафика и блокировки запрещенного;
+- пример контроля трафика (вывод tcpdump) при проверках реализованной политики;
+- выводы по проделанной работе.
diff --git a/lab4/stand.mmd b/lab4/stand.mmd
new file mode 100644
index 0000000..3da8268
--- /dev/null
+++ b/lab4/stand.mmd
@@ -0,0 +1,27 @@
+graph TB
+ subgraph host["Хост-машина"]
+ subgraph fw["firewall-host (защищаемый хост, iptables)"]
+ fw_lo["lo: 127.0.0.1/8"]
+ fw_nat["enp0s3 (NAT)
10.0.2.15/24"]
+ fw_int["enp0s8 (Internal)
192.168.100.1/24"]
+ end
+ subgraph ec["external-client (внешний клиент)"]
+ ec_nat["enp0s3 (NAT)
10.0.2.15/24"]
+ ec_int["enp0s8 (Internal)
192.168.100.2/24"]
+ end
+ end
+
+ fw_int <--->|"Internal Network (intnet)
192.168.100.0/24"| ec_int
+
+ inet["Интернет
(DNS: 10.0.2.3, HTTP/HTTPS,
ICMP: 8.8.8.8 и др.)"]
+ fw_nat -->|"NAT"| inet
+
+ style fw fill:#e8f4e8,stroke:#2d7d2d,stroke-width:2px
+ style ec fill:#e8e8f4,stroke:#2d2d7d,stroke-width:2px
+ style host fill:#f9f9f9,stroke:#999,stroke-width:1px
+ style inet fill:#fff3e0,stroke:#e65100,stroke-width:2px
+ style fw_lo fill:#fff,stroke:#666
+ style fw_nat fill:#fff,stroke:#666
+ style fw_int fill:#fff,stroke:#666
+ style ec_nat fill:#fff,stroke:#666
+ style ec_int fill:#fff,stroke:#666
diff --git a/report/img/lab4-stand.png b/report/img/lab4-stand.png
new file mode 100644
index 0000000..725a5a6
Binary files /dev/null and b/report/img/lab4-stand.png differ
diff --git a/report/report.tex b/report/report.tex
index dade2aa..665cd17 100755
--- a/report/report.tex
+++ b/report/report.tex
@@ -177,6 +177,7 @@
\item Практическая работа №1. Анализ уязвимостей программного обеспечения. Данная практическая работа посвящена анализу уязвимостей программного обеспечения с использованием Банка данных угроз безопасности информации ФСТЭК России~\cite{fstec-bdu}. В ходе выполнения работы предусмотрено изучение структуры разделов «Угрозы» и «Уязвимости», а также поиск уязвимостей по заданным критериям. Особое внимание уделяется выявлению уязвимостей, соответствующих используемым версиям операционных систем личных устройств, и рассмотрению возможных мер по их устранению.
\item Практическая работа №2. Разработка и исследование системы аутентификации и авторизации. Данная практическая работа посвящена разработке системы доступа пользователей к конфиденциальным данным и исследованию стойкости паролей к атаке методом грубой силы. В ходе выполнения работы реализованы утилита управления пользователями, утилита доступа к конфиденциальным данным и программа перебора паролей, а также проведено экспериментальное исследование зависимости времени взлома от длины пароля.
\item Практическая работа №3. Реализация моделей дискреционного и мандатного управления доступом. Данная практическая работа посвящена расширению системы из работы №2 путём реализации моделей DAC (дискреционный доступ) и MAC (мандатный доступ) на основе модели Белла–Лападулы.
+ \item Практическая работа №4. Межсетевое экранирование средствами \texttt{iptables}. Данная практическая работа посвящена настройке межсетевого экрана в Linux, формированию политики фильтрации сетевого трафика и экспериментальной проверке пропуска разрешённых соединений и блокировки запрещённых пакетов с использованием \texttt{tcpdump}.
\end{enumerate}
\newpage
@@ -683,6 +684,278 @@ secret.txt:2
В ходе практической работы №3 на базе системы из работы №2 реализованы модели дискреционного и мандатного управления доступом. DAC реализован через список доступа (ACL) с владельцами объектов и командой \texttt{grant} для произвольного назначения прав. MAC реализован на основе модели Белла–Лападулы с тремя уровнями меток и проверкой свойств <<нет чтения сверху>> и <<нет записи вниз>>. Режимы проверки (BOTH, DAC\_ONLY, MAC\_ONLY) позволяют гибко настраивать систему; переключение доступно только администратору (root). Полученный опыт демонстрирует принципиальные различия между дискреционным и мандатным подходами к управлению доступом и их практическую реализацию в информационных системах.
+\newpage
+\section{Межсетевое экранирование средствами iptables}
+
+\subsection{Актуальность темы}
+
+Межсетевое экранирование является одним из базовых механизмов сетевой защиты информационных систем. Локальный хостовый межсетевой экран позволяет минимизировать поверхность атаки, явно разрешая только необходимый трафик и блокируя все остальные соединения по принципу <<запрещено всё, что не разрешено>>. Практическая настройка \texttt{iptables} в рамках курса <<Защита информации>> позволяет закрепить представление о пакетной фильтрации, ролях цепочек \texttt{INPUT}, \texttt{OUTPUT}, \texttt{FORWARD} и о проверке работоспособности правил на реальном стенде.
+
+\subsection{Цели и задачи работы}
+
+Цель работы: получение базовых знаний по настройке межсетевого экрана в ОС Linux и реализация заданной политики доступа.
+
+Задачи работы:
+\begin{enumerate}
+ \item Изучить межсетевой экран \texttt{iptables}: принципы обработки пакетов, основные цепочки, действия по умолчанию, параметры правил фильтрации.
+ \item Развернуть лабораторный стенд на базе виртуальных машин VirtualBox.
+ \item Реализовать заданную политику доступа: разрешить loopback, DNS, исходящий ping, входящий ping только от конкретного адреса, HTTP/HTTPS; заблокировать всё остальное.
+ \item Проверить корректность реализации политики.
+ \item Проконтролировать прохождение пакетов утилитой \texttt{tcpdump}.
+\end{enumerate}
+
+\subsection{Схема стенда}
+
+Стенд реализован на базе двух виртуальных машин VirtualBox с ОС Ubuntu Server 22.04. Каждая машина имеет два сетевых адаптера:
+\begin{itemize}
+ \item \textbf{Adapter~1 (NAT)} --- доступ в Интернет (DNS, HTTP/HTTPS, ICMP);
+ \item \textbf{Adapter~2 (Internal Network <>)} --- изолированная сеть \texttt{192.168.100.0/24} для связи между машинами.
+\end{itemize}
+
+Схема стенда представлена на рисунке~\ref{fig:lab4-topology}, адресация узлов --- в таблице~\ref{tab:lab4-addr}.
+
+\begin{figure}[H]
+ \centering
+ \includegraphics[width=0.85\linewidth]{img/lab4-stand.png}
+ \caption{Схема лабораторного стенда}
+ \label{fig:lab4-topology}
+\end{figure}
+
+\begin{table}[H]
+\centering
+\caption{Адресация узлов стенда}
+\label{tab:lab4-addr}
+\begin{tabularx}{\textwidth}{l l l X}
+\toprule
+Узел & Интерфейс & IP-адрес & Назначение \\
+\midrule
+\multirow{2}{*}{firewall-host} & enp0s3 (NAT) & 10.0.2.15/24 & Доступ в Интернет \\
+ & enp0s8 (intnet) & 192.168.100.1/24 & Внутренняя сеть \\
+\midrule
+\multirow{2}{*}{external-client} & enp0s3 (NAT) & 10.0.2.15/24 & Доступ в Интернет \\
+ & enp0s8 (intnet) & 192.168.100.2/24 & Внутренняя сеть \\
+\bottomrule
+\end{tabularx}
+\end{table}
+
+DNS-запросы обрабатываются службой \texttt{systemd-resolved} (\texttt{127.0.0.53}), перенаправляющей их DNS-серверу NAT-шлюза VirtualBox (\texttt{10.0.2.3}). Управление виртуальными машинами осуществлялось по SSH через проброс портов VirtualBox.
+
+\subsection{Принципы обработки пакетов в \texttt{iptables}}
+
+Утилита \texttt{iptables} организует правила фильтрации в виде таблиц и цепочек. В работе использовалась таблица \texttt{filter} (по умолчанию), содержащая три встроенные цепочки:
+\begin{itemize}
+ \item \texttt{INPUT} --- входящие пакеты, адресованные локальным процессам;
+ \item \texttt{OUTPUT} --- исходящие пакеты локальных процессов;
+ \item \texttt{FORWARD} --- транзитные пакеты (маршрутизация).
+\end{itemize}
+
+Пакет последовательно сравнивается с правилами цепочки. При совпадении выполняется действие: \texttt{ACCEPT} (пропустить), \texttt{DROP} (молча отбросить) или \texttt{REJECT} (отбросить с уведомлением). Если ни одно правило не сработало, применяется политика по умолчанию.
+
+Модуль \texttt{conntrack} позволяет отслеживать состояния соединений. Правило с параметром \texttt{-{}-ctstate ESTABLISHED,RELATED} пропускает ответные пакеты уже установленных соединений без необходимости создания отдельных правил для каждого обратного направления.
+
+\subsection{Реализация политики фильтрации}
+
+Перед настройкой все существующие правила были сброшены:
+\begin{verbatim}
+sudo iptables -F && sudo iptables -X
+sudo iptables -t nat -F && sudo iptables -t mangle -F
+\end{verbatim}
+
+Примеры команд добавления правил:
+
+Разрешение loopback-трафика (\texttt{-i~lo} --- входящий интерфейс loopback):
+\begin{verbatim}
+sudo iptables -A INPUT -i lo -j ACCEPT
+\end{verbatim}
+
+Разрешение DNS-запросов (\texttt{-p~udp}, порт~53):
+\begin{verbatim}
+sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
+\end{verbatim}
+
+Разрешение входящего ping только от конкретного адреса (\texttt{-{}-icmp-type echo-request} --- тип~8, параметры \texttt{-s} и \texttt{-d} --- адреса источника и назначения):
+\begin{verbatim}
+sudo iptables -A INPUT -p icmp --icmp-type echo-request \
+ -s 192.168.100.2 -d 192.168.100.1 -j ACCEPT
+\end{verbatim}
+
+Полный набор правил, реализующий заданную политику доступа:
+
+{\footnotesize
+\begin{verbatim}
+# SSH (для сохранения удалённого доступа к стенду)
+sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
+sudo iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
+# Уже установленные и связанные соединения
+sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+# Loopback
+sudo iptables -A INPUT -i lo -j ACCEPT
+sudo iptables -A OUTPUT -o lo -j ACCEPT
+# DNS (UDP и TCP, порт 53)
+sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
+sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
+sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
+sudo iptables -A INPUT -p tcp --sport 53 -j ACCEPT
+# HTTP и HTTPS
+sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
+sudo iptables -A INPUT -p tcp --sport 80 -j ACCEPT
+sudo iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
+sudo iptables -A INPUT -p tcp --sport 443 -j ACCEPT
+# Исходящий ping
+sudo iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
+sudo iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
+# Входящий ping только от 192.168.100.2
+sudo iptables -A INPUT -p icmp --icmp-type echo-request \
+ -s 192.168.100.2 -d 192.168.100.1 -j ACCEPT
+sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply \
+ -s 192.168.100.1 -d 192.168.100.2 -j ACCEPT
+# Политики по умолчанию
+sudo iptables -P INPUT DROP
+sudo iptables -P OUTPUT DROP
+sudo iptables -P FORWARD DROP
+\end{verbatim}
+}
+
+Правило для SSH не входит в задание, но необходимо для сохранения удалённого доступа; оно добавлено до включения политик \texttt{DROP}.
+
+Итоговое состояние таблицы \texttt{filter} (\texttt{iptables -L -n -v -{}-line-numbers}):
+
+{\scriptsize
+\begin{verbatim}
+Chain INPUT (policy DROP 0 packets, 0 bytes)
+num pkts bytes target prot in source destination
+1 162 10124 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
+2 10 760 ACCEPT all * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
+3 0 0 ACCEPT all lo 0.0.0.0/0 0.0.0.0/0
+4 0 0 ACCEPT udp * 0.0.0.0/0 0.0.0.0/0 udp spt:53
+5 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp spt:53
+6 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp spt:80
+7 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp spt:443
+8 0 0 ACCEPT icmp * 0.0.0.0/0 0.0.0.0/0 icmptype 0
+9 0 0 ACCEPT icmp * 192.168.100.2 192.168.100.1 icmptype 8
+
+Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
+
+Chain OUTPUT (policy DROP 4 packets, 304 bytes)
+num pkts bytes target prot out source destination
+1 119 21028 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp spt:22
+2 0 0 ACCEPT all * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
+3 0 0 ACCEPT all lo 0.0.0.0/0 0.0.0.0/0
+4 0 0 ACCEPT udp * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
+5 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
+6 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
+7 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
+8 0 0 ACCEPT icmp * 0.0.0.0/0 0.0.0.0/0 icmptype 8
+9 0 0 ACCEPT icmp * 192.168.100.1 192.168.100.2 icmptype 0
+\end{verbatim}
+}
+
+\subsection{Проверка реализованной политики}
+
+\textbf{DNS.} Команда \texttt{nslookup} на firewall-host успешно разрешает имена:
+
+{\footnotesize
+\begin{verbatim}
+$ nslookup example.com
+Server: 127.0.0.53
+Address: 127.0.0.53#53
+
+Non-authoritative answer:
+Name: example.com
+Address: 104.18.26.120
+Name: example.com
+Address: 104.18.27.120
+\end{verbatim}
+}
+
+\textbf{HTTP/HTTPS.} Утилита \texttt{curl} успешно получает ответ от внешнего сервера как по HTTP, так и по HTTPS:
+
+{\footnotesize
+\begin{verbatim}
+$ curl http://example.com
+Example Domain
+...
+
+$ curl https://example.com
+Example Domain
+...
+\end{verbatim}
+}
+
+\textbf{Исходящий ping.} Защищаемый хост пингует внешние адреса:
+
+{\footnotesize
+\begin{verbatim}
+$ ping -c 4 8.8.8.8
+PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
+64 bytes from 8.8.8.8: icmp_seq=1 ttl=255 time=12.0 ms
+64 bytes from 8.8.8.8: icmp_seq=2 ttl=255 time=11.9 ms
+64 bytes from 8.8.8.8: icmp_seq=3 ttl=255 time=11.3 ms
+64 bytes from 8.8.8.8: icmp_seq=4 ttl=255 time=11.4 ms
+
+--- 8.8.8.8 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss
+\end{verbatim}
+}
+
+\textbf{Входящий ping от разрешённого адреса.} С external-client (\texttt{192.168.100.2}) ping проходит:
+
+{\footnotesize
+\begin{verbatim}
+arity@external-client:~$ ping -c 4 192.168.100.1
+64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.433 ms
+64 bytes from 192.168.100.1: icmp_seq=2 ttl=64 time=0.369 ms
+64 bytes from 192.168.100.1: icmp_seq=3 ttl=64 time=0.440 ms
+64 bytes from 192.168.100.1: icmp_seq=4 ttl=64 time=0.398 ms
+
+--- 192.168.100.1 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss
+\end{verbatim}
+}
+
+\textbf{Блокировка запрещённого трафика.} Попытка TCP-соединения на порт~22 внешнего сервера не проходит (исходящий TCP разрешён только на порты 53, 80, 443):
+
+{\footnotesize
+\begin{verbatim}
+$ nc -vz example.com 22
+(нет ответа, соединение заблокировано, прервано по Ctrl+C)
+\end{verbatim}
+}
+
+\subsection{Контроль трафика средствами \texttt{tcpdump}}
+
+Для подтверждения прохождения пакетов использовалась утилита \texttt{tcpdump}. Ниже приведён вывод при выполнении \texttt{ping} от external-client к firewall-host:
+
+{\footnotesize
+\begin{verbatim}
+$ sudo tcpdump -i any -n icmp
+18:26:20.960046 enp0s8 In IP
+ 192.168.100.2 > 192.168.100.1:
+ ICMP echo request, id 2, seq 1, length 64
+18:26:20.960119 enp0s8 Out IP
+ 192.168.100.1 > 192.168.100.2:
+ ICMP echo reply, id 2, seq 1, length 64
+18:26:21.990542 enp0s8 In IP
+ 192.168.100.2 > 192.168.100.1:
+ ICMP echo request, id 2, seq 2, length 64
+18:26:21.990587 enp0s8 Out IP
+ 192.168.100.1 > 192.168.100.2:
+ ICMP echo reply, id 2, seq 2, length 64
+...
+8 packets captured
+\end{verbatim}
+}
+
+На интерфейсе \texttt{enp0s8} видны входящие ICMP echo-request от \texttt{192.168.100.2} и исходящие echo-reply, что подтверждает работу правила входящего ping от разрешённого адреса.
+
+Аналогичным образом были зафиксированы DNS-пакеты (\texttt{sudo tcpdump -i any -n port 53}): запрос от \texttt{127.0.0.1} к \texttt{127.0.0.53} через loopback, перенаправление к \texttt{10.0.2.3} через \texttt{enp0s3} и получение ответа. При выполнении \texttt{curl http://example.com} вывод \texttt{tcpdump} с фильтром \texttt{tcp port 80} зафиксировал трёхстороннее TCP-рукопожатие (SYN, SYN-ACK, ACK), HTTP-запрос \texttt{GET / HTTP/1.1} и ответ \texttt{HTTP/1.1 200 OK}, подтверждая корректную работу правила для порта~80.
+
+\subsection{Выводы}
+
+В ходе практической работы №4 на стенде из двух виртуальных машин VirtualBox настроена политика межсетевого экранирования средствами \texttt{iptables}. Реализована схема с политикой \texttt{DROP} по умолчанию и разрешающими правилами для loopback, DNS, исходящего ping, входящего ping от адреса \texttt{192.168.100.2} и HTTP/HTTPS. Экспериментальная проверка подтвердила пропуск разрешённого трафика и блокировку соединений, не описанных в политике. Анализ трафика утилитой \texttt{tcpdump} продемонстрировал соответствие наблюдаемой сетевой активности заданным правилам фильтрации.
+
+
\newpage
\section*{Заключение}
\addcontentsline{toc}{section}{Заключение}
@@ -693,6 +966,8 @@ secret.txt:2
В ходе выполнения практической работы №3 на базе системы из работы №2 реализованы модели дискреционного (DAC) и мандатного (MAC) управления доступом. DAC реализован через список доступа с владельцами объектов и командой выдачи прав; MAC — на основе модели Белла–Лападулы с тремя уровнями меток конфиденциальности. Реализация демонстрирует принципиальные различия между подходами и их практическое применение.
+В ходе выполнения практической работы №4 на стенде из двух виртуальных машин VirtualBox настроена политика межсетевого экранирования средствами \texttt{iptables}. Реализованы правила фильтрации, разрешающие loopback-трафик, DNS, ICMP и HTTP/HTTPS, а все прочие соединения блокируются. Корректность работы правил подтверждена тестовыми соединениями и анализом пакетов утилитой \texttt{tcpdump}.
+
\newpage
\printbibliography[heading=bibintoc]
@@ -746,4 +1021,4 @@ secret.txt:2
\addcontentsline{toc}{section}{Приложение 8}
\lstinputlisting{../lab3/setup.sh}
-\end{document}
\ No newline at end of file
+\end{document}