![iptables разрешает доступ к моему личному веб-сайту, когда я нахожусь внутри своей локальной сети, но блокирует доступ, когда я нахожусь за ее пределами](https://rvso.com/image/1597813/iptables%20%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B0%D0%B5%D1%82%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D0%BC%D0%BE%D0%B5%D0%BC%D1%83%20%D0%BB%D0%B8%D1%87%D0%BD%D0%BE%D0%BC%D1%83%20%D0%B2%D0%B5%D0%B1-%D1%81%D0%B0%D0%B9%D1%82%D1%83%2C%20%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0%20%D1%8F%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B6%D1%83%D1%81%D1%8C%20%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8%20%D1%81%D0%B2%D0%BE%D0%B5%D0%B9%20%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9%20%D1%81%D0%B5%D1%82%D0%B8%2C%20%D0%BD%D0%BE%20%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D1%83%D0%B5%D1%82%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%2C%20%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0%20%D1%8F%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B6%D1%83%D1%81%D1%8C%20%D0%B7%D0%B0%20%D0%B5%D0%B5%20%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B0%D0%BC%D0%B8.png)
Я использую прозрачный прокси для пересылки запросов от источника (клиента) к месту назначения (серверу). Я использую 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, я полагаю, что он не знает, что с ними делать, и они просто теряются... в этом случае эти пакеты были необходимы для отображения веб-страницы в браузере клиента, поэтому веб-сайт отключается по тайм-ауту.
Ваше здоровье,
Флекс