# Домашнее задание 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 работает! Все готово!