Score:0

ตั้งค่าพร็อกซีคนกลาง HTTP/HTTPS สำหรับเว็บเซิร์ฟเวอร์ (Apache2)

ธง kr

ในการบันทึกคำขอ http/https ทั้งหมดโดยแอปพลิเคชันเฉพาะ เราใช้พร็อกซีแบบคนกลาง (ตั้งค่าเป็นพร็อกซี http หรือ SOCKS5) ในเครื่อง Windows และ Mac ของเรา เรามักจะ 'proxify' แอพหรือตั้งค่าพร็อกซีทั้งระบบเป็นการชั่วคราว วิธีนี้ใช้ได้ผลกับทุกแอพที่เรานึกออก บนกล่อง Linux แบบรีโมตของเรา พร็อกซีทั่วทั้งระบบทำให้เกิดปัญหาการเชื่อมต่ออย่างแท้จริง (และค่อนข้างยากที่จะได้ผลลัพธ์เดียวกันในสภาพแวดล้อมที่ไม่ใช่เดสก์ท็อป) ดังนั้นเราจึงตัดสินใจที่จะใช้แอปพลิเคชันแยก proxifying ที่นั่นเท่านั้น

ในการทำเช่นนี้ ขณะนี้เราใช้ mitmproxy + tsocks/proxychains สิ่งนี้ใช้งานได้ดีอีกครั้งสำหรับแอปพลิเคชันปกติ อย่างไรก็ตาม ปัญหาปัจจุบันที่เรามีคือเราไม่สามารถทำให้มันใช้งานได้กับบริการ apache2/php ของเรา เราได้มองหาวิธีแก้ไขในช่วงสองสามวันที่ผ่านมา แต่เป็นการยากที่จะหาตัวเลือกที่ไม่เกี่ยวกับการเปลี่ยนเว็บเซิร์ฟเวอร์เองให้เป็น reverse proxy จากหรือไปยัง url ที่ระบุ สิ่งที่เราต้องการคือการตรวจสอบคำขอ http/https ระยะไกลที่เว็บเซิร์ฟเวอร์ทำ (คำขอขาออกของแอปพลิเคชัน PHP) เรานึกถึงการเรียกใช้เว็บเซิร์ฟเวอร์ใน Docker และตั้งค่าพร็อกซีสำหรับคอนเทนเนอร์ แต่นั่นหมายความว่าเราต้องตั้งค่าทุกอย่างในคอนเทนเนอร์อีกครั้ง และรู้สึกเหมือนเป็นโซลูชันที่ไม่ดีที่มาพร้อมกับปัญหาในตัวมันเอง

คำถามจริง: เราจะกำหนดเส้นทางทราฟฟิก http/https ทั้งหมดที่เว็บเซิร์ฟเวอร์ของเราทำผ่านพร็อกซี MITM ของเราได้อย่างไร เราจึงสามารถดูคำขอทั้งหมดไปยังโฮสต์ http/https ระยะไกลได้

ยินดีต้อนรับทางเลือกอื่น / ทางออกที่ดีกว่าเพื่อให้ได้สิ่งเดียวกัน

cn flag
Bob
วิธีทั่วไปในการเรียกใช้พร็อกซีสำหรับแอปพลิเคชันที่ไม่ใช้การตั้งค่าพร็อกซีคือการใช้กฎไฟร์วอลล์เพื่อเขียนทราฟฟิกขาออกทั้งหมดใหม่โดยมีเว็บพอร์ตเป็นปลายทางไปยังพร็อกซีแบบโปร่งใส ค่อนข้างเล็กน้อยสำหรับ http ธรรมดา แต่เกี่ยวข้องมากกว่าเล็กน้อยเมื่อเกี่ยวข้องกับ https
Score:0
ธง kr

ขอบคุณบ๊อบที่ชี้ให้ฉันไปในทิศทางที่ถูกต้อง บางครั้งสิ่งต่างๆ ก็เป็นเพียงการค้นหาโดย Google เมื่อคุณรู้ว่าต้องค้นหาอะไร

@บ๊อบ แสดงความคิดเห็น:

วิธีทั่วไปในการเรียกใช้พร็อกซีสำหรับแอปพลิเคชันที่ไม่ใช้การตั้งค่าพร็อกซีคือการใช้กฎไฟร์วอลล์เพื่อเขียนทราฟฟิกขาออกทั้งหมดใหม่โดยมีเว็บพอร์ตเป็นปลายทางไปยังพร็อกซีแบบโปร่งใส ค่อนข้างเล็กน้อยสำหรับ http ธรรมดา แต่เกี่ยวข้องมากกว่าเล็กน้อยเมื่อเกี่ยวข้องกับ https

แทนที่จะตั้งค่าพร็อกซีในการตั้งค่าพร็อกซีของ OS เราสามารถกำหนดค่า iptables ให้กำหนดเส้นทางทุกอย่างบนพอร์ต 80 และ 443 ไปยังพร็อกซีของเรา (ขั้นตอนนำมาจาก docs.mitmproxy.org)

เปิดใช้งานการส่งต่อ IP และปิดใช้งานการเปลี่ยนเส้นทาง 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

ข้ามขั้นตอนที่ 3 และ 4 ของคู่มือ เนื่องจากเราต้องการเปลี่ยนเส้นทางการรับส่งข้อมูลที่มาจากเครื่องเอง

ในการดำเนินการนี้ ให้สร้างผู้ใช้เพื่อเรียกใช้ mitmproxy เพื่อกำหนดเส้นทางการรับส่งข้อมูลไปที่:

sudo useradd -- สร้างบ้าน mitmproxyuser
sudo -u mitmproxyuser -H bash -c 'cd ~ && pip install --user mitmproxy'

และสุดท้าย กฎ iptables (พร็อกซีที่ทำงานบนพอร์ต 8080):

sudo iptables -t nat -A OUTPUT -p tcp -m เจ้าของ ! --uid-เจ้าของ mitmproxyuser --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A OUTPUT -p tcp -m เจ้าของ ! --uid-เจ้าของ mitmproxyuser --dport 443 -j REDIRECT --to-port 8080
sudo ip6tables -t nat -A OUTPUT -p tcp -m เจ้าของ ! --uid-เจ้าของ mitmproxyuser --dport 80 -j REDIRECT --to-port 8080
sudo ip6tables -t nat -A OUTPUT -p tcp -m เจ้าของ ! --uid-เจ้าของ mitmproxyuser --dport 443 -j REDIRECT --to-port 8080

สุดท้ายให้เรียกใช้ mitmproxy ในฐานะผู้ใช้ใหม่:

sudo -u mitmproxyuser -H bash -c 'mitmproxy --mode โปร่งใส --showhost --set block_global=false'

นั่นคือเท่าที่คู่มือให้โดย mitmproxy ณ จุดนี้ เราทำการตั้งค่าเสร็จแล้ว แต่เราต้องติดตั้งใบรับรองใหม่ (ใบรับรองก่อนหน้านี้จาก mitm.it จะไม่ทำงาน).

หลังจากการเรียกใช้ครั้งแรก ใบรับรองใหม่จะถูกสร้างขึ้นที่ /home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.pem. เราจำเป็นต้องแปลงเป็น crt และติดตั้ง:

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-reconfigure ca-ใบรับรอง

ณ จุดนี้ คุณเกือบจะพร้อม ยกเว้นว่า Apache2/PHP ยังคงไม่เชื่อถือใบรับรองพร็อกซีของเรา ดังนั้นคำขอภายนอกจะไม่ผ่าน ฉันลองการกำหนดค่า SSL ของ apache.conf ที่ไม่ได้ผล ปรากฎว่าฉันต้องยกเลิกการแสดงความคิดเห็นในบรรทัดต่อไปนี้ /etc/php/7.4/apache2/php.ini และเชื่อมโยงไปยังไฟล์ crt ที่เราสร้างขึ้น:

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

อย่าลืมรีสตาร์ท apache2/php7.4-fpm เท่านี้ก็เรียบร้อย! แอพ PHP ของเราถูกกำหนดเส้นทางผ่านพร็อกซีแล้ว นอกจากนี้ คุณยังอาจต้องเชื่อถือไฟล์ crt ที่สร้างขึ้นในเบราว์เซอร์ของคุณเพื่อกำจัดคำเตือนตามปกติ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา