9.1.1 Консоль для управления
К счастью, для каждой виртуальной машины VirtualBox (www. virtualbox. org) позволяет назначить порт VRDP-сервера и работать с ними удаленно через любой RPD-клиент: например, mstsc под Windows или rdesktop под Linux.
В настройках роутера проброшены два порта: один – до виртуальной машины с Windows и другой – для openSUSE. При всей простоте такого подхода очень скоро вскрываются два серьезных недостатка. Во-первых, во многих сетях и хотспотах отсекается все, кроме нескольких стандартных портов, и подключиться по RPD никуда уже не удается. А во-вторых, для возможности подключения виртуальную машину приходится держать включенной, потому как функций удаленного управления или, скажем, включения по входящему подключению нет. Не говоря о том, чтобы изменить параметры виртуальной машины или даже создать новую.
Для всего этого напрашивается вполне очевидное решение – организовать управление через веб, ведь 80 порт открыт практически везде. Готовое решение есть: Sun некогда позаботилась о пользователях, инициировав разработку VirtualBox Web Console (code. /p/vboxweb) и пустив ее в свободное плавание OpenSource. В результате, сейчас мы можем получить качественно написанный веб-демон, на котором будет работать AJAX-приложение для виртуальной машины. Это полная копия графического интерфейса виртуальной машины, только отображаемая в браузере.
Какие интерфейсы можно создавать, используя всем доступные AJAX-фреймворки jQuery и его расширение jQuert UI? Создание новой виртуальной машины, запуск и ее остановка, сохранение состояния, изменения параметров гостевой ОС – все делается так, как если бы запустили VirtualBox на своей машине.
Возможность такой оболочки реализована через API VirtualBox'a – систему вызовов, позволяющую с помощью различных языков манипулировать виртуальными машинами. Серверные компоненты веб-оболочки написаны на Python и используют привязки для этого языка.
VirtualBox Python API в текущий момент входит в состав VirtualBox по умолчанию: до этого момента приходилось скачивать VirtualBox SDK и устанавливать привязки для Python'a вручную. В качестве основы для демона разработчиками был выбран CherryPy (www. cherrypy. org) как легкий и мощный Web-сервер. В результате демон (исходный код – VBoxWebSrv. py) общается с VirtualBox, используя API, и с клиентом – посредством HTTP. Все просто: сервер принимает запросы от браузера клиента, проверяет их и выполняет вызов соответствующей функции VirtualBox API. Данные передаются с использованием стандарта JSON, который очень легко парсится в AJAX-окружении.
Модуль на Python также регистрирует все события внутри VirtualBox'a (например, изменения состояния виртуальных машин) и передает их для отображения в Web-интерфейсе. Посмотрим, как это выглядит на практике.
9.1.2 Установка Web-консоли
Поскольку VirtualBox Web Console написана на Python'e, первое, что нужно сделать – установить интерпретатор. Здесь и далее описывается процесс для Windows, но для других ОС все выполняется аналогично. Рекомендуется использовать Python версии 2.6 с python. org/download. Далее необходимо установить библиотеки расширения – так называемые Python Win32 Extensions, предварительно скачанные для используемой версии интерпретатора с репозитория /projects/ pvwin32/files. Нужно проверить, чтобы путь к интерпретатору python. exe был прописан в переменной окружении PATH.
Следующий шаг – позаботиться о привязках. Опцию Python API VirtualBox обычно выбирают во время установки, но– привязка почему-то не устанавливается (хотя файлы скопировались). Установим ее вручную. Для этого переходим в директорию с VirtualBox'oM (program files\sun\virtualbox), находим папку sdk\install и далее необходимо выполнить:
python vboxapisetup. py install
Еще один важный момент – под Windows Vista и W7 установку необходимо запускать из-под учетной записи администратора. После этого можно было бы считать ее законченной и приступать к запуску веб-демона:
python VBoxWebSrv. py
Однако открыв в браузере httр://localhost:8080 (официально поддерживается Internet Explorer и Firefox), сталкиваемся с неожиданным сообщением. Рабочая система запросит имя и пароль пользователя, которого еще не создали (рисунок 9.1). Из-под аккаунта администратора отдаем демону команду на создание нового пользователя:
python VBoxWebSrv. py adduser myuser mypassword

