ローカル更新サーバーComodo Internet Security

この手順では、有料コンポーネントを使用せずにWindowsでローカルのComodo更新サーバーを上げるプロセスを詳しく説明します。 Comodo Offline Updaterやピアとは異なり、クライアント側でプロキシを構成する必要はありません。



要件:





サーバーはWindows 7 SP1 Pro x64(IIS 6.7)を使用するため。 新しいオペレーティングシステムのインストールと構成が類似しています。



1)IISをインストールする



[プログラムの追加と削除]セクションの[Windowsコンポーネントの有効化または無効化]で、[IIS]をオンにしてインストールします。 自動的にタグ付けされたコンポーネントで十分です。







2)アップデートをダウンロードするためのスクリプトとロジック



スクリプトはPowerShell v4で記述されているため、Windows 7で正常に動作するにはWMF4.0更新が必要です。 インストールが必要な後に再起動します。 ただ、raspakovokのためのいくつかの7-ジップを必要とします。 もちろん、スクリプトを実行するには、PS実行ポリシーをUnrestrictedに変換する必要があります。 これは、 Set-ExecutionPolicy Unrestrictedコマンドで実行されます。



Comodoの更新は、データベースとプログラム自体の更新の2つの部分に分かれています。 ファイルの両方の部分は詰めたりないことができます。 パッケージ化されたものを使用することをお勧めします。それらは、データベースでのみ635MBであるのに対して、290MBと比べてはるかに少ないディスク容量しか必要としません。

