Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Fragen — это динамичный шутер от первого лица, пропитанный адреналином и напряжённой атмосферой. Вы можете сражаться как в одиночку, так и в составе команды. Независимо от того, выберете ли вы свободный бой или командный режим, ваша главная задача — остаться в живых и одержать победу.

FRAGEN

Шутер, Экшены, Шутер от первого лица

Играть

Топ прошлой недели

  • AlexKud AlexKud 35 постов
  • Animalrescueed Animalrescueed 52 поста
  • Webstrannik1 Webstrannik1 50 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
Ghaeskaerr
3 года назад

Эта странная математика⁠⁠

На днях наши анти-хакеры порадовали: если отправить на наш сайт определенный (и очень длинный) запрос, то в ответ он выдаст всю базу данных вместе с паролями.

Взялся чинить. Надо значит проверять запрос, чтобы эти зловещие параметры были все одновременно, и тогда заблокировать (по одному они почему-то такого эффекта не вызывают).

Сначала пытался писать каскады условий: если есть первый параметр, то проверяем второй; если есть второй... ну и так далее, и в конце должна была ждать директива "заблокировать". Но веб-сервер пояснил мне, что так работать он не собирается.

Ладно, давай со счетчиком. Проверяй первый параметр  и если есть - увеличиваем счетчик на 1. Проверяем второй... И в конце проверка - если счетчик равен 5, то блокируем (то есть нашел все параметры).

Не работает. Хоть убей не работает, не блокирует ничего.

Волосы дыбом, мозг кипит - разбираюсь.

В какой-то момент вывел значение счетчика когда он по моим расчетам уже должен быть равен 5. И что я вижу? Счетчик = '0+1+1+1+1+1'. То есть текстовая строка.

Добавил я это извращение в последнее условие - и все заработало.

Галактика спасена.


К чему я это... кто знает как nginx работать с int?

Показать полностью
[моё] Тупость Nginx Текст
14
44
aidaho6
aidaho6
4 года назад
GNU/Linux

HAProxy, Nginx и Docker: как это сделано в Roxy-WI⁠⁠

Продолжаем цикл статей о возможностях Roxy-WI. Сегодня мы поговорим ещё об одном важном наборе функций, связанных с управлением сервисами (а именно ― HAproxy и Nginx) в docker-контейнерах. Мы старались сделать эту функцию максимально простой и удобной в использовании. О том, что у нас получилось, и пойдёт речь ниже.

HAProxy, Nginx и Docker: как это сделано в Roxy-WI

Зачем запускать сервисы в контейнере?


Контейнеризация ― это актуальный тренд на протяжении вот уже многих лет (первая версия Docker вышла в 2013 году).  Самое главное преимущество контейнеров заключается в сведении к минимуму возни с установкой и запуском. Все проблемы с зависимости снимаются раз и навсегда. В контейнере мы получаем готовое приложение, которое достаточно просто загрузить на хост и запустить. Собственно, контейнеризованное приложение не будет установлено в систему в буквальном смысле слова: оно будет запущено в изолированном окружении и может быть в любой момент убрано из системы.



Зачем управлять контейнерами через графический интерфейс?


Вопрос, вынесенный в название параграфа, может возникнуть у многих читателей: управлять Docker-контейнерами через командную строку несложно; в свободном доступе опубликованы тысячи, если не сотни тысяч, руководств и обучающих материалов. Тем не менее, за 8 лет существования Docker было создано немало решений для работы с контейнерами через веб-интерфейс.  Какие преимущества даёт веб-интерфейс?


Первое преимущество ― это наглядность. Пользователь может видеть, какие приложения работают в контейнерах и как контейнеры взаимосвязаны между собой. Это актуально, например, для больших (десятки и сотни контейнеров) инсталляций Docker.


Второе преимущество заключается в удобстве наблюдения за работой сервисов: в большинстве существующих решений для управления контейнерами через веб-интерфейс предусмотрены просмотр и визуализация статистики (потребление ресурсов, процессы).


Третье преимущество заключается в упрощении многих операций, что полезно как для начинающих, так и для опытных (особенно при работе с большими инсталляциями) пользователей. Управлять через GUI сетями, томами, образами значительно проще, чем через командную строку.


Четвертое преимущество заключается в наличии дополнительных функций и возможностей: например, управление правами и списками доступа (разным пользователям могут быть доступны разные контейнеры; кроме того, для всех пользователей можно задавать индивидуальные права на выполнение тех или иных операций).  Настраивать всё это через графический интерфейс получается значительно проще и быстрее, чем устанавливать дополнительные инструменты, а затем прописывать необходимые  настройки в конфигурационном файле.



Как это сделано в Roxy-WI


В Roxy-WI мы стремились сделать работу с контейнерами максимально простой и удобной: по сути управление сервисом в контейнере не должно ничем отличаться от управлением тем же сервисом в неконтейнеризованном виде.


Для экземпляров сервисов, работающих в контейнерах, у нас предусмотрена визуализация: на странице HAProxy => Overview (или Nginx => Overview) они помечены значком “коробки”, то есть контейнер. Для них доступны те же функции, что и для всех обычных сервисов.


Начиная с текущей версии (5.3.0)  могут установить HAProxy и Nginx в контейнерах непосредственно через Roxy-WI. Всё очень просто: идём на страницу Servers page и нажимаем на кнопку Proxy installation.  В открывшемся окне выбираем чекбокс Install as a Docker container. После этого всё, начнётся установка.


По умолчанию контейнеры получают имена haproxy и nginx.  Если эти имена требуется изменить, нужно перейти на страницу Settings и отредактировать значения параметров haproxy_container_name и/или nginx_container_name. 