Рисунок 9.1 – Запрос авторизации
Теперь, зарегистрировавшись в системе, увидим список виртуальных машин в левой панели, точно такой же, как и в самом интерфейсе VirtualBox. Если потребуется изменить порт или интерфейс, на котором нужно принимать подключения, достаточно указать нужные параметры в конфиге VBoxWeb. conf:
global]
server. socket_host = "0.0.0.0"
server. socket_port = 8080
В VirtualBox в скором времени появится поддержка плагина на Flash, позволяющего управлять виртуальными машинами через браузер. Такая возможность появилась с выходом VirtuaLBox Web Console, которая создавалась именно с целью предоставления доступа к VRDP-серверу через Flash. Разработанная технология называется Sun RPD Web Control. Последняя версия компонента закачивается во время установки веб-консоли, поэтому дополнительно настраивать ничего не нужно. Просто переходимво вкладку Console, нажимаем кнопку Connect, и прямо в окне браузера получаем полноценное RPD-подключение со всеми его возможностями. Только представим: из любой точки мира можем открывать страничку веб-интерфейса, запускать виртуальную машину и работать с ней прямо из браузера!
9.2 Использование API
Пример веб-консоли показывает, насколько мощным инструментом является система API-вызовов, позволяющая управлять всеми аспектами конфигурации и запуска виртуальных машин. Освоив несложные привязки, можно вывести использование виртуальных машин на новый качественный уровень. В отличие от VMware, мы не можем включить автозапуск гостевых систем в момент запуска гостевой машины. Но благодаря скрипту, запуск можно автоматизировать и влиять на любые его параметры. Есть несколько вариантов решения задачи, но попробуем реализовать это с помощью сценария, который будет отдавать команды на старт виртуальных машин с помощью VirtualBox API. Система встроенных вызовов такова, что использовать его можно из самых разных языков программирования: существуют привязки (т. е. специальные модули) для Java, Python и других языков. У нас уже установлено все, что нужно для работы с Python, поэтому это хороший вариант для старта. С VirtuaBox идет специальная обертка, в которой завуалированы многие кроссплатформенные аспекты, а потому написанные с ее помощью скрипты будут работать на разных платформах.
Любой скрипт с использованием привязки начинается с подключения нужного модуля и создания объекта virtualBox Manager:
import VirtualBoxManager virtualBoxManager =
VirtualBoxManager(None, None)
Конструктор для создания объекта может принимать параметры, но мы их оставим по умолчанию: (None, None). После создания экземпляра объекта можно выполнять разные операции. Например, следующий код запустит виртуальную машину по ее имени или идентификатору (ID):
vbox = virtualBoxManager. vbox
mgr = virtualBoxManager. mgr print "Version is", vbox. version
name = "xp eng"
mach = machByld(name)
if mach is None:
print "cannot find machine", name
else:
session = mgr. getSessionObject(vbox)
progress = vbox. openRemoteSession(
session, mach. id, "gui", "")
progress. waitForCompletion(-1)
session. close()
Для запуска виртуальной машины используется функция openRemoteSession(), при этом в качестве первых двух параметров передается сессия, идентификатор виртуальной машины. Поскольку мы позволяем пользователю использовать как идентификатор, что неудобно, так и имя виртуальной машины, то дополнительно определяем функцию machByld. Задача функции – по имени виртуальной машины определить ее идентификатор:
def machByld(id):
mach = None
for m in virtualBoxManager.
getArray(vbox, 'machines'):
if m. name == id or mach. id == id:
mach = m
break
return mach
Третий параметр, передаваемый функции openRemote-Session(), может принимать два значения: gui и vrdp. В первом случае открывается обычное окно виртуальной машины, в котором можно работать с гостевой ОС. Во втором случае откроется консольное окно и предполагается, что работать с гостевой ОС можно, подключившись к виртуальной машине по RPD-протоколу. Вот собственно и весь код. Оформив его в виде функции, можно повторно использовать код для включения нужного числа виртуальных машин, что нам как раз и нужно.
В качестве еще одного примера рекомендую изучить скрипт для импорта/экспорта виртуальных машин (gui-at. cendaweb. cz/2009/09/ VBoxUtil. py). Без него процесс переноса виртуальной машины с одного хоста на другой превращается в трудную задачу. С позиции обучения он интересен тем, что использует самые разные возможности API.
Допустим, файл необходимо проверить несколькими антивирусами. Понятно, что на одной машине едва ли уживутся даже два антивируса – а что, если их будет, скажем, десять? Верный путь решения проблемы – установить каждый антивирус на отдельную виртуальную машину, но не запускать же каждую с последующим сканированием файла вручную. Можно написать несложный сценарий, который через API запустит виртуальную машину и передаст антивирусу файл для проверки. Попробуем с этим разобраться.
В VMWare есть функции RunProgramlnGuest для запуска приложения в гостевой системе и функции CopyFileFromGuestToHost для копирования файлов между гостевыми и хостовой системами.
Есть выбор: можно использовать платную WMware Workstation, или бесплатный VMware Server. Оба дистрибутива имеют размер полгигабайта, но предоставляют в нашем случае равные возможности.
Управление VMware Server, начиная с версии 2.0, полностью осуществляется через веб-интерфейс и, хотя работает он неплохо, GUI-интерфейс Workstation использовать-таки удобнее.
Вместе с тяжелым ядром и веб-сервером Tomcat, на котором находится админка VMware Server, в систему устанавливается так называемая VMware VIX – собственная система API, позволяющая программировать виртуальные машины и управлять ими, в том числе, манипулировать гостевыми ОС во время выполнения. В качестве языка программирования очень удобно использовать Python.
Еще один проект – оболочка Python'a для утилиты vmrun. exe, также входящей в набор VMware VIX и позволяющей как угодно манипулировать системой прямо из командной строки. В ее составе vmrun. exe –консольный инструмент, реализующий всю мощь VMware API.
9.3 Тестовая лаборатория
Для каждого антивирусного пакета мы создаем по одной виртуальной машине. Они будут работать на базе ОС Windows ХР. Для большей универсальности предлагается давать виртуальным машинам имена в соответствии с тем антивирусом, который на нем установлен: ClamAV, Nod32, Symantec, Kaspersky. У каждого разработчика антивирусного ПО есть решение, работающее через командную строку. Возьмем для примера бесплатный антивирус ClamAV, с помощью которого и построим одну из виртуальных машин для тестирования. Используем Portable-версию антивируса (/apps/ utilities/clamwin_portable), но это непринципиально.
Чтобы скрипты для работы были более-менее универсальны, на каждой виртуальной машине нужно использовать одинаковую систему каталогов. Предлагаем создать папку для нашей тестовой лаборатории C:\XLab с простой структурой:
С:\XLab:
QuarantineFiles – карантин, куда будут скачиваться файлы для анализа;
OutputFiles – папка для сохранения отчетов антивируса, которые далее будут передаваться на хостовую машину;
Soft – папка с необходимым софтом:
Soft\Wget – утилита для закачки файлов;
Soft\ClamWinPortable – наш антивирус.
Общая идея простая: специальный ВАТ-файл сначала запускает консольную качалку wget (порт никсовой утилиты), закачивая указанный файл в папку-карантин, содержимое которого затем проверяется антивирусом. Отчет антивирусного пакета сохраняется в папку OutputFiles, откуда мы его забираем на хостовую машину.
При всей простоте с настройкой антивирусов придется немного повозиться. Даже если взять CtamAV, для которого изначально предполагается использование из командной строки. При запуске консольной версии программы clamscan. exe упорно выдавалась ошибка об отсутствии антивирусных баз, хотя в GUI-версии антивируса все было в порядке. Специально предназначенную для обновления утилита freshclam. exe тоже не запускалась, ссылаясь на отсутствие конфига.
DatabaseDirectory с:/XLab/Soft/ClamWinPortable/App/clamwin/bin
DatabaseMirror database.
Эти две строки, сохраненные в freshctam. conf, заставят базы обновиться, а сам антивирусный пакет заработать. Чтобы указать путь для сканирования, нужно создать текстовый файл toscan. txt с содержанием пути до карантина «C:\XLab\QuarantineFiles\». В результате можно было собрать готовый doWork. bat, принимающий в качестве единственного параметра URL файла для проверки и выполняющий сканирование:
с:
del /Q /F c:\XLab\QuarantineFiles\*.*
del с:\XLab\OutputFiles\report. txt
cd с:\XLab\Soft\ClamWinPortable\App\clamwin\bin\
freshclam. exe
cd c:\XLab\Soft\Wget\
wget --directory-prefix=c:\XLab\QuarantineFiles %1
cd c:\XLab\Soft\ClamWinPortable\App\clamwin\bin\ clamscan. exe --file-list=toScan. txt --log=c:\XLab\ OutputFiles\report. txt
Чтобы избежать проблем с парсингом URL, в момент вызова bat-файла его лучше взять в кавычки: doWork. bat "http://dvd. *****/test. exe". Убедившись, что все работает, приступаем к следующей задаче – интеграции виртуалки в наш прототип системы для анализа файлов.
Запустить виртуальную машину через vmrun. exe. Используется ключ start и указывается путь до. vmx-файла – это файл с описанием виртуальной машины, которую генерирует в момент создания сама VMware:
vmrun auth_param start " [standard] xp eng/xp eng. vmx"
Обратим внимание на переменную [standard], которая определяет стандартное хранилище виртуальных машин. Если указать полный путь до. vmx-файла (скажем, j:\virtual machines\xp eng\xp eng. vmx), программа выдаст сообщение об ошибке. Чтобы упростить пример, здесь и далее укоротим строку параметров для запуска vmrun, заменив опции для авторизации переменной auth_param. Что она собой представляет? С помощью ключа - Т определяется продукт, который используем – Workstation или Server – причем, в последнем случае указывается URL админки, а также логин и пароль для входа в хостовую машину (и, соответственно, админку VMware Server). Вместо auth_param в строке для запуска должно быть:
Для VMware Workstation
– Т ws
Для VMware Server
–T server –h https:// localhost:8333/sdk - u xlablogin - p xlabpass m
После того, как виртуальная машина запущена, запустим нужное нам приложение. Название команды runProgramInGuest говорит само за себя. Составляем строку параметров, указывая логин и пароль для пользователя внутри гостевой (!) системы, а также полный путь до doWork. bat-файла. Помимо этого, нужно передать в качестве параметра URL файла для проверки.
vmrun auth_param - gu xlab - gp xlab runProgramInGuest "[standard] xp eng/xp eng. vmx" "c:\XLab\doWork. bat" %1%
В этот момент оказывается (после поиска в мануале), что для работы этой команды на виртуальной машине должны быть установлены VMware Tools, а в гостевой системе включена гостевая учетная запись. В виртуальной в машине монтируем виртуальный диск с установщиком. На этот раз все работает.
Сценарий doWork. bat создает отчет в папке c:\XLab\OutputFites надо его получить. Для обмена файлами между хостовой и виртуальными машинами есть специальные команды copyFileFromHostToGuest и copyFileFromGuestToHost:
vmrun auth_param - gu xlab - gp xlab
copyFileFromGuestToHost "[standard] xp eng/xp eng. vmx" "c:\XLab\OutputFiles\report. txt" "c:\XlabInput\report. txt"
Результат проверки оказывается в папке c:\XLablnput на хостовой машине. Проверка окончена – осталось охладить виртуальную машину, отправив ее в спящий режим – с помощью команды suspend:
vmrun auth_param suspend "[standard] xp eng/xp eng. vmx"
Теперь добавляем в doWork. bat необходимые паузы (чтобы запуск программы не начинался до того, как загрузится система), и автоматизированный инструмент для тестирования файла в виртуальной машине готов. Не будем приводить полную версию скриптов – все вместе ты найдешь на диске. Конечно, это лишь прототип полноценной системы. Но ничего не стоит добавить еще несколько виртуальных машин для других антивирусных программ и таким образом получать сводный отчет по одному и тому же файлу. Тот же файл реально скачивать единожды на хостовой машине и передавать на гостевые машины – можно делать все, что угодно.
9.4 Обеспечение безопасности windows при помощи *NIX-системы, запущенной в виртуальной машине
Большинство из нас привыкло к стандартным решениям, которые не пересматриваются годами. Так защиту Windows мы доверяем одному и тому же комплекту программ – файрвол, антивирус, антишпионская программа – Подобный набор есть у каждого, отличаются лишь производители. Мы же попробуем другой путь – использовать в качестве блокпоста *nix-систему, запущенную в виртуальной машине. А насколько этот подход окажется эффективным в каждом конкретном случае, решать администратору.
9.4.1 Теоретические сведения
Встроенные средства операционной системы – Windows Firewall и Internet Connection Sharing (Общий доступ к Интернету) достаточно неудобны, малофункциональны и не обеспечивают должного уровня защиты. Поэтому, чтобы раздать интернет на несколько компьютеров, с возможностью полноценного контроля всего процесса, требуется либо аппаратный роутер, либо одно из программных решений, вроде UserGate Proxy & Firewall, NetworkShield Firewall или KerioWinRoute Firewall. Роутер понятен в настройках, даже самые простые устройства имеют минимальные функции фильтра пакетов, маршрутизации, защиты от атак и так далее. Но часто его возможностей недостаточно, и руки связаны тем, что заложено в него производителем. Более функциональные решения стоят дорого. Но и их возможностей может не хватать (например, шейпинга, учета трафика, мониторинга загрузки канала). Аналогичная ситуация и с программными решениями. За хороший Firewall со всеми функциями придется заплатить. Не стоит забывать о том, что защита работает, пока пользователь остается в локальной сети, но стоит подключиться к интернету через одну из многочисленных точек доступа за пределами организации, как мы оставляем компьютер с Windows Firewall, то есть практически беззащитным.
Мощности современных настольных систем вполне достаточно, чтобы установить виртуальную машину, которую и использовать в качестве Firewall для защиты локальной системы или шлюза для подключения других компьютеров локальной сети. Кроме того, на нем можно развернуть прокси, кэширующий DNS и прочие необходимые сервисы (например, IDS. VPN или1Р-РВХ).
Естественно, в целях экономии ресурсов в виртуальной машине не стоит запускать ОС для рабочих станций, вполне можно обойтись серверным дистрибутивом Linux в минимальной инсталляции, или взять одну из BSD систем. Например, OpenBSD стандартной установке прекрасно работает, если ей выделить всего 32-64 Мб ОЗУ и 300 Мб места на HDD, что совсем немного, особенно учитывая возможности этой ОС. В дальнейшем мы рассмотрим настройки PF в OpenBSD и iptables в Linux. В качестве виртуальной машины будем использовать бесплатный VirtualBox (virtualbox. org), который достаточно прост в настройках и не требователен к объемам оперативной памяти. Хотя при желании его можно заменить QEMU, Virtual PC или другим решением. Еще вариант: создать образ в VMware Server (ключ выдается бесплатно), который затем задействовать в VMware Player.

