# PROXY
Прокси бывает двух видов (прозрачная-непрозрачная) – с функциональной точки зрения:
У нас есть комп (либо несколько) с расположением в разных роутерах и разных сетях. У каждого из них есть свои IP-адреса. И есть прокси-сервер и есть у нас некий сервис – ssh, web…
Классический вариант:
Когда мы подключаемся напрямую к веб-ресурсу, трафик идет по красной линии (от компа через роутеры), с другого компа – тоже напрямую по синей линии. При этом sourse IP-адреса будут идти от самих компов.
Но бывает ситуация, когда веб-ресурс не позволяет получить данные с sourse IP1 и IP2. (вер-ресурс говорит: «IP1 и IP2 - запрещено») – есть некоторые иностранные веб-ресурсы, которые отказываются обслуживать российские адреса, а с других адресов можно заходить. Или наоборот: нельзя зайти из Росии на сервисы, которые были заблокированы РосКомНадзором.

В такой ситуации можно попытаться зайти с ресурсов, которые находятся ВО ВНЕ: попытаться подцепиться к ресурсу какому-то и через него зайти на внешний веб-сервис – зеленая линия (через прокси). В этом случае, веб-сервис будет видеть IP-шник прокси-сервиса.
Клиент запрашивает прокси-сервер прокси-сервер понимает, что ему нужен веб-ресурс и направляет туда и отвечает по тому же пути: веб-ресурс отвечает (отдает инфу) прокси-серверу прокси-сервер направляет ответ клиенту. При этом обходится барьер – запрет на посещение веб-ресурса (созданный тем же РосКомНадзором)

Схема похожа на работу VPN, но это не так. VPN у нас туннелируется, т.е. создается сеть поверх сети. В случае Proxy происходит так:
В IP-пакет (distin/sourse адрес, data, Crc-сумма) – в качестве distinations-адреса пишется именно адрес прокси-сервера.

Но при этом дабавляются данные для прокси – proxy-data: когда прокси-серверу говорится -куда эти данные идут. При этом нет никакой инкапсуляции, просто добавляются данные о прокси: есть несколько видов прокси – http_proxy, soks4, soks5 и т.д. – зависит от используемого протокола. Прокси работает только по протоколу TCP- все соединения TCP-шные она будет через себя пропускать. UDP –соединение в proxy не засунуть: потому что голос не сможем через прокси пропустить, но зато можно пропустить какое-то защищенное соединение, типа ssl (или что-то подобное)

Возможны варианты: когда VPN у нас внутри data - когда IP-пакет идет добавляется маленький заголовок, что этот трафик проксируется и этот заголовочек можно не добавлять и не говорить откуда он пришел: можно сказать «направь туда и дальше мне ответь».
Это стандартная proxy классический вид для обхода блокировок.
Со стороны blu-team: есть свич, роутер, компы, прокси…
Мы можем запретить компам выходить напрямую в роутер, разрешить выход только через прокси. И заставить все компы отправлять все запросы во вне только через прокси-сервер

Идея этого в том, что мы ставим общую блокировку на роутер и обходим ее через прокси. На прокси есть важная штука – просмотр запросов http, https А если мы видим запросы, то мы можем их логировать и блокировать.
На proxy можем запретить по URI какую-то часть данных (лочить lock) + мы можем блокировать на только запросы, но и запросы от конкретного компа, сделать сегмент сети, с которого можно заходить на определенный сайт – можно указывать сегменты кому можно ходить «сюда», кому можно «туда», кому нельзя вообще никуда ходить

И самое интересное, можно запретить вообще весь доступ во вне: можно запретить всем ходить куда-то еще и направлять через proxy. При этом весь трафик будет проходить через proxy , и мы сможем его видеть и следить абсолютно за всей компанией – не только за интернет трафиком, но и всем другим. Во многих компаниях так и делается, чтобы отслеживать вредоносные запросы, внутренние запросы и главное – не будет выхода «во вне». Если заблокировать абсолютно все, то правила для IDS/IPS систем и ssh – уже будут не нужны – станут не актуальными (или актуальными, если попробовать обойти proxy)/
Задача: настроить эту систему так, чтобы она защищала нашу инф-ру.
Нам нужна будет одна виндовая тачка (остальные можно выключать), 1-2 кали,
Настраивать будем на FW1.
С win7 ( или win10) настраиваем наш FW :
Переходим в: system/package manager/installer packages
Добавляем squid: (если ничего не нашлось – проверить интернет – скорее всего его просто нет)

