# Сетевая безопасность. Лабораторная работа №2 (HW)
## Ход работы

1. Установим пакет `knockd` на обе виртуальные машины

![alt text](img/01.png)

2. На машине `ubuntu` предварительно настроим `iptables`, разрешив только установленные соединения и SSH.

![alt text](img/02.png)

3. Проверим подключение c машины `ubuntu2`

![alt text](img/03.png)

Видим, что подключение отсутствует, при этом SSH сессия до машины не оборвалась, делаем вывод, что правила `iptables` настроены верно.

4. После настройки пакетного фильтра необходимо инициализировать службу knockd. Для этого в файле /etc/default/knockd изменим следующую опцию и присвоить ей значение “1”:

![alt text](img/04.png)

5. Создадим файл, заполненный `one-time sequence`, то есть набором одноразовых последовательностей, которые будут использовать для открытия порта.

![alt text](img/05.png)

6. Настроим демон `knockd` так, чтобы он использовал созданный файл для открытия доступа к порту.

`nano /etc/knockd.conf`

![alt text](img/06.png)

7. Сделаем автостарт службы и запустим её

```
systemctl enable knockd.service
systemctl start knockd.service
```

8. С помощью `nmap` проверим доступность порта `1194/tcp` на машине `ubuntu`

![alt text](img/10.png)

Видим, что `nmap` определяет порт как фильтрующийся.

9.  На машине `ubuntu2` выполним команду `knock` и укажем адрес подключения и последовательность.

![alt text](img/07.png)

10. На машине `ubuntu` проверим наполнение `iptables` и содержимое файла `/etc/knockd/openvpn_ots`

![alt text](img/08.png)

Видим, что в `iptables` появилось разрешающее правило, а в `/etc/knockd/openvpn_ots` закомментировалась строка с использованной последовательностью.

11. Проверим подключение `openvpn` с `ubuntu2` к `ubuntu`

![alt text](img/09.png)

Видим, что подключение выполнилось успешно.

12. С помощью `nmap` ещё раз проверим доступность порта `1194/tcp` на машине `ubuntu`

![alt text](img/11.png)

Видим, что теперь порт доступен.

13. Воспользуемся второй последовательностью, и проанализируем лог `tcpdump`

![alt text](img/12.png)

Видим, что при использовании `knock` на адрес посылаются пакеты в указанной последовательности, на который целевой адрес не отвечает, но как мы видели ранее, в этот момент сервер делает запись в `iptables`, разрешающее подключение.

![alt text](img/13.png)


## Выводы 

Port Knocking — это метод усиления защиты путем скрытия открытых портов от несанкционированного доступа с помощью сочетания «стуков» на определенные порты. Метод может обеспечиваться с помощью демона `knockd`, который имеет большое количество параметров, одним из которых является `one-time sequence`, то есть одноразовые последовательсти -- набор "стуков", который может быть использован для открытия портов только один раз.


**Выполнил:** Харитонов Марат Русланович, студенческий билет М235314.