Для контейнеров используются пути к конфигурационным файлам, которые указаны в настройках. Именно эти пути пробрасываются в Docker. Если по тем или иным причинам требуется использовать нестандартные пути, то их нужно прописать заранее перед установкой.



Заключение


В этой статье мы кратко рассказали об особенностях работы с Docker через Roxy-WI. Чтобы усовершенствовать соответствующий набор функций, нам необходима обратная связь от актуальных и потенциальных пользователей. Приглашаем всех попробовать управлять контейнерами; любые пожелания и предложения приветствуются.


https://roxy-wi.org  - официальный сайт и документация проекта;


https://github.com/hap-wi/roxy-wi - репозиторий проекта (можно не только высказывать своё мнение, но и присылать пулл-реквесты);


https://t.me/haproxy_wi  - наш телеграм-канал; подписывайтесь и будьте в курсе всех новостей.

Показать полностью
[моё] Web Gui Nginx Длиннопост
6
28
aidaho6
aidaho6
4 года назад
GNU/Linux

What does the Checker check, или как организовать удобный мониторинг через веб-интерфейс =)⁠⁠

Продолжаем серию публикаций о нашем веб-интерфейс для HAProxy. Сегодня мы поговорим о специализированном сервис под названием Checker, предназначенном для мониторинга сервисов HAProxy и Nginx, а также бэкендов HAProxy. Если один из сервисов падает, то Checker рассылает уведомления через Telegram или Slack.

Это очень удобно: не нужно "прикручивать" сторонний инструмент мониторинга, да и умеет Checker (причём из коробки) гораздо больше. Впрочем, обо всём по порядку.

Структура и функции


Сервис Cheсker состоит из управляющего компонента (Master Checker в терминологии Roxy-WI) и рабочих компонентов (Worker Checkers в терминологии Roxy-WI)

Рабочие компоненты на текущий момент имеются для HAProxy и Nginx.C функциями управляющего компонента всё понятно - он отвечает за функционирование рабочих компонентов.


Рассмотрим их функции более подробно. Рабочий компонент для HAProxy умеет проверять статус сервиса HAProxy, а также статус бэкендов, а также рассылать уведомления в Теlegram, Slack или в оба мессенджера одновременно. Важный момент: ещё он умеет проверять, приближается ли число установленных соединений к заданному лимиту, и отправлять соответствующие уведомления. При использовании сторонних инструментов мониторинга это возможно, но всё сложнее: для того же Prometheus надо прописывать отдельные правила. У нас же никаких дополнительных настроек не нужно.Рабочий компонент для Nginx умеет проверять статус сервиса Nginx, и рассылать уведомления, если статус изменился. В планах — создание рабочего компонента для Keepalived. Он будет проверять состояние сервиса, а также отправлять уведомления при каждом переключении между мастером и бэкапом.


Установка


Дисклеймер: для выполнения всех описанных ниже действий у вас уже должен быть установлен Roxy-WI. Если вы его ещё не установили, читайте здесь, как это сделать.


Установить Checker можно с помощью стандартного менеджера пакетов:


#yum
$ sudo yum install roxy-wi-checker
#apt
$ sudo apt-get install roxy-wi-checker

После установки нужно запустить Checker. Для этого в главном меню выбираем пункт Admin Area => Services, находим в списке roxy-wi-checker (он там идёт первым) и нажимаем на значок "Play"


Затем потребуется включить Checker для серверов, для которых мы планируем получать уведомоления. Выбираем в главном меню пункт HAProxy => Overview или Nginx => Overview. На экране мы увидим список серверов, в котором каждый сервер будет представлен в виде отдельной карточки, например:

Здесь всё просто: выбираем соответствующий чекбокс — и Checker включен. Уведомления обо всех событиях будут приходить прямо в браузере и сопровождаться звуковым сигналом —’это удобно, например, для дежурных системных администраторов и сотрудников служб технической поддержки.


Информация обо всех событиях, которые регистрирует Checker, сохраняется в истории (Monitoring => Checker history в главном меню):

Она может оказаться полезной при диагностике и устранении неисправностей.Состояние как управляющего (Master), так и рабочих (Worker) компонентов Checker можно отследить на главной странице Roxy-WI в разделе Services status:

Практический кейс: настраиваем уведомления через Telegram


Рассмотрим возможности Checker более подробно. Попробуем сделать так, чтобы сервис рассылал сообщения об изменения состояния сервисов через Telegram.


Для этого потребуется:


1. создать Telegram-бота;

2. создать Telegram-канал;

3. предоставить боту права администратора канала;

4. активировать Checker для серверов, информацию о которых вы планируете получать


Краткая инструкция по созданию бота опубликована на сайте Roxy-WI. По завершению всей процедуры BotFather (служебный бот, который управляет всеми ботами в Telegram) выдаст токен. Скопируем токен и выберем в главном меню Admin Area => Services.


Интерфейс для управления Telegram-уведомлениями выглядит так:

Вставляем Token в соответствующее поле, в поле Channel name вводим имя канала (обязательно со знаком @). Далее нужно будет выбрать группу, для которой будут рассылаться тестовые уведомления. В нашем случае это группа dev.


Вообще серверы на группы можно делить на любых основаниях, и создавать неограниченное количество групп (пункт Admin Area => Groups в главном меню).Заполнив все поля, нажимаем на кнопку test — в канал будет отправлено тестовое уведомление.


Заключение


В этой статье мы кратко рассказали о возможностях нашего внутреннего инструмента мониторинга и рассмотрели практический кейс. Приглашаем всех желающих поэкспериментровать — и высказать своё мнение. Все предложения по улучшению проекта приветствуются.


Наш репозиторий — https://github.com/hap-wi/roxy-wi

Наш Telegram-канал — https://t.me/haproxy-wi

Показать полностью 5
[моё] Nginx Gui Длиннопост Интерфейс
7
462
megavolt0
megavolt0
4 года назад

