LINUX.ORG.RU
ФорумAdmin

iptables не хочет DNATить с 443 на 80. Как починить?

 ,


0

2

приветики-пистолетики.

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

оно работает. реализация достаточно простая. весь трафик из mangle сперва заворачивается в новое кольцо, затем, если ты «свой» клиент, то сразу выходим из кольца (-j RETURN), а если мы тебя не знаем, тогда делаем пометку (-j MARK). именно этот список в этом кольце подлежит изменению (добавлению/удалению) IP/MAC-адресов через сайт. затем всех помеченных при попытке зайти на 80/443, перенаправляем к себе на локальный сайт, а весь прочий трафик попросту дропаем. ну и в конце концов успешно форвардим если всё ок.

# создаём кольцо
iptables -t mangle -N wlp0s19f2u2_mark

# все пакеты из ви-фи отправляем в это кольцо
iptables -t mangle -A PREROUTING -i wlp0s19f2u2 -j wlp0s19f2u2_mark

# доверенные клиенты из кольца выходят сразу же (адреса инсертим в начало списка)
# iptables -t mangle -I wlp0s19f2u2_mark 1 -m mac --mac-source a8:87:b3:22:60:4d -j RETURN
# iptables -t mangle -I wlp0s19f2u2_mark 1 -s 192.168.0.1 -j RETURN
# этот список редактируется через сайт shell_exec();

# если ты всё ещё в кольце, тогда ставим метку
iptables -t mangle -A wlp0s19f2u2_mark -j MARK --set-mark 1

# всех с меткой перенаправляем к себе, когда они открывают сайты 80/443
iptables -t nat -A PREROUTING -i wlp0s19f2u2 -m mark --mark 1 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80
iptables -t nat -A PREROUTING -i wlp0s19f2u2 -m mark --mark 1 -p tcp --dport 443 -j DNAT --to-destination 10.0.0.1:80

# всех с меткой при прочем трафике просто дропаем
iptables -t filter -A fw-interfaces -i wlp0s19f2u2 -m mark --mark 1 -j DROP

iptables -t filter -A fw-interfaces -i wlp0s19f2u2 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.254.0/16 -o enp3s5 -j MASQUERADE

проблема заключается в том, что при заходе на https-сайты у меня не работает редирект на мой локальный :80 сайт. то есть, если я удалив себя из «вайт-листа», захожу на какой-нибудь быдланет без https, то да, открывается мой локальный :80 сайт спокойно. если же я пытаюсь открыть пrавославный ЛОР по https, то фиг там.

тестирую wi-fi сеть на андроид смартфоне. я считаю, проблема заключается в том, что браузер изначально пытается создать https соединение, а когда iptables пытается ему подсунуть фейковый 80 порт, оно обсирается, простите, и дальше не идёт. и происходит завтык на этом.

можно ли это как-то починить? спасибо.

★★★★★

Последнее исправление: Spoofing (всего исправлений: 1)

Как найдешь способ уводить юзеров с https сайтов на http, маякни мне в личку. Придумалось мне тут грандиозное дельце.

Deleted
()

--dport 443 -j DNAT --to-destination ...:80

На 443 порт DNAT делать не пробовали ?
На сертификат ругаться будет, но и подключаться к web-серверу тоже.

spirit ★★★★★
()

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

Deleted
()

-p tcp --dport 443 -j DNAT --to-destination 10.0.0.1:80

если б такое правило работало, любители MiTM атак бы прыгали выше головы от счастья

Нет уж, если запрос идет по HTTPS, извольте отвечать по HTTPS. Вспомни уже, что значит буква S в аббревиатуре HTTPS, ну!

И да, сайты где включено HSTS будут заставлять браузер отправлять запросы по HTTPS, даже если ты будешь пытаться зайти по чистому HTTP. Ибо безопасность. И проигнорировать неверный сертификат(который у тебя ясен пень будет неверным, когда ты сделаешь редирект на свой сервер) ты в таком случае не сможешь(есть некоторые тонкости, но в общем случае вот так).

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Ответ на: комментарий от Deleted

Изучи каким макаром пушить уведомление о входе в captive портал

Удваиваю данную рекомендацию!

