當我在 LAN 內時,iptables 允許訪問我的個人網站,但當我在 LAN 外時阻止訪問

當我在 LAN 內時,iptables 允許訪問我的個人網站,但當我在 LAN 外時阻止訪問

我正在使用透明代理將請求從來源(客戶端)轉發到目標(伺服器)。我使用 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 上的網站,它是我家庭 LAN 內的 Pi。

當我嘗試訪問該 apache 上的網站並且請求來自 LAN 外部時...就像我連接到手機上的 wifi 熱點一樣,該頁面會出現在瀏覽器中,但是如果我連接到 LAN wifi 網路並嘗試打開同一頁面,我會超時...除非我停用這些iptables 規則...但是當我執行此請求時,源自LAN 逾時。

可能會讓事情變得複雜一些,我還使用在同一個Pi 上運行的dnsmasq 來模擬NAT 環回,這樣我就可以使用它的域名而不僅僅是本地IP 地址從我自己的LAN 內訪問該網站。

如果我只使用網路伺服器的本機 IP 位址,它仍然無法運作..除非我

我是否需要修改 iptables 規則,以便像這樣的 Web 請求:

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

無論我在 LAN 外部還是內部,都會顯示該頁面嗎?

謝謝你,

柔性

答案1

我有一個有效的解決方案。

我的問題是...

我是否需要修改 iptables 規則,以便像這樣的 Web 請求:
https://www.example.com/test.html
無論我在 LAN 外部還是內部,都會顯示該頁面嗎?

我的 iptables 規則似乎阻止了來自 LAN 內部的連線請求。我仍然不知道為什麼會這樣,除了一定是 iptables 規則這樣做,因為源自 LAN 外部的請求可以在適當的規則下正常工作,而當規則完全關閉時,源自外部或內部的請求可以正常工作。

我的想法是添加規則以接受來自本地 LAN 上所有 ip 的傳入和傳出流量。我的路由器上的 dhcp 伺服器將 ip 分配給 LAN 上 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

我很高興地說,像這樣的網址https://www.example.com/現在,如果我從 LAN 內部或外部請求該頁面,則指向我 LAN 上 Pi 上的個人 apache 伺服器上的網頁現在會開啟該網頁。

為了弄清楚為什麼我的原始規則會阻止來自 LAN 內部的請求,我嘗試更改:

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

到:

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

因為透明套接字匹配會忽略不通過 sslh 的請求所屬於的非透明套接字。但來自本地 IP 位址的流量仍然被阻止。

此規則可能是罪魁禍首...它將所有傳出資料包從我的 Web 伺服器(連接埠 443)傳送到使用者定義的鏈 SSLH。該鏈中的所有封包都被標記,並在之後的規則的幫助下,路由到環回介面以供 sslh 代理處理。

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

但是,當這些資料包“傳入”並且沒有通過 sslh 代理到達目的地時,然後當它們“傳出”並路由到環回接口以由 sslh 處理時,我猜是這樣不知道如何處理它們,它們只是遺失了。

乾杯,

柔性

相關內容