Как хоббиту шифровать DNS запросы. Собственный DNS-over-HTTPS сервер⁠⁠

Всё, что написано ниже, написано только для маленьких хоббитов волею случая проживающих в Мордоре и находящихся под надзором злобного Саурона. Это просто сказка, любые совпадения с реальностью случайны.

Представим себе совершенно гипотетическую ситуацию. Какому-то хоббиту не повезло оказаться на ПМЖ в Мордоре — стране, где каждый его шаг в Интернете хочет видеть и контролировать злодей Саурон. В нашей-то стране такого конечно нет. Только в волшебном Мордоре. Хоббит в целом, наверное, не дурак и давно уже сделал собственный VPN-сервер, как описано в этих статьях. Ну или хоббит уже преисполнился, и сделал, как написано здесь или здесь. Однако не всегда есть возможность/желание установить VPN-клиент. Например хоббит за рабочим компьютером или это компьютер бабушки хоббита, которая не умеет запускать VPN-клиенты. И до сих пор хоббита выручало то, что все сайты уже давно используют защищённый протокол HTTPS. Да вот беда: Саурон узнал про существование DNS. Это такая служба Domain Name System, которая позволяет хоббитопонятный интернет-адрес превратить в IP-адрес, понятный для интернет-браузеров. Без этой службы интернет-браузеры не работают. А к серверам службы DNS большинство компьютеров обычно ходят по не шифрованному DNS протоколу.

Саурон приказал своему орккомнадзору фильтровать эти запросы, записывать их и, в некоторых случаях, подменять. То есть Саурон не видит, что хоббит делал на сайте, ведь там протокол HTTPS, но вот какие сайты хоббит запрашивал — он видит. А если хоббит захотел открыть эльфийский сайт, то можно в DNS запросе подменить ответ и хоббит вместо эльфийского сайта увидит злобную картинку от орккомнадзора. Или просто обвинить хоббита в сочувствии и поддержке эльфов, признать его эльфоагентом. Тогда мудрые эльфы придумали протокол DNS-over-HTTPS (сокращенно DOH). Это когда DNS-сервер прикидывается обычным веб-сервером, работающим по протоколу HTTPS, и интернет-браузер хоббита запрашивает у этого сервера IP-адреса сайтов по зашифрованному протоколу.

Саурон сначала приуныл, но потом до него дошло, что DNS сервера эльфов, поддерживающие протокол DOH, это те же сервера, что и работающие по обычному DNS протоколу. Да и серверов таких совсем не много. Тогда Саурон приказал своим оркам блокировать любые запросы хоббитов к известным серверам, поддерживающим DOH. Это заставит хоббита пользоваться мордорскими DNS серверами и можно и дальше фильтровать/записывать/подменять его запросы. Что ж делать хоббиту? Ну, например, использовать личный VPN, как написано в начале статьи. Но у хоббита есть потребность обойтись без VPN. Хоббит хитрый и он подумал: обращения к серверу DOH всё равно выглядят как обычный HTTPS, выдаёт их в основном только то, что они идут к известным Саурону DNS-серверам. Что если сделать свой web-сервер, такой же, как тысячи других, работающий по HTTPS, но при этом способный выступать посредником между хоббитом и публичным DNS-сервером. Т.е. сервер хоббита будет принимать зашифрованные DNS запросы, пересылать их публичному эльфийскому DNS-серверу, принимать ответы, зашифровывать и отправлять обратно хоббиту. Получится реверс-прокси сервер для DOH. Расположить его конечно нужно там, куда не дотянуться беспредельничающие орки.

Для Саурона это будет выглядеть так, как будто хоббит ходит на очередной web-сайт. Конечно, если он начнёт вглядываться очень пристально в конкретного хоббита, то через некоторое время поймет что к чему. Но хобиттов в Мордоре миллионы и Саурон предпочитает бить по площадям. Кроме того DOH реверс-прокси лишит Саурона списка эльфийских сайтов, которые запрашивал хоббит. А это может помочь хоббиту в его не простой жизни.


Всё, что описано ниже, выглядит сложным. Но это не сложно. С этим справится любой хоббит, даже если у него лапки. Нужно просто верить в себя и следовать плану.

Ниже будут конфиги. Их форматирование будет безбожно убито. Они всё равно останутся рабочими, но будут некрасивенькими. Конфиги в нормальном виде можно найти в оригинале статьи.

Для начала хоббиту нужно заблаговременно озаботится арендой доменного имени. Как это сделать примерно описано в начале этой статьи. Предположим хоббит арендовал доменное имя theshire.ru. В принципе он мог его и использовать для реверс-прокси. Но можно добавить имя третьего уровня. Тогда сам домен можно будет потом использовать для чего-то ещё. Так больше гибкости. Хоббит решил сделать имя третьего уровня ns1.theshire.ru. У него получились такие записи домена:

В этих записях вписан IP арендованного хоббитом VPS. Думаю не нужно напоминать, что виртуальный сервер должен находится за пределами Мордора. Хоббит, используя эту статью, арендовал предельно дешёвую виртуалку с такими параметрами:

Как видно, на сервере установлена операционная система CentOS 7. Далее нужно настроить защищённый вход на сервер, как описано здесь, и файрволл сервера, как описано здесь. Только при настройке файрволла нужно в ipt-set записать другое содержимое:

#!/bin/sh

IF_EXT="venet0"

IPT="/sbin/iptables"

IPT6="/sbin/ip6tables"

# flush

$IPT --flush

$IPT -t nat --flush

$IPT -t mangle --flush

$IPT -X

$IPT6 --flush

# loopback

$IPT -A INPUT -i lo -j ACCEPT

$IPT -A OUTPUT -o lo -j ACCEPT

# default

$IPT -P INPUT DROP

