giới thiệu
Tôi có phần mềm ruby sử dụng mạng trong quá trình thực thi.
Gần đây, tôi nhận được phản hồi từ một người dùng làm việc sau tường lửa và sử dụng SOCKS, phần mềm này không hoạt động với anh ta
Vì vậy, tôi cần mô phỏng tình huống này để kiểm tra phần nào trong phần mềm của tôi không tôn trọng HTTP PROXY
biến môi trường
Những gì tôi đã thử
Tôi đã cố gắng mô phỏng tường lửa này với iptables
(bên trong docker):
cập nhật apt-get -y
apt-get cài đặt iptables
xuất SOCKS5_PROXY_HOST=xxx.xxx.xxx.xxx[1]
xuất SOCKS5_PROXY_PORT=ppp
iptables -A INPUT -s $SOCKS5_PROXY_HOST -j CHẤP NHẬN
iptables -A ĐẦU RA -d $SOCKS5_PROXY_HOST -j CHẤP NHẬN
iptables -P INPUT DROP
iptables -P OUTPUT DROP
env HTTP_PROXY=$SOCKS5_PROXY_HOST:$SOCKS5_PROXY_PORT ruby my_script.rb
Vấn đề
Vì một số lý do, cách tiếp cận này không hiệu quả và tôi nhận được:
KẾT NỐI proxy bị hủy bỏ
hoặc
Không thể kết nối với cổng xxx.xxx.xxx.xxx pppp: Đã hết thời gian kết nối
Ghi chú:
- [1] Tôi đã sử dụng địa chỉ IP (không phải tên miền) cho
Vớ
Ủy quyền
- [2] Tôi đã sử dụng các proxy SOCKS công khai ngẫu nhiên khác nhau trước khi đăng ký
iptable
tất cả các quy tắc đều có thể truy cập được
- [3] Tôn trọng API Ruby Open-URI
HTTP PROXY
biến môi trường https://ruby-doc.org/stdlib-2.6.3/libdoc/open-uri/rdoc/OpenURI.html, nhưng có thể một số mã của bên thứ ba thì không.
câu hỏi
- Đó có phải là cách tiếp cận có thể chấp nhận được không: cố gắng "mô phỏng" tường lửa bằng
iptables
?
- Vấn đề này có thể xuất hiện là một cái gì đó cụ thể của SOCKS hoặc cấu hình sai trong
iptables
?
- Có lẽ có một cách tiếp cận tốt hơn để đạt được cùng một mục tiêu: kiểm tra phần mềm chỉ hoạt động thông qua proxy SOCKS mà không có kết nối 'trực tiếp'?