Рисунок 9.2 – Создание новой виртуальной машины
9.4.2 Настройка Windows
Чтобы исключить выход хостовой ОС в интернет, в настройках реального сетевого адаптера снимаем все флажки, за исключением VirtualBox Bridged Networking Driver. В том числе нужно убрать поддержку «Протокол Интернета (TCP/IP)» и «Клиент для сетей Microsoft». В настройках виртуального сетевого интерфейса, появившегося послле установки VirtualBox, в качестве шлюза по умолчанию и DNS-сервера указываем IP-адрес «внутреннего» (LAN) интерфейса гостевой ОС, запущенной в виртуальной машине (vie 1 в случае OpenBSD или eth1 в Linux). Здесь также выключаем «Клиент для сетей Microsoft». При создании виртуальной машины указываем два сетевых адаптера. В одном указываем тип подключения «Сетевой мост» и выбираем в списке «Имя» реальный сетевой адаптер (например, Wi-Fi), подключенный к интернет. Тип второго указываем как «Виртуальный адаптер хоста», через него и будем подключаться к глобальной сети.
Считаем, что гостевая система уже установлена, и переходим непосредственно к настройкам.
9.4.3 Настройки PACKET FILTER
Первым делом нужно включить форвардинг пакетов между двумя сетевыми интерфейсами:
# sysctl net. inet. ip. forwarding=1
Чтобы изменение вступало в силу после каждой перезагрузки, снимаем комментарий с соответствующей строки файла /etc/sysctl. conf.

