Перейти к содержимому

Iptables Captive Portal перенаправляет http, но разрешает проход через https

1

Я следовал этому руководству, чтобы создать точку доступа, которая перенаправляет все http-запросы на мою локальную веб-страницу.

Однако запросы https из-за ошибок сертификата не попадают на мою страницу и вместо этого действуют так, как будто они загружаются вечно.

Я хотел бы создать своего рода огороженный сад, который позволяет https-запросам получать доступ к Интернету, но перенаправляет http-запросы на мою страницу, так как через некоторое время пользователи вынуждены нажимать http-ссылку.

Я использую Raspberry Pi с Raspbian lite, который в основном совпадает с Debian. Apache2 обслуживает веб-страницу, dnsmasq обрабатывает dhcp и hostapd для создания точки доступа.

/etc/hostapd/hostapd.conf

interface=wlan0 driver=nl80211 ssid=FreeWiFi channel=6 

/etc/dnsmasq.conf

log-facility=/var/log/dnsmasq.log address=/#/10.0.0.1 interface=wlan0 dhcp-range=10.0.0.10, 10.0.0.250,12h no-resolv log-queries 

/ и т.д. / сеть / интерфейсы

auto lo iface lo inet loopback iface eth0 inet dhcp iface wlan0 inet static address 10.0.0.1 netmask 255.255.255.0 broadcast 255.0.0.0 pre-up iptables-restore < /etc/iptables.rules 

Правила создания таблиц IP

sudo iptables -F sudo iptables -i wlan0 -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -i wlan0 -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -i wlan0 -A INPUT -p udp --dport 53 -j ACCEPT sudo iptables -i wlan0 -A INPUT -p udp --dport 67:68 -j ACCEPT sudo iptables -i wlan0 -A INPUT -j DROP sudo sh -c "iptables-save > /etc/iptables.rules" 

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

РЕДАКТИРОВАТЬ: Оглядываясь вокруг, кажется, мне не нужно ничего менять в dnsmasq, но мне просто нужно использовать некоторые приемлемые правила для перенаправления трафика https к eth0? Я не знаю, как сделать это специально для запросов https.

sudo iptables -nvL

Chain INPUT (policy ACCEPT 491 packets, 45444 bytes) pkts bytes target prot opt in out source destination   Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination  0 0 ACCEPT tcp -- * * 0.0.0.0/0 10.0.0.0/24 tcp multiport dports 80 0 0 ACCEPT tcp -- * * 0.0.0.0/0 10.0.0.0/24 tcp multiport dports 80  Chain OUTPUT (policy ACCEPT 413 packets, 52820 bytes) pkts bytes target prot opt in out source destination  0 0 ACCEPT tcp -- * wlan0 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 0 0 ACCEPT tcp -- * wlan0 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 

sudo iptables-save

# Generated by iptables-save v1.4.21 on Tue Mar 7 22:56:30 2017 *nat :PREROUTING ACCEPT [1781:191954] :INPUT ACCEPT [704:143612] :OUTPUT ACCEPT [204:15231] :POSTROUTING ACCEPT [219:16055] -A PREROUTING -i wlan0 -p tcp -m tcp -m multiport --dports 80 -j DNAT --to-destination 10.0.0.1 -A PREROUTING -i wlan0 -p tcp -m tcp -m multiport --dports 80 -j DNAT --to-destination 10.0.0.1 COMMIT # Completed on Tue Mar 7 22:56:30 2017 # Generated by iptables-save v1.4.21 on Tue Mar 7 22:56:30 2017 *filter :INPUT ACCEPT [389:44149] :FORWARD ACCEPT [84:3648] :OUTPUT ACCEPT [376:86142] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A FORWARD -p tcp -m tcp --dport 443 -j ACCEPT -A FORWARD -d 10.0.0.0/24 -p tcp -m tcp -m multiport --dports 80 -j ACCEPT -A FORWARD -d 10.0.0.0/24 -p tcp -m tcp -m multiport --dports 80 -j ACCEPT -A OUTPUT -o wlan0 -p tcp -m tcp --dport 443 -j ACCEPT -A OUTPUT -o wlan0 -p tcp -m tcp --dport 443 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT COMMIT # Completed on Tue Mar 7 22:56:30 2017 
1 518 просмотров
NULL спросил 9 лет назад
N 41

