Статья размещена автором Бетке Сергей Сергеевич

Псевдонимы к web-ресурсам на базе IIS + ISA

Я думаю, у многих возникала задача обеспечить для своего корпоративного сайта несколько вариантов FQDN. Например — www.novgaro.ru, ГАРО.РФ, novgaro.ru и так далее. Всё, что необходимо для этого, можно выполнить и на хостинге. Но в некоторых случаях (например — с целью оценки целесообразности содержания того либо иного домена) Вы хотите обеспечить перенаправление сами, с целью регистрации запросов в журнале с последующим анализом.

Данная задача элементарно решается средствами IIS. Рассмотрю здесь ситуацию по следующим этапам: настройка IIS7, создание / корректировка правил на ISA, корректировка файла dns зоны.


Настройка IIS7 средствами powershell

Итак, нам необходимо создать web-site, который, кроме регистрации обращений в журнале, будет обеспечивать перенаправление. В конце концов, хотим иметь возможность написать следующее:

'novgaro.ru', 'garotrade.ru', 'rudetrans.ru', 'support.novgaro.ru' | New-WebRedirection

и получить в результате необходимые и рабочие web-сайты, обеспечивающие постоянное (перманентное) перенаправление запросов к ним на соответствующие www. ресурсы.

приведу текст powershell модуля, который решает эту задачу

:

set-variable -name itgWebRedirectionServicePostfix -value 'web.inet.services.novgaro.ru' -option constant
set-variable -name itgWebRedirectionIISServer -value 'web.inet.services.novgaro.ru' -option constant
set-variable -name itgDNSZone -value 'novgaro.ru' -scope global

