Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1
RSS
Блокировка нелокального трафика для обратного прокси., wifiman
 
Недавно настроил NUC для запуска нескольких локальных сервисов домашней лаборатории, включая nginx reverse proxy. Он работает с доменным именем Cloudflare для предоставления локальных SSL-сертификатов. Я следовал этой инструкции для установки сервисов nginx и cloudflare-dynamic-dns. Все отлично работает локально, но, похоже, работает и с моего телефона по сотовой связи, чего я точно не ожидал. (Я не использую VPN локально или на телефоне). По адресу hass.mydomain.com должен попадать только к моему Home Assistant, когда я нахожусь в домашней сети, а не когда я вне дома. Похоже, я что-то пропускаю в настройках переадресации портов или правилах брандмауэра? Я уже немного поколдовал с этим сам и не могу понять, как настроить работу локально, но заблокировать доступ извне сети. У меня работает UCG Max с этими правилами переадресации портов: Что здесь не хватает?
 
Я использую внутренний DNS, и это похоже на то, что я искал. Я попытался создать локальную DNS-запись типа A для hass.mydomain.com --> 192.168.1.200:8123, но UniFi не позволяет мне указывать порт в DNS-записи, только 192.168.1.200. Это не подойдет для большинства моих сервисов. С точки зрения файрвола, как должны выглядеть записи правил файрвола? Разве с точки зрения роутера весь трафик не выглядит как идущий от Cloudflare, так что как я могу идентифицировать нежелательный трафик? Спасибо за помощь; я все еще учусь.
 
Если используете внутренний DNS, то должны иметь возможность отключить перенаправление порта и настроить записи DNS для имен. По-моему, можно и оставить перенаправление включенным, но добавить правило брандмауэра, чтобы блокировать нежелательный трафик из внешней сети к nginx. Я это не пробовал, но должно работать. Тем не менее, кажется странным сначала добавлять перенаправление, чтобы трафик попадал внутрь, а потом блокировать его... но я понимаю, что вы делаете это, чтобы воспользоваться NAT loopback.
 
Моя цель здесь была двойная: предоставить SSL-сертификаты для локальных сервисов и упростить доступ к внутренним сервисам, используя доменные имена вместо того, чтобы запоминать, что сервис X находится по адресу 192.168.1.37;8989. Есть ли более простой способ добиться этих целей, не выставляя при этом всё наружу?
 
Я в замешательстве, почему ты в замешательстве. Переадресация портов перенаправляет трафик из внешней сети на Nginx. Если ты не хочешь, чтобы внешний трафик приходил, либо отключи переадресацию, либо заблокируй нежелательный входящий трафик.
 
Спасибо за все эти подробности, я немного поэкспериментирую и посмотрю, как всё будет. Что касается вопроса, зачем нужен порт (помимо просто IP-адреса): я хощу несколько сервисов на одном сервере. Каждый из них доступен по своему порту. Например, по одному и тому же IP-адресу работают эти сервисы, каждый на своем порту:
Proxmox console (8006)
Home Assistant (8123)
Nginx (81)
Portainer (9443)
BabyBuddy (18000)
Часть привлекательности обратного прокси – это отсутствие необходимости ещё возиться с номерами портов. Надеюсь, это понятно.
 
Да, номер порта нельзя указывать в DNS A записях. Я никогда не работал с обратным прокси, но я не уверен, что полностью понимаю, зачем нужен номер порта в записи DNS. Достаточно указать хостнейм (например, hass.mydomain.com), чтобы он разрешился в IP-адрес, на который будет приходить трафик к nginx. Это может быть внутренний IP nginx или внешний IP роутера с переадресацией трафика к nginx. Когда браузер обращается к hass.mydomain.com, он разрешает хостнейм в IP-адрес. Опять же, всё должно быть в порядке, если это либо внутренний IP nginx в твоей локальной сети, либо внешний IP твоего шлюза с переадресацией на nginx. Браузер отправит запрос на <ip-адрес>:443 или <ip-адрес>:80. Этот запрос также будет включать заголовок Host: hass.mydomain.com, который сообщает nginx, куда отправлять трафик. Если ты не используешь переадресацию порта и используешь локальную DNS запись для hass.mydomain.com, nginx должен прослушивать порты 80 и 443. Возможно, поэтому тебе и нужен номер порта в DNS?

В любом случае, вернемся к твоему вопросу... Если Cloudflare предоставляет только DDNS услуги и ты используешь SSL сертификат, предоставленный ими с nginx, то веб-трафик не должен поступать от них, за исключением, возможно, трафика для проверки хоста, необходимого для обновления сертификата. Я не уверен, нужно ли это или нет, но тебе следует знать или иметь возможность выяснить.

Что касается Cloudflare DDNS, они просто принимают хостнейм и IP-адрес, предоставленные (вероятно, клиентом DDNS, работающим в твоей сети), и публикуют это в публичном DNS. Клиентские компьютеры используют публичный DNS для разрешения твоего FQDN (hass.mydomain.com) в твой IP-адрес, а затем устанавливают соединение с IP-адресом. Именно эти соединения ты пытаешься заблокировать.

Если я правильно понимаю, тебе просто нужно отредактировать переадресацию порта, чтобы ограничить входящие адреса, которые могут подключаться к nginx. Если тебе нужно разрешить Cloudflare для проверки сервера и обновления сертификатов, ты можешь разрешить только их блок адресов в ограниченных адресах. Если ты хочешь отключить всё, ты, вероятно, сможешь использовать RFC1918 адрес или какой-то другой адрес, который не должен быть "снаружи".

Другой вариант — не ограничивать адреса источника в конфигурации переадресации порта и добавить политику брандмауэра для блокировки трафика. То, что тебе нужно сделать, зависит от зоны брандмауэра, в которой находится nginx, но суть в том, что тебе нужно убедиться, что трафик из внешней сети к nginx заблокирован, добавив новую политику непосредственно выше политики "Авто переадресация порта", созданной переадресацией порта. Если тебе нужно разрешить Cloudflare для отправки входящих запросов для проверки хоста, ты можешь обновить это правило, чтобы указать их адрес(а) в поле IP-адреса источника и использовать флажок "Сопоставить противоположное", чтобы разрешить им проходить, но заблокировать всё остальное.

Если ты хочешь, чтобы хост nginx имел доступ к интернету, тебе понадобится политика выше той, что я только что описал, чтобы разрешить только возвратный трафик из внешней сети к nginx.

Я не уверен, что это всё на 100% верно. Я оставляю за тобой право перепроверить, чтобы всё работало так, как тебе нужно. Я предполагаю, что если я ошибся, кто-нибудь придёт и поправит меня...
Страницы: 1
Читают тему (гостей: 1)