Linux使用proxychains-ng代理应用
基本情况
公司的Linux服务器在私有网络内,因为业务比较敏感,运维部门对各个网络边界进行了安全加固,设置了严格的安全规则。因此在互联网出口侧设置了一台前置机,部署了tinyproxy代理程序。当内部服务器需要访问公网地址时,设置环境变量http_proxy指定代理到固定服务器,通过固定服务器再端口转发至代理服务器。
问题描述
开发在调试外部公网接口过程中发现虽然设置了代理,但是还是无法调用到公网的接口。
问题排查
- 查看应用日志提示:java.net.ConnectException: Connection refused (Connection refused)
- 使用Curl命令测试接口地址可以正常返回状态码。
- 查看代理服务器日志发现调用公网接口时未产生新的日志。
很明显,应用在调用公网接口时并应用没有正常走到代理服务器上去。也就是说linux环境变量设置的代理并非全局代理,需要强制应用使用指定应用的代理服务器。
寻求方案
- 参考:Java网络和代理 设置了JVM启动参数后测试无效。
- 参考:Linux环境下使用ProxyChains设置代理上网 进行设置。有效!
简介
ProxyChains 是一款适用于linux系统的网络代理设置工具。强制由任一程序发起的TCP连接请求必须通过诸如TOR 或 SOCKS4, SOCKS5 或HTTP(S) 代理。允许TCP和DNS通过代理隧道,并且可配置多个代理。配置完成后只需在运行的命令之前加上proxychains4就可以通过代理进行网络访问了。
proxychains新的版本已经称为proxychains-ng。项目地址: https://github.com/rofl0r/proxychains-ng
安装
下载最新的proxychains-ng版本,解压后编译安装
tar -xvf proxychains-ng-4.16.tar.xz
cd proxychains-ng-4.16
./configure
make
make install
cp src/proxychains.conf /etc/
配置及使用
- 配置文件的位置为/etc/proxychains.conf。
- 配置文件中localnet开头为不走代理的本地地址,根据你的实际需求取消这些行的注释
- 配置文件最后加上你的代理服务器信息
格式:
socks5/socks4/http [IP] [Port] [UserName] [Password]
设置完成后在应用启动命令之前加上proxychains4。所有问题完美解决