COU.ps1
# 2017/10/06 AcidVenom v6.1
# COU
# : cis, av, av-clean
param($1)
#######################################################################
#################### ######################
$7z = "C:\Program Files\7-Zip\7z.exe" # 7z.exe
$downloadpath = "C:\inetpub\wwwroot" #
$serverurl = "https://cdn.download.comodo.com" # Comodo
$inis = "5070" #
$proto = "10" #
$xx = "x32","x64" # ("x32","x64")
$cispacked = $True # (*.7z) ($True/$False)
$avpacked = $True # (*.cav.z) ($True/$False)
$release_notes = $True # Release Notes? ($True/$False)
#######################################################################
################### ##########################
$inispath = "$downloadpath\cis\download\updates\release\inis_$inis"
$recognizerspath = "$inispath\recognizers\proto_v$proto"
$updates58path = "$downloadpath\av\updates58"
$updatesurlpath = "$downloadpath\av\updatesurl"
$basespath = "$updates58path\sigs\bases"
$updatespath = "$updates58path\sigs\updates"
$urlpath = "$updatesurlpath\sigs\updates"
$tvlpath = "$downloadpath\av\tvl"
$inisurl = "$serverurl/cis/download/updates/release/inis_$inis"
$recognizersurl = "$inisurl/recognizers/proto_v$proto"
$updates58url = "$serverurl/av/updates58"
$updatesurlurl = "$serverurl/av/updatesurl"
$basesurl = "$updates58url/sigs/bases"
$updatesurl = "$updates58url/sigs/updates"
$urlurl = "$updatesurlurl/sigs/updates"
$tvlurl = "$serverurl/av/tvl"
#######################################################################
############### ###################
if ($1 -eq "cis") {
if ($cispacked -eq $True) {$packed = ".7z"} else {$packed = ""}
# Updates
$testinis = Test-Path $inispath
$testrecognizers = Test-Path $recognizerspath
if ($testinis -eq $False) {New-Item -ItemType Directory -path $inispath}
if ($testrecognizers -eq $False) {New-Item -ItemType Directory -path $recognizerspath}
foreach ($x in $xx) {
Invoke-WebRequest -Uri "$inisurl/cis_update_$x.xml$packed" -OutFile "$inispath/cis_update_$x.xml$packed"
if ($cispacked -eq $True) {& $7z x -o"$inispath" $inispath\cis_update_$x.xml.7z -y}
$lines = Get-Content $inispath\cis_update_$x.xml | ? {$_ -match "<file name=" -and $_ -notmatch "\\"}
foreach ($line in $lines) {
$line = $line -split " "
$name = $line -match "name="
$name = $name -replace "name=|`"",""
$sha = $line -match "sha="
$sha = $sha -replace "sha=|`"",""
$sha = $sha.toupper()
$src = $line -match "src="
$src = $src -replace "src=|`"|>",""
$srcf = $src.substring(0,$src.lastindexof("/"))
$srcp = $src -replace "\/","\"
$fileexist = Test-Path "$inispath\$srcp$packed"
$folderexist = Test-Path "$inispath\$srcf"
if ($fileexist -eq $True) {
$remove = $False
if ($cispacked -eq $True) {
try {
$remove = $True
& $7z x -o"$inispath/$srcf" $inispath/$srcp.7z -y
}
catch {}
}
$hash = Get-FileHash "$inispath/$srcp" -Algorithm SHA1
if ($remove -eq $True) {Remove-Item "$inispath\$srcp"}
if ($hash.Hash -eq $sha) {Continue}
}
if ($folderexist -eq $False) {New-Item -ItemType Directory -path "$inispath\$srcf"}
try {Invoke-WebRequest -Uri "$inisurl/$src$packed" -OutFile "$inispath/$srcp$packed"}
catch {Invoke-WebRequest -Uri "$inisurl/$src" -OutFile "$inispath/$srcp"}
}
if ($cispacked -eq $True) {Remove-Item "$inispath\cis_update_$x.xml"}
# Recognizers
Invoke-WebRequest -Uri "$recognizersurl/cmdscope_update_$x.xml$packed" -OutFile "$recognizerspath/cmdscope_update_$x.xml$packed"
if ($cispacked -eq $True) {& $7z x -o"$recognizerspath" $recognizerspath\cmdscope_update_$x.xml.7z -y}
$lines = Get-Content $recognizerspath\cmdscope_update_$x.xml | ? {$_ -match "<file name=" -and $_ -notmatch "\\"}
foreach ($line in $lines) {
$line = $line -split " "
$name = $line -match "name="
$name = $name -replace "name=|`"",""
$sha = $line -match "sha="
$sha = $sha -replace "sha=|`"",""
$sha = $sha.toupper()
$src = $line -match "src="
$src = $src -replace "src=|`"|>",""
$srcf = $src.substring(0,$src.lastindexof("/"))
$srcp = $src -replace "\/","\"
$fileexist = Test-Path "$recognizerspath\$srcp$packed"
$folderexist = Test-Path "$recognizerspath\$srcf"
if ($fileexist -eq $True) {
$remove = $False
if ($cispacked -eq $True) {
try {
$remove = $True
& $7z x -o"$recognizerspath/$srcf" $recognizerspath/$srcp.7z -y
}
catch {}
}
$hash = Get-FileHash "$recognizerspath/$srcp" -Algorithm SHA1
if ($remove -eq $True) {Remove-Item "$recognizerspath\$srcp"}
if ($hash.Hash -eq $sha) {Continue}
}
if ($folderexist -eq $False) {New-Item -ItemType Directory -path "$recognizerspath\$srcf"}
try {Invoke-WebRequest -Uri "$recognizersurl/$src$packed" -OutFile "$recognizerspath/$srcp$packed"}
catch {Invoke-WebRequest -Uri "$recognizersurl/$src" -OutFile "$recognizerspath/$srcp"}
}
if ($cispacked -eq $True) {Remove-Item "$recognizerspath\cmdscope_update_$x.xml"}
}
##################################################
#Release Notes
if ($release_notes -eq $True) {
$rn = "ComodoLogo.png","Fixed.png","Header.png","Improved.png","Logo.png","New.png","Panel_body.png","Panel_footer.png","Panel_header.png","Panel_left_body.png","Panel_left_footer.png","Panel_left_header.png","Panel_left_hr.png"
$testrn = Test-Path "$inispath\images"
if ($testrn -eq $False) {New-Item -ItemType Directory -Path "$inispath\images"}
Invoke-WebRequest -Uri "$inisurl/release_notes.html" -OutFile "$inispath/release_notes.html"
foreach ($r in $rn) {Invoke-WebRequest -Uri "$inisurl/images/$r" -OutFile "$inispath/images/$r"}
}
}
#######################################################################
################### #####################
elseif ($1 -eq "av") {
if ($avpacked -eq $True) {$packed = ".z"} else {$packed = ""}
#updates58
$folders = "$basespath","$updatespath","$urlpath","$tvlpath"
foreach ($folder in $folders) {
$testfolder = Test-Path "$folder"
if ($testfolder -eq $False) {New-Item -ItemType directory -Path "$folder"}
}
Invoke-WebRequest -Uri "$tvlurl/delven.txt" -OutFile "$tvlpath\delven.txt"
Invoke-WebRequest -Uri "$updates58url/versioninfo.ini" -OutFile "$updates58path\versioninfo.ini"
$file = Get-Content "$updates58path\versioninfo.ini"
$base = $file | Where {$_ -match "MaxBase="}
$base = $base.substring(8)/1
$inc = $file | Where {$_ -match "MaxAvailVersion="}
$inc = $inc.substring(16)/1
$diff = $file | Where {$_ -match "MaxDiff="}
$diff = $diff.substring(8)/1
$incr = $inc - $diff + 1
if ($incr -gt $base) {$incr = $base + 1}
$testbases = Test-Path "$basespath\BASE_END_USER_v$base.cav$packed"
if ($testbases -eq $False) {Invoke-WebRequest -Uri "$basesurl/BASE_END_USER_v$base.cav$packed" -OutFile "$basespath\BASE_END_USER_v$base.cav$packed"}
do {
$testupdates = Test-Path "$updatespath\BASE_UPD_END_USER_v$incr.cav$packed"
if ($testupdates -eq $False) {Invoke-WebRequest -Uri "$updatesurl/BASE_UPD_END_USER_v$incr.cav$packed" -OutFile "$updatespath\BASE_UPD_END_USER_v$incr.cav$packed"}
$incr++
}
while ($incr -le $inc)
# updatesurl
Invoke-WebRequest -Uri "$updatesurlurl/versioninfo.ini" -OutFile "$updatesurlpath\versioninfo.ini"
$file = Get-Content "$updatesurlpath\versioninfo.ini"
$base = $file | Where {$_ -match "MaxBase="}
$base = $base.substring(8)
$inc = $file | Where {$_ -match "MaxAvailVersion="}
$inc = $inc.substring(16)
$incr = $base/1 + 1
do {
$testupdatesurl = Test-Path "$urlpath\BASE_UPD_END_USER_v$incr.cav.z"
if ($testupdatesurl -eq $False) {Invoke-WebRequest -Uri "$urlurl/BASE_UPD_END_USER_v$incr.cav.z" -OutFile "$urlpath\BASE_UPD_END_USER_v$incr.cav.z"}
$incr++
}
while ($incr -le $inc)
}
#######################################################################
##################### #####################
elseif ($1 -eq "av-clean") {
if ($avpacked -eq $True) {$packed = ".z"} else {$packed = ""}
$test58ver = Test-Path "$updates58path\versioninfo.ini"
$testurlver = Test-Path "$updatesurlpath\versioninfo.ini"
#$message = ""
if ($test58ver -eq $True) {
$file = Get-Content "$updates58path\versioninfo.ini"
$base = $file | Where {$_ -match "MaxBase="}
$base = $base.substring(8)/1
$aval = $file | Where {$_ -match "MaxAvailVersion="}
$aval = $aval.substring(16)/1
$diff = $file | Where {$_ -match "MaxDiff="}
$diff = $diff.substring(8)/1
$del = $aval - $diff + 1
if ($del -gt $base) {$del = $base + 1}
$names = (Get-ChildItem -Path "$basespath").basename -replace "BASE_END_USER_v|.cav",""
foreach ($name in $names) {
$name = $name/1
if ($name -lt $base) {Remove-Item "$basespath\BASE_END_USER_v$name.cav$packed"}
}
$names = (Get-ChildItem -Path "$updatespath").basename -replace "BASE_UPD_END_USER_v|.cav",""
foreach ($name in $names) {
$name = $name/1
if ($name -lt $del) {Remove-Item "$updatespath\BASE_UPD_END_USER_v$name.cav$packed"}
}
}
if ($testurlver -eq $true) {
$file = Get-Content "$updatesurlpath\versioninfo.ini"
$aval = $file | Where {$_ -match "MaxAvailVersion="}
$aval = $aval.substring(16)/1
$diff = $file | Where {$_ -match "MaxDiff="}
$diff = $diff.substring(8)/1
$del = $aval - $diff
$names = (Get-ChildItem -Path "$urlpath").basename -replace "BASE_UPD_END_USER_v|.cav",""
foreach ($name in $names) {
$name = $name/1
if ($name -lt $del) {Remove-Item "$urlpath\BASE_UPD_END_USER_v$name.cav.z"}
}
}
}
#######################################################################
#################### ###################
else {exit}
view raw COU.ps1 hosted with ❤ by GitHub




