132 lines
7.1 KiB
Markdown
132 lines
7.1 KiB
Markdown
# Домашнее задание 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**
|
||
|
||
|
||
|
||
Текущая карта сети
|
||

|
||
|
||
|
||
|
||
Готовый [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** отработали верно.
|
||
|
||

|
||
|
||
|
||
|
||
Проверка 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 работает!
|
||
|
||
|
||
Все готово! |