$IPT -P OUTPUT DROP

$IPT -P FORWARD DROP

$IPT6 -P INPUT DROP

$IPT6 -P OUTPUT DROP

$IPT6 -P FORWARD DROP

# allow forwarding

echo 1 > /proc/sys/net/ipv4/ip_forward

# NAT

# #########################################

# SNAT - local users to out internet

$IPT -t nat -A POSTROUTING -o $IF_EXT -j MASQUERADE

# INPUT chain

# #########################################

$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# ssh

$IPT -A INPUT -i $IF_EXT -p tcp --dport 22 -j ACCEPT

# nginx

$IPT -A INPUT -i $IF_EXT -p udp --dport 53 -j ACCEPT

$IPT -A INPUT -i $IF_EXT -p tcp --dport 80 -j ACCEPT

$IPT -A INPUT -i $IF_EXT -p tcp --dport 443 -j ACCEPT

$IPT -A INPUT -i $IF_EXT -p tcp --dport 853 -j ACCEPT

# OUTPUT chain

# #########################################

$IPT -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Не забудьте про правильное имя внешнего интерфейса в переменной IF_EXT (вторая строчка), как описано в этой статье.

Обновим сервер и установим необходимые утилиты:

yum -y update

yum -y install net-tools wget

Проверим, не сидит ли какая-то дефолтная http служба на нужном нам 80-ом порту:

netstat -tulnp | grep 80

Сидит, собака

Убиваем её

systemctl stop httpd

systemctl disable httpd

yum -y remove httpd

Теперь сервер готов. Реверс-прокси сделаем конечно же на nginx. Ранее уже была статья про использование его в такой роли. Ретранслировать DOH запросы не на столько простая задача, как кажется. Дабы не изобретать велосипед, используем уже готовый проект NGINX-DNS. Благодаря скриптам этого проекта мы не только сделает DOH между хоббитом и его реверс прокси, но и обмен по протоколу DOT между реверс-прокси и публичным DNS. Т.е даже хостинг VPS не сможет заглянуть в трафик хоббита! Кстати, для этого проекта подойдёт не каждый nginx. Тот, который в epel-release, НЕ подойдёт. Поэтому epel-release ни в коем случае не устанавливаем, он всё поломает. Накатим репозиторий с правильным nginx:

cd /tmp

wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release...

rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm

Проверим, что операционная система теперь знает, где брать nginx и модули к нему:

yum list | grep nginx

Отлично. Устанавливаем nginx и нужный модуль:

yum -y install nginx.x86_64 nginx-module-njs.x86_64

Еще раз проверьте, что файрволл настроен и открытые порты выглядят так:

iptables -L -n

Теперь любым удобным способом откроем для редактирования файл /etc/nginx/conf.d/default.conf (хоббитам с лапаками рекомендую использовать WinSCP и Notepad++). В этом файле сразу после строчки