変更履歴
v6-場合によっては増分データベースの不足を修正し、データベースクリーニングを修正しました。

v6.1-次の更新で、deletevendors.txtをdelven.txtに変更しました。



スクリプトは次のユーザー変数を使用します。



$ 7z -7z.exeへのパス

$ downloadpath -ウェイのダウンロードは、フォルダが自動的に作成されます。 この例では、「C:\ inetpub \ wwwroot」

$でserverURL -あなたがダウンロードしている、そこからコモドサーバー

$ inis-ブランチを更新、それについては以下

$ proto-認識バージョン

$ xx-ダウンロードのビットレート( "x32"、 "x64")、指定できるのは1つのみ

$ cispacked-パッケージ化された(* .7z)更新をダウンロードするかどうか。 可能な値:$ Trueまたは$ False

$ avpacked-パッケージ化された(* .cav.z)データベースをダウンロードします。 可能な値:$ Trueまたは$ False

$ RELEASE_NOTES -ダウンロードリリースノート。 可能な値:$ trueまたは$ false。



プログラム更新ブランチに関して:バージョン8.2.0.4508を含むには、inis_4010が使用され、その後、既存の任意のもの(4080など)が使用されます。つまり、バージョン8以前のクライアントを更新する必要がある場合は、inis_4010($ inis = "4010" $ proto = "6")およびcurrent($ inis = "4080"、$ proto = "10")。 したがって、v6から現在のv10に2回再起動することで問題なくアップグレードできました。



