Добавить README.md

This commit is contained in:
2026-03-17 23:53:59 +03:00
parent 0b2f9f7e43
commit 40bcbcbfe1

132
README.md Normal file
View File

@@ -0,0 +1,132 @@
# Домашнее задание 30
## Фильтрация трафика - iptables
Для выполнение задания используется стенд из домашнего задания 28 https://git.limbox.ru/alex/homework28
### Создание Vagrantfile
В дополнении к 7 существующим VM будет добавлена еще одна **inetRouter2**
Создана сеть **router2-net** с адресацией **192.168.255.12/30**
Добавлены подключения
**inetRouter2** ip **192.168.255.13/30** link to **centralRouter** ip **192.168.255.14/30**
Текущая карта сети
![30_1](images/30_1.png)
Готовый [Vagrantfile](Vagrantfile)
### Корректировка ansible.yml
В сценарий для Ansible добавлены следующие действия:
1. На **centralServer** установлен nginx
2. С хотовой машины прокинут порт 8080 на **inetRouter2** порт 80
3. На **inetRouter2** с помощью iptables DNAT, порт 80 пробрасывается на centralServer. **Проброс порта осуществляется без дополнительного маскарадинга!**
4. На **centralRouter** настроет iptables так, что бы маркировать пакеты пришедшие со стороны **inetRouter2** и идущие на **centralServer** 80 порт. Это требуется для того, что бы при ответе на запрос пакет с **centralServer** ушел на **inetRouter2** а не в маршрут по умолчанию. Для этих же целей добавлены отдельные таблицы маршрутизации в netplan
5. На **centralServer** так же через iptables и отдельные таблицы маршрутизации настраивается маркировка пакетов пришедших со стороны **centralRouter** , что бы ответные пакеты всегда ушли в тот же интерфейс откуда пришли.
6. На **inetRouter** настроены правила iptables в цепочке INPUT и port knocking следующим образом:
- Разрешены established и related соединения
- Разрешено все с loopback интерфейса
- Разрешено все с интернфейса enp0s3 (оставил для vgrant)
- Разрешен ICMP
- Первое подключение от 192.168.255.2 на порт TCP 2222 записывается в таблицу CONNECT_1 (не важно как подключаться, можно http или ssh )
- Если в течении 30 секунд после первого подключения произошло подключение на порт TCP 222, записываем в таблицу CONNECT_2
- Теперь в течении 30 секунд мы можем подключиться по ssh с **centralRouter** на **inetRouter**
- В цепочке INPUT включена политик DROP
Готовый [ansible.yml](ansible.yml)
### Проверка
Запускаем vagrant
```bash
alex@ubuntu-pc:~/Документы/30$ vagrant destroy --force
==> office1Router: You assigned a static IP ending in ".1" or ":1" to this machine.
==> office1Router: This is very often used by the router and can cause the
==> office1Router: network to not work properly. If the network doesn't work
==> office1Router: properly, try changing this IP.
==> office1Router: Forcing shutdown of VM...
==> office1Router: Destroying VM and associated drives...
==> centralServer: Forcing shutdown of VM...
==> centralServer: Destroying VM and associated drives...
==> centralRouter: You assigned a static IP ending in ".1" or ":1" to this machine.
==> centralRouter: This is very often used by the router and can cause the
==> centralRouter: network to not work properly. If the network doesn't work
==> centralRouter: properly, try changing this IP.
==> centralRouter: Forcing shutdown of VM...
==> centralRouter: Destroying VM and associated drives...
==> inetRouter2: Forcing shutdown of VM...
==> inetRouter2: Destroying VM and associated drives...
==> inetRouter: You assigned a static IP ending in ".1" or ":1" to this machi
...
...
RUNNING HANDLER [apply netplan] ************************************************
changed: [office2Server]
changed: [office1Server]
changed: [office2Router]
changed: [centralRouter]
changed: [office1Router]
changed: [centralServer]
PLAY RECAP *********************************************************************
centralRouter : ok=15 changed=13 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
centralServer : ok=12 changed=10 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
inetRouter : ok=16 changed=14 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
inetRouter2 : ok=12 changed=10 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
office1Router : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
office1Server : ok=6 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
office2Router : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
office2Server : ok=6 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
```
После запуска всех машин, на хостовой машине попробуем открыть http://127.0.0.1:8080/, видим стандартную страницу nginx, значит dnat на **inetRouter2** и макрировки пакетов на **centralRouter** и **centralServer** отработали верно.
![30_2](images/30_2.png)
Проверка port knocking. Поключимся к **centralServer** и с помощтю утилиты **nc** проверим работу.
Вначале проверим досмтупность 22 порта, а потом по очереди 2222-222-22.
nc -zvw 2 192.168.255.1 22
```bash
vagrant@centralRouter:~$ nc -zvw 2 192.168.255.1 22
nc: connect to 192.168.255.1 port 22 (tcp) timed out: Operation now in progress
vagrant@centralRouter:~$
vagrant@centralRouter:~$
vagrant@centralRouter:~$ nc -zvw 2 192.168.255.1 2222
nc: connect to 192.168.255.1 port 2222 (tcp) timed out: Operation now in progress
vagrant@centralRouter:~$ nc -zvw 2 192.168.255.1 222
nc: connect to 192.168.255.1 port 222 (tcp) timed out: Operation now in progress
vagrant@centralRouter:~$ nc -zvw 2 192.168.255.1 22
Connection to 192.168.255.1 22 port [tcp/ssh] succeeded!
```
Видим, в начале порт 22 был закрыт, но после того как мы поочередно постучались на порты 2222 и 222, порт 22 стал доступен, port knocking работает!
Все готово!