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.