iptables разрешает доступ к моему личному веб-сайту, когда я нахожусь внутри своей локальной сети, но блокирует доступ, когда я нахожусь за ее пределами

iptables разрешает доступ к моему личному веб-сайту, когда я нахожусь внутри своей локальной сети, но блокирует доступ, когда я нахожусь за ее пределами

Я использую прозрачный прокси для пересылки запросов от источника (клиента) к месту назначения (серверу). Я использую iptables, чтобы заставить работать прозрачный бит... то есть: он заставляет клиентский IP отображаться в месте назначения, даже если запрос прошел через промежуточный прокси... на самом деле это называется SSLH..https://github.com/yrutschle/sslh

Вот правила:

iptables -w -t mangle -N SSLH
iptables -w -t mangle -A PREROUTING -p tcp -m socket --transparent -j SSLH
iptables -w -t mangle -A OUTPUT --protocol tcp --out-interface eth0 -m multiport --sport 80,443,4480 --jump SSLH
iptables -w -t mangle -A SSLH --jump MARK --set-mark 0x1
iptables -w -t mangle -A SSLH --jump ACCEPT
ip rule add fwmark 0x1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

Я запускаю веб-сайт на Apache на той же машине, что и прокси-сервер. Это Pi, который находится внутри моей домашней локальной сети.

Когда я пытаюсь получить доступ к веб-сайту на этом Apache, а запрос исходит из-за пределов локальной сети... например, если я подключаюсь к точке доступа Wi-Fi на своем телефоне, страница появляется в браузере. ОДНАКО, если я подключаюсь к своей локальной сети Wi-Fi и пытаюсь открыть ту же страницу, я получаю тайм-аут... ЕСЛИ я не отключу эти правила iptables... но когда я это делаю, запросы, которые исходят из-за пределов локальной сети, тайм-аут прекращается.

Чтобы немного усложнить ситуацию, я также использую dnsmasq, работающий на том же Pi, для имитации NAT Loopback, чтобы я мог получить доступ к веб-сайту из своей локальной сети, используя его доменное имя, а не только локальный IP-адрес.

Если я просто использую локальный IP-адрес веб-сервера, он все равно не будет работать... если только я не

Нужно ли мне изменять правила iptables, чтобы такой веб-запрос:

https://www.example.com/test.html

Откроется ли страница независимо от того, нахожусь ли я внутри или вне своей локальной сети?

Спасибо,

Флекс

решение1

У меня есть решение, которое работает.

Мой вопрос был...

Нужно ли мне изменять правила iptables, чтобы такой веб-запрос:
https://www.example.com/test.html
Откроется ли страница независимо от того, нахожусь ли я внутри или вне своей локальной сети?

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

У меня была идея добавить правила для ПРИНЯТИЯ входящего и исходящего трафика со всех ip-адресов в моей локальной сети. Сервер dhcp на моем маршрутизаторе назначает ip-адреса устройствам в моей локальной сети в диапазоне от 192.168.1.1 до 192.168.1.200

Указав 192.168.1.0/24, я могу ссылаться на ВСЕ IP-адреса в этом диапазоне.

Итак, вот правила, которыми я пользуюсь сейчас:

iptables -t mangle -N SSLH
iptables -t mangle -A INPUT -p tcp -s 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A OUTPUT -p tcp -d 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m socket --transparent -j SSLH
iptables -t mangle -A OUTPUT -p tcp --out-interface eth0 -m multiport --sport 80,443,4480 -j SSLH
iptables -t mangle -A SSLH -j MARK --set-mark 0x1
iptables -t mangle -A SSLH -j ACCEPT
ip rule add fwmark 0x1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

И я рад сообщить, что такой URL-адресhttps://www.example.com/который указывает на веб-страницу на моем персональном сервере Apache на Pi в моей локальной сети, теперь открывает веб-страницу, если я запрашиваю страницу как изнутри, так и извне моей локальной сети.

Чтобы выяснить, почему мои изначальные правила блокировали запросы, исходящие из моей локальной сети, я попробовал изменить:

iptables -t mangle -A PREROUTING -p tcp -m socket --transparent -j SSLH

К:

iptables -t mangle -A PREROUTING -p tcp -j SSLH

Потому что прозрачный сокет игнорирует непрозрачные сокеты, которыми был бы запрос, не проходящий через sslh. Но трафик с локальных IP-адресов все равно блокировался.

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

iptables -t mangle -A OUTPUT -p tcp --out-interface eth0 -m multiport --sport 80,443,4480 -j SSLH

Но когда эти пакеты были «входящими» и не проходили через прокси-сервер sslh, чтобы добраться до места назначения, а затем, когда они стали «исходящими» и были направлены на интерфейс обратной связи для обработки sslh, я полагаю, что он не знает, что с ними делать, и они просто теряются... в этом случае эти пакеты были необходимы для отображения веб-страницы в браузере клиента, поэтому веб-сайт отключается по тайм-ауту.

Ваше здоровье,

Флекс

Связанный контент