По крайней мере ишакIE в оффтопике и Firefox(в том числе и под Linux) умеют детектить наличие captive-портала.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)

Ха, если б так просто было. По опыту подключения к таким вифи сетям есть 2 варианта, со стороны меня как юзера:
- мой андроид детектит и спрашивает sign in?
- ничего не детектит, https (то есть 99% сайтов не работает, тупо таймаут) и тогда я из браузера захожу на neverssl.com, и тогда меня редиректит на captive portal.

Bers666 ★★★★★
()
Ответ на: комментарий от Atlant

Именно так. И там не будет кнопки «принять риск и продолжить» , а будет только (см ниже). Поэтому можно даже не заморачиваться редиректить порт 443.

---

Secure Connection Failed

An error occurred during a connection to https://www.facebook.com. The server uses key pinning (HPKP) but no trusted certificate chain could be constructed that matches the pinset. Key pinning violations cannot be overridden. Error code: MOZILLA_PKIX_ERROR_KEY_PINNING_FAILURE

The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.
Please contact the website owners to inform them of this problem.

Bers666 ★★★★★
()
Последнее исправление: Bers666 (всего исправлений: 2)
Ответ на: комментарий от Atlant

да.

два дня повялился, пришёл к тому же выводу, что 443 лучше не трогать. оставил чисто 80. то, что клиенты со смартфона по-умолчанию будут пинать 443 порт, а я никак не смогу их информировать о том, что надо бы зайти на мой 10.0.0.1:80, ну... чёрт с ними.

должен же быть какой-то другой способ информировать клиента о наличии captive portal в сети?

ну вот, в логах локального nginx наблюдаю.

192.168.0.254 - - [24/Nov/2019:16:26:33 +0000] "GET /back.gif HTTP/1.1" 511 22 "http://opennet.ru/" "Mozilla/5.0 (Android 9; Mobile; rv:68.0) Gecko/68.0 Firefox/68.0"

смартвоня заходит на быдланет, а попадает ко мне, я говорю 511. а смартвонь ничего не делает. никакой реакции на captive portal.

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

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от Spoofing

Мхм, а почему 511?
И ещё, то что gif редиректится, это может быть недостаточно, надо редиректить главную страницу.

Bers666 ★★★★★
()
Последнее исправление: Bers666 (всего исправлений: 1)
Ответ на: комментарий от Bers666

https://ru.wikipedia.org/wiki/Captive_portal

в 2012 году было предложено специально для таких случаев ввести код 511

надо редиректить главную страницу

редиректятся все запросы, в результате запроса любого файла из интернета мой сервак шлёт страничку с 511. да. да фигня это всё наверное, верну как было 200

фиг с ним, главное каптив работает. осталось написать страничку на похапе с добавлением юзера в iptables, это плёвое дело.

теперь у меня возник вопрос как у этого чувака. https://superuser.com/questions/937325/wifi-hotspot-why-os-does-not-detect-me...

клиент подключившись к Wi-Fi сети, получает IP по DHCP, а дальше он ничего не может, даже DNS запросить (из вне). ему доступна одна единственная локальная страничка (и другие локальные ресурсы и сети, кстати надо это дело упразднить тоже). все HTTP (не HTTPS) запросы перенаправляются на эту страничку. но смартфон почему-то нигде не показывает что это Captive Portal, надо что-то думать. по всем канонам он должен сам задетектить каптив, но не хочет почему-то.

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от Bers666

ДАААААААА

я сделал это! всё, забороли проблему.

короче, всё правильно, андроид и вообще все девайсы должны сами детектить Captive Portal, это их личная прерогатива. то, как они это делают — каждый выбирает сам.

единственным верным ответом на любой HTTP запрос должно быть 302 и редирект на страничку с логином. никаких 511, никаких 200, никаких 301. только на 302, лично Андрюша 9 на моём Samsung A10 стриггерился и показал мне следующее.

https://sun9-39.userapi.com/c857620/v857620553/10197c/zcEokNI3Xzo.jpg

https://sun9-49.userapi.com/c857620/v857620553/101986/bPFZIL4KjWw.jpg

так! =)

Spoofing ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.