スクリプト内の管理を容易にするために3つのパラメータを実行しています:



cis-ソフトウェア更新プログラムのダウンロード

av-データベースのダウンロード

av-clean-廃止されたデータベースを削除します

特定の頻度のタスクをタスクスケジューラに追加する場合にのみ残ります。



サンプルを追加








3)IISを構成する



この例では、自動的に作成されたデフォルトのWebサイトが使用されます。

デバッグすることをお勧めします「参照ディレクトリ」が含まれます。 これを行うには、目的のサイトを選択し、[ディレクトリの表示]メニューに移動して、右側の[有効化]をクリックします。



更新を正しくダウンロードするには、MIMEタイプを設定する必要があります。対応するメニュー項目で、ファイル拡張子を追加し、タイプapplication / octet-streamを割り当てる必要があります



パッケージ化された更新のMIMEタイプ
.ini

.7z



展開された更新のMIMEタイプ
.xml

.ini

.dat

.lang

.set

.theme

.sys

.cav



4)書き換えモジュール



URL書き換え2.1些細なモジュールを設定します。 このモジュールは、正しい分岐inis_にリダイレクトするために必要とされます。

インストール後、IISマネージャーを再度開く必要があります。そうしないと、対応するメニュー項目が表示されません。 構成するには、「URL rewrite」項目に移動し、次の内容の着信トラフィック用の空のルールを追加します。



名前:オプション

テンプレート:

(cis /ダウンロード/更新/リリース/ inis)_ [0-9] * /(。*)

URLを上書き:

{R:1} _4080 / {R:2}



最後のアドレスで、変数$ inisにスクリプトで指定されている番号を指定します。



セルフテスト画像




古いバージョンを更新する必要がある場合は、上記の別のルールを作成する必要があります。



名前:オプション

テンプレート:

(cis /ダウンロード/更新/リリース/ inis)_ [0-9] * /(。*)

条件(いずれかの要素と一致):

{REQUEST_URI}、。* / Inis_40 [0-1] 0 /.*および{REQUEST_URI} ,. * / Inis_ [1-3] [0-9] * /。*

URLを上書き:

{R:1} _4010 / {R:2}

後続のルールの処理を停止します



セルフテスト画像




これでサーバー側のセットアップが完了しました。



5)ローカルサーバーでのクライアントの構成



これを行う最も簡単な方法は、手動またはレジストリを使用することです。 レジストリ内の更新サーバーのリストは、 UpdateURLパラメーターのHKEY_LOCAL_MACHINE \ SOFTWARE \ COMODO \ CIS \オプションにあります。

たとえば、av.localサーバーをセットアップし、デフォルトサーバーをオフにすると、このパラメーターは次のようになります。av.local !Https://download.comodo.com/



その結果、ローカルComodo更新サーバーを取得し、外部チャネルの負荷を大幅に削減します。



All Articles