Прокси-сервер (от англ. proxy — «представитель, уполномоченный») — служба в компьютерных сетях, позволяющая клиентам выполнять косвенные запросы к другим сетевым службам. Сначала клиент подключается к прокси-серверу и запрашивает какой-либо ресурс (например, файл), расположенный на другом сервере. Затем прокси-сервер либо подключается к указанному серверу и получает ресурс у него, либо возвращает ресурс из собственного кэша (в случаях, если прокси имеет свой кэш). В некоторых случаях запрос клиента или ответ сервера может быть изменён прокси-сервером в определённых целях.
Чаще всего прокси-серверы применяются для следующих целей:
Обеспечение доступа с компьютеров локальной сети в Интернет.
Кэширование данных: если часто происходят обращения к одним и тем же внешним ресурсам, то можно держать их копию на прокси-сервере и выдавать по запросу, снижая тем самым нагрузку на канал во внешнюю сеть и ускоряя получение клиентом запрошенной информации.
Сжатие данных: прокси-сервер загружает информацию из Интернета и передаёт информацию конечному пользователю в сжатом виде. Такие прокси-серверы используются в основном с целью экономии внешнего трафика.
Защита локальной сети от внешнего доступа: например, можно настроить прокси-сервер так, что локальные компьютеры будут обращаться к внешним ресурсам только через него, а внешние компьютеры не смогут обращаться к локальным вообще (они «видят» только прокси-сервер). См. также NAT.
Ограничение доступа из локальной сети к внешней: например, можно запретить доступ к определённым веб-сайтам, ограничить использование интернета каким-то локальным пользователям, устанавливать квоты на трафик или полосу пропускания, фильтровать рекламу и вирусы.
Анонимизация доступа к различным ресурсам. Прокси-сервер может скрывать сведения об источнике запроса или пользователе. В таком случае целевой сервер видит лишь информацию о прокси-сервере, например, IP-адрес, но не имеет возможности определить истинный источник запроса. Существуют также искажающие прокси-серверы, которые передают целевому серверу ложную информацию об истинном пользователе.
Многие прокси-серверы используются для нескольких целей одновременно. Некоторые прокси-серверы ограничивают работу несколькими портами: 80 (Браузер), 443 (Шифрованное соединение (HTTPS)), 20,21 (FTP).
В отличие от шлюза прокси-сервер чаще всего не пропускает ICMP-трафик (невозможно проверить доступность машины командами ping и traceroute).
Прокси-сервер, к которому может получить доступ любой пользователь сети интернет, называется открытым.
2. Как поставить/настроить squid? (коротко)
Иван Паскаль, Linux RSP Web Site
Прежде чем разбираться со squid'ом, надо убедиться, что все остальное работает. А именно:
машина, на которой будет работать Proxy, может соединится (по WWW, FTP, Telnet - не важно) с машинами в мире;
машины из внутренней сети могут соединится с этой машиной, опять же - не важно каким клиентом;
Если что-то из этого отсутствует, пока за squid браться рано.
Если же связь изнутри к Proxy-машине есть, и эта Proxy-машина может общаться с внешним миром, переходим к настройке squid'а. Я проверял на squid-1.1.20. Но, в других версиях (если они не намного древнее) должно быть примерно так же.
Squid надо ставить из packages или ports, тогда есть уверенность, что все его компоненты разложаться по нужным директориям, как это принято именно во FreeBSD. Должно получиться примерно следующее:
Бинарники лежат в /usr/locl/sbin;
В /usr/local/etc появилась директория squid, в которой лежит squid.conf - это как раз его конфиг-файл, его надо будет подправлять.
В /usr/local/etc/rc.d появился файлик squid.sh - это основная запускалка (дело в том, что система при старте просматривает этот каталог, и все, что найдет там типа *.sh запустит автоматом). Но можно его запустить и вручную просто ./squid.sh. Если такого файла нет, то при перезагрузке squid не будет запускаться.
В /usr/local образовалась директория squid, в которой две поддиректории cache - там будет его кэш и logs - логи. Там же должен быть файлик (возможно, он появится после первого запуска) squid.out - это основной лог, в которм и будут сообщения об ошибках, если squid почему-либо не сможет стартовать нормально.
Если что-то из вышеописанного лежит не там, то надо будет найти.
Для начала squid.conf можно не сильно не копать. Там стоят значения "по умолчанию", они вполне приемлимы. Единственное, что я советую - определится, сколько мегабайт диска вы согласны выделить под кэш. По умолчанию 100 МB. Если у Вас напряженка с дисковым пространством, или наоборот, переизбыток, то найдите в squid.conf строчку:
cache_swap 100
и поставьте подходящее значение (если строчка закоментарена знаком '#' в начале - раскоментарьте). Максимальный обьем можно оценочно определить как обьем, который можно прокачать по Вашей линии к провайдеру за сутки.
Еще одна правка, скорее всего понадобится. Я запустил squid'а, ничего не исправляя, и он тут же выдал мне в squid.out сообщение об ошибке. Смысл сообщения был такой, что "нельзя запускать от имени root, используйте cache_effective_user в конфиге". Поскольку, при старте машины squid.sh будет исполняться от имени root, то надо сделать, что он просит. То есть, найти в конфиге строчку:
cache_effective_user nobody nogroup
и раскоментарить ее. Это будет означать, что в процессе работы, squid будет иметь права "псевдоюзера" nobody.
На самом деле, это не совсем правильно. Правильнее - завести нового "псевдоюзера" squid (или еще как-нибудь - www, cache ...) и в конфиге вписать именно его, а не nobody. но если это слишком сложная для Вас задача, то просто раскоментарьте строчку и все.
После этого надо будет поправить владельца для директории /usr/local/squid (ну, там где кэш и логи). Для этого выполните команду
chown -R nobody /usr/local/squid
("-R означает, что меняется владелец не только директории, но и Rекурсивно обходится все содержимое поддиректорий). Если вы завели специального "псевдоюзера", то, естественно, в команде вместо nobody укажите его имя.
Теперь осталось сформировать "внутреннюю структуру кэша". Кстати, если этого не сделать, то squid при запуске сам скажет вам: "запустите программу squid -z". Сделайте, как он говорит. Только учтите, что /usr/local/sbin, обычно, не прописана в PATH даже у root'а, поэтому лучше набрать полный путь
/usr/local/sbin/squid -z.
Это сравнительно длительный процесс, но когда он закончится, все должно быть уже готово к запуску.
Теперь можно попытаться запустить squid. Зайдите в /usr/local/etc/rc.d и запустите ./squid.sh. У меня с этого момента все заработало. Кстати, на консоли должно появится сообщение от squid'а "Ready to serve requests" ("готов обслуживать запросы").