Реализация глобального прокси с iptables
Я использую 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 можно использовать для прозрачного перенаправления всего трафика через прокси, эффективно реализуя глобальный прокси.
Возможно ли это, и если да, то как мне это сделать?
РЕДАКТИРОВАТЬ: я должен уточнить, что я не администратор, и я не пытаюсь настроить прокси. Прокси-сервер уже настроен, и для того, чтобы компьютеры могли подключаться к интеренту, необходимо включить автоматическую настройку прокси-сервера и указать его выше в файле pac. Прямые соединения заблокированы.
Вместо того чтобы настраивать каждое приложение индивидуально, я надеялся использовать iptables для автоматической маршрутизации трафика через прокси.
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";
) - Использование цепочек прокси для любых оставшихся программ, которые не учитывают переменные среды и не имеют встроенной поддержки прокси.
Признаюсь, я никогда не использовал 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, но это крайне не рекомендуется. Если вы действительно хотите реализовать эту функциональность, здесь есть хорошее руководство.