Рисунок 9.3 – Разрешаем форвардинг в sysctl. conf
Далее создадим простейшее правило для выхода в интернет через NAT, пишем в pf. conf:
#vi/etc/pf. conf
nat on vic0 from vic1:network to any -> vic0 block in all
pass in on vic1
Здесь активирована трансляция адресов для сети, подключенной к интерфейсу vic1, с которого разрешен весь трафик. Все порты прикрыты. Проверяем файл на наличие ошибок и применяем правила:
# pfctl - nf /etc/pf. conf
# pfctl - vf /etc/pf. conf
В выводе консоли получим все активные правила PF, причем вместо названий интерфейсов будут указаны IP-адреса. Чтобы проверить состояние NAT, набираем:
# pfctl - s state
Теперь входим в интернет c локальной системы и сканируем внешний IP (выданный провайдером) при помощи сканера вроде nmap на наличие открытых портов. Далее развиваем созданные правила, разрешив, например, выход в интернет только по определенным портам:
#vi /etc/pf. conf
tcp_srv = "{ ssh, smtp, domain, www, рор3 }"
udp_srv = "{ domain }"
block all
pass out inet proto tcp to any port $tcp_srv
pass out inet proto udp to any port $udp_srv
Вместо названий сервисов из /etc/services в правиле можно указать номера портов, здесь кому как удобнее. Просмотреть статистику при помощи pfctl достаточно просто:
# pfctl - s info
Для более наглядного мониторинга можно использовать утилиты вроде ntop или pftop. Для этого через переменную окружения PKG_PATH указываем FTP-зеркало (www.openbsd. org/ftp. html), с которого будем ставить прекомпилированные пакеты:
# export PKG_PATH=ftp://ftp. openbsd. org/pub/OpenBSD/4.6/
packages/i386
И выполняем установку:
# pkg_add pftop
# pkg_add ntop
Дополняем схему. Уменьшить количество входящего трафика, сократить время загрузки страниц и порезать баннеры поможет кэширующий прокси-сервер Squid.
# pkg_add squid-2.7.STABLE6.tgz
Открываем конфигурационный файл/etc/squid/ squid. соnf и разрешаем подключения:
# vi/etc/squid/squid. conf
http_port 3128
### В случае прозрачного проксирования директива примет вид:
# http_port 127.0.0.1:3128 transparent
### Указываем диапазон IP внутренней сети
acl lan_net src 192.168.1.0/24
### Разрешаем выход в интернет из сети
192.168.1.0/24 http_access allow lan_net
### Размер кэша указываем с учетом объема ОЗУ, выделенного VM cache_mem 32 MB
maximum_object_size 10240 KB
cache_dir ufs /var/squid/cache 5000 16 256
Создаем каталог для кэша и запускаем кэширующий прокси:
squid - z
squid
Теперь можно проверить, слушается ли нужный порт:
# netstat - ant I grep 3128
Перестраиваем браузеры на подключение через порт3128 интерфейса vnec1 и пробуем обратиться к внешнему веб-сайту. Как вариант, можно настроить прозрачное проксирование, чтобы пользователи, пытающиеся подключиться к 80 и 8080 портам внешних web-серверов, автоматически перенаправлялись на локальный порт, на котором работает Squid:
#vi/etc/pf. conf
table <clients> { 192.168.1.2, 192.168.1.5 }
table <nocache> { 192.168.1.0/24 }
rdr on inet proto tcp from <clients> to! <nocache> port {} -> 127.0.0.1 port 3128
Когда все настроено, обеспечиваем автозагрузку Squid при старте системы:
#vi/etc/rc. local
if [ - x /usr/local/sbin/squid ]; then echo - n 'squid'; /usr/local/sbin/squid fi
При желании Squid можно дополнить другими модулями. В портах есть squidGuard (www. squidguard. org) и HAVP (HTTP Anti Virus Proxy, www. server-side. de). Первый поможет в борьбе с баннерами, блокировкой файлов и определенных ресурсов, второй умеет проверять трафик несколькими антивирусами.
# pkg_add squidguard
# pkg_add havp
Настройка squidGuard и HAVP подробно описана в статях «Вооруженный бронекальмар» и «Сетевой коп» []. Подобная схема с виртуальным Firewall может быть интересна тем, кто хочет максимально обезопасить свое пребывание в интернет. Не секрет, что браузер на сайте оставляет своеобразный отпечаток, который может поведать многое о твоей системе. Применение прокси-сервера позволяет скрыть большую часть информации путем модификации заголовков. Для тех, кому по каким-то причинам не подходит Squid, можно порекомендовать Privoxy (Privacy Enhancing Proxy, privoxy.org) – некэширующий прокси с возможностями фильтрации контента для повышения приватности и безопасности веб-серфинга. Установка Privoxy сводится к выполнению команды:
# pkg_add privoxy
Теперь настраиваем браузер, чтобы он выходил в интернет через порт 8118, и набираем в адресной строке http://config. privoxy. org (краткая форма: http://p. p). В результате получаем возможность редактирования параметров прокси-сервера. Правила по умолчанию обеспечивают блокировку cookies, pop-up, некоторых типов баннеров. По умолчанию Privoxy слушает только локальный интерфейс, для доступа к нему с хостовой машины или из LAN следует изменить инструкцию listen-address в config. txt, указав IP сетевого интерфейса vic1:
listen-address 191.168.1.1:8118

