Понадобилось мне недавно поставить прозрачный прокси-сервер в одной конторе. Выход в интернет там организован через роутер ASUS WL-550g, на котором стояла альтернативная прошивка.

Для тех кто не в теме, поясню, что прозрачный прокси отличается от обычного в первую очередь тем, что в броузерах на клиентских машинах не нужно явно прописывать настройки прокси-сервера. Прозрачный прокси просто перехватывает идущий HTTP-трафик и дальше уже предпринимает с ним разные действия. У пользователя при этом создается ощущение, что он работает в интернете без прокси-сервера.

Вобщем для выполнения этой задачи я установил Debian на отдельный ПК, затем поставил туда проси Squid, Apache и Lightsquid для просмотра статистики. После этого встал вопрос каким образом завернуть весь трафик 80-го TCP порта на комп прокси-сервера.

Самое просто что пришло в голову это прописать на шлюзе что-то типа:
iptables -t nat -A PREROUTING -s localnetwork -p tcp -dport 80 -j DNAT -to-destination proxy-server-ip:port
Заработало… Весь трафик реально стал заворачиваться на прокси-сервер, вот только в отображаемой Лайтсквиде статистике получился небольшой казус. Все запросы в интернет отправленные с компьтеров сети в статистике стали отображаться как запросы, отправленные непосредственно с локального IP-адреса маршрутизатора. Почему так произошло, ведь DNAT меняет в IP-пакете только адрес назначения? Все очень просто. Общее правило, по которому вся сеть выходила в интернет никуда не делось, а там у нас было прописано примерно вот что:
iptables -t nat -A POSTROUTING -s localnetwork -j MASQUERADE
На деле получалось так, что в цепочке PREROUTING у нас менялся адрес назначения, а затем, в цепочке POSTROUTING еще и адрес отправителя.
Делаем правильно!
Порывшись в интернете я набрел на доку, в которой написано как наиболее правильно делать перенаправление на прозрачный прокси.
Итак, сначала пишется правило, которое пропускат без изменений весь трафик идущий от прокси-сервера в интернет:
iptables -t mangle -A PREROUTING -j ACCEPT -p tcp -dport 80 -s proxy-server-ip
Трафик идущий в интернет от других компьютеров локальной сети мы маркируем:
iptables -t mangle -A PREROUTING -j MARK -set-mark 3 -p tcp -dport 80
Затем мы создаем правило маршрутизации - весь промаркированный трафик засовываем в новую таблицу 2:
ip rule add fwmark 3 table 2
После этого прописсываем маршрут дл таблицы 2:
ip route add default via proxy-server-ip dev router-lan-interface table 2
После этих шагов весь трафик будет заворачиваться на проски-сервер на момент принятия решения о маршрутизации, т.е. не доходя до цепочки POSTROUTING.
Но тут есть один маленький ньюанс, весь трафик с компьютеров локальной сети будет приходить на прокси-сервер на 80й порт, поэтому Squid нужно настраивать на 80-м порту либо делать REDIRECT с 80-го на какой-нибудь 3128. Правило на прокси-сервере будет выглядить примерно таким образом:
iptables -A PREROUTING -t nat -i eth0 -p tcp -dport 80 -j REDIRECT -to-port 3128
Так как 80й порт на прокси-сервере у нас будет в любом случае занят не зависимо от того повесим мы на него Squid или будем делать редирект, не забудте Apache привязать к другому порту, т.к. по умолчанию он тоже висит на TCP 80.

Прокси-сервер это очень удобная и крайне полезная вещь, которая может быть как никогда кстати в целом ряде случаев. Прокси-серверы могут быть разных видов, одним из самых популярных видов таких серверов, является прозрачный прокси сервер. Прозрачным прокси-сервером называется тот сервер, подключиться к которому есть возможность без использования специальных программ и дополнительных настроек веб-обозревателя. Достичь такого положения дел позволяет специальная настройка файерволла, результатом которой является перенаправление всего трафика с 80 порта, на порт, принадлежащий прокси-серверу.

Что такое прозрачный прокси-сервер?

Прозрачным прокси-сервером называется тот сервер, подключиться к которому есть возможность без использования специальных программ и дополнительных настроек веб-обозревателя. Достичь такого положения дел позволяет специальная настройка файерволла, результатом которой является перенаправление всего трафика с 80 порта, на порт, принадлежащий прокси-серверу.

Такая настройка имеет целый ряд особенностей и интересных эффектов, один из которых заключается в том, что пользователи такой системы даже не будут знать, что они заходят на тот или иной сайт через прокси-сервер, так как эта настройка позволяет полностью избавиться от надобности ручного конфигурирования веб-клиентов, что весьма практично и удобно. Именно этот эффект, во многом и определяет популярность, которой обладает в наше время прозрачный прокси сервер.

Как добиться работы прозрачного проксирования?

Для нормальной работы прозрачного проксирования, следует правильно настроить маршрутизатор. Как известно, большая часть современных компьютерных сетей использует маршрутизатор для соединения локальной сети и сети интернет. Суть настройки маршрутизатора в этом случае заключается в перенаправлении всего трафика, следующего на 80 порт, на squid прозрачный прокси сервер. Существуют случаи, особенно это касается небольших сетей, когда запустить прокси сервер можно даже на маршрутизаторе, что весьма удобно.

Также при настройке прозрачного прокси-сервера может очень сильно понадобиться IP таблицы файерволла, которые могут быть очень кстати в случае возникновения каких-либо проблем перенаправлении трафика.

Для чего нужен прозрачный прокси-сервер?

Как уже говорилось выше, прозрачный прокси-сервер обладает своими преимуществами, которые и делают его столь часто используемым. Главное преимущество такого вида проксирования заключается в том, что клиент, который будет использовать прозрачный прокси сервер не должен ничего настраивать, что очень удобно и комфортно для самого клиента. Всё что необходимо сделать это правильно организовать перенаправление трафика на маршрутизаторе, что должен сделать админ сети, после чего все участники этой сети смогут пользоваться всеми преимуществами, которыми обладает прокси-сервер. Что же касается преимуществ прокси-серверов и их возможностей, то можно выделить следующие из них:

  • Анонимность. Прокси-сервер позволяет скрывать собственный IP-адрес заходя на тот или иной сайт, что весьма удобно в том случае, если на каком-либо сайте вас забанили, или же вы не хотите показывать своего присутствия по каким-либо другим причинам.
  • Сжатие данных. Перед тем как передать информацию конечному пользователю прокси-сервер её сжимает, что позволяет весьма неплохо экономить сетевой трафик.
  • Ограничение доступа. Прокси-сервер также предлагает очень хорошие возможности по ограничению доступа, например, он позволяет запретить доступ к каким-либо сайтам, или же ограничить трафик конкретным пользователям в случае такой необходимости.

Как можно убедиться, прокси-серверы и особенно прозрачные прокси-серверы обладают целым рядом преимуществ и сильных сторон, поэтому если вы желаете также их использовать, прозрачный прокси сервер squid может стать для вас очень хорошим выбором.

Squid — это мощный пакет, реализующий проксирование проходящих через него запросов, имеет огромный набор возможностей. В локальной сети чаще всего его используют как прозрачный кэширующий прокси. Настроим по порядку 3 основные возможности squid.

1. Для начал устанавливаем squid (для Debian 6)

Apt-get install squid3

2. Файл с настройка squid.conf лежит в /etc/squid3/. Содержит он около 5,5 тысяч строк. Но не все так страшно, основная масса этого файла — это подробные комментарии к настройкам. Как удобнее внести изменения в файл выбирать Вам. Можно избавиться от всего лишнего в файле таким способом

# переходим в папку squid cd /etc/squid3 # делаем резервную копию файла с настройками cp squid.conf squid.conf_backup # получаем из squid.conf_backup чистый файл с настройками без комментариев в squid.conf cat squid.conf_backup | egrep -v "^#|^$" > squid.conf

и получить «голый» файл с настройка, следующего содеражания

Acl manager proto cache_object acl localhost src 127.0.0.1/32::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32::1 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access deny all http_port 3128 hierarchy_stoplist cgi-bin ? coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320

Останется внести лишь необходимые изменения в строках. Второй вариант — это редактировать весь файл без его чистки. Что тоже довольно просто если уметь пользоваться поиском в редакторе vi. В этом случае у Вас в помощь останутся много полезных комментариев к настройкам.

Для поиска текста в редакторе vi нажимаем клавишу «/». Если Вы находитесь в режиме редактирования, нужно выйти из него для передачи команд редактору нажатием на «Esc». Получаем такую последовательность действий: «/» > «вводим поисковое слово» > «Enter».

Теперь редактируем файл, делаем основные настройки. Если нужных строк нет, то добавляем их или раскоментируем.

Vi /etc/squid3/squid.conf # Разрешаем доступ к прокси только из нашел сети acl localnet src 172.16.0.0/24 http_access allow localnet http_access allow localhost # По умолчанию порт работы прокси 3128 # Так как у нас прокси будет прозрачным - указываем это # а так же адрес интерфейса с портом на котором будет работать прокси # на этот же порт будут перенаправляться запросы в iptables http_port 172.16.0.1:3128 transparent

3. Обеспечиваем кэширование запросов

# Установка директории кэша и его настройка # ufs - способ кэширования файлов на диске # /var/spool/squid3 - папка кэша # 5000 - размер кэша в мегабайтах # 16 - количество папок 1 уровня в кэше # 256 - количество папок 2 уровня в кэше cache_dir ufs /var/spool/squid3 5000 16 256 # ограничим минимальный размер кэшируемого файла, чтобы облегчить работу жесткому диску # либо можно потерять весь смысл кэша, если он будет медленно работать minimum_object_size 2 KB # ограничиваем и максимальный размер maximum_object_size 61440 KB

4. Squid, сконфигурированный по умолчанию, добавляет к http-запросу несколько своих заголовков. При этом, в первых двух заголовках передается клиентский ip (или даже несколько ip, в случае цепочки прокси). Если нам это ни к чему, ну например, не хотим светить внутренние ip своей локалки, то сделать squid анонимным очень просто

Via off forwarded_for delete

После завершения всех настроек, стоит проверить анонимность запросов на страничке http://checker.samair.ru Если все сделано правильно, то результатом будет надпись «Resume: You are using high-anonymous (elite) proxy».

На этом внесение изменений в файл закончены. В конечном итоге squid.conf должен выглядеть так

Acl manager proto cache_object acl localhost src 127.0.0.1/32::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32::1 acl localnet src 172.16.0.0/24 # RFC1918 possible internal network acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localnet http_access allow localhost http_access deny all http_port 172.16.0.1:3128 transparent hierarchy_stoplist cgi-bin ? cache_dir ufs /var/spool/squid3 5000 16 256 minimum_object_size 2 KB maximum_object_size 61440 KB coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 via off forwarded_for delete

Для применения настроек останавливаем squid

Service squid3 stop

Подготавливаем директорию кэша squid

Squid3 -z

Запускаем прокси

Service squid3 start

Если Вы не делали изменения настроек связанных с кэшем прокси, то можно выполнить одну единственную команду. Настройки будут приняты автоматически без перезапуска squid.

Squid3 -k reconfigure

5. Остается лишь настроить прозрачность прокси. Это обеспечивает незаметную для пользователей локальной сети работу через прокси, т.е. нет необходимости настраивать пользователям программы для работы с прокси. Прозрачность обеспечивается простым перенаправлением http запросов с 80 порта на порт прокси сервера посредством фаервола iptables и включением режима прозрачного прокси в самом squid. Изменения в настройках squid мы сделали выше. Добавляем к правилам iptables еще одну строку:

Iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Обязательно в параметре указывайте нужный интерфейс на котором будет работать прокси: -i eth0. Это избавит Вас от проблем с доступом к web серверу из интернета при наличии более одного активного интерфейса, если таковой будет в будущем на этом сервере. А так же ради безопасности прокси.

Хотя прозрачный прокси сервер меняет ваш IP-адрес и использует свой собственный, ваш настоящий IP-адрес легко найти в запросе. Он не скрывается, а лишь перемещается в другое место.

Не отказывайтесь от бесплатных прокси серверов слишком быстро. Их преимущество – скорость. Они быстрее анонимных или элитных серверов, поскольку их использует меньше людей. Например, если вы хотите пройти через локальный фаерволл, прозрачные прокси серверы – лучшее решение для вас. Они позволят вам продвинуться, не скрывая свой IP. Вместо этого вы можете скрыть сайты, которые открываете.

Что такое анонимный прокси сервер?

Анонимный прокси сервер никогда не передаёт информацию, связанную с вашим настоящим IP-адресом. Это значит, что в Интернет вы невидимы. Поскольку никто не знает, где вы на самом деле находитесь, никто не может незаконно подключиться к вашему компьютеру и похитить ценную и личную информацию.

Если вы подключаетесь к Интернет через прокси сервер, это вполне нормально. Далее, анонимный прокси сервер позволит вам безопасно скрыть свой IP-адрес. В некоторых случаях, например, для мониторинга при использовании мобильного WAP-Интернет, все пользователи вынуждены использовать для подключения прокси сервер. Это вовсе не значит, что вы что-то скрываете.

Что такое элитный прокси сервер?

Элитный прокси сервер особенно безопасен, поскольку он скрывает не только ваш IP-адрес, но и тот факт, что вы используете прокси сервер. Другими словами, эти серверы позволяют вам выглядеть так, как будто вы не используете прокси сервер, а IP-адрес прокси сервера – это ваш настоящий адрес. Главное, что вам следует знать об элитном прокси сервере – что он безопаснее, чем анонимный. Поэтому они очень популярны среди сетевых пользователей и, как следствие, у них низкая скорость.

