# reverse proxy
Для pfSense есть много разных ресурсов

Теория: у нас есть FW; интернет; объедитяем в одну DMZ-зону: свич и машинку с реверс-прокси (она может стоять у FW отдельным модулем (красный цвет) или 2-ой вариант – отдельная машинка – более предпочтительно).
Обычная прокси получает данные и потом перенаправляет эти запросы. У реверс-прокси задача та же самая:
Все запросы из интернета поступают на какой-то внешний IP-адрес – 80 или 443 порты, дальше мы эти запросы NATим до реверс-прокси. В нашей DMZ-зоне могут располагаться веб-сервера 1,2,3 и т.д. Когда наши запросы поступают на реверс-зону – мы можем видеть заголовки head http (HTTPS) и реверс проксирование смотрим на эти заголовки и направляет в нужные нам веб-сервера какие-то разные запросы.
Т.е. реверс-прокси считывает определенного рода данные, которые идут в запросах на 80, 443 и дальше перенаправляет их от имени себя. В этом случае реверс-прокси получается промежуточной буферной зоной, где мы можем обрабатывать веб-трафик
Обрабатывать веб-трафик – значит мы можем его анализировать и значит там же можно поставить какой-то web-application FW (штуку, которая не позволит проводить различные инъекции) – WAF – их фильтрует.

Наша задача: развернуть реверс-прокси
Переходим в PfSense – для настройки Squid Reverse Proxy
Открываем 
Сделаем пока без сертификатов. Сертификаты будем делать, как только у нас получится обычное реверс-проксирование (наша реверс-прокси находится на FW1)
Реверс-прокси – это штука, которая фактически будет перенаправлять запрос.
Изначально наш pfSense висит на 443 порту и мы не сможем его проксировать с 443 порта, либо нам придется менять pfSense, чтобы он не проксировал , дибо делать что-то другое.
Изначально (в настройках) мы не будем делать HTTPS-ную часть **squid reverse https settings** потому что нам придется делать сертификаты дополнительно (сделаем чуть позднее). + есть OWA reverse proxy general settings - это когда аутлук web акцесс проксирует различного рода запросы: дискаверы, MAPI, ActivSync…
Мы можем прописать определенного рода web-сервера, которые будут работать. Web-сервера – это наши web1 и web2


Mappings – это когда мы будем прописывать определенного рода запросы на наши web-сервера.
Можно сделать еще и редиректы – это когда заходят на один ресурс, его переводят на другой ресурс, а оттуда уже забирают какие-то данные.
мы будем смотреть первые три: general, web servers, mapping.
Real Time – это какие запросы у нас сейчас идут с точки зрения проксирования, либо же собственно – реверс-проксирование
Sync – это когда используют, например, несколько реверс-прокси одновременно и здесь есть синхронизация этих данных между реверс-проксированием
Начнем с настройки web-сервера – добавим сервера и пропишем что это такое:
Peer Alias – имя нашей машинки – web1 и web2
И прописываем IP-адрес на котором он будет висеть – 80 порт
И указываем протокол – HTTP

И добавляем второй сервер:

Получили:

Можно добавить еще дискрипшн:
 web-1
 web-2
Настройка реверс-прокси
Начнем с pfSense – здесь сделать достаточно просто.
Мы добавили наши два weba и мы можем туда коннектиться

Но для того, чтобы пробрасывать туда наши порты, нужно сделать mappings - по каким запросам у нас будет перенаправление сначала в один, потом в другой.
Добавляем новый маппинг и настраиваем:

У нас будет: web1 – это группа, на которую будут распространяться правила (по карандашику) – если он будет видеть в запросе HackerU.pro – он будет перенаправлять на web1
Делаем тоже самое для второго сервака – web2 –

Теперь у нас есть 2 перенаправления.
Наша задачка – включить реверс-прокси, чтобы проверить что всё работает.
Для включения реверс-прокси нужно будет внести изменения…потому что реверс-прокси не может слушать порты ниже 1000 и выдаст:

Нам нужно будет исправить параметр: копируем его из «ошибки» - копируем и исправляем как просит
Переходим в:

Добавляем новый пункт, который затребовала система:

Сохраняем настройки и применяем:

Есть новый пункт:

После этого надо будет перезапустить – переходим в:
service/squid proxy server
Сквид и прокси работают одновременно: если сквид работает, то и прокси работает. Нельзя сделать так, чтобы прокси не работал, а сквид работал

выберет IP-шник для нашей реверс-прокси – прописываем наш внешний IP-шник, на котором он будет работать
Прописываем IP-шник -  который на внешнем WAN-интерфейсе
Далее вносим внешний IP-адрес по которому будет переходить: external FQDN - hackeru.pro
Получаем:

Больше тут пока ничего не меняем. Сохраняем. И реверс-прокси должна работать. Но чтобы она работала нужно перейти в сервисы – сквид прокси сервер и запустить наш прокси сервер:

Сохранить. И только после этого у нас будет все работать.
Если сейчас перейдем в FW – rules Видим, что 80 порта нет – добавляем правило: разрешает any любой трафик на порт 80.

Получили:

Пробуем законнектиться: 172.30.51.149(wan ip fw-1)
Должен появиться сайт, но:

Это реверс-проксирование на pfSense
Посмотрим, какие запросы идут на саму реверс-проксю – для того чтобы можно было отслеживать как эти запросы идут и отслеживать их фактически в одном месте.
Откроем на самом pfSense:

Видим здесь, что есть наша прокся. И откроем services/squid reverse proxy и в самом конце там есть
 Вот в режиме «реал тайм» мы можем видеть кто у нас какие данные запрашивает, с какого IP-адреса идут эти данные, и IP-адрес

**Делаем на nginx**
Добавим еще одну линуксовую машинку в нашу схему и обновим ее


nano /etc/nosts Исправляем на:

nano /etc/network/interfaces исправляем на:

nano /etc/resolv.conf -> nameserver 8.8.8.8 -> reboot
Настроили сеть, прописали данные. Теперь нужно будет обновить ее, поставить nginx, скопировать конфиг, который сделали и разобраться с этим конфигом.
Мы делали реверс-прокси только для HTTP, а нам нужно будет сделать еще и для HTTPS – т.е. будет связка nginx + HTTPS
После перезагрузки пропингуем:
 ping есть поэтому apt update && apt upgrade -> apt install nginx
Сделаем проброс на нашем FW:

Добавляем еще одно правило : копируем и заменяем 4222 на 5222 адрес:

И сделаем 25 IP

Заменим описание на 
-> apply changes
Получили:

подлючаемся к нашей новой linux

Видим что это реверс-прокся – web-ы можно все закрывать –

Отключим в pfSense сервисы
 выключим прокси полностью. Тормозим реверс-прокси и делаем NAT-порт форвард с 80-порта на наш nginx.
Еще раз, что мы сделали: мы поставили на реверс-прокси – обновили его, поставили nginx , пробросили порты, чтобы можно было по ssh подключиться. Далее – полностью отключили наш реверс-прокси (сайты теперь не могут загрузиться – можно проверить перезагрузкой их в браузере)

Наша задачка: настроить на реверс-проксе определенные данные. А со стороны,
FW сделать firewall/nat/port forward на наш 25-адресочек (мы должны будем перенаправлять с 80порта на 80)
Т.е. отсюда : 5222 – меняем на 80

Получаем: дискрипшн тоже меняем (и пока временно HTTP)

итого:

И если теперь обновить сайт в браузере – должен открыться nginx:

Теперь: проброс мы с 80 порта сделали и нужно настроить наш nginx реверс-проксированием на наши ресурсы (сайты).
Для этого: копируем всю часть –

(в этом случае происходит перенаправление на HTTPS)
Мы кое что подправим и оставим нужное.
Заходим в  (linux reverse proxy)
nano /etc/nginx/sites-enabled/default
(И редактируем дефолтную конфигурацию.) Надо понимать: он будет слушать на 80 порту любые запросы и нам нужно создавать два конфига: один для одного сервака и второй для другого сервака – для этого нужно создать конфиги: - дефолтный вариант тут не подходит
Переходим в директорию – cd /etc/nginx/sites-available
И создаем:

Получили:

Что нужно будет сделать? – Дефолтный конфиг мы уберем, отредактировать hackeru.pro для того, чтобы он проксировал до нашего web1 – сервера
Делаем:
Надо отредактировать файлик: /etc/nginx/sites-available# nano hackeru.pro - это web1
Открывается:

Меняем: сервер name на хакерю.про , ssl-вещи не нужны – убираем, переправляем в нашем случае на 172.16.122.10
Получаем в итоге: и сохраняем