server {

нужно найти строчку

server_name localhost;

и вместо localhost вписать своё доменное имя. У хоббита это так (не удалите случайно точку с запятой!):

server_name ns1.theshire.ru;

Файл можно сохранить и закрыть. Запускаем nginx и смотрим, что всё в порядке:

systemctl start nginx

systemctl status nginx

Дальше в браузере на компьютере переходим по доменному адресу сервера. У хоббита это http://ns1.theshire.ru

Оно живое! Но только по протоколу HTTP, а нам надо по HTTPS. Для этого нужно сделать SSL сертификаты от letsencryp. Сертификаты весь прогрессивный эльфийский мир делает с помощью Certbot. Поскольку epel-release мы не используем, то ставить certbot хоббиту придётся через жопу Pip.

Накатим питона с либами:

yum -y install python3 augeas-libs

и подготовим виртуальную среду:

python3 -m venv /opt/certbot/

/opt/certbot/bin/pip install --upgrade pip

Отлично. Можно и накатить сам certbot:

/opt/certbot/bin/pip install certbot certbot-nginx

ln -s /opt/certbot/bin/certbot /usr/bin/certbot

Теперь сделаем сертификаты:

certbot --nginx

Соглашаемся с условиями использования, указываем почту (желательно настоящую, туда, если что, будут спамить о проблемах с сертификатами) и отказываемся от спама. На запрос доменного имени нужно выбрать своё. У хоббита получилось так:

Если на этом этапе не удаётся создать сертификаты, появляются ошибки, то:

--  ещё раз проверить настройки файрволла и доступность страницы приветствия по (у хоббита это http://ns1.theshire.ru);

--  возможно домен арендован и/или его записи внесены менее 24 часов назад и не все DNS серверы успели их синхронизировать. Тогда придётся подождать.

Современный certbot настолько преисполненный, что он сам вписал настройки HTTPS в nginx и сам применил их. Хоббитам остаётся только открыть свой доменный адрес по HTTPS:

SSL сертификаты выдаются всего на три месяца. Дабы они не прокисли, добавляем в планировщик задачу по обновлению:

echo "0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | tee -a /var/spool/cron/root > /dev/null

и проверяем результат:

crontab -l

Теперь превратим наш безобидный nginx в боевой DOH сервер. Для начала остановим его:

systemctl stop nginx

Теперь из проекта NGINX-DNS с гитхаба скопируем нужные нам файлы и засунем в папку nginx. При этом старые конфиги nginx удалять не будем, а просто добавим к имени приставку .old:

cd /tmp

wget https://github.com/TuxInvader/nginx-dns/archive/refs/heads/m...

unzip master.zip

cp -r nginx-dns-master/njs.d /etc/nginx/

cd /etc/nginx/

mv nginx.conf nginx.conf.old

mv ./conf.d/default.conf default.conf.old

В папке /etc/nginx/ создадим файл nginx.conf с вот таким содержимым:

user nginx;

worker_processes auto;

load_module modules/ngx_stream_js_module.so;

error_log /var/log/nginx/error.log error;

#error_log off;

pid /var/run/nginx.pid;

events {

worker_connections 1024;

}

http {

include /etc/nginx/mime.types;

default_type application/octet-stream;

# logging directives

log_format doh '$remote_addr - $remote_user [$time_local] "$request" '

'[ $msec, $request_time, $upstream_response_time $pipe ] '

'$status $body_bytes_sent "$http_x_forwarded_for" '

'$upstream_http_x_dns_question $upstream_http_x_dns_type '

'$upstream_http_x_dns_result '

'$upstream_http_x_dns_ttl $upstream_http_x_dns_answers '

'$upstream_cache_status';

access_log /var/log/nginx/doh-access.log doh;

#access_log off;

resolver 1.1.1.1 valid=10s;

# This upstream connects to a local Stream service which converts HTTP -> DNS

upstream dohloop {

zone dohloop 64k;

server 127.0.0.1:8053;

keepalive_timeout 60s;

keepalive_requests 100;

keepalive 10;

}

# Proxy Cache storage - so we can cache the DoH response from the upstream

proxy_cache_path /var/cache/nginx/doh_cache levels=1:2 keys_zone=doh_cache:10m;

# The DoH server block

server {

server_name ns1.theshire.ru;

root /usr/share/nginx/html;

# Listen on standard HTTPS port, and accept HTTP2, with SSL termination

listen 443 ssl http2 default_server;

ssl_certificate /etc/letsencrypt/live/ns1.theshire.ru/fullchain.pem; # managed by Certbot

ssl_certificate_key /etc/letsencrypt/live/ns1.theshire.ru/privkey.pem; # managed by Certbot

ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

ssl_session_cache shared:ssl_cache:10m;

ssl_session_timeout 10m;

# DoH may use GET or POST requests, Cache both

proxy_cache_methods GET POST;

# Return 404 to all responses, except for those using our published DoH URI

location / {

return 404 "404 Not Found\n";

}

# This is our published DoH URI

location /dns-query {

# Proxy HTTP/1.1, clear the connection header to enable Keep-Alive

proxy_http_version 1.1;

proxy_set_header Connection "";

# Enable Cache, and set the cache_key to include the request_body

proxy_cache doh_cache;

proxy_cache_key $scheme$proxy_host$uri$is_args$args$request_body;

# proxy pass to the dohloop upstream

proxy_pass http://dohloop;

}

}

server {

if ($host = ns1.theshire.ru) {

return 301 https://$host$request_uri;

} # managed by Certbot

listen 80;

listen [::]:80;

server_name ns1.theshire.ru;

return 404; # managed by Certbot

}

}

# DNS Stream Services

stream {

# DNS logging

log_format dns '$remote_addr [$time_local] $protocol "$dns_qname"';

access_log /var/log/nginx/dns-access.log dns;

#access_log off;

# Include the NJS module

js_include /etc/nginx/njs.d/nginx_stream.js;

# The $dns_qname variable can be populated by preread calls, and can be used for DNS routing

js_set $dns_qname dns_get_qname;

#DNS upstream pool.

upstream dns {

zone dns 64k;

server 1.1.1.1:53;

}

# DNS over TLS upstream pool

upstream dot {

zone dot 64k;

server 1.1.1.1:853;

}

# DNS(TCP) and DNS over TLS (DoT) Server

# Upstream can be either DNS(TCP) or DoT. If upstream is DNS, proxy_ssl should be off.

server {

# DNS TCP

listen 53;

# DNS DoT

listen 853 ssl;

ssl_certificate /etc/letsencrypt/live/ns1.theshire.ru/fullchain.pem; # managed by Certbot

ssl_certificate_key /etc/letsencrypt/live/ns1.theshire.ru/privkey.pem; # managed by Certbot

ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

# This is used to pull out question for logging

js_preread dns_preread_dns_request;

# Enable SSL re-encryption for DoT connection upstream

proxy_ssl on;

proxy_pass dot;

}

# DNS over HTTPS (gateway) Service

# Upstream can be either DNS(TCP) or DoT. If upstream is DNS, proxy_ssl should be off.

server {

listen 127.0.0.1:8053;

js_filter dns_filter_doh_request;

proxy_ssl on;

proxy_pass dot;

}

# DNS(UDP) Server

# DNS UDP proxy onto DNS UDP

server {

listen 53 udp;

proxy_responses 1;

js_preread dns_preread_dns_request;

proxy_pass dns;

}

}

Указанный выше конфиг сделан для нашего хоббита и его доменного имени ns1.theshire.ru. Чтобы переделать файл под другого хоббита и другое доменное имя:

Найти строчки, начинающиеся на «server_name», и заменить в них доменное имя ns1.theshire.ru на своё.

Найти строчки, начинающиеся на «ssl_certificate», и заменить в них путь на сертификат своим. Свой путь можно найти в аналогичных строчках файла /etc/nginx/default.conf.old

Сохраните и закройте файл. Выполните тест корректности конфига командой:

nginx -t

У хоббита хоть и лапки, но прямые. У него получилось с первого раза:

Если есть ошибки, то будут написаны номера строк с ними. Смотрим в эти строки и исправляем. Чаще всего хоббиты нечаяно удаляют «;» в конце строк.

Теперь nginx можно запустить и добавить в автозагрузку.

systemctl start nginx

systemctl enable nginx

Собственно всё. Хоббит сделал сервер который:

1. Может работать как обычный DNS сервер по порту 53/UDP. Если добавить его IP в настройки DNS, например, сетевой карты компьютера, то всё взлетит. Обратите внимание, что это не шифрованный обмен. Обычный DNS. Если этот функционал не нужен, то просто закомментируйте/удалите строку с портом 53 в файле /root/ipt-set и перезагрузите сервер.


2. Принимает запросы по протоколу DOH (по порту 443), расшифровывает их, разбирает, перенаправляет запросы на публичный DNS сервер по зашифрованному протоколу DOT, полученные ответы зашифровывает и отправляет хоббиту.


3. Принимает запросы по протоколу DOТ, расшифровывает их, разбирает, перенаправляет запросы на публичный DNS сервер по, опять же, протоколу DOT, полученные ответы зашифровывает и отправляет хоббиту. Протокол DOT на сегодня не особо распространён в браузерах. Если этот функционал не нужен, то просто закомментируйте/удалите строку с портом 853 в файле /root/ipt-set и перезагрузите сервер.

Хоббиту осталось настроить браузер.

В Mozilla Firefox нужно открыть Настройки -> Параметры сети -> Настроить, в самом низу поставить галочку «Включить DNS через HTTPS» и вписать свой DNS адрес. У нашего хоббита он такой:

https://ns1.theshire.ru/dns-query

Другим хоббитам вместо ns1.theshire.ru нужно вписать свой домен.

В Google Chrome открыть Настройки -> Конфиденциальность и безопасность -> Безопасность -> Использовать безопасный DNS-сервер вписать сервер также, как это указано выше для Firefox. У нашего хоббита это получилось так:

Для других браузеров хоббиту предлагается напрячь лапки и погуглить.

В качестве домашнего задания также предлагается нагуглить, как настроить Windows 10 для использования DOH. Необязательный пункт. Браузеры не зависят от этого и используют настройку, показанную выше.

Дальше хоббит пользуется браузером как обычно. Сайты должны без проблем открываться. Убедится, что сервер работает как надо, можно сходив в файл лога /var/log/nginx/doh-access.log. Там будут логгированы все DNS запросы хоббита по протоколу DOH.

Посмотрев логи умненький хоббит должен подумать, а нужны ли ему эти следы? Если нет, то он в файле /etc/nginx/nginx.conf:

-- находит строчку, начинающуюся на «error_log» и ставит в ее начале #. А вот из строчки «#error_log off;» наоборот символ # убирает.

-- находит строчки, начинающиеся на «access_log» и ставит в их начале #. Во всех строчках «#access_log off;» символ # убирает.

Дальше нужно сохранить файл. Остановить сервер командой:

systemctl stop nginx

удалить все файлы из папки /var/log/nginx/ и запустить сервер обратно:

systemctl start nginx

Теперь никаких следов.

За сим эта часть саги про хоббита заканчивается. Обсуждение в https://t.me/SecFAll_chat

Утаскивать в сообщества запрещаю.

Показать полностью 18
[моё] Nginx Linux Длиннопост
108
39
aidaho6
aidaho6
4 года назад
GNU/Linux

Как редактировать конфиг через Web-GUI для Haproxy (и не только)⁠⁠

О том, как написать Web GUI для HAProxy, мы уже говорили в двух статьях (1 и 2). С момента публикации последней статьи прошёл год; сейчас, по прошествии времени, очевидно, что о многих вещах (важных и полезных) мы так и не рассказали подробно. Сегодня мы возвращаемся на Пикабу - и постараемся публиковать статьи на более или менее регулярной основе. В этих статьях мы подробно расскажем о специфике работы c Roxy-WI, о возможностях и преимуществах нашего решения. Начнём с набора функций, о котором мы в предыдущих статьях упоминали, но мало. Речь идёт о работе с конфигурационными файлами.

С помощью Roxy-WI можно работать с конфигурационными файлами для трёх сервисов: HAProxy, Nginx и Keepalived. Через веб-интерфейс пользователи могут выполнять следующие операции:


1. редактировать конфигурационные файлы;

2. визуализировать структуру сети;

3. сравнивать текущую версию конфигурационного файла с предыдущей;

4. сохранять все предыдущие версии конфигурационных файлов и откатываться на старую версию в случае необходимости;


Рассмотрим каждую из этих функций подробнее.



Зачем вообще редактировать конфигурационные файлы через веб-интерфейс?


Такой вопрос может возникнуть у многих читателей. Действительно, многие из нас привыкли работать с конфигурационными файлами в текстовом редакторе, и никаких сложностей в этом на первый взгляд нет. Но есть нюансы. Начнём с того, что конфигурационный файл может иметь очень сложную структуру. Сориентироваться в нём бывает сложно, особенно начинающему пользователю. В графическом интерфейсе Roxy-WI всё просто и наглядно. Возьмём в качестве примера конфигурационный файл для HAProxy. Итак, выбираем в главном меню HAProxy => Configs, в выпадающем меню выбираем нужный сервер и нажимаем на кнопку Open. После этого видим такую картину (приводим небольшой фрагмент конфига, секции global и defaults):

Всё вполне понятно; если кликнуть по ссылке Edit, откроется форма для редактирования:

После внесения изменений можно нажать на кнопку Check config и проверить конфигурационный файл на наличие синтаксических ошибок.

Для начинающего пользователя HAProxy (а также Nginx и Keepalived) на таком интерфейсе очень хорошо учиться. Опытному пользователю графический интерфейс поможет не запутаться в сложных конфигах и тем самым снизить вероятность ошибок из-за человеческого фактора.

Ещё Roxy-WI может существенно упростить жизнь, если серверов много: все конфиги можно редактировать в одном месте. Если вы изменили конфиг на master-сервере и применили одно из указанных на кнопках со скриншота выше действий, аналогичные изменения произойдут и на slave-сервере.



Визуализация


Просто читая конфигурационный файл HAProxy, не всегда можно сразу представить, а как именно всё устроено. Именно для этого в Roxy-WI предусмотрена функция визуализации. Выбираем нужный сервер, нажимаем на кнопку Map и видим:

Такая возможность очень полезна для всех, кто только учится работать с HAProxy.

Кроме того, она может очень пригодится в ситуации, когда нужно что-то наглядно объяснить коллегам, которые с HAProxy вообще дела не имели или имели, но очень мало (менеджерам, тестировщикам. техническим писателям и многим другим — здесь возможны варианты).



Работа с версиями


Представьте себе такую гипотетическую ситуацию: вы что-то изменили в конфиге, и нужный вам сервис (тот же HAProxy или Nginx) не запускается. Для таких случаев в Roxy-WI предусмотрена возможность сравнения конфигурационных файлов.

Выбираем нужные версии, нажимаем на кнопку Compare — и на видим diff двух конфигов. Выглядит он так же, как дифф файлов на GitHub:

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


Так как Roxy-WI сохраняет все версии конфигурационных файлов, то в случае возникновения неисправностей всегда можно откатиться на предыдущую версию. Например, если после изменения конфига возникли ошибки, вы можете откатиться на старую (рабочую) версию, и сервисы будут доступны, пока вы ищете и исправляете ошибки в новой.


Набор функций по работе с версиями мы планируем расширять. В Roxy-WI серверы могут получать статус protected. Для этих серверов мы планируем сделать следующее:, полноценное редактирование будет доступно только администраторам, а остальные пользователи смогут только предагать изменения. После проверки админом эти изменения могут быть или приняты, или отклонены — принцип такой же, как при работе с мердж-реквестами на GitHub.



Заключение


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


https://roxy-wi.org/ - официальный сайт проекта (здесь же документация);

https://github.com/hap-wi/roxy-wi - официальный репозиторий проекта.


Любые пожелания по улучшению работы с конфигурами приветствуются - добро пожаловать в комментарии.

Показать полностью 5
[моё] Web Nginx Длиннопост
21
troyilion
troyilion
4 года назад

Nginx location wildcard proxy_pass⁠⁠

Помогите разобраться, есть 2 сервера nginx и внутренний сайт. Необходимо передать путь после основного домена в секцию прокси пасс видкардом. Подскажите пожалуйста как верно написать регулярку для этого.

Nginx Локация Текст
10
71
aidaho6
aidaho6
4 года назад
GNU/Linux

Как случайно продолжить писать Web-GUI для Haproxy⁠⁠

Прошло уже пол года, как я написал Как случайно написать Web-GUI для Haproxy, а воз уже давно не там — все меняется и развивается и HAProxy-WI старается соответствовать этой тенденции. За два года было проделано много работы, об основных изменениях я и хочу сейчас рассказать, так что: добро пожаловать под «кат».

Появились страницы для каждого сервера, что удобно для понимания работы отдельно взятых сервисов. Выглядит это так:

В комментариях к предыдущему посту мне несколько раз говорили что использование bash скриптов для установки сервисов — это стреляние себе в ногу. Я с ними согласен и по этому 95% всех установок сейчас проходят через Ansible. Действительно удобно, да к тому же надежнее. Одни плюсы вокруг!


Как можно не изобрести велосипед в велосипеде? Ребенок велосипеда, так сказать… Маленький такой велосепедик, трех колесный пожалуй: возможность простого мониторинга портов на предмет доступности порта, ответа HTTP и проверка ответа по ключевому слову. Да, не много функций, но зато ставить и админить легко :)


Очень крутая работа с HAProxy RunTime API. Почему очень крутая? Такая есть только у нас и… пожалуй все. Конечно звучит немного претенциозно, но мне правда нравится как это работает. Как например выглядит работа со многими любимыми и ненавидимыми в тоже время stick-table:

А с версии 5.0.0.0 можно развернуть сервера в AWS и в DigitalOcean!

Т.к. для этого используется Terraform, то сервер можно редактировать и даже удалить!


А ну и сайт стал значительно красивей, на нем появились "Хоутушки" и более детально описаны разделы.

Показать полностью 3
[моё] Nginx Gui Web Длиннопост
2
Промо Забустить свой пост
specials
specials

Время прогревать аудиторию!⁠⁠

Сентябрь — это не только начало учебного года, но и время активной подготовки к горячему сезону распродаж. Самое время подключить подписку Пикабу+:

  • рассказывайте о своих товарах и услугах

  • добавляйте ссылки

  • создавайте витрину товаров прямо в профиле

  • подключайте дополнительное продвижение постов

Пора готовить сани!

ПОДКЛЮЧИТЬ ПИКАБУ+

Подписки Аудитория Продвижение Бизнес Текст
43
HUNY
HUNY
4 года назад

Добавим HTTPS (SSL) в Home Assistant - установим Let's Encrypt и Duck DNS в Docker, настроим веб-сервер Nginx⁠⁠

Привет Пикабу!

В этом посте расскажу как добавить HTTPS (SSL) в Home Assistant.

А для этого установим Let's Encrypt и Duck DNS в Docker, настроим веб-сервер Nginx.

Здесь была "подготовительная часть" - "Установка Docker, Docker Compose и Portainer"

Вы это легко можете сделать с помощью аддонов, если у вас версия Home Assistant Supervised или Home Assistant OS:

Мы же рассмотрим универсальную инструкцию (не зависящую от версии Home Assistant) с установкой Let's Encrypt Duck DNS и Nginx в в Docker, которая одинаково подходит для обоих вариантов, рассмотренных мной ранее: -  Home Assistant Supervised и Home Assistant Core.

Рассматриваемый вариант вполне подходит для  Ubuntu 20.04 / Debian 10 / Kali Linux ... (Сервер, Десктоп, VPS Oracle ...)

Первым делом создадим домен на duckdns.org  - привяжем IP адрес реальной или виртуальной машины, где расположен наш  Home Assistant к имени DNS вида вашдомен.duckdns.org


DNS (Domain Name System) - система доменных имен, смысл которой в том, что каждому цифровому IP-адресу присваивается понятное буквенное имя (домен). Когда вы вводите в браузере доменное имя, сервера DNS преобразуют его в IP-адрес. Например, вашдомен.duckdns.org будет соответствовать IP-адресу  вашего сервера.

Далее будем использовать docker-compose для создания и запуска своих образов и контейнеров, а именно Let's Encrypt и Duck DNS. Вот содержание docker-compose.yml для этого:

version: '3.3'

services:


duckdns:

image: ghcr.io/linuxserver/duckdns
container_name: duckdns
environment:
- PUID=1000 #optional
- PGID=1000 #optional
- TZ=Europe/Samara
- SUBDOMAINS=вашдомен.duckdns.org
- TOKEN=89eJKhnby678nknt6NGHfghffe823

- LOG_FILE=false #optional
volumes:
- ./config:/config #optional
restart: unless-stopped
letsencrypt:
image: linuxserver/swag
container_name: letsencrypt
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Samara
- URL=вашдомен.duckdns.org

- VALIDATION=http
- EMAIL=mail@mail.ru #optional
- EXTRA_DOMAINS=вашдомен.duckdns.org

volumes:
- ./config:/config
ports:
- 443:443
- 80:80 #optional
restart: unless-stopped
ВАЖНО СОБЛЮДАТЬ ТАБУЛЯЦИЮ (ОТСТУПЫ)!!! При копировании текста в ваш docker-compose.yml с Пикабу отступов не будет - поставьте по 2 и 4 пробела в файле вручную (как на фото ниже).

TOKEN, DOMAIN (duckdns) .... - выделенные жирным, укажите естественно свои!


Итак, создаём файл docker-compose.yml в удобном для вас месте и удобным для вас способом. Я покажу пример для  Ubuntu 20.04 на VPS Oracle, где у  меня стоит тестовая Home Аssistant Supervised (конечно же это полная аналогия и для других вариантов).


Создам его по пути /home/ubuntu


# echo "version: '3.3'

services:" >/home/ubuntu/docker-compose.yml


Вы можете командой echo сразу отправить весь текст (содержание файла выше), либо открыть файл после создания командой nano, вставить содержимое:


# sudo nano /home/ubuntu/docker-compose.yml

Сохраняем и закрываем файл, нажав CTRL + X, Y, а затем ENTER.


Либо, всё то же самое можно сделать через WinSCP

Для создания и редактирования таких файлов рекомендую использовать Notepad++ вместо "блокнота":

После создания и сохранения файла, переходим в терминале в папку, где у нас лежит docker-compose.yml командой # cd (в Ubuntu 20.04 на VPS Oracle мы по умолчанию находимся в ней) и запускаем контейнеры:


#  docker-compose up -d


Если будет ошибка: "docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', PermissionError(13, 'Permission denied'))", то возможно вы просто забыли добавить "своего пользователя" в группу докеров на этом этапе.
# sudo usermod -aG docker $USER
# newgrp docker
Если вы ставили Ubuntu 20.04 на бесплатный VPS сервер от Oracle, то необходимо открыть порт 80 и 443 в Oracle. Как это сделать написано в конце этого поста.
Для "домашней" Ubuntu  или Debian на сервере или десктопе тоже нужно открыть порты 80 и 443 для Let's Encrypt, пробросив их на вашу машину в роутере (см. инструкцию к нему)

Проверяем в Portainer, что контейнеры Let's Encrypt и Duck DNS успешно запустились:

Осталось настроить Nginx.

Сейчас ваш Home Assistant всё ещё открывается по адресу HTTP://вашдомен.duckdns.org:8123 нам же нужен HTTPS (HTTPS://вашдомен.duckdns.org) :-)))


Открываем (для редактирования, удобным вам способом)  файл с настройками Nginx - default.

(В папке, где у вас был файл docker-compose.yml - появилась папка config)

В моём примере файл default расположен по пути /home/ubuntu/config/nginx/site-confs

# sudo nano /home/ubuntu/config/nginx/site-confs/default


ALT+T - очищаем всё его содержимое файла default, и вставляем следующее:


server {
listen 443 ssl;
listen [::]:443 ssl;
server_name вашдомен.duckdns.org;
include /config/nginx/ssl.conf;
client_max_body_size 0;
location / {
proxy_pass http://10.0.0.42:8123;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /api/websocket {
proxy_pass http://10.0.0.42:8123/api/websocket;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Сохраняем и закрываем файл, нажав CTRL + X, Y, а затем ENTER.


СОБЛЮДАЕМ ТАБУЛЯЦИЮ (ОТСТУПЫ)! При копировании в ваш файл default с Пикабу их не будет - поставьте пробелы в файле вручную (как на фото ниже).

вашдомен.duckdns.org и http://10.0.0.2:8123 .... - выделенные жирным, укажите естественно свои!

В строке proxy_pass - указываете локальный адрес вашей машины или в случае с VPS Oracle - "Private IP Address":

Заходим в Portainer и перезапускаем контейнер letsencrypt:

Теперь заходим по адресу HTTPS://yourdomain.duckdns.org и входим в Home Assistant со своими учётными данными:

В С Ё!!! Цель достигнута ;-)


Теперь вы имеете не только удалённый доступ к своему Home Assistant через "шифрованные транспортные механизмы SSL", но и можете настроить, например  управление колонками с Алисой из Home Assistant... и/или  добавить ваши умные устройства из Home Assistant в умный дом Яндекса и управлять ими с любого устройства с Алисой, в том числе с колонок....


Всем пока и "Бобра"! ;-)

Показать полностью 11
[моё] Умный дом Home Assistant Докер Https Nginx DNS Длиннопост
26
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии