• Linux代理服务器使用


    1. 介绍

    代理(即网络代理)是一种特殊的网络服务, 允许一个网络终端(客户端)通过这个服务与另一个终端(服务器)进行非直接连接,从而提供服务. 其中, 提供代理的网络终端称为代理服务器(Proxy Server)

    根据代理服务器的作用可分为如下类型
    - HTTP代理: 主要是代理浏览器访问网页
    - SOCKS代理: 是一种通用的代理类型, 支持多种协议,分SOCKS 4 和SOCKS 5两种
    - FTP代理: 代理客户端的FTP软件访问FTP服务器
    - VPN代理: 在共用网络上建立专用网络的技术

    从功能上, 代理服务器又可分为如下类型
    - 正向代理(Forward Proxy): 访问原来无法访问的资源, Cache, 对客户端访问授权, 隐藏行踪
    - 反向代理(Reverse Proxy): 负载均衡, CDN
    - 透明代理: NAT转发

    Linux上代理服务器软件众多, 常用的有TinyProxy、Squid、CCProxy、Wireguard、SS5、Dante、Shadowsocks

    2. TinyProxy

    TinyProxy是一款轻量级HTTP代理软件, 提供正向代理功能, 与Squid(支持HTTP, HTTPS, FTP)相似

    2.1 安装

    # Ubuntu
    apt-get update
    apt-get install tinyproxy -y
    
    # CentOS
    yum install tinyproxy -y

    2.2 配置

    TinyProxy的配置文件为/etc/tinyproxy/tinyproxy.conf

    # 允许访问代理的IP地址, 默认仅允许本地, 注掉改行表示允许所有人访问
    Allow 127.0.0.1
    
    # 代理服务器的端口号, 
    Port 8888
    
    # 白名单文件配置
    Filter "/etc/tinyproxy/filter"
    
    # 使用URL过滤而不是 domains
    FilterURLs On
    
    # 允许代理过滤文件里的地址. 若不允许, 此处设置为 No
    FilterDefaultDeny Yes

    查看日志的命令如下

    # tail -f /var/log/tinyproxy/tinyproxy.log

    2.3 启动

    TinyProxy启动相关命令如下

    # systemctl start tinyproxy.service
    # systemctl stop tinyproxy.service
    # systemctl status tinyproxy.service
    # systemctl enable tinyproxy.service

    2.4 防火墙

    笔者一般都是开启防火墙的, 所以需要进行防火墙配置

    # systemctl start firewalld.service
    # systemctl enable firewalld.service
    
    # cp /usr/lib/firewalld/services/ssh.xml /usr/lib/firewalld/services/tinyproxy.xml
    # vi /usr/lib/firewalld/services/tinyproxy.xml
    ...
    # cat /usr/lib/firewalld/services/tinyproxy.xml
    <?xml version="1.0" encoding="utf-8"?>
    <service>
      <short>tinyproxy</short>
      <description>Tinyproxy is a light-weight HTTP/HTTPS proxy service.</description>
      <port protocol="tcp" port="8888"/>
    </service>
    
    # firewall-cmd --permanent --zone=public --add-service=tinyproxy
    # firewall-cmd --reload

    2.5 使用

    2.5.1 Windows

    在Windows上大部分软件都是有代理设置的界面, 按照提示在HTTP代理处填写代理服务器的IP地址和端口即可

    2.5.2 Linux

    在Linux上, 通常在.bash_profile或者.bashrc中加入如下环境变量

    export http_proxy="http://ip:port"
    export https_proxy="http://ip:port"
    export no_proxy="127.0.0.1, localhost, *.cnn.com, 192.168.1.10, domain.com:8080"

    如果需要登陆, 应为

    export http_proxy="http://username:password@ip:port"
    export https_proxy="http://username:password@ip:port"

    但是不是所有应用会使用上面的环境变量, 不同应用可能会有自己的代理设置方法
    比如git, 其代理配置方法如下

    # git config -global http.proxy 'http://ip:port'
    # git config -global https.proxy 'http://ip:port'

    2.6 验证

    在客户端上运行如下命令可以验证代理服务器是否配置成功

    # curl url --proxy ip:port

    2.7 问题

    在实际使用过程中, 发现了如下问题
    - 在使用阿里云等云服务器部署时, 需要在安全组配置中开放代理服务器的端口
    - 无法访问谷歌等网站, 一番查询之后了解, HTTP代理因为数据透明无法通过GWF的检查…

    3. SS5

    SS5是一款SOCK 5代理软件

    3.1 安装

    # yum install gcc openldap-devel pam-devel openssl-devel -y
    # wget https://nchc.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz
    # tar -xzvf ss5-3.8.9-8.tar.gz
    # cd ss5-3.8.9
    # ./configure
    # make
    # make install

    3.2 配置

    修改主配置文件/etc/opt/ss5/ss5.conf, 设置为用户密码访问权限

    # vim /etc/opt/ss5/ss5.conf
    ...
    #       SHost           SPort           Authentication
    auth  0.0.0.0/0          -                    u
    ...
    #      Auth     SHost           SPort   DHost           DPort   Fixup   Group   Band    ExpDate
    #
    permit  u       0.0.0.0/0       -       0.0.0.0/0       -       -       -       -       -

    用户配置

    # vim /etc/opt/ss5/ss5.passwd
    root       123456

    修改默认端口, SOCK 5默认端口为1080, 可通过如下方式修改

    # vim /etc/sysconfig/ss5
    SS5_OPTS=" -u root -b 0.0.0.0:9090"

    3.3 启动

    # 增加执行权限
    # chmod a+x /etc/rc.d/init.d/ss5
    
    # 启动
    # /etc/rc.d/init.d/ss5 restart
    # service ss5 start
    
    # 关闭
    # /etc/rc.d/init.d/ss5 stop
    # service ss5 stop
    
    # 开启启动
    # chkconfig --add ss5
    # chkconfig --level 345 ss5 on

    3.4 其他

    # 查看连接情况
    # netstat -an | grep 1080
    
    # 查看日志
    # tail -f /var/log/ss5/ss5.log

    3.5 问题

    问题一: 客户端Firefox使用SimpleProxy设置SOCK 5代理后无法访问任何网站, 查看服务器日志发现一直在刷如下错误信息

    "" "" ISERROR - - - (-:- -- -:-) (Socks method unknown or bad request)

    最后发现是插件的问题导致没有用户名和密码信息

    问题二(未亲测): 重启系统后,/var/run/ss5/丢失导致/var/run/ss5/ss5.pid创建失败, 自动/手动启动失败, 需先创建目录

    # vi /etc/rc.d/rc.local
    mkdir /var/run/ss5/
    
    # chmod a+x /etc/rc.d/rc.local

    TIPS: 注意前面我们配置了用户名密码, 所以在客户端设置代理同样需要设置用户名密码

    4. Dante

    Dante是另一款SOCK 5代理软件

    4.1 安装

    # wget http://www.inet.no/dante/files/dante-1.4.2.tar.gz
    # tar -xzvf dante-1.4.2.tar.gz
    # cd dante-1.4.2
    # ./configure
    # make
    # make install

    4.2 配置

    # cat /etc/sockd.conf
    ## general configuration (taken from FAQ; <URL:http://www.inet.no/dante/FAQ>)
    
    internal: eth0 port = 9090
    external: eth0
    
    socksmethod: none
    user.privileged: root
    user.notprivileged: nobody
    
    logoutput: /var/log/sockd.log
    
    ## client access rules
    client pass {
            from: 0/0 to: 0/0
    }
    
    ## server operation access rules
    # block connections to localhost, or they will appear to come from the proxy.
    socks block { from: 0/0 to: lo log: connect }
    
    
    # block bind to ports lower than 1023
    #socks block {
    #        from: 0/0 to: 0/0 port le 1023
    #        command: bind
    #        log: connect
    #}
    
    # allow the rest
    socks pass {
            from: 0/0 to: 0/0
            protocol: tcp udp
            log: error connect disconnect
    }

    更多配置选项, 参考<Dante configuration>

    4.3 启动

    # 启动程序
    # /usr/local/sbin/sockd -D
    
    # 结束程序
    # killall sockd
    
    # 查看日志
    # tail -f /var/log/sockd.log

    5. Shadowsocks

    5.1 安装

    # yum install python-pip
    # pip install shadowsocks

    5.2 配置

    # cat /etc/shadowsocks.json
    {
        "server":"0.0.0.0",
        "server_port":9090,
        "local_address": "127.0.0.1",
        "local_port":1080,
        "password":"mypassword",
        "timeout":300,
        "method":"aes-256-cfb",
        "fast_open": false
    }

    5.3 启动

    # 前台启动
    # ssserver -c /etc/shadowsocks.json
    
    # 后台启动和停止
    # ssserver -c /etc/shadowsocks.json -d start
    # ssserver -c /etc/shadowsocks.json -d stop
    
    # 查看日志
    # tail -f /var/log/shadowsocks.log

    5.4 问题

    问题一: 代理访问失败, 查看日志如下

    WARNING  unsupported addrtype 104, maybe wrong password or encryption method
    ERROR    can not parse header when handling connection from x.x.x.x:x

    调查一番发现, 原来还需要在客户端上跑一个Shadowsocks client, 下载一个Windows版本即可

    5.5 其他

    由于前面较多都是SOCK代理, 而很多应用只支持HTTP代理, 所以通常还需要将SOCK5协议转换HTTP协议
    这类软件包括Privoxy、Polipo等, 这里不做介绍

    6. 总结

    以上几款代理软件尝试下来结果如下:
    - TinyProxy: 可以访问bing、baidu, 但是google、youtube、facebook无法访问
    - SS5: 可以访问bing、youtube、baidu, 但是google、facebook无法访问
    - Dante: 可以访问bing、baidu, 而youtube、google、facebook等均无法访问
    - Shadowsocks: 可以访问bing、baidu、youtube, 而google、facebook等均无法访问

    当然, 我使用的阿里云服务器虽然位于美国, 但是各项配置都毕竟差, 可能这个会很大程度上影响访问, 主要配置如下

    CPU:  1核
    内存: 1GiB
    硬盘: 20GiB
    带宽: 1Mbps

    这里介绍一个测试带宽的工具speedtest-cli

    # pip install speedtest-cli
    
    # 带宽为1Mbps
    # speedtest-cli
    Retrieving speedtest.net configuration...
    Testing from Alibaba (x.x.x.x)...
    Retrieving speedtest.net server list...
    Selecting best server based on ping...
    Hosted by Unwired (San Francisco, CA) [26.04 km]: 9.609 ms
    Testing download speed................................................................................
    Download: 109.89 Mbit/s
    Testing upload speed................................................................................................
    Upload: 1.60 Mbit/s
    
    # 带宽为10Mbps
    # speedtest-cli
    Retrieving speedtest.net configuration...
    Testing from Alibaba (x.x.x.x)...
    Retrieving speedtest.net server list...
    Selecting best server based on ping...
    Hosted by Coastside Net (Half Moon Bay, CA) [13.10 km]: 2.916 ms
    Testing download speed................................................................................
    Download: 110.42 Mbit/s
    Testing upload speed................................................................................................
    Upload: 12.00 Mbit/s

    参考:
    <Shadowsocks Wiki>
    <浅析 正向代理 反向代理 透明代理>
    <WireGuard介绍及客户端配置使用教程>

  • 相关阅读:
    转: winform间的传值并linklabel动态窗口跳转
    app.config配置
    RSS2.0中文规范
    windows forms 窗口跳转
    C#对DataGridView进行添加、修改、删除数据操作
    小小一颗心
    小记上海一天
    又一个婉约的日子
    七夕节
    我的实习
  • 原文地址:https://www.cnblogs.com/hzl6255/p/10926411.html
Copyright © 2020-2023  润新知