суббота, 10 ноября 2012 г.

Squid: Анонимен ли ваш прокси?

Вообще среди примерно половины (по моим оценкам) использующих Squid как-то не принято писать мало-мальски продвинутые конфигурации. Я воздержусь от личных оценок, с чем это связано, и хочу рассмотреть два вопроса.

Вопрос первый. Как скрывать инфраструктуру внутренней сети посредством прокси от большого злобного интернета? (само собой разумеется, все понимают, как необходимость этого, так и проистекающие отсюда же недостатки)

Ну, во-первых, надо собрать сквид определенным образом (привожу свою конфигурацию):

squid @ ktulhu ~ $ squid -v Squid Cache: Version 2.7.STABLE9-20110824 configure options: '--disable-unlinkd' '--enable-default-err-language=Russian-1251' '--enable-err-languages=Russian-1251 English' '--enable-follow-x-forwarded-for' '--enable-ipf-transparent' '--enable-storeio=ufs,diskd' '--enable-delay-pools' '--enable-async-io=4' '--prefix=/usr/local/squid' '--enable-external-acl-helpers=ip_user' '--enable-removal-policies=lru,heap' '--enable-large-cache-files' '--with-large-files' 'CC=gcc' 'CFLAGS=-O2 -march=i686 -L/usr/local/lib -R/usr/local/lib -L/usr/local/ssl/lib -R/usr/local/ssl/lib -L/usr/openwin/lib -R/usr/openwin/lib -I/usr/local/rrdtool-1.4.2/include -I/usr/local/BerkeleyDB.4.7/include -I/usr/local/mysql/include' 'LDFLAGS=-L/usr/local/lib -R/usr/local/lib -R/usr/lib -L/usr/lib -R/usr/openwin/lib -L/usr/openwin/lib -L/usr/local/ssl/lib -R/usr/local/ssl/lib -L/usr/X11R6/lib -R/usr/X11R6/lib -L/usr/local/BerkeleyDB.4.2/lib -R/usr/local/BerkeleyDB.4.2/lib -L/usr/local/mysql/lib -R/usr/local/mysql/lib' 'CPPFLAGS=-I/usr/local/include -I/usr/local/ssl/include -I/usr/local/include/ncurses -I/usr/openwin/include -I/usr/local/rrdtool-1.4.2/include -I/usr/local/BerkeleyDB.4.2/include -I/usr/local/include/pcap -I/usr/local/include/freetype2' '--with-build-environment=default' 

Вообще говоря, для нашей цели критичен лишь один параметр - enable-follow-x-forwarded-for. Как видно из конфигурации, это транспарентный прокси, соответственно, когда мы говорим об анонимизации соединений, речь идет исключительно о протоколе HTTP - другие протоколы могут светить инфраструктуру и детали сети.

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

# Hide internal networks details outside 
forwarded_for off 
header_access X-Forwarded-For deny all 
header_access Forwarded-For deny all 
header_access Via deny all 

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

Собственно говоря, для достижения нашей цели этого и достаточно, в чем нетрудно убедиться:





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

Ну, и напоследок, К.О. обращает внимание аудитории на тот очевидный факт, что подобный прокси (как и вообще любой другой) не должен быть легко доступен извне - и соответствующим образом защищен и захарденен, в противном случае вы сделаете ценный подарок хакерам.