lab4
This commit is contained in:
569
lab4/README.md
Normal file
569
lab4/README.md
Normal file
@@ -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 по умолчанию, чтобы не потерять административный доступ к системе.
|
||||
|
||||
Это хорошо звучит и по сути верно.
|
||||
69
lab4/lab4.md
Normal file
69
lab4/lab4.md
Normal file
@@ -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) при проверках реализованной политики;
|
||||
- выводы по проделанной работе.
|
||||
27
lab4/stand.mmd
Normal file
27
lab4/stand.mmd
Normal file
@@ -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)<br/>10.0.2.15/24"]
|
||||
fw_int["enp0s8 (Internal)<br/>192.168.100.1/24"]
|
||||
end
|
||||
subgraph ec["external-client (внешний клиент)"]
|
||||
ec_nat["enp0s3 (NAT)<br/>10.0.2.15/24"]
|
||||
ec_int["enp0s8 (Internal)<br/>192.168.100.2/24"]
|
||||
end
|
||||
end
|
||||
|
||||
fw_int <--->|"Internal Network (intnet)<br/>192.168.100.0/24"| ec_int
|
||||
|
||||
inet["Интернет<br/>(DNS: 10.0.2.3, HTTP/HTTPS,<br/>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
|
||||
Reference in New Issue
Block a user