Iptables Captive Portal 重定向 http 但允许 https 通过

Iptables Captive Portal 重定向 http 但允许 https 通过

我已经关注本教程创建一个接入点,将所有 http 请求重定向到我本地提供的网页。

但是,由于证书错误,https 请求无法获取我的页面,而是像永远加载一样。

我想创建一种围墙花园,允许 https 请求访问互联网,但将 http 请求重定向到我的页面,因为用户过一段时间后必然会点击 http 链接。

我使用的是运行 Raspbian lite 的 Raspberry Pi,它与 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

/etc/网络/接口

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 中更改任何内容,但我只需要使用一些 iptable 规则将 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-保存

# 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

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

第一条规则接受加密流量,并将被视为在返回流量上建立。

相关内容