1 ответ

1
iptables -A OUTPUT -o wlan0 -p tcp --dport 443 -j ACCEPT iptables -I INPUT 1 -m conntrack -j ACCEPT --ctstate RELATED,ESTABLISHED  iptables -A FORWARD -p tcp -m tcp -m multiport -d 192.168.2.2/32 -j ACCEPT --dports 80  iptables -A PREROUTING -t nat -p tcp -m tcp -m multiport -i wlan0 -j DNAT --to-destination 192.168.2.2 --dports 80 

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

Похоже, это будет работать! Но для ip-адреса я использую 10.0.0.1, какой ip-адрес я установил в / etc / network / interfaces? Так как для второй строки 10.0.0.1/24 и для третьей строки 10.0.0.1?

NULL · 9 лет назад · 0

Когда я выполнил команды с 10.0.0.1/24 и 10.0.0.1 для IP-адреса, первые две команды не дали ошибок, но последняя команда сказала: «Вы должны указать --match-set» с правильными аргументами`

NULL · 9 лет назад · 0

извините, я сделал копию и вставил ошибку. фиксированный. Я достал набор -m. IP-адрес - это то, куда идет незашифрованный веб-трафик.

cybernard · 9 лет назад · 0

Получил эту ошибку, но теперь она говорит: «iptables: нет цепочки / цели / совпадения с этим именем». Должен ли я добавить -t nat к последней команде ... Я где-то читал, но не знаю, если это применяется.

NULL · 9 лет назад · 0

Хорошо, у меня был неправильный интерфейс на 3-й строке, какая строка говорит, что нет цепочки / цели / совпадения?

cybernard · 9 лет назад · 0

Это 3-я линия.

NULL · 9 лет назад · 0

Я перезагрузил и очистил все правила, кроме перечисленных в моем вопросе (кроме ACCEPT 80). Однако, когда я запускаю первую строку, она говорит: «Не могу использовать -i с OUTPUT». Если я изменю его на INPUT, команда выполнится, но запросы https не смогут пройти. Вторая строка работает нормально, и я использую 10.0.0.1/24. Третья строка запустится, если я добавлю -t nat, но я не уверен, правильно ли это.

NULL · 9 лет назад · 0

добавить правильный вам нужно -о вместо извините.

cybernard · 9 лет назад · 0

в последней строке я добавляю -t nat right?

NULL · 9 лет назад · 0

да, это относится к таблице NAT.

cybernard · 9 лет назад · 0

Я применил эти правила, и теперь в запросах https говорится: «Ошибка загрузки страницы ... не удается подключиться». Http-запросы все еще перенаправлены на мой сервер, как они должны быть. Как вы думаете, dnsmasq может конфликтовать с iptables? В журнале я вижу, что он пытался перенаправить меня, когда я набрал https://www.facebook.com на свой локальный сервер. Но, похоже, он должен выдать ошибку сертификата, а не сказать, что просто не смог загрузить страницу. Извините, если это было слишком многословно.

NULL · 9 лет назад · 0

опубликуйте iptables-save, чтобы я мог видеть все ваши правила.

cybernard · 9 лет назад · 0

Хорошо, я отправил это и iptables -nvL в вопросе.

NULL · 9 лет назад · 0

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

cybernard · 9 лет назад · 0

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

NULL · 9 лет назад · 0

iptables -I FORWARD 1 -p tcp -m tcp --dport 443 -j ПРИНЯТЬ

cybernard · 9 лет назад · 0

не повезло, тот же вопрос :( Смотрите обновленный iptables-save под вопросом. Может, порядок правил влияет на это?

NULL · 9 лет назад · 0

** cat / proc / sys / net / ipv4 / ip_forward ** что является результатом этой команды 1 или 0

cybernard · 9 лет назад · 0

Да только что проверил и 1 включен.

NULL · 9 лет назад · 0
cybernard ответил 9 лет назад
C 9 681