Он будет слушать на 80 порту сервер с именем хакерю.про и будет его перенаправлять на 172.16.122.10
Копируем эту конфигурацию:
server {
listen 80;
server_name hackeru.pro;
access_log /var/log/nginx/hackeru.pro-access.log;
error_log /var/log/nginx/hackeru.pro-error.log;
location / {
proxy_pass http://172.16.122.10;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
И сделаем точно такую же для хакерю.ком Только имя сайта заменяем. Далее нужно будет сделать символические ссылки:

У нас есть только дефолтный конфиг – убираем его отсюда:

И добавляем 2 наших сайта: пути прописываем полностью –

Посмотрим (для проверки):

И если мы сделаем ls

Увидим, что это символическая ссылка и идет она на выделенный путь.
Проверяем, что конфигурации все правильные:

После этого можно перезапускать nginx: service nginx restart
Итак мы создали два конфига: hackeru.com hackeru.pro
Далее мы отредактировали каждый из этих файликов, так, чтобы они соответствовали определенному конфигу
Далее мы сделали символические ссылки: под каждый из сайтов – фактически как виртуальные хостинги

Посмотрим как это будет выглядеть: переходим в браузер –
 Не должно загружать сайт (но загрузился)
И загружаются


Если не загружаются: смотрим – в другом браузере (скорее всего дело в нем – с vpn и без встроенного vpn)
Мы добились того, что наше реверс-прокся отрабатывает. Теперь посмотрим куда мы ходили: логи реверс-прокси – одна из самых важных частей (когда сайт ломают, можно видеть все запросы которые идут в сторону нашего сайта) Посмотрим на них:
Логи находятся здесь:

Если сделаем: ls –l увидим: что есть акцесс-логи для сайтов -

Посмотрим на два различных запроса (для 2-х наших сайтов)
Подключимся по ssh еще раз – откроем новое окно, чтобы можно было смотреть в двух окнах, как эти логи выглядят


Нам открылись акцессные логии ком-сайта:

Точно также в предыдущем окне открываем акцксс-логи .про-сайта:

Теперь, если в браузере обновим hackeru.pro в отдельно открытом окне увидим, что пошли логии запросов:

При переходе по ссылкам на сайте, мы будем видеть меняющиеся логии внизу окна
Если мы будем загружать данные wget-ом – мы также увидим движение в логах:

загрузка wget-ом и видим в логах, что запрос идет со стороны wget:

По реверс –прокси прописываются в логах полностью все запросы (полные):

И, главное, здесь уже мы можем ставить какой-нибудь web-апликейшн FW (WAF)– он просматривает все запросы на какие-то разные системы и на разный синтаксис

**WAF** может выполнять разные задачи:

Есть бесплатные решения для WAF:
https://misterscanner.com/open-source-web-application-firewall/
и другие различные решения на этом сайте.
Вторая задача, кроме проксирования, сделать определенное перенаправление, например на 443 порт.
Попробуем сделать следующее: настроить проксирование и 443 порта – HTTPS-трафик –
Сделать так, чтобы мы могли переделывать трафик так, чтобы реверс-прокси выступала в качестве шифрующего элемента (чтобы между нами и реверс-проксей трафик шифровался)
Нам потребуется: pfSense –

Убираем в правилах HTTP (он пока не нужен) – убираем галку + нужно создать сертификат под наши два домена (на pfSense нельзя сделать так, чтобы сертификаты были под разные домены – два отдельных сертификата). Мы можем проксировать запросы, но два отдельных сертификата сделать не можем.
Переходим в менеджер сертификатов:
создать два сертификата: сертификат – не важно от какого создателя
Создаем сертификат: при помощи Proxy-CA – всё остальное оставляем так как есть

Указываем домен:

И в самом низу указываем, что это СЕРВЕР-сертификат: (можно указать и IP-шник)

Вот у нас создался сертификат для .про:

Делаем второй сертификат, добавляем абсолютно такой же, только для .ком:


Эти сертификаты нужны для того, чтобы nginx работал и всё было нормально.
Получили в итоге два сертификата:

Эти сертификаты нужно экспортировать куда-нибудь на рабочий стол, чтобы в дальнейшем с ними можно было работать.
Выгружаем сертификаты: нажимаем у обоих на шестеренку и ключик
Посмотрим на наш файлик конфигурации:

Здесь есть: allchain.pem и privkey.pem. В данном случае нам нужно будет выбрать:

Нам нужно будет преобразовать эти файлы. Скопируем в нужную нам директорию и перенастроим файлики.
Делается это следующим образом: копируем весь конфиг:

Нам нужно окно с реверс-прокси, Пишем там:


Смотрим:

Скопирует pro и com в режиме bak и отредактируем:

Редактируем файлы: nano hackeru.pro/hackeru.com
Заменяем на хакерю.про и указываем путь к сертификату. В итоге получаем:

Проверяем: cat hackeru.pro
Копируем всю часть:


для того, чтобы сделать такой же конфиг и для .com
Повторяем для домена .com с заменой имен на .com и указываем 11 адрес
Теперь нужно закинуть сертификаты сюда:

Создаем директорию для сертификатов:

Мы их скопировали на win10, в загрузках: Перекидываем их по ssh

 -r --- чтобы скопировались все файлы
 - все файлики передались
Теперь посмотрим:

говорит, что у нас нет параметра /dhparam.pem его нужно будет создать
 - копируем и создаем
Создаем:
Ждем «создания» и после этого:

Проверим конфигурационные файлы (что-то там не так)


тут все хорошо в конфиге
И для .com:
 тут исправить .pro на .com
 всё хорошо
Перезапускаем service nginx restart
Смотрим как выглядит: в браузере https://hackeru.pro/com
Сайты не открылись из-за портов: возвращаем разрешение ранее снятой галки –

Заменим порт в настройках на 5443:

Переходим на 5443 порт (вбиваем в браузере) 172.16.122.254:5443
Добавляем в FW NAT: HTTPS с перебросом на HTTPS (firewall/nat/port worward)

Включить в pfSense сквид-прокси и сайты загружаются