Рисунок 9.4 – Настройка Privoxy через веб-интерфейс
Возможностей, как и настроек, в Privoxy очень много, подробно он рассматривается, например, в статье «Маленькое окно в большую сеть» [19]. При необходимости можно заставить его работать в тандеме с Squid, для чего в squid. conf достаточно добавить всего одну строку:
cache_peer 127.0.0.1 parent \ 8118 7 no-query
В качестве еще одного бонуса к нашему интеллектуальному файрволу можно порекомендовать легкий кэширующий DNS (а также TFTP и DHCP) сервер Dnsmasq (thekelleys. org. uk/dnsmasq). Устанавливается он просто:
# pkg_add dnsmasq
После этого в конфигурационном файле dnsmasq. conf указываем сетевой интерфейс, на котором он будет принимать запросы:
listen-address=127.0.0.1, 192.168.1.1
Теперь все повторные DNS-запросы будут выдаваться из кэша и выполняться быстрее.
9.1.5 Настройка IPsec в OPENBSD
Виртуальный файрвол должен подключаться по VPN. Разберем соединение по протоколу IPsec при помощи утилиты ipsecctl, входящей в стандартную поставку. Итак, внутренняя сеть 192.168.1.0/24, внешний WAN интерфейс получает IP-адрес 1.2.3.4, соответственно в удаленном офисе LAN – 192.168.2.0/24 и WAN – 5.6.7.8. Открываем в редакторе конфиг /etc/ipsec. conf и указываем настройки сетей:
#vi/etc/ipsec. conf
ike esp from 192.168.1.0/24 to 192.168.2.0/24 \
peer 5.6.7.8
ike esp from 1.2.3.4 to 192.168.2.0/24 \
peer 5.6.7.8
ike esp from 1.2.3.4 to 5.6.7.8
На удаленном хосте файл /etc/ipsec. conf будет аналогичным. Только заменяем IP и в описании подключения добавляем ключ passive, означающий, что данный узел будет ожидать подключение (соединение инициализирует удаленная система):
ike passive esp from 5.6.7.8 to 1.2.3.4
В правилах PF разрешим подключение с удаленного узла и укажем, что не нужно фильтровать трафик, проходящий через интерфейс обратной петли. Укажем также через внутренний и виртуальный интерфейсы:
#vi/etc/pf. conf
set skip on { lo vic1 enc0 }
pass quick on vic0 from 5.6.7.8
Теперь с VPN-сервера копируем публичный ключ и сохраняем его в /etc/isakmpd/pubkeys/ipv4/5.6.7.8, а свой ключ /etc/isakmpd/private/local. pub передаем на 5.6.7.8. Набираем на обоих хостах:
# isakmpd -К
# ipsecctl -f /etc/ipsec. conf
Если все проходит нормально, обеспечиваем автозапуск при загрузке системы (если в этом есть необходимость). Для чего добавляем в /etc/rc. conf. local одну строку:
isakmpd="-K"
С настройками на примере OpenBSD можно закончить.
Перейдем к Linux, многие вопросы, за исключением настройки правил пакетного фильтра и установки программ, будут аналогичны.
Организация NAT в LINUX
В Linux пакетный фильтр Netfilter управляется при помощи консольной утилиты iptables. Настройки отличаются по написанию, но, по сути, остаются теми же. Для начала разрешаем форвардинг пакетов:
# echo 1 > /proc/sys/net/ipv4/ip_forward
Или как вариант:
# sysctl - w net. ipv4.ip_forward=l
Чтобы форвардинг активировался при загрузке системы, используем /etc/sysctl. conf:
net. ipv4.ip_forward = 1
Обратим внимание, переменная механизма sysctl несколько отличается от аналогичного параметра в OpenBSD. В различных дистрибутивах могут быть свои особенности. Так в CentOS/Fedora достаточно ввести одну команду:
# system-config-securitylevel
Проверяем:
# service iptables status
В качестве альтернативы в этих дистрибутивах можно использовать chkconfig. Смотрим статус запуска iptables:
# chkconfig --list iptables
И активируем при необходимости:
# chkconfig iptables on
Пусть внутренний сетевой интерфейс (к которому подключается локальная система) будет eth1, а внешний – eth0. Чтобы включить NAT в Linux и разрешить все соединения, достаточно прописать три правила:
# iptables - t nat - A POSTROUTING –o eth0 - j MASQUERADE
# iptables - A FORWARD - i eth0 - o eth1 - m state --state RELATED, ESTABLISHED - j ACCEPT
# iptables - A FORWARD - i eth1 - o eth0 - j ACCEPT
И заносим эту строку в один из скриптов, выполняющихся при остановке системы (например, скрипты из каталога /etc/network/if-post-down. d). Чтобы правила при загрузке загружались автоматически, добавляем в конец файла /etc/networks/interfaces следующую запись:
# vi /etc/networks/interfaces
### Загружаем правила при поднятии интерфейса
pre-up iptables-restore < /etc/*****les
В CentOS правила сохраняются командой:
# service iptables save
После этого все рулесеты можно найти в /etc/sysconfig/iptables. Для автоматической их загрузки при старте системы достаточно разрешить два параметра в файле /etc/sysconfig/iptables-config:
# vi /etc/sysconf ig/iptables-config
IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"
Просмотреть список правил iptables можно командой:
# iptables –L –v
Файрвол настроен. Теперь можно наращивать функционал. Squid есть в репозитариях пакетов и устанавливается очень просто. В Debian/ Ubuntu:
# apt-get install squid
Или в CentOS:
# yum install squid
Чтобы не перестраивать клиентские системы, добавим правила iptables:
iptables -t nat - A PREROUTING - i eth1 - p tcp - m tcp --dport 80 - j DNAT --to-destination 192.168.1.1:3128
iptables -t nat - A PREROUTING - i eth0 - p tcp - m tcp --dport 80 - j REDIRECT --to-ports 3128
Squid можно дополнить другими модулями – Adzapper (adzapper. ), squidGuard и HAVP.
Мы получили абсолютно бесплатный файрвол с продвинутыми функциями, надежно защищающий хостовую Windows машину, и функционал которого можно наращивать до бесконечности. Возможно, кто-то посчитает его неудобным, но проблему быстрой загрузки можно решить, просто замораживая состояние виртуальной машины. К тому же такой виртуальный блокпост можно использовать не всегда, а только в особых случаях.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |



