
我有一台伺服器,託管透過連接埠 443 上的 https 交付的網站。
可以從主機伺服器、同一內部網路上的電腦以及 VPN 上的電腦(非 EC2 執行個體)存取網站。
從任何一台機器發出命令openssl s_client -connect www.mydomain.tld:443
都會得到回應:
CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = cloud.hss.ac.uk
verify return:1
---
Certificate chain......
[Truncated for brevity]
但是,在 EC2 執行個體上或從內部或 VPN 網路外部的電腦發出的相同命令會給予回應:
CONNECTED(00000003)
那麼,我們正在建立連接,但沒有 SSL 憑證?
在 Apache conf 檔案上將日誌等級設定為 debug 顯示正在提供 SSL 證書,但由於某種原因它們未到達 EC2 執行個體。
EC2 執行個體僅使用 IFtables 將連接埠 80 和 443 上的傳入請求 NAT 到託管伺服器。這裡是設置/etc/nftables.conf
#!/usr/sbin/nft -f
flush ruleset
table ip nat {
chain prerouting {
meta nftrace set 1
type nat hook prerouting priority -100; policy accept;
iifname "eth0" tcp dport { 80, 443 } dnat to x.x.x.x
counter
}
chain postrouting {
meta nftrace set 1
type nat hook postrouting priority 100; policy accept;
masquerade
}
}
這一切在連接埠 80 上運作良好。
我的想法已經用完了,所以在這裡尋找一些。
如果相關的話,VPN 是 Hamachi VPN。
啟用IP轉送:
sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1