Điều này có lẽ khá đơn giản nhưng tôi không thể quấn đầu xung quanh nó.
Tôi thiết lập một tên miền phụ, giả sử nó nc.example.com
. Thiết lập DNS của tôi và tất cả để trỏ tên miền phụ đến một máy chủ từ xa chạy Nginx để đảo ngược yêu cầu tới cổng 3123
.
Sau đó, tôi lắng nghe yêu cầu sử dụng netcat trên máy chủ từ xa , như thế này:
nc -l 3123
Để tôi có thể nhận các yêu cầu HTTP từ nc.example.com
.
Tiếp theo, về tôi máy địa phương , Tôi sử dụng netcat để kết nối với máy chủ không liên quan (DNS công cộng của Google), như thế này:
$ nc 8.8.8.8 80
GET / HTTP/1.1
Host: nc.example.com
(có thêm 2 dòng mới để hoàn thành yêu cầu HTTP, nhưng không thể hiển thị ở đây)
Tôi nhận được kết nối trên máy chủ từ xa như sau:
$ nc -l 3123
GET / HTTP/1.1
Connection: upgrade
Host: nc.example.com
X-Real-IP: <redacted_1>
X-Forwarded-Host: nc.example.com
X-Forwarded-Server: nc.example.com
X-Forwarded-For: <redacted_2>, <redacted_1>
Bây giờ, tôi không chắc tại sao điều này xảy ra, bởi vì tôi nghĩ rằng nc
sẽ kết nối với 8.8.8.8
, thay vì địa chỉ IP của máy chủ của tôi. Là 8.8.8.8
chuyển tiếp yêu cầu đến máy chủ của tôi thay mặt tôi? Có bất kỳ ý nghĩa bảo mật như là kết quả của điều này?
CHỈNH SỬA :
Tôi mới nhận ra rằng <redacted_2>
là một địa chỉ IP riêng ( 172.24.199.96
. Tôi đang làm điều này trong mạng lưới trường đại học của tôi.
Điều này có nghĩa là bộ định tuyến ngược dòng đang ủy quyền yêu cầu cho tôi, dựa trên Host
tiêu đề? Điều đó có thể hiểu được vì trường đại học của tôi gần đây đã triển khai một số loại lọc mạng mặc dù không có nhiều chi tiết về nó. Mặc dù tôi không hiểu tại sao nó lại hành xử theo cách này?
redacted_2
là một địa chỉ IP riêng. Bộ định tuyến ngược dòng của tôi có thể đang thực hiện ủy quyền, nhưng tại sao nó lại chuyển tiếp các yêu cầu dựa trênHost
tiêu đề?