Squid 使用 url_rewrite_program 在查询中添加 LAN IP、Squid 用户名和 Squid 端口

Squid 使用 url_rewrite_program 在查询中添加 LAN IP、Squid 用户名和 Squid 端口

我使用 squid 作为带有 SSL Bump 拦截的透明代理。

Squid HTTP 和 HTTPS 端口配置为:

http_port 3127 transparent
https_port 3129 intercept ssl-bump generate-host-certificates=on cert=/opt/squid/ssl_cert/cert.crt key=/opt/squid/ssl_cert/cert.key options=NO_SSLv2,NO_SSLv3

我编写了以下 URL 程序来强制对 Google 和 duckduckgo 进行安全搜索:

#!/usr/bin/perl
use strict;
use URI::URL;

# Turn off buffering to STDOUT
$| = 1;

# Read from STDIN
while (<STDIN>) {
    # Do some trimming
    s/^\s*//;
    s/\s*$//;

        my $string = $_;

    # Google Safe search
        if ($string =~ m/^http(s?)\:\/\/([a-z]+\.)?google\.([a-z]{2,3})(\.[a-z]{2,3})?\/.*(\?(as_)?q=)|(\#(as_)?q=)|(\&(as_)?q=)/) {
                #print "OK rewrite-url=\"$string", "&safe=active\"";
                if ($string !~ m/&safe=active/) {
                        print "OK url=\"$string", "&safe=active\"";
                        print "\n";
                } else {
                        print "OK\n";
                }
        }

        # Duckduckgo safe search
        elsif ($string =~ m/^http(s?)\:\/\/([a-z]+\.)?duckduckgo\.([a-z]{2,3})(\.[a-z]{2,3})?/) {
                #print "OK rewrite-url=\"$string", "&kp=1\"";
                if ($string !~ m/&kp=1/) {
                        print "OK url=\"$string", "&kp=1\"";
                        print "\n";
                } else {
                        print "OK\n";
                }
        }

        # If no one match, url still intact
        else {
                print "ERR\n";
        }
}

在 squid 配置中我添加了以下行:

url_rewrite_program /opt/squid/bin/url_rewriter

url_rewriter 在 CLI 中测试时很好地重写 URL:

./url_rewriter
https://www.google.fr/?q=test
OK url="https://www.google.fr/?q=test&safe=active"
https://www.duckduckgo.com/
OK url="https://www.duckduckgo.com/&kp=1"

它在浏览器中运行完美,只是 squid 总是在查询中添加 LAN IP、用户名和 squid 端口。例如,它在查询中添加以下内容:

"%20192.168.1.18/192.168.1.18%20benoit%20GET%20myip=-%20myport=3129"

对于谷歌我得到了这个:

https://www.google.fr/?q=test%20192.168.1.18/192.168.1.18%20benoit%20GET%20myip=-%20myport=3129&safe=active

代替 :

https://www.google.fr/?q=test&safe=active

对于 duckduckgo,我得到

https://duckduckgo.com/%20192.168.1.18/192.168.1.18%20benoit%20GET%20myip=-%20myport=3127&kp=1

代替 :

https://duckduckgo.com/&kp=1

我为什么会出现这种情况?我是不是漏掉了什么?如果需要,我可以发布更多配置。

答案1

是的,你错过了一个小细节。Squid 不会在稍后添加 myip= 等内容,而是在将 URL 发送给重写器之前添加。这意味着你必须在将其交还给 Squid 之前将其删除。

并非所有版本的 squid 都支持此功能,但截至 3.4 版均有记录

汤姆汤姆汤姆

答案2

我自己找到了解决方案。

是的,我忘了提供 Squid 的版本,这对我来说是很重要的信息。我使用的是 3.5.20 版本

有一个新的指令名为url_rewrite_extras来自 squid 3.5

http://www.squid-cache.org/Doc/config/url_rewrite_extras/

默认情况下它添加:“%> a /%> A%un%> rm myip =%la myport =%lp”在使用 URL 重写器/重定向器辅助程序时,在每个查询中。

所以我添加了覆盖此值的选项。我必须将空格设置为值,因为url_rewrite_extras“”添加破折号“-”即可查询。

url_rewrite_extras " "
url_rewrite_program /opt/squid/bin/url_rewriter

相关内容