Tiny Tiny RSS 用上 Privoxy 代理

上周搭建 TTRSS 时,给配置了代理是针对所有请求的,这周抽时间做了些改变,针对国内的站,就不再绕远路了。

不宜细说,这里做个备忘。

1. 功能强大的 privoxy

对比之前用的 polipo,privoxy 功能强大太多,这里主要用到它针对不同地址进行不同处理的功能,默认直接转发不走代理,特殊域名走代理。

privoxy 配置

# /etc/privoxy/config

listen-address  127.0.0.1:8118
forward / .
actionsfile /etc/privoxy/gfw.action
actionsfile /etc/privoxy/extra.action

gfw.action 样例

# /etc/privoxy/gfw.action

{+forward-override{forward-socks5 127.0.0.1:12345 .}}
.google.com
.facebook.com
.twitter.com
.youtube.com

2. 使用 gfwlist2privoxy 把 gfwlist.txt 转换成适用于 privoxy 的 actionfile

使用 gfwlist 转换的 privoxy actionfile,免去自己收集、配置的麻烦。

gfwlist2privoxy -i gfwlist.txt -f gfw.action -p 127.0.0.1:12345 -t socks5

3. crontab 脚本,定期更新、转换 gfwlist

#crontab

26 03 * * * bash /home/noodles/update_gfwlist.sh > /var/log/update_gfwlist.log 2>&1

脚本内容

#!/bin/bash

# update_gfwlist.sh

set -o errexit

WGET="/usr/bin/wget"
GFWLIST_URL="https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt"
GFWLIST_FILE="/tmp/gfwlist.txt"

# PROXYCHAINS4_CONFIG="/home/noodles/.proxychains/proxychains.conf"
# PROXYCHAINS4="/usr/bin/proxychains4 -f $PROXYCHAINS4_CONFIG -q"

GFWLIST2PRIVOXY="/usr/local/bin/gfwlist2privoxy"

PRIVOXY_GFW_ACTION_TEMP="/tmp/gfw.action.new"
PRIVOXY_GFW_ACTION="/etc/privoxy/gfw.action"

function get_gfw_action {
    printf "download %s ...... " "$GFWLIST_URL"
    # $PROXYCHAINS4 $WGET -q -O $GFWLIST_FILE $GFWLIST_URL
    $WGET -q -O $GFWLIST_FILE $GFWLIST_URL
    echo "ok"
    printf "convert %s to %s ... " "$GFWLIST_FILE" "$PRIVOXY_GFW_ACTION_TEMP"
    $GFWLIST2PRIVOXY -i $GFWLIST_FILE -f $PRIVOXY_GFW_ACTION_TEMP -p 127.0.0.1:12345 -t socks5
    echo "ok"
}

function replace_gfw_action {
    local old_md5=""
    local new_md5=""
    if [[ -s $PRIVOXY_GFW_ACTION ]]; then
        old_md5=$(sed 1,2d "$PRIVOXY_GFW_ACTION" | md5sum | awk '{print $1}')
    fi
    new_md5=$(sed 1,2d "$PRIVOXY_GFW_ACTION_TEMP" | md5sum | awk '{print $1}')
    echo "old md5sum: [$old_md5]"
    echo "new md5sum: [$new_md5]"
    if [[ "x$old_md5" = "x$new_md5" ]]; then
        echo "no need to update"
    else
        echo "mv $PRIVOXY_GFW_ACTION_TEMP to $PRIVOXY_GFW_ACTION"
        mv $PRIVOXY_GFW_ACTION_TEMP $PRIVOXY_GFW_ACTION
        echo "reload privoxy"
        /usr/sbin/service privoxy force-reload
    fi
    rm -f $GFWLIST_FILE
}

function main {
    get_gfw_action
    if [[ -s $PRIVOXY_GFW_ACTION_TEMP ]]; then
        replace_gfw_action
        echo "Done."
    else
        echo "$PRIVOXY_GFW_ACTION_TEMP is empty."
        echo "Error."
    fi
}

main

4. 命令行工具的代理

上面脚本里,下载 gfwlist.txt 时可能要用到。

proxychains4

rofl0r/proxychains-ng

配置文件

~/.proxychains/proxychains.conf

strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
socks5  127.0.0.1 12345   # ss 代理地址
comments powered by Disqus