Files
homework30/README.md
2026-03-17 23:57:00 +03:00

132 lines
7.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Домашнее задание 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**
Так же изменен provision. Теперь ansibel запуститься только после создания последней VM, а не будет запускаться после создания каждой.
Текущая карта сети
![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 работает!
Все готово!