function New-WebRedirection {
<#
	.Synopsis
		Создаёт приложение IIS (web site), целью которого является совместно с правилом web публикации на ISA обеспечить
		перенаправление http запросов на основной web сервер (www.domain)
	.Description
		Создаёт приложение IIS (web site), целью которого является совместно с правилом web публикации на ISA обеспечить
		перенаправление http запросов на основной web сервер (www.domain). Для домена novgaro.com будет создан сайт
		novgaro-com.web.inet.services.novgaro.ru, файловый ресурс которого будет создан в папке physicalRoot. Данный сайт
		на все получаемые http запросы будет отвечать постоянной ошибкой - ресурс переехал на www.domain.
		При этом сервис будет размещён на порту port и будет отвечать на host header novgaro-com.web.inet.services.novgaro.ru.
		При этом также будет предпринята попытка создания необходимых dns записей.
	.Parameter domain
		Домен, для которого требуется создать сервис перенаправления http запросов. 		Будет создан web сервис, который будет
		все http запросы перенаправлять на url www.domain.
	.Parameter port
		Порт, на котором будем активировать сервис. Если не указан - 80.
	.Parameter physicalRoot
		Папка, в которой будет создан файловый ресурс для сервиса.
	.Parameter applicationPool
		Пул приложений IIS, в котором будет создан сервис.
	.Example
		Создание группы сервисов:
		&quot;rtsauto.ru&quot;,&quot;garotrade.ru&quot; | New-WebRedirection
#>
	param (
		[Parameter(
			Mandatory=$true,
			Position=0,
			ValueFromPipeline=$true,
			HelpMessage='Домен, для которого требуется создать сервис перенаправления http запросов.'
		)]
		[string]$domain,

		[Parameter(
			Mandatory=$false,
			Position=1,
			ValueFromPipeline=$false,
			HelpMessage='Порт, на котором будем активировать сервис.'
		)]
		[int]$port = 80,

		[Parameter(
			Mandatory=$false,
			Position=2,
			ValueFromPipeline=$false,
			HelpMessage='Папка, в которой будет создан файловый ресурс для сервиса'
		)]
		[string]$physicalRoot = "${env:systemdrive}\inetpub\redirecting",

		[Parameter(
			Mandatory=$false,
			Position=3,
			ValueFromPipeline=$false,
			HelpMessage='Пул приложений IIS, в котором будет создан сервис'
		)]
		[string]$applicationPool = 'WEB sites redirecting'
	)

	PROCESS {
		[string]$hostHeaderPrefix = $domain.replace( '.', '-')
		[string]$webServiceName = "${hostHeaderPrefix}.${itgWebRedirectionServicePostfix}"
		[string]$physicalPath = "${physicalRoot}\${webServiceName}"

		# регистрация записей в dns
		# The text version of the record. Must include Class (IN) or this will fail.
		# @ represents the origin, or zone / domain name.
		$DNSRecordAsText = "${webServiceName} IN CNAME ${itgWebRedirectionIISServer}."
		$DNSRRClass = [WMIClass]\\$itgDNSServer\root\MicrosoftDNS:MicrosoftDNS_ResourceRecord
		$DNSRecord = $DNSRRClass.CreateInstanceFromTextRepresentation($itgDNSServer, $itgDNSZone, $DNSRecordAsText)

		# создание web сервиса
		if ([System.IO.Directory]::Exists("${physicalPath}") -eq $false) {
			new-item "${physicalPath}" -type Directory
		}

		$site = new-item "IIS:\Sites\${webServiceName}" `
			-physicalPath "${physicalPath}" `
			-bindings @{`
				protocol='http';`
				bindingInformation=";*:${port}:${webServiceName}"`
			} `
			-applicationPool $applicationPool `
			-force
		$site.enabledProtocols = 'http'
		$site.limits.maxBandwidth = 1024
		$site.limits.maxConnections = 100
		$site.serverAutoStart = $true
		set-webConfiguration `
			-psPath "IIS:\Sites\${webServiceName}" `
			-filter "system.webServer/httpRedirect" `
			-value @{ `
				enabled='true';`
				destination="http://www.${domain}/";`
				childOnly='false';`
				exactDestination='false';`
				httpResponseStatus='Permanent'`
			-force
		set-webConfiguration `
			-psPath "IIS:\Sites\${webServiceName}" `
			-filter "system.webServer/caching" `
			-value @{ `
				enabled='false';`
				enableKernelCache='false'`
			} `
			-force

		$site.Start()
		write-output $site
	}
}

Мы не просто создаём сайт, мы его должным образом конфигурируем, размещаем его в предварительно созданном пуле WEB sites redirecting, и запускаем. Необходимую dns запись (в комментариях к функции прописана) создаём также скриптом.

Правила публикации на ISA

Теперь настраиваем правила публикации на ISA. Здесь не привожу скриптов, потому как для ISA 2000 powershell применить не смог. Порядок действий:

  • создаём destination set (в нашем случае, в качестве примера — garotrade.ru)
  • в нём указываем все FQDN, с которых мы должны обеспечить перенаправление (на www.garotrade.ru)
  • создаём web publishing rule (garotrade.ru)
  • указываем redirect to garotrade-ru.web.inet.services.novgaro.ru, исходное HOST name не сохраняем. Как уже понятно из скрипта все подобные FQDN создаются как CNAME к web.inet.services.novgaro.ru, который и должен показывать на наш IIS.
  • перезапускаем web proxy службу.

На этом настройка ISA закончена. Можем анализировать в дальнейшем как логи ISA, так и IIS (в зависимости от задачи).

Файл зоны DNS

Ну и напоследок не забудем про файл зоны для наших доменов, с которых мы должны обеспечить перенаправление. Продолжаем пример для garotrade.ru, домен-алиас — garo-trade.ru:

Database file garo-trade.ru.dns for garo-trade.ru zone.
@		IN	SOA ns.novgaro.ru.	hostmaster.novgaro.ru. (
				2010072603		; serial number
				7200			; refresh
				600			; retry
				1209600			; expire
				3600			) ; minimum TTL

;Zone NS records

@		IN	NS	ns.natm.ru.
@		IN	NS	ns.novgaro.ru.

;Zone records

@		IN	A	213.148.164.198
www		IN	CNAME	gate.novgaro.ru.

; mail services

@		IN	MX	10 mx.novgaro.ru.
@		IN	TXT	( "v=spf1 redirect=_spf.novgaro.ru" )
@		IN	TXT	( "spf2.0/mfrom,pra redirect=_spf.novgaro.ru")

Остановимся на выделенных записях. Я думаю, CNAME www ни у кого вопросов не вызвал — указывает на наш ISA Server. Может возникнуть вопрос: почему мы для @ записи не использовали CNAME? Нельзя. В этом случае никаких других записей для @ (в том числе TXT, MX, NS) быть не должно. Поэтому вынуждены явно указывать IP и использовать A запись.

Зачем нам MX? По RFC (скажем — по рекомендациям RFC) при публикации web сервиса в домене мы должны обеспечить приём почты на webmaster@domain по вопросам администрирования сайта. Поэтому и MX в домене прописать имеет смысл (адекватная настройка почтового сервера за пределами этой темы). Ну а TXT записи, точнее — spf и sender-id политики, прописать следует. Не стоит облегчать жизнь спамерам.

Опубликовать комментарий

XHTML: Вы можете использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tags Связь с комментариями статьи:
RSS комментарии
Обратная ссылка