Я использую 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 хорошо переписывает URL при тестировании в CLI:
./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 всегда добавляет в запрос IP-адрес LAN, имя пользователя и порт squid. Например, он добавляет это в запрос:
"%20192.168.1.18/192.168.1.18%20benoit%20GET%20myip=-%20myport=3129"
Для Google я получаю это:
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
Почему у меня такое поведение? Я что-то пропустил ? При необходимости я могу опубликовать дополнительные настройки.
Я нашел решение самостоятельно.
Да, я пропустил предоставление версии Squid, и в моем случае это была важная информация. Я использую версию 3.5.20
Появилась новая директива url_rewrite_extras из кальмара 3.5
http://www.squid-cache.org/Doc/config/url_rewrite_extras/
По умолчанию добавлено: "%> a /%> A% un%> rm myip =% la myport =% lp" в каждом запросе при использовании вспомогательной программы URL-rewriter / redirector.
Поэтому я добавляю возможность перезаписать это значение. Мне пришлось установить пробел как значение, потому что url_rewrite_extras "" добавьте тире "-" к запросу.
url_rewrite_extras " "
url_rewrite_program /opt/squid/bin/url_rewriter
Да вы упустили мельчайшую деталь. Squid не добавляет элементы myip = и т. Д. Позже, но до того, как отправит URL-адрес вашему модулю перезаписи. Это означает, что вы должны удалить его, прежде чем возвращать его кальмару.
Не все версии squid делают это, но это задокументировано до версии 3.4.
TomTomTom