Есть 3 разных варианта:

В последнем варианте есть **web proxy URL filter** тот самый фильтр, о котором говорилось выше (до этого варианта мы не дойдем – можно самим посмотреть, как доп.задание).
Сначала ставим squid обычный (второй вариант) и потом уже лайтверсию (первый вариант)- часть для того, чтобы можно было просматривать как у нас работает squid.
Устанавливаем второй вариант. Сквид – гибкая штука: здесь есть потоковый антивирус, здесь есть и сама прокси, и перенаправление запросов и т.д.
После установки второго сквида ставим сразу первый – lightsquid - он дает возможность просматривать в режиме реального времени статистику, которую генерирует сквид-пакет.
Посмотрим два режима работы Proxy: непрозрачная прокси и прозрачная прокси.
В чем отличие:
Если мы гоним трафик с win7 до FW1 – фактически наш трафик будет проходить
Непрозрачная прокся: если мы будем гнать трафик и не будем ничего блокировать, то у нас ничего не поменяется – будет proxy и будет – ну и что?
Если мы заблокируем весь трафик на FW1 и на тачках пропишем, что есть некоторого рода прокси (есть проксирование определенного рода трафика), укажем порт, на который он должен коннектиться – то всё ОК, трафик будет ходить. А вот напрямую, НЕ через proxy – не будет проходить
Прозрачная прокси: клиентов настраивать не нужно – запросы будут автоматически подхватываться и проходить через proxy
**Настройка пакетов proxy**

