Я использую Linux-компьютер (Lubuntu 12.04) в среде Windows, где для настройки доступа в Интернет используется PAC-файл.
Файл proxy.pac:
function FindProxyForURL(url, host){
var proxy_yes = "PROXY xxx.xxx.xxx.xxx:8000";
var proxy_no = "DIRECT";
if (shExpMatch(url, "*//yyy.*")) { return proxy_no; }
if (shExpMatch(url, "*//zzz.zzz.*")) { return proxy_no; }
if (shExpMatch(url, "*foo.com*")) { return proxy_no; }
//Proxy anything else
return proxy_yes;
}
Насколько мне известно, в Lubuntu нет глобальной системы прокси.
Вместо того чтобы возиться с переменными оболочки, такими как HTTP_PROXY, которые учитывают только некоторые программы (например, не Chromium), я подумал, что iptables можно использовать для прозрачного перенаправления всего трафика через прокси-сервер, эффективно реализуя глобальный прокси-сервер.
Возможно ли это, и если да, то как это сделать?
EDIT: Я должен уточнить, что я не администратор и не пытаюсь настроить прокси. Прокси уже настроен, и для подключения машин к интернету требуется включить автоматическую настройку прокси и указать на файл pac выше. Прямые соединения блокируются.
Вместо того чтобы настраивать каждое приложение по отдельности, я надеялся использовать iptables для автоматической маршрутизации трафика через прокси-сервер.
решение1
Признаюсь, я никогда не пользовался Lubuntu
, но подозреваю, что это просто Ubuntu
производная, работающая на виртуальной машине. Полагаться на javascript для выполнения проксирования — очень глупое занятие, поскольку его легко обойти или полностью проигнорировать во многих случаях... что в конечном итоге сводит на нет преимущества использования прокси изначально.
Я бы начал с настройки правильной прокси-системы, используяsquid
. Для производных в репозитории ubuntu
есть пакет, который легко устанавливается с помощью или . После установки начните с редактирования и добавьте или измените следующие настройки на те, которые вы считаете подходящими:squid
apt
synaptic
/etc/squid/squid.conf
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
acl lan src 192.168.1.1 192.168.2.0/24
http_access allow localhost
http_access allow lan
Существует гораздо больше опций конфигурации, которые вы можете использовать, но эти довольно хороши для начала большинства случаев. После этого следующим шагом будет просто настроить iptables в вашем маршрутизаторе по умолчанию DNAT
и перенаправить трафик на ваш squid
прокси.
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Конечно, вы захотите поместить это в какой-то скрипт запуска, чтобы правила применялись каждый раз при загрузке маршрутизатора. Кроме того, имейте в виду, что это не повлияет на https
трафик, так как https
намеренно разработано так, чтобы НЕ позволять трафику быть проксированным (или перехваченным/расшифрованным/и т. д. кем-то посередине). Если вы хотите отфильтровать трафик (на сомнительные сайты), вы также можете броситьSquidGuard
в микс.
Можно проксировать https-трафик, но это крайне не рекомендуется. Если вы действительно хотите реализовать эту функциональность, есть хорошее руководствоздесь.
решение2
Вот что я в итоге сделал:
- Установка переменных среды
ALL_PROXY
,HTTP_PROXY
,HTTPS_PROXY
,FTP_PROXY
иNO_PROXY
в/etc/environment
. - Настройка http, https и ftp прокси для apt в
/etc/apt/apt.conf.d/80proxy
(используя синтаксисAcquire::http::proxy "http://xxx.xxx.xxx.xxx:8000";
) - С использованиемproxychainsдля всех оставшихся программ, которые не учитывают переменные среды и не имеют встроенной поддержки прокси.