(Прокси сервер) – промежуточный компьютер, который является посредником между вашим компьютером и Интернетом. Прокси обычно используют либо для ускорения работы в сети Интернет, либо для анонимного прохождения в сети Интернет. Так же использование анонимного прокси, может быть использовано, как дополнительное средство защиты: анонимный прокси (anonymous proxy) подменяет Ваш IP-адрес, и злоумышленник будет пытаться совершить атаку не на Ваш компьютер, а на прокси сервер, у которого, зачастую, максимально мощная система защиты.

Существует несколько разновидностей прокси, главным отличием которых являются выполняемые функции:

HTTP/HTTPS proxy – наиболее распространённый тип прокси серверов, который зачастую имеет 80, 8080, 3128 номер порта. HTTP прокси делятся уровнем анонимности на: прозрачные (не скрывают реальный IP адрес клиента), анонимные (указывают на то, что используется прокси, но не выдают реальный IP адрес клиента), искажающие (искажают IP адрес клиента), элитные прокси (не указывают на то, что используется прокси сервер, скрывают реальный IP адрес клиента).
SOCKS proxy – прокси сервер передающий абсолютно все данные от клиента к серверу, не изменяя и не добавляя ничего. С точки зрения web-сервера SOCKS proxy является клиентом, т.е. SOCKS proxy анонимны по определению. Имеет подтипы SOCKS4, SOCKS4a, SOCKS5. Чаще всего SOCKS proxy имеют 1080, 1081 номер порта.
FTP proxy – прокси сервер, предназначенный для работы с файловыми менеджерами.
CGI proxy или Anonymizer — web-страницы, которые позволяют осуществлять анонимный переход с одной web-страницы на другую. Для использования данного типа прокси не надо менять настройки браузера, достаточно перед адресом страницы, на которую вы собираетесь перейти указать адрес анонимайзера.

По принципу работы прокси-серверы можно разделить по двум ключевым при­знакам.

Во-первых, некоторые прокси-серверы имеют ассоциированные с ними
кэши, а другие - нет. Во-вторых, вне зависимости от кэширования, некоторые про­кси-серверы модифицируют проходящие через них сообщения, тогда как другие этого не делают.

Кэширующие прокси-серверы
Разница между обычными и кэширующими прокси-серверами весьма важна.
Обычный прокси-сервер просто пересылает запросы и ответы. Кэширующий про­кси-сервер способен поддерживать собственное хранилище ответов, полученных
ранее. Когда прокси-сервер получает запрос, который может быть удовлетворен кэшированным ответом, запрос не пересылается, а ответ возвращается прокси-серве­ром. Как мы увидим далее в этой главе, для того, чтобы кэшировапный ответ мог быть возвращен, должны быть выполнены определенные условия. Мы используем термин кэширующий прокси-сервер для прокси-сервера, который имеет ассоцииро­ванный с ним кэш.

Прозрачный прокси-сервер
По принципу передачи сообщений прокси-серверы можно разделить на две
группы: прозрачные и непрозрачные. Различие между ними связано с модифика­цией проходящих через прокси-сервер сообщений. Прозрачный прокси-сервер мо­дифицирует запрос или ответ лишь в меру необходимости. Примером такого изменения сообщения прозрачным прокси-сервером может служить добавление идентификационной информации о себе или сервере, от которого сообщение было
получено. Подобная информация может даже являться обязательной для протокола HTTP. В разделе 3.8 мы поговорим о неправильном использовании термина «прозрачный прокси-сервер» в различных сферах Web-индустрии для обозначения прокси-серверов, которые правильнее было бы назвать перехватывающими про­кси-серверами.
Непрозрачный прокси-сервер способен модифицировать запрос и/или ответы.
Примером такого изменения запроса является анопимизация, в соответствие с ко­торой информация о клиенте прокси-сервера скрывается. Примером изменения от­вета может послужить преобразование формата - изображение конвертируется из одного формата в другой для уменьшения размера ответа. Другой пример непро­зрачного прокси-сервера - прокси-сервер, осуществляющий перевод документа с одного языка на другой. Имеются правила, являющиеся общими для прокси-сер­веров обоих видов. В то же время с каждым видом прокси-серверов связаны свои собственные правила. Прозрачный прокси-сервер должен обеспечить, чтобы длина содержимого сообщения не изменялась при передаче сообщения через прокси-сер­вер. Заметим, что прозрачные и непрозрачные прокси-серверы отличаются от шлюзов и туннелей. Оба вида прокси-серверов могут, в отличие от туннелей, иметь ассоциированный с ними кэш. Оба вида прокси-серверов действуют как промежуточное звено между Web-клиентом и Web-сервером; т.е. обмен сообще­ниями осуществляется в формате HTTP.