Сначала нужно настроить кеш. Переходим в кеш (local cache) cдесь много разных параметров – раньше прокся строилась еще и для того чтобы сохранить трафик (если есть 100 пользаков и все они лазают на одинаковые ресурсы. И если 100 компов скачивают одни и те же ресурсы – у нас получается в 100раз больше трафика – в этом случае мы можем спокойно сохранять какой то кеш и раздавать компам уже скачанное (картинки, элементы и проч., при этом сохраняя трафик). Для того, чтобы это работало – должен быть кеш у прокси.
**enable squid proxy** - сделаем в самом конце, когда все настроим
Тут есть разные режимы настройки:


- heap LFUDA - сохраняет популярные объекты (и большие и маленькие)
- heap GDSF - сохраняет маленькие популярные объекты
- heap LRU - это алгоритм, при котором вытесняются значения, которые дольше всего не запрашивались.
- LRU - наиболее часто-встречаемые объекты
Обычно по умолчанию используют первый режим (верхний)
- **low-water mark in/high-water mark in %** - сколько %% использовать до заполнения нашего кеша
- **do not cache** - какие ресурсы и IP-адреса не кешировать (скажем – майкрософт для скачивания обновлений)
- **enable offline mode** - можно включить режим off-лайн – если нет интернета, но вы захотели зайти на сайт, который только что работал – он отработает и будет грузить с кеша
- **external cache managers** - есть возможность кроме локального кеша использовать внешнюю хранилку
- **hard disk cache size** -Можно использовать хард-диск
- **hard disk cache system** - какая файловая система используется (ufs – стандартная система)
- **level 1 directories** - сколько директорий может хранится (например, есть сайт у него домен/директория/директория/директория – и таких может быть 16штук ).
- **hard disk cache location** - где хранить кеш
- **minimum/maximum object size** - мин и мах количество объектов. (от 0 до 4 мбайт)
- **squid memory cache settings** - чтобы скопировать на жесткий диск – нужно скешировать еще и в оперативной памяти
- **memory cache size min/max ram ** - какое количество памяти может быть использовано
- **memory replacement policy** - какие объекты будет смотреть - GDSF – все маленькие объекты

Потому что маленькие объекты записать гораздо сложнее, чем сразу прописать большой объект на жесткий диск.
- **dinamic and update content** - можно ручками прописать чего-нибудь и это будет в конфиге учитываться
- save - сохранит все сделанные настройки
**remote cache** - использовать не будем и переходим в **general** - настраиваем нашу proxy.
1 способом настроим обычную прокси – т.е. http
2 способом - т.е. https
HTTPS PROXY настройка
 - какие адреса будет проксировать
 - на каком интерфейсе будет работать (в нашем случае – е0)
 – внутренняя часть **Никогда не засовывайте вашу же проксю во вне!!**
Нам надо выбрать два интерфейса: LAN и lootback – для того, чтобы работала статистика, чтобы он проксировал запросы в том числе и на внутреннюю часть.
 -на каком интерфейсе все это будет висеть (в нашем случае – LAN)

**ssl man in the middle filtering** - в данном случае прокси используется как официальная атака m.i.t.m, Пока не включаеm – протестим в обычном режиме.
 - настройки логирования (дополнительного), т.к. сквид изначально уже пишет логии

далее save - сохранит настройки в обычном режиме, работать будет без шифрования.
После save нужно поставить галочку  и save
В этом случае мы увидим, что фактически у нас запустилась наша proxy
Она работает на порту proxy port - 3128 и она работает в режиме закрытой прокси.
Поставим на win-тачку какой-то браузер – firefox или другой, который использует свои настройки прокси. И проверим как наша proxy работает
Запускаем firefox. Заходим в нем в настройки - в самом низу в «основных» есть:

Здесь прописываем какую прокси будем использовать: win7 будет напрямую говорить, что на FW1 находится прокся и все данные направляй к FW1 и он уже разберется, что с ними делать. В нашем случае прописываем: http proxy и IP-шник, который фактически будет использоваться, в том числе и порт 3128. Proxy здесь имеет адрес нашего FW1 – 172.16.122.254. Https запросы пока у нас не порддерживаются, потому что мы не включали у прокси

Http – используется только для http и https трафика – только 80 и 443 порт и больше ничего.
Socks – используется весь tcp-шный трафик, т.е. tcp-трафик, который будет проходить будет заворачиваться в сокс4 или сокс 5 (отличие 4 и 5 – минимальное: версии протоколов, возможно криптография добавляется…)
Теперь попробуем зайти на любой сайт http - у аэропорта Внуково не шифрованный сайт.
Мы зашли – походили по ссылкам – всё хорошо и всё отрабатывает. Зайдем еще на другой сайт: типа Авито (он шифрует данные https ) – тоже работает сайт… Теперь проверим, что нам сказал наш FW1
Заходим: status/squid proxy reports

указать паcс «pfsense» (остальное не трогаем) тык save после жмем 
Входим:
 admin пасс: pfsense (если не отработает – перезапустить сквид прокси и в сервисах сам сквид тоже перезапустить, И возможно – перегрузить и сам FW1)
И видим:

**В случае если не работает** идем в status/squid proxy reports Поправим настройки:
- меняем пасс:
- меняем язык - русский
- report template - BASE or NOVOSEA
- bar color - blue
- refresh scheduler - 30 min(*)
далее save -> refresh -> 

Теперь видим данные:


Можем видеть какие сайты посещались и можем переходить на эти сайты – смотреть, что там было просмотрено и куда лазал пользак. Наша proxy отрабатывает и мы видим статистику. При мы еще можем сделать **Open sqstat**:

Видим, какие соединения в текущий момент поддерживаются, сколько времени они длятся
Дальше, мы должны будем включить проксирование МИТМ –прокси, чтобы его включить – нужно создать сертификат.
Переходим в FW1 :
 создаем новый корневой сертификат.
Сертификаты, сгенерированные pfSense понимает даже микротик., а сделанные другими срадствами должны учитывать ряд мелкий параметров для микротика


пишем название сертификата и выбираем метод генерации
Заполняем данные сертификата: вес, срок действия, название, страна, город и пр.
Вот наш сертификат:

Нам нужен только сертификат авторити – CA, который дальше будет генерить сертификаты. Сохраем этот сертификат где-нибудь на компе (экспорт СА) и его устанавливаем в корневые доверенные центры
 установить открыть поместить в доверенные центры (не забыть синхронизировать время на винде и сертификате)
    
Все политики выдачи есть и применены.
Теперь надо применить настройки нашей proxy
fw1/services/squid proxy server
**ssl man in the middle filtering** - нажимаем галочку
 порт вписываем 3129

 - сколько дочерних сертификатов можно делать. Всё остальное пока не меняем – будем смотреть как влияет и как отрабатывает.

Теперь в настройках браузера вносим изменения: меняем порт - 3129, вводим https,

Теперь пробуем зайти на сайты: если не коннектятся сайты – перезапустить прокси… Если не поможет, то… у прокси есть настройки, такие как акцесс-листы (ACL).
В акцесс листах мы должны будем прописать:
 указываем все сети 0.0.0.0/0 затем **save**.
Чтобы проверить, что все заработает. Сохраняем и проверяем
Сертификаты на сайтах показывает теперь наши:

И если посмотреть на сам сертификат, то увидим что сертификат proxy-ca:
Т.е. браузер не видит что сертификат подменен (нет алертов с его стороны)
И через FW1 (ghb обновлении страниц сайтов) мы видим инфу:

**Транспорент Proxy**
Это позволяет сделать прокси, но без настроек – без настроек прокси тоже будет работать.
fw1/services/squid proxy server
Включаем: transparent proxy settings - **enable** + ssl intercept inteface(s) - **LAN** -> save
После этого наша прокси будет работать в режиме «транспорент прокси» - все запросы, которые будут приходить на 80 и 443 порты, они автоматически будут проксироваться. Нужно только разрешить 80 и 443 порт на этой системе.
На FW1 поменяем днс-ы firewall/rules/lan

 где меняем destination - any -> save -> apply changes
После этого сайты загружаются.
Мы разрешили вход на 53 порт «куда-угодно» и на LAN адреса 443 и 80 – внутренний FW (никуда во вне не пускаем)
Получается следующее: мы включили транспорент прокси – и у нас заработал интернет на самой системе, хотя в правилах FW1 мы ничего никуда не разрешали:
 - разрешен только ДНС трафик и по 7445 порту на FW
Видим, что у нас всё отрабатывает, и мы можем получать доступ к ресурсам
В статистике сквид прокси репорт мы увидим обновленную статистику:

Мы можем даже скачивать файлики из интернета, но при этом: винда нам говорит, что у нас нет интернета и пинга нет: а всё остальное работает
 
После скачивания мы можем увидеть в отчете какие файлыф были скачаны и откуда:

**Проверяем Proxy Атаками**
**ssh –туннелирование **
Можно ли в обход прокси сделать туннель?
 - он не может даже приконнектиться...
fw1/status/squid proxy reports/open sqstat
 - нет соединений
SSH-запуск с прокси у нас не работает – всё круто!
Пробуем через ssn over proxy

пробуем сделать так (нужно обойти прокси через ssh)
Если нет ncat – устанавливаем: доступ в инет для http трафика должен быть
Статейка по обходу: http://www.zeitoun.net/articles/ssh-through-http-proxy/start?s[]=ssh&s[]=proxy

Делаем по статье:
apt install connect-proxy -> mkdir .ssh -> cd .ssh -> Open or create your ~/.ssh/config ->
 - IP-шник FW1 172.16.12.254
nano(vim) /etc/ssh/sshd_config - укажем у себя 443 порт -> ssytemctl restart sshd ->









 в line 19 в ssh конфиге ошибка - nano(vim) /etc/ssh/sshd_config -> #Host(закоментировать)



Возможно, нужно отключить МИТМ прокси -
 -> save. он подменивает сертификат и не хочет коннектится по этому сертификату.

Получилось соединение.
Если есть МИТМ – то прокси не обходится, нельзя подключится. Получается со своим сертификатом лезет на прокси -> прокси подменяет сертификат и лезет на внешнюю кали ->она отвечает на этот сертификат, а с предыдущим никак не взаимодействует
fw1/status/squid proxy reports/open sqstat работает

Передаем файлик:

видит передачю файла

Т.е. прокси можно обойти, если выключен МИТМ прокси