Linux下搭建代理

公司idc的机器都是没有外网权限的,一般情况下不觉得有什么问题,但当需要安装一些依赖的工具时候就会特别麻烦。本文讲述如何搭建代理服务器,让idc机器穿透到外网。

一、在可访问外网机器上搭建ss5代理服务

  1. 下载,编译安装 Socks5
    1
    2
    3
    4
    5
    6
    7
    到此下载 http: //sourceforge.net/projects/ss5/files/
    wget - c http: //downloads.sourceforge.net/project/ss5/ss5/3.6.4-3/ss5-3.6.4-3.tar.gz
    tar zxvf ss5 - 3.6 .4 - 3. tar.gz
    cd ss5 - 3.6 .4
    . / configure //notes:(默认是1080端口,如果想改端口的话,./configure –with-defaultport=10800
    make
    make install
  1. 启动ss5服务

    1
    /etc/init.d / ss5 start
  2. 添加 SS5 用户
    ss5 默认使用1080端口,并允许任何人使用。
    我们可以修改 /etc/opt/ss5/ss5.conf 中的

    1
    2
    3
    #
    SHost SPort Authentication#
    auth 0.0 .0 .0 / 0 - -


1
2
3
#
SHost SPort Authentication#
auth 0.0 .0 .0 / 0 - u

在 /etc/opt/ss5/ss5.passwd 中添加 用户名和密码如:
test test

  1. 重启服务
    1
    /etc/init.d / ss5 restart

二、在idc机器上安装ProxyChains-NG实现终端下任意应用代理

proxychains-ng 介绍

proxychains-ng是proxychains的加强版,主要有以下功能和不足:

  1. 支持http/https/socks4/socks5
  2. 支持认证
  3. 远端dns查询
  4. 多种代理模式
  5. 不支持udp/icmp转发
  6. 少部分程序和在后台运行的可能无法代理

proxychains-ng 原理

简单的说就是这个程序 Hook 了 sockets 相关的操作,让普通程序的 sockets 数据走 SOCKS/HTTP 代理。

其核心就是利用了 LD_PRELOAD 这个环境变量(Mac 上是 DYLD_INSERT_LIBRARIES)。

在 Unix 系统中,如果设置了 LD_PRELOAD 环境变量,那么在程序运行时,动态链接器会先加载该环境变量所指定的动态库。也就是说,这个动态库的加载优先于任何其它的库,包括 libc。

ProxyChains 创建了一个叫 libproxychains4.so(Mac 上是 libproxychains4.dylib)的动态库。里面重写了 connect、close 以及 sendto 等与 socket 相关的函数,通过这些函数发出的数据将会走代理,详细代码可以参考 libproxychains.c。

在主程序里,它会读取配置文件,查找 libproxychains4 所在位置,把这些信息存入环境变量后执行子程序。这样子程序里对 socket 相关的函数调用就会被 Hook 了,对子程序来说,跟代理相关的东西都是透明的。

安装 proxychains-ng

1
2
3
4
5
git clone https://github.com/rofl0r/proxychains-ng
. / configure--prefix = /usr --sysconfdir=/etc
make
make install
make install - config(安装proxychains.conf配置文件)

配置 proxychains-ng

proxychains-ng默认配置文件名为proxychains.conf。通过源代码编译安装的默认为/etc/proxychains.conf。

proxychains-ng的配置非常简单,只需将代理加入[ProxyList]中即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ vi proxychains.conf

quiet_mode
dynamic_chain
chain_len = 1# round_robin_chain和random_chain使用
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
localnet 127.0 .0 .0 / 255.0 .0 .0
localnet 10.0 .0 .0 / 255.0 .0 .0
localnet 172.16 .0 .0 / 255.240 .0 .0
localnet 192.168 .0 .0 / 255.255 .0 .0

[ProxyList]
socks5 127.0.0.1 1080 user password

通常情况下,我们只需要加入这一句 socks5 127.0.0.1 1080 user password

proxychains-ng 使用

proxychains-ng用法非常简单,使用格式如下:

1
$ proxychains4 程序 参数

proxychains-ng 测试

1
proxychains4 curl baidu.com

通过代理SHELL实现全局代理

如果你还是觉得每次使用都要输入proxychains4或其别名,比较麻烦。你还可以用proxychains-ng代理一个shell,在shell中执行的命令就会自动使用代理了。

  1. proxychains-ng直接调用SHELL

BASH

1
proxychains4 - q / bin / bash

ZSH

1
proxychains4 - q / bin / zsh