2015/02/23

spamassassin (debian jessie) セットアップ

Debian (jessie) exim4 の環境に SpamAssassin を追加する

前提
 ・ exim4 (exim4-daemon-heavy) がインストール済、設定済
 ・ spamassassin がインストール済

方針
 ・ ヘッダに判定を1行挿入するだけ
 ・ 振分けは、メーラーに任せる
    (例: Thunderbird) 次の迷惑メールヘッダを信用する: SpamAssassin

(1) exim4 から見た spamassassin のポート設定
 vi /etc/exim4/exim4.conf.template (ファイル名は単独設定ファイルの場合)
  メインの設定に、以下のような設定を追加する。
  (もともと似た内容があり、コメントアウトされている)

  spamd_address = 127.0.0.1 783 (同一サーバ上で、デフォルト設定の場合)

(2) exim4 Spam処理設定
 vi /etc/exim4/exim4.conf.template (ファイル名は単独設定ファイルの場合)
  acl_check_data に以下のような設定を追加する。
  (もともと似た内容があり、コメントアウトされている)

 warn
  spam = Debian-exim:true
  add_header = X-Spam-Status: \
   ${if <{50}{$spam_score_int}{Yes}{No}} (score $spam_score)

  ・ 他は長くて不要なので、X-Spam-Status の1行だけを追加する
  ・ 50 の数値は、フィルタを学習させながら調整する
  ・ score のあたりにタグを入れると、自分の判定であるとわかりやすい
    例) (score $spam_score example.com)

(3) exim4 再起動
 /etc/init.d/exim4 restart

2015/02/22

debian 8 (jessie) on GMO ALTUS

GMO クラウド (ALTUS) に Debian 8 (jessie) をインストールする

持込ISOで好きなOSを入れられるとのことで、トライ。

ポイント
 ・ ネットワークアクセスには、セキュリティグループ、IPアドレス、静的NAT が必要
 ・ セキュリティグループは、仮想サーバ作成前に必要
 ・ 静的NATの構成時には、仮想サーバが必要

Debian
 ・ この時期なので jessie
 ・ イメージは amd64 を使用
 ・ GRUBは、EFIリムーバブルメディアにも入れたほうがよさそう

ISOアップロード
 ・ コンソール > テンプレート > ISO 「+ISOの登録」
 ・ サイト構成によっては 「HTTP Server does not support partial get」 等で失敗
  → その場合は自サーバ等に仮置きし、そちらのURLを指定

セキュリティグループ作成
 ・ コンソール > ネットワーク > セキュリティグループ  「セキュリティグループの追加」
 ・ NATとあわせて、ファイアウォールのようなもの
 ・ 仮想サーバ作成時に必要
 ・ 仮想サーバとの紐付けは変更できないので、最初に作成

仮想サーバ作成
 ・ コンソール > 仮想サーバー 「+仮想サーバーの追加」
 ・ テンプレートはISOを選択 → マイISO
 ・ 構成は、とりあえず Mini Server を選択
 ・ ディスクは、Mini Server 上限の 20GB に設定
 ・ 作成したセキュリティグループを選択
 ・ 確認 → VMの起動

IPアドレス取得
 ・ コンソール > ネットワーク > 表示 IPアドレス 「+新しい IPアドレスの取得」
 ・ 静的NATの有効化 → 作成した仮想サーバを選択

Xen-tools
 ・ テクニカルガイドの手順に沿ってインストール
 ・ 利用可能OSにjessieは記載されていないが、スクリプトはjessieを認識する
 ・ debianのxen-toolsパッケージでも同じに見えるが、未検証
  → 検証には、GMO様のご協力が必要

2015/01/06

Windowsファイルアクセス

Windowsバッチファイルからのファイルアクセス手順のまとめ

処理(中身)抜き、読んだまま既存ファイルに追記する手順のサンプル。

(1) for文
for /f "delims=" %%i in (%SRC%) do @echo %%i>> %DST%

(2) PowerShell コマンドレット
Get-Content $src | Out-File $dst -Append -Encoding default

(3) PowerShell 行単位
$tesjis = [Text.Encoding]::GetEncoding("shift_jis")
$sr = New-Object System.IO.StreamReader($src, $tesjis)
$sw = New-Object System.IO.StreamWriter($dst, $true, $tesjis)
while (! $sr.EndOfStream) {
    $sw.WriteLine($sr.ReadLine())
}
$sw.Close()
$sr.Close()



(4) PowerShell バイナリ
$fmopen = [System.IO.FileMode]::Open
$ss = New-Object System.IO.FileStream($src, $fmopen)
$ds = New-Object 
System.IO.FileStream($dst, $fmopen)
$ds.Position = $ds.Length
while (0 -le ($b = $ss.ReadByte())) {
    $ds.WriteByte($b)
}
$ss.Close()
$ds.Close()



(5) VBS 行単位
Set oFso = WScript.CreateObject("Scripting.FileSystemObject")
Set oSrc = oFso.OpenTextFile(sSrc, 1)
Set oDst = oFso.OpenTextFile(sDst, 8)
Do Until oSrc.AtEndOfStream
    sLine = oSrc.ReadLine()
    oDst.WriteLine(sLine)
Loop
oDst.Close
oSrc.Close


(6) VBS 文字単位
Set oFso = WScript.CreateObject("Scripting.FileSystemObject")
Set oSrc = oFso.OpenTextFile(sSrc, 1)
Set oDst = oFso.OpenTextFile(sDst, 8)
Do Until oSrc.AtEndOfStream
    sChar = oSrc.Read(1)
    oDst.Write(sChar)
Loop
oDst.Close
oSrc.Close

(7) VBS バイナリ
Set oSrc = WScript.CreateObject("ADODB.Stream")
Set oDst = WScript.CreateObject("ADODB.Stream")
oSrc.Type = 1 'adTypeBinary
oSrc.Open
oSrc.LoadFromFile(sSrc)
oDst.Type = 1 'adTypeBinary
oDst.Open
oDst.LoadFromFile(sDst)
oDst.Position = oDst.Size
Do Until oSrc.EOS
    sByte = oSrc.Read(iBlockSize)
    oDst.Write(sByte)
Loop
oDst.SaveToFile sDst, 2 'adSaveCreateOverWrite
oDst.Close
oSrc.Close