Điểm:0

Đặt proxy trung gian HTTP/HTTPS cho máy chủ web (Apache2)

lá cờ kr

Để ghi nhật ký tất cả các yêu cầu http/https của một ứng dụng cụ thể, chúng tôi sử dụng proxy trung gian (được đặt làm proxy http hoặc SOCKS5). Trên các máy Windows và Mac cục bộ của chúng tôi, chúng tôi thường 'ủy nhiệm' các ứng dụng hoặc tạm thời đặt proxy toàn hệ thống. Điều này hoạt động như một nét duyên dáng cho bất kỳ ứng dụng nào chúng tôi có thể nghĩ ra. Trên các hộp Linux từ xa của chúng tôi, proxy toàn hệ thống thực sự đang gây ra sự cố kết nối (và cũng khó hơn để đạt được kết quả tương tự trong môi trường không có máy tính để bàn). Vì vậy, chúng tôi quyết định chỉ thực hiện ủy quyền cho các ứng dụng riêng biệt ở đó.

Để làm điều này, chúng tôi hiện đang sử dụng mitmproxy + tsocks/proxychains. Điều này một lần nữa hoạt động tốt cho các ứng dụng thông thường. Tuy nhiên, vấn đề hiện tại mà chúng tôi gặp phải là dường như chúng tôi không thể làm cho nó hoạt động với các dịch vụ apache2/php của chúng tôi. Chúng tôi đã tìm kiếm các giải pháp trong vài ngày qua, nhưng thật khó để tìm ra các tùy chọn không liên quan đến việc chuyển chính máy chủ web thành proxy ngược từ hoặc tới một url cụ thể. Điều chúng tôi muốn là giám sát bất kỳ yêu cầu http/https từ xa nào mà máy chủ web thực hiện (yêu cầu gửi đi của ứng dụng PHP). Chúng tôi đã nghĩ đến việc chạy máy chủ web trong Docker và đặt proxy cho vùng chứa, nhưng điều đó có nghĩa là chúng tôi phải thiết lập lại mọi thứ trong vùng chứa và nó giống như một giải pháp tồi đi kèm với những rắc rối của chính nó.

Câu hỏi thực tế: làm cách nào chúng tôi có thể định tuyến tất cả lưu lượng truy cập http/https mà máy chủ web của chúng tôi thực hiện thông qua proxy MITM của chúng tôi, để chúng tôi có thể xem tất cả các yêu cầu đối với máy chủ http/https từ xa?

Các giải pháp thay thế/tốt hơn để đạt được điều tương tự đều được hoan nghênh.

lá cờ cn
Bob
Một cách khá thông thường để chạy proxy cho các ứng dụng không tôn trọng cài đặt proxy là sử dụng các quy tắc tường lửa để ghi lại tất cả lưu lượng truy cập đi với một cổng web làm đích đến của một proxy trong suốt. Khá tầm thường đối với http đơn giản, nhưng liên quan nhiều hơn một chút khi liên quan đến https.
Điểm:0
lá cờ kr

Cảm ơn Bob đã chỉ cho tôi đi đúng hướng. Đôi khi mọi thứ thực sự chỉ là một tìm kiếm trên Google khi bạn biết những gì cần tìm.

@Bob nhận xét:

Một cách khá truyền thống để chạy proxy cho các ứng dụng không tôn trọng cài đặt proxy là sử dụng các quy tắc tường lửa để ghi lại tất cả lưu lượng truy cập đi với một cổng web làm đích đến của một proxy trong suốt. Khá tầm thường đối với http đơn giản, nhưng liên quan nhiều hơn một chút khi liên quan đến https.

Thay vì đặt proxy trong cài đặt proxy của HĐH, chúng tôi có thể định cấu hình iptables để định tuyến mọi thứ trên cổng 80 và 443 tới proxy của chúng tôi (các bước được thực hiện từ docs.mitmproxy.org)

Bật chuyển tiếp IP và tắt chuyển hướng ICMP:

Sudo sysctl -w net.ipv4.ip_forward=1
Sudo sysctl -w net.ipv6.conf.all.forwarding=1
Sudo sysctl -w net.ipv4.conf.all.send_redirects=0

Bỏ qua bước 3 và 4 của hướng dẫn, vì chúng tôi muốn chuyển hướng lưu lượng truy cập bắt nguồn từ chính máy.

Để thực hiện việc này, hãy tạo một người dùng để chạy mitmproxy nhằm định tuyến lưu lượng đến:

Sudo useradd --create-home mitmproxyuser
sudo -u mitmproxyuser -H bash -c 'cd ~ && pip install --user mitmproxy'

Và cuối cùng là các quy tắc iptables (proxy chạy trên cổng 8080):

Sudo iptables -t nat -A OUTPUT -p tcp -m chủ sở hữu! --uid-owner mitmproxyuser --dport 80 -j REDIRECT --to-port 8080
Sudo iptables -t nat -A OUTPUT -p tcp -m chủ sở hữu! --uid-owner mitmproxyuser --dport 443 -j REDIRECT --to-port 8080
Sudo ip6tables -t nat -A OUTPUT -p tcp -m chủ sở hữu! --uid-owner mitmproxyuser --dport 80 -j REDIRECT --to-port 8080
Sudo ip6tables -t nat -A OUTPUT -p tcp -m chủ sở hữu! --uid-owner mitmproxyuser --dport 443 -j REDIRECT --to-port 8080

Cuối cùng, hãy chạy mitmproxy với tư cách là người dùng mới:

sudo -u mitmproxyuser -H bash -c 'mitmproxy --mode trong suốt --showhost --set block_global=false'

Đó là theo như hướng dẫn do mitmproxy cung cấp. Tại thời điểm này, chúng tôi đã hoàn tất việc thiết lập, nhưng chúng tôi cần cài đặt chứng chỉ mới (bất kỳ chứng chỉ nào trước đó từ mitm.it sẽ không làm việc).

Sau lần chạy đầu tiên, chứng chỉ mới được tạo tại /home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.pem. Chúng ta cần chuyển đổi nó thành crt và cài đặt nó:

sudo openssl x509 -in /home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.pem -inform PEM -out /home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.crt
sudo cp /home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.crt /usr/share/ca-certificates/extra/mitmproxy-ca-cert.crt
Sudo dpkg-cấu hình lại chứng chỉ ca

Tại thời điểm này, bạn gần như đã hoàn tất, ngoại trừ việc Apache2/PHP vẫn không tin tưởng chứng chỉ proxy của chúng tôi nên các yêu cầu bên ngoài sẽ không được thông qua. Tôi đã thử một loạt các cấu hình SSL apache.conf không hoạt động. Hóa ra, tôi đã phải bỏ ghi chú dòng sau trong /etc/php/7.4/apache2/php.ini và liên kết nó với tệp crt mà chúng tôi đã tạo:

openssl.cafile=/home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.crt

Đừng quên khởi động lại apache2/php7.4-fpm và thế là xong! Ứng dụng PHP của chúng tôi hiện được định tuyến thông qua proxy. Bạn cũng có thể cần tin cậy tệp crt được tạo trong trình duyệt của mình để thoát khỏi cảnh báo thông thường.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.