Сначала было слово
Поступило распоряжение верховного руководства заблокировать ряд забугорных сервисов. Блокировать по ip как-то коряво, никто не несет никаких обязательств в части смены оных ip-шников, так же, в случае попадания в список каких-либо не крупных сервисов, можно нарваться на ip, расшаренный между несколькими, а то и многими сайтами. Стало быть по url. Тут кроме родного и близкого дедушки squid-а и ухватить-то некого... Его и ухватим. В сети примерно 160 ltsp-шных бездисковых станций, штук 40 Xubuntu, штук 50 Win... разномастных, пара Маков, штук 30 Андроидов. Попробуем максимально принудительно прописать им путь до прокси, потом закроем прямую дорогу.
Полезные ссылки в части принудительного насаждения прокси
http://en.wikipedia.org/wiki/Proxy_auto-config
http://wiki.squid-cache.org/SquidFaq/ConfiguringBrowsers
http://tdkare.ru/sysadmin/index.php/Chromium-browser
http://technet.microsoft.com/ru-ru/library/cc985352.aspx
и самое ценное
http://askubuntu.com/questions/263567/set-web-proxy-using-pac-file-url-in-lubuntu
Делаем
Сначала анонсируем прокси обоими возможными способами. dnsmasq обзавелся в своем конфиге вот такой строкой.
# wpad option
dhcp-option=252,http://wpad/wpad.pac
Местный apache был дообозван именем wpad и в корень ему был записан скрипт с именем wpad.dat И его же обозвали (прилинковали) как wpad.pac
В /etc/apache2/mods-available/mime.conf добавлена строчка
AddType application/x-ns-proxy-autoconfig .pac
Содержимое скрипта тривиально.
// Some ideas by Oskar Pearson and the Internet Solution (http://www.is.co.za)
function FindProxyForURL(url, host)
{
//If they have only specified a hostname, go directly.
if (isPlainHostName(host))
return "DIRECT";
//Connect directly to our domains (for Important News www)
if (dnsDomainIs( host,"okgvv.loc"))
return "DIRECT";
// See next!
if (dnsDomainIs( host,"www.monitor.kuzdrav.ru"))
return "PROXY proxy:3128";
// Parus use 81 port
if (dnsDomainIs( host,"monitor.kuzdrav.ru"))
return "DIRECT";
//Vipnet client's direct path
if (isInNet(host, "11.0.0.174", "255.255.255.255"))
return "DIRECT";
//Local IPs
if (isInNet(host, "10.0.0.0", "255.255.254.0"))
return "DIRECT";
else
return "PROXY proxy:3128";
}
Это было авто, для всех кто готов слушать и внимать. Всем "своим" еще более принудительно...
На клиентах
На всех linux-ах, включая и ltsp пропишем для всех простых клиентов (midori например) в /etc/evironment
http_proxy=http://proxy:3128/
https_proxy=http://proxy:3128/
ftp_proxy=http://proxy:3128/
no_proxy="localhost,127.0.0.1,10.0.0.0/23"
HTTP_PROXY=http://proxy:3128/
HTTPS_PROXY=http://proxy:3128/
FTP_PROXY=http://proxy:3128/
NO_PROXY="localhost,127.0.0.1,10.0.0.0/23"
Для Хромиума в файле /etc/chromium-browser/default пропишем
CHROMIUM_FLAGS="--proxy-pac-url=http://wpad/wpad.dat --enable-plugins"
Для Ф-фокса в /etc/firefox/syspref.js в хвост
lockPref("network.proxy.autoconfig_url", "http://wpad/wpad.dat");
lockPref("network.proxy.type", 2);
если почитать about:config в Мозилле, много чего захочется добавить следом, например для бездисковых клиентов.
lockPref("browser.cache.disk.filesystem_reported", 1);
lockPref("browser.cache.disk.capacity", 35840);
lockPref("browser.cache.disk.smart_size.enabled", false);
lockPref("browser.startup.homepage", "http://yandex.ru");
pref("browser.search.defaultenginename","Яндекс");
pref("browser.search.order.2","Яндекс");
и в /etc/apt/apt.conf (сам файл скорее всего нужно создать).
Acquire::http::proxy "http://proxy:3128/";
Acquire::https::proxy "http://proxy:3128/";
Acquire::ftp::proxy "http://proxy:3128/";
Acquire::::Proxy "true";
В Windows достаточно прописать "автоматическое определение настроек". С ними сильно церемониться не будем (в этом лесу законы не писаны) а просто перекроем прямой роутинг (http+https) на пограничном шлюзе... Сами приползут :-)