# reverse proxy Для pfSense есть много разных ресурсов ![](https://i.imgur.com/NYYJLOa.png) Теория: у нас есть FW; интернет; объедитяем в одну DMZ-зону: свич и машинку с реверс-прокси (она может стоять у FW отдельным модулем (красный цвет) или 2-ой вариант – отдельная машинка – более предпочтительно). Обычная прокси получает данные и потом перенаправляет эти запросы. У реверс-прокси задача та же самая: Все запросы из интернета поступают на какой-то внешний IP-адрес – 80 или 443 порты, дальше мы эти запросы NATим до реверс-прокси. В нашей DMZ-зоне могут располагаться веб-сервера 1,2,3 и т.д. Когда наши запросы поступают на реверс-зону – мы можем видеть заголовки head http (HTTPS) и реверс проксирование смотрим на эти заголовки и направляет в нужные нам веб-сервера какие-то разные запросы. Т.е. реверс-прокси считывает определенного рода данные, которые идут в запросах на 80, 443 и дальше перенаправляет их от имени себя. В этом случае реверс-прокси получается промежуточной буферной зоной, где мы можем обрабатывать веб-трафик Обрабатывать веб-трафик – значит мы можем его анализировать и значит там же можно поставить какой-то web-application FW (штуку, которая не позволит проводить различные инъекции) – WAF – их фильтрует. ![](https://i.imgur.com/Clb5S9a.png) Наша задача: развернуть реверс-прокси Переходим в PfSense – для настройки Squid Reverse Proxy Открываем ![](https://i.imgur.com/hxpTfMq.png) Сделаем пока без сертификатов. Сертификаты будем делать, как только у нас получится обычное реверс-проксирование (наша реверс-прокси находится на FW1) Реверс-прокси – это штука, которая фактически будет перенаправлять запрос. Изначально наш pfSense висит на 443 порту и мы не сможем его проксировать с 443 порта, либо нам придется менять pfSense, чтобы он не проксировал , дибо делать что-то другое. Изначально (в настройках) мы не будем делать HTTPS-ную часть **squid reverse https settings** потому что нам придется делать сертификаты дополнительно (сделаем чуть позднее). + есть OWA reverse proxy general settings - это когда аутлук web акцесс проксирует различного рода запросы: дискаверы, MAPI, ActivSync… Мы можем прописать определенного рода web-сервера, которые будут работать. Web-сервера – это наши web1 и web2 ![](https://i.imgur.com/d1wpCTJ.png) ![](https://i.imgur.com/OZsYOxo.png) Mappings – это когда мы будем прописывать определенного рода запросы на наши web-сервера. Можно сделать еще и редиректы – это когда заходят на один ресурс, его переводят на другой ресурс, а оттуда уже забирают какие-то данные. мы будем смотреть первые три: general, web servers, mapping. Real Time – это какие запросы у нас сейчас идут с точки зрения проксирования, либо же собственно – реверс-проксирование Sync – это когда используют, например, несколько реверс-прокси одновременно и здесь есть синхронизация этих данных между реверс-проксированием Начнем с настройки web-сервера – добавим сервера и пропишем что это такое: Peer Alias – имя нашей машинки – web1 и web2 И прописываем IP-адрес на котором он будет висеть – 80 порт И указываем протокол – HTTP ![](https://i.imgur.com/zKIkvjB.png) И добавляем второй сервер: ![](https://i.imgur.com/PIhZ6K2.png) Получили: ![](https://i.imgur.com/qVv3Sqc.png) Можно добавить еще дискрипшн: ![](https://i.imgur.com/au0xbMZ.png) web-1 ![](https://i.imgur.com/nTUVpYq.png) web-2 Настройка реверс-прокси Начнем с pfSense – здесь сделать достаточно просто. Мы добавили наши два weba и мы можем туда коннектиться ![](https://i.imgur.com/R1SOVgv.png) Но для того, чтобы пробрасывать туда наши порты, нужно сделать mappings - по каким запросам у нас будет перенаправление сначала в один, потом в другой. Добавляем новый маппинг и настраиваем: ![](https://i.imgur.com/QQB8g0u.png) У нас будет: web1 – это группа, на которую будут распространяться правила (по карандашику) – если он будет видеть в запросе HackerU.pro – он будет перенаправлять на web1 Делаем тоже самое для второго сервака – web2 – ![](https://i.imgur.com/nJQDTxd.png) Теперь у нас есть 2 перенаправления. Наша задачка – включить реверс-прокси, чтобы проверить что всё работает. Для включения реверс-прокси нужно будет внести изменения…потому что реверс-прокси не может слушать порты ниже 1000 и выдаст: ![](https://i.imgur.com/JjtGedr.png) Нам нужно будет исправить параметр: копируем его из «ошибки» - копируем и исправляем как просит Переходим в: ![](https://i.imgur.com/Hbs44uQ.png) Добавляем новый пункт, который затребовала система: ![](https://i.imgur.com/PwVXL3M.png) Сохраняем настройки и применяем: ![](https://i.imgur.com/qCFcMC7.png) Есть новый пункт: ![](https://i.imgur.com/p2Bn6ub.png) После этого надо будет перезапустить – переходим в: service/squid proxy server Сквид и прокси работают одновременно: если сквид работает, то и прокси работает. Нельзя сделать так, чтобы прокси не работал, а сквид работал ![](https://i.imgur.com/8w8l4Ly.png) выберет IP-шник для нашей реверс-прокси – прописываем наш внешний IP-шник, на котором он будет работать Прописываем IP-шник - ![](https://i.imgur.com/2YCtMcZ.png) который на внешнем WAN-интерфейсе Далее вносим внешний IP-адрес по которому будет переходить: external FQDN - hackeru.pro Получаем: ![](https://i.imgur.com/IMmafdS.png) Больше тут пока ничего не меняем. Сохраняем. И реверс-прокси должна работать. Но чтобы она работала нужно перейти в сервисы – сквид прокси сервер и запустить наш прокси сервер: ![](https://i.imgur.com/CVoybj6.png) Сохранить. И только после этого у нас будет все работать. Если сейчас перейдем в FW – rules Видим, что 80 порта нет – добавляем правило: разрешает any любой трафик на порт 80. ![](https://i.imgur.com/DDIdiMb.png) Получили: ![](https://i.imgur.com/pCiQcW6.png) Пробуем законнектиться: 172.30.51.149(wan ip fw-1) Должен появиться сайт, но: ![](https://i.imgur.com/QUYXqXh.png) Это реверс-проксирование на pfSense Посмотрим, какие запросы идут на саму реверс-проксю – для того чтобы можно было отслеживать как эти запросы идут и отслеживать их фактически в одном месте. Откроем на самом pfSense: ![](https://i.imgur.com/lnSgTbG.png) Видим здесь, что есть наша прокся. И откроем services/squid reverse proxy и в самом конце там есть ![](https://i.imgur.com/XBoJbiU.png) Вот в режиме «реал тайм» мы можем видеть кто у нас какие данные запрашивает, с какого IP-адреса идут эти данные, и IP-адрес ![](https://i.imgur.com/JQwNNVu.png) **Делаем на nginx** Добавим еще одну линуксовую машинку в нашу схему и обновим ее ![](https://i.imgur.com/kXtkzci.png) ![](https://i.imgur.com/4agYEjh.png) nano /etc/nosts Исправляем на: ![](https://i.imgur.com/9gY18zy.png) nano /etc/network/interfaces исправляем на: ![](https://i.imgur.com/hlcfWQ9.png) nano /etc/resolv.conf -> nameserver 8.8.8.8 -> reboot Настроили сеть, прописали данные. Теперь нужно будет обновить ее, поставить nginx, скопировать конфиг, который сделали и разобраться с этим конфигом. Мы делали реверс-прокси только для HTTP, а нам нужно будет сделать еще и для HTTPS – т.е. будет связка nginx + HTTPS После перезагрузки пропингуем: ![](https://i.imgur.com/Li6Bae5.png) ping есть поэтому apt update && apt upgrade -> apt install nginx Сделаем проброс на нашем FW: ![](https://i.imgur.com/YdOrCMI.png) Добавляем еще одно правило : копируем и заменяем 4222 на 5222 адрес: ![](https://i.imgur.com/qgTbMEd.png) И сделаем 25 IP ![](https://i.imgur.com/JpbH3WX.png) Заменим описание на ![](https://i.imgur.com/cbAgEri.png) -> apply changes Получили: ![](https://i.imgur.com/YTxwrxi.png) подлючаемся к нашей новой linux ![](https://i.imgur.com/Yn5S7KR.png) Видим что это реверс-прокся – web-ы можно все закрывать – ![](https://i.imgur.com/Gej366H.png) Отключим в pfSense сервисы ![](https://i.imgur.com/dLl6zEc.png) выключим прокси полностью. Тормозим реверс-прокси и делаем NAT-порт форвард с 80-порта на наш nginx. Еще раз, что мы сделали: мы поставили на реверс-прокси – обновили его, поставили nginx , пробросили порты, чтобы можно было по ssh подключиться. Далее – полностью отключили наш реверс-прокси (сайты теперь не могут загрузиться – можно проверить перезагрузкой их в браузере) ![](https://i.imgur.com/8gG5fBq.png) Наша задачка: настроить на реверс-проксе определенные данные. А со стороны, FW сделать firewall/nat/port forward на наш 25-адресочек (мы должны будем перенаправлять с 80порта на 80) Т.е. отсюда : 5222 – меняем на 80 ![](https://i.imgur.com/JHaoGzv.png) Получаем: дискрипшн тоже меняем (и пока временно HTTP) ![](https://i.imgur.com/Wu3StbM.png) итого: ![](https://i.imgur.com/XbMezV3.png) И если теперь обновить сайт в браузере – должен открыться nginx: ![](https://i.imgur.com/ZtNGyOO.png) Теперь: проброс мы с 80 порта сделали и нужно настроить наш nginx реверс-проксированием на наши ресурсы (сайты). Для этого: копируем всю часть – ![](https://i.imgur.com/YvVxusW.png) (в этом случае происходит перенаправление на HTTPS) Мы кое что подправим и оставим нужное. Заходим в ![](https://i.imgur.com/ywBe2xE.png) (linux reverse proxy) nano /etc/nginx/sites-enabled/default (И редактируем дефолтную конфигурацию.) Надо понимать: он будет слушать на 80 порту любые запросы и нам нужно создавать два конфига: один для одного сервака и второй для другого сервака – для этого нужно создать конфиги: - дефолтный вариант тут не подходит Переходим в директорию – cd /etc/nginx/sites-available И создаем: ![](https://i.imgur.com/br6eC9J.png) Получили: ![](https://i.imgur.com/cw4D0T2.png) Что нужно будет сделать? – Дефолтный конфиг мы уберем, отредактировать hackeru.pro для того, чтобы он проксировал до нашего web1 – сервера Делаем: Надо отредактировать файлик: /etc/nginx/sites-available# nano hackeru.pro - это web1 Открывается: ![](https://i.imgur.com/9Z8Q79l.png) Меняем: сервер name на хакерю.про , ssl-вещи не нужны – убираем, переправляем в нашем случае на 172.16.122.10 Получаем в итоге: и сохраняем ![](https://i.imgur.com/q06ilHU.png) Он будет слушать на 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; } } И сделаем точно такую же для хакерю.ком Только имя сайта заменяем. Далее нужно будет сделать символические ссылки: ![](https://i.imgur.com/DqkwxUK.png) У нас есть только дефолтный конфиг – убираем его отсюда: ![](https://i.imgur.com/a4tIuU4.png) И добавляем 2 наших сайта: пути прописываем полностью – ![](https://i.imgur.com/rJmZurK.png) Посмотрим (для проверки): ![](https://i.imgur.com/a7laj8V.png) И если мы сделаем ls ![](https://i.imgur.com/705L3W1.png) Увидим, что это символическая ссылка и идет она на выделенный путь. Проверяем, что конфигурации все правильные: ![](https://i.imgur.com/pvdDJgY.png) После этого можно перезапускать nginx: service nginx restart Итак мы создали два конфига: hackeru.com hackeru.pro Далее мы отредактировали каждый из этих файликов, так, чтобы они соответствовали определенному конфигу Далее мы сделали символические ссылки: под каждый из сайтов – фактически как виртуальные хостинги ![](https://i.imgur.com/5YnMHnM.png) Посмотрим как это будет выглядеть: переходим в браузер – ![](https://i.imgur.com/QiWgUhA.png) Не должно загружать сайт (но загрузился) И загружаются ![](https://i.imgur.com/1rBnLbH.png) ![](https://i.imgur.com/sdrQfBW.png) Если не загружаются: смотрим – в другом браузере (скорее всего дело в нем – с vpn и без встроенного vpn) Мы добились того, что наше реверс-прокся отрабатывает. Теперь посмотрим куда мы ходили: логи реверс-прокси – одна из самых важных частей (когда сайт ломают, можно видеть все запросы которые идут в сторону нашего сайта) Посмотрим на них: Логи находятся здесь: ![](https://i.imgur.com/1Bmt5Ip.png) Если сделаем: ls –l увидим: что есть акцесс-логи для сайтов - ![](https://i.imgur.com/xtYsVLP.png) Посмотрим на два различных запроса (для 2-х наших сайтов) Подключимся по ssh еще раз – откроем новое окно, чтобы можно было смотреть в двух окнах, как эти логи выглядят ![](https://i.imgur.com/txy95Pu.png) ![](https://i.imgur.com/uVkKqbO.png) Нам открылись акцессные логии ком-сайта: ![](https://i.imgur.com/A9bkJpb.png) Точно также в предыдущем окне открываем акцксс-логи .про-сайта: ![](https://i.imgur.com/u0Vrh30.png) Теперь, если в браузере обновим hackeru.pro в отдельно открытом окне увидим, что пошли логии запросов: ![](https://i.imgur.com/ZhDtaNR.png) При переходе по ссылкам на сайте, мы будем видеть меняющиеся логии внизу окна Если мы будем загружать данные wget-ом – мы также увидим движение в логах: ![](https://i.imgur.com/SPvZB6K.png) загрузка wget-ом и видим в логах, что запрос идет со стороны wget: ![](https://i.imgur.com/IIMbmdM.png) По реверс –прокси прописываются в логах полностью все запросы (полные): ![](https://i.imgur.com/GQDfAzL.png) И, главное, здесь уже мы можем ставить какой-нибудь web-апликейшн FW (WAF)– он просматривает все запросы на какие-то разные системы и на разный синтаксис ![](https://i.imgur.com/Axtz7Di.png) **WAF** может выполнять разные задачи: ![](https://i.imgur.com/D94WlKz.png) Есть бесплатные решения для WAF: https://misterscanner.com/open-source-web-application-firewall/ и другие различные решения на этом сайте. Вторая задача, кроме проксирования, сделать определенное перенаправление, например на 443 порт. Попробуем сделать следующее: настроить проксирование и 443 порта – HTTPS-трафик – Сделать так, чтобы мы могли переделывать трафик так, чтобы реверс-прокси выступала в качестве шифрующего элемента (чтобы между нами и реверс-проксей трафик шифровался) Нам потребуется: pfSense – ![](https://i.imgur.com/PulukcK.png) Убираем в правилах HTTP (он пока не нужен) – убираем галку + нужно создать сертификат под наши два домена (на pfSense нельзя сделать так, чтобы сертификаты были под разные домены – два отдельных сертификата). Мы можем проксировать запросы, но два отдельных сертификата сделать не можем. Переходим в менеджер сертификатов: создать два сертификата: сертификат – не важно от какого создателя Создаем сертификат: при помощи Proxy-CA – всё остальное оставляем так как есть ![](https://i.imgur.com/I7SMXur.png) Указываем домен: ![](https://i.imgur.com/U78q0bX.png) И в самом низу указываем, что это СЕРВЕР-сертификат: (можно указать и IP-шник) ![](https://i.imgur.com/rlL7P3Q.png) Вот у нас создался сертификат для .про: ![](https://i.imgur.com/AkDyWBO.png) Делаем второй сертификат, добавляем абсолютно такой же, только для .ком: ![](https://i.imgur.com/XYPrS8P.png) ![](https://i.imgur.com/q59wXLZ.png) Эти сертификаты нужны для того, чтобы nginx работал и всё было нормально. Получили в итоге два сертификата: ![](https://i.imgur.com/FmzlQlv.png) Эти сертификаты нужно экспортировать куда-нибудь на рабочий стол, чтобы в дальнейшем с ними можно было работать. Выгружаем сертификаты: нажимаем у обоих на шестеренку и ключик Посмотрим на наш файлик конфигурации: ![](https://i.imgur.com/etRjHBg.png) Здесь есть: allchain.pem и privkey.pem. В данном случае нам нужно будет выбрать: ![](https://i.imgur.com/JXYKfVA.png) Нам нужно будет преобразовать эти файлы. Скопируем в нужную нам директорию и перенастроим файлики. Делается это следующим образом: копируем весь конфиг: ![](https://i.imgur.com/TVJCDqd.png) Нам нужно окно с реверс-прокси, Пишем там: ![](https://i.imgur.com/QehWYDx.png) ![](https://i.imgur.com/J2q9Ie1.png) Смотрим: ![](https://i.imgur.com/jIUc7B7.png) Скопирует pro и com в режиме bak и отредактируем: ![](https://i.imgur.com/Sg0fgCK.png) Редактируем файлы: nano hackeru.pro/hackeru.com Заменяем на хакерю.про и указываем путь к сертификату. В итоге получаем: ![](https://i.imgur.com/QMlZ9S5.png) Проверяем: cat hackeru.pro Копируем всю часть: ![](https://i.imgur.com/n1WYs8A.png) ![](https://i.imgur.com/KPkZFy1.png) для того, чтобы сделать такой же конфиг и для .com Повторяем для домена .com с заменой имен на .com и указываем 11 адрес Теперь нужно закинуть сертификаты сюда: ![](https://i.imgur.com/ve92DIx.png) Создаем директорию для сертификатов: ![](https://i.imgur.com/1npKINh.png) Мы их скопировали на win10, в загрузках: Перекидываем их по ssh ![](https://i.imgur.com/T55VIGJ.png) ![](https://i.imgur.com/ibp6fKO.png) -r --- чтобы скопировались все файлы ![](https://i.imgur.com/pPgDHOd.png) - все файлики передались Теперь посмотрим: ![](https://i.imgur.com/ReyriGg.png) говорит, что у нас нет параметра /dhparam.pem его нужно будет создать ![](https://i.imgur.com/iC8MSCM.png) - копируем и создаем Создаем:![](https://i.imgur.com/guK4VY8.png) Ждем «создания» и после этого: ![](https://i.imgur.com/LaN5cAV.png) Проверим конфигурационные файлы (что-то там не так) ![](https://i.imgur.com/cZ093PT.png) ![](https://i.imgur.com/nko9q9U.png) тут все хорошо в конфиге И для .com: ![](https://i.imgur.com/X4pKMap.png) тут исправить .pro на .com ![](https://i.imgur.com/BG1bVdM.png) всё хорошо Перезапускаем service nginx restart Смотрим как выглядит: в браузере https://hackeru.pro/com Сайты не открылись из-за портов: возвращаем разрешение ранее снятой галки – ![](https://i.imgur.com/s9v1x78.png) Заменим порт в настройках на 5443: ![](https://i.imgur.com/rl9Os6e.png) Переходим на 5443 порт (вбиваем в браузере) 172.16.122.254:5443 Добавляем в FW NAT: HTTPS с перебросом на HTTPS (firewall/nat/port worward) ![](https://i.imgur.com/xCY6OaV.png) Включить в pfSense сквид-прокси и сайты загружаются