Linux翻墙代理设置

让浏览器和命令行都能走代理

Posted by tianhaoo on June 6, 2018 本文阅读量

先决条件

首先要有一个shadowsocks的服务端,ip、密码、加密协议已知

shadowsocks

安装shadowsocks客户端

~sudo apt install shadowsocks~

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

python3 get-pip.py

sudo pip3 install shadowsocks

新建一个配置文件ss.json

格式和ssserver的配置文件相同

{
    "server":"1.1.1.1",
    "server_port":8388,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"your passwd",
    "timeout":300,
    "method":"aes-256-cfb"
}

通过命令行启动shadowsocks客户端

sslocal -c ss.json -d start

至此便可以根据配置文件在本地的1080端口开设一个socks5协议的代理通道。

privoxy

这里用到privoxy主要是用来将socks5协议的代理通道转化为http格式的代理通道,原因是之前在实际操作中发现很多FQ失败的应用都是对socks5协议缺少支持,或操作麻烦,索性将所有代理都转化为http协议的,这样就会为很多的应用提供方便的支持。

安装privoxy

sudo apt install privoxy

配置Privoxy

打开 /etc/privoxy/config

注释掉 listen-address localhost:8118

在配置文件的最后加上

forward-socks5 / 127.0.0.1:1080 .
listen-address 127.0.0.1:8118

意思是在本地8118端口开设了一个http协议的代理通道,出口是本地的1080端口,协议是socks5协议,而那里正是shadowsocks的客户端在监听。

重启Privoxy

sudo service privoxy restart

总结

至此,可以认为linux系统中在本地8118端口中存在一个神奇的HTTP代理或HTTPS代理,通过这个代理的流量均可翻墙,其他的任何应用都可以对其进行利用。

另外一种方案

可满足同一局域网内服务器的翻墙需求,但如果是本机使用的话,最合适的还是上面提到的ss+privoxy。

安装squid3

我是在Ubuntu18.04 64位环境下使用squid3搭建的代理服务器。squid3是一个主流的可配置的、健壮、低消耗的代理服务器。

sudo apt-get install squid3

配置

squid3的配置文件在/etc/squid/squid.conf,我们使用vim编辑器来配置。

sudo vim /etc/squid3/squid.conf

我们在配置文件的末尾加入以下几行:

# 允许的客户端ip
acl allcomputers src 0.0.0.0/0.0.0.0
# 配置用户名密码,后面会生成passwords文件
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated allcomputers

找到http_access deny all并注释掉

# http_access deny all

最好修改一下默认的3128端口,因为这个端口是默认的,很容易被网络上的代理爬虫探测到。

http_port 8128
用户名密码认证

网络上有很多专门爬免认证的代理的爬虫,如果我们自己搭建的代理服务器不加认证的话,会被这些爬虫探测到然后沦为了免费代理。

使用htpasswd来创建passwords文件,htpasswd命令在软件包apache2-utils中。

生成password文件安装squid3
sudo htpasswd -c -d /etc/squid/passwords 自定义用户名
然后输入两次至少8位的密码,会在/etc/squid3/目录下生成passwords文件,要保证该文件是可读的。
sudo chmod o+r /etc/squid/passwords
启动服务,也可以使用restart,stop进行重启和关闭。
sudo service squid start

验证代理是否起作用

squid3的访问日志文件在/var/log/squid/access.log

tail -f /var/log/squid3/access.log
另找一台linux机器打开shell,将我们的代理配置上:
export http_proxy="http://用户名:密码@代理IP:代理端口"
curl -l "http://www.baidu.com"

如果代理配置正确,回输出html,同时代理服务器上的access.log会记录这次请求。

客户端配置

编辑.bashrc

export http_proxy="http://tian:cssus123@10.10.65.139:8128"
export https_proxy="http://tian:cssus123@10.10.65.139:8128"

编辑/etc/apt/apt.conf

Acquire::http::proxy "http://tian:cssus123@10.10.65.139:8128";
Acquire::https::proxy "http://tian:cssus123@10.10.65.139:8128";

需要注意的是,上述方法只支持http代理,连https的支持都要稍微配置一下,更不用提socks4/socks5代理

使用proxychains-ng为程序设置代理

简介

linux下代理一般是通过http_proxy和https_proxy这两个环境变量,但是很多软件并不使用这两个变量,导致流量无法走代理。在不使用vpn的前提下,linux并没有转发所有流量的真全局代理。但是可以用proxychains-ng为程序指定走代理,proxychains-ng是proxychains的加强版,主要有以下功能:

  • 支持http/https/socks4/socks5
  • 支持认证
  • 远端dns查询
  • 多种代理模式

不足:

  • 不支持udp/icmp转发
  • 少部分程序和在后台运行的可能无法代理

安装和下载源码

git clone https://github.com/rofl0r/proxychains-ng

编译和安装

./configure --prefix=/usr --sysconfdir=/etc
make 
make install
make install-config

配置文件在/etc/proxychains.conf

添加下面一行

socks5  127.0.0.1 1080

添加环境变量

按照以上方法安装的已经自动添加环境变量,无需配置,只需键入proxychains4即可调用

但是这个命令比较长,我们可以设置一个别名。在.zshrc里面