Symantec EndPoint ProtectionのCentOSへのインストールについて



●RPMパッケージのインストール

 Symantecのサイト等から入手したSEP for Linuxをインストールします。
 用意されているパッケージは下記のとおりです。

 ・sav-1.0.14-13.i386.rpm
 ・savap-1.0.14-13.i386.rpm
 ・savap-x64-1.0.14-13.x86_64.rpm
 ・savjlu-1.0.14-13.i386.rpm
 ・savui-1.0.14-13.i386.rpm

i386/i686 32bit版にインストールする場合
# rpm -ivh sav-*.i386.rpm savap-*.i386.rpm savjlu-*.i386.rpm savui-*.i386.rpm

x86-64版にインストールする場合
# rpm -ivh sav-*.i386.rpm savap-x64-*.x86_64.rpm savjlu-*.i386.rpm savui-*.i386.rpm
を実行します。
 rtvscandを起動します。
# /etc/init.d/rtvscand start
 これで、Auto-Protect以外の機能は使用可能になります。

●Auto-Protectの有効化

 /etc/init.d/autoprotectの104行目あたりでRed Hat Enterprise Linuxのバージョン判定を行っている行があるので
*CentOS\ release\ 5*) osprod=ES osver=5 ;;
*CentOS\ release\ 6*) osprod=ES osver=6 ;;
を追記してください。追記完了後
# /etc/init.d/autoprotect start
# /etc/init.d/autoprotect status
でステータスがOKになることを確認したら再起動してください。
 再起動しないとAuto-Protectの状態をSEP側で把握できません。
 再起動したら、下記コマンドを実行して
# /opt/Symantec/symantec_antivirus/sav info -a
としてAuto-Protectが有効化されていることを確認してください。
 Auto-Protectが問題なく機能しているかどうかを確認するため、テストウィルスファイル(eicar.com)をダウンロードします。
 wget http://www.trendmicro.com/ftp/products/eicar-file/eicar.com
 正常にAuto-Protectが機能していれば、ファイルがダウンロードされた瞬間に削除されることで確認できます。
--2013-11-14 21:04:30--  http://www.trendmicro.com/ftp/products/eicar-file/eicar.com
www.trendmicro.com をDNSに問いあわせています... 23.11.201.214
www.trendmicro.com|23.11.201.214|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 68 [application/octet-stream]
`eicar.com' に保存中
100%[==========================================================>] 68        --.-K/s 時間 0s
utime(eicar.com): そのようなファイルやディレクトリはありません
 ↑ 削除時に表示される
2013-11-14 21:04:31 (4.74 MB/s) - `eicar.com' へ保存完了 [68/68]

 削除したログは/var/log/messagesに下記のように出力されます。
Nov 14 21:04:31 jcmn00 rtvscand: Threat Found!Threat:
EICAR Test String in File: /root/eicar.com by: Auto-Protect scan.
Action: Quarantine succeeded : Access allowed.
Action Description: The file was quarantined successfully.

●Auto-Protectの有効化・無効化の確認

 Auto-Protectの状態を有効化する。
# /opt/Symantec/symantec_antivirus/sav autoprotect -a
# /opt/Symantec/symantec_antivirus/sav info -a
enabled
 Auto-Protectを無効化する。
# /opt/Symantec/symantec_antivirus/sav autoprotect -d
# /opt/Symantec/symantec_antivirus/sav info -a
disabled

●手動スキャンの実施

 /rootにeicor.comファイルがある時に手動スキャンを実施する。
# /opt/Symantec/symantec_antivirus/sav manualscan -s /root/
 ログ(/var/log/messages)の確認。
Nov 14 21:58:07 jcmn00 rtvscand: Scan started on selected drives
 and folders and all extensions.
Nov 14 21:58:07 jcmn00 symcfgd: subscriber 38 has left -- closed 0 remaining handles
Nov 14 21:58:17 jcmn00 rtvscand: Threat Found!Threat:
 EICAR Test String in File: /root/eicar.com by: Manual scan. 
 Action: Quarantine succeeded.
  Action Description: The file was quarantined successfully.
Nov 14 21:58:17 jcmn00 rtvscand: Scan Complete:  Threats: 1
   Scanned: 2344   Files/Folders/Drives Omitted: 0
 削除されていることが分かります。

●手動liveupdateの実施

 手動liveupdateは、以下のコマンドを使用します。
# /opt/Symantec/symantec_antivirus/sav liveupdate --update
 プロキシ経由の場合は/etc/liveupdate.confに以下の一行を追加します。
proxy=<Proxyサーバアドレス>:<ポート番号>
 /etc/liveupdate.confの設定例
# vi /etc/liveupdate.conf
hosts/0/url=http://liveupdate.symantecliveupdate.com:80
workdir=/tmp
#logfile=/opt/Symantec/LiveUpdate/liveupdt.log
logfile=/var/log/liveupdt.log
jar=/opt/Symantec/LiveUpdate/jlu.jar
urls=1
proxy=192.168.0.100:8080 ← プロキシを利用しない場合は不要
 /etc/liveupdate.confがきちんと設定されていない場合、以下のようなエラーが出力されます。
Exception in thread "main" java.lang.NullPointerException
at jlueh.b(DashoA5380)
at jlucc.a(DashoA5380)
at jlucc.a(DashoA5380)
at jluf6.c(DashoA5380)
at jluf6.b(DashoA5380)
at com.symantec.liveupdate.LiveUpdate.computeAvailableUpdates(DashoA5380)
at com.symantec.liveupdate.LiveUpdate.run(DashoA5380)
at com.symantec.liveupdate.LiveUpdate.main(DashoA5380)
at LiveUpdate.main(DashoA5380)
 実行するとバイナリファイルになってしまうので、バックアップを取っておきます。
# cp -p /etc/liveupdate.conf /etc/liveupdate.conf_bk
 手動liveupdateを実行すると、次の手動liveupdate実行時に必ず上記のエラーが発生します。このため、その場合は実行前にバックアップしてあるliveupdate.confで上書きするようにしてください。
 うまくliveupdateできると下記のように表示されます。
# /opt/Symantec/symantec_antivirus/sav liveupdate -u
3.000000%
6.000000%
9.000000%
  :
  :
  :
93.000000%
96.000000%
99.000000%
 この時のログは以下のように表示されます。
Nov 14 22:44:50 jcmn00 rtvscand: New virus definition file loaded. Version: 151113a.
 定義ファイルが更新されたことを確認します。
# /opt/Symantec/symantec_antivirus/sav info --defs
2013年11月13日 rev. 1

●liveupdateのスケジュール設定

 毎日、朝5時にLiveUpdateを実行するようにスケジュールを設定します。
# /opt/Symantec/symantec_antivirus/sav liveupdate --schedule -f daily -i 05:00 -m 1
# /opt/Symantec/symantec_antivirus/sav liveupdate -v
Frequency: Daily - 05:00
Missed Events: Enabled
State: Enabled
 LiveUpdateのスケジュール設定を無効にするには、以下のコマンドを実行します(実際には1行です)。
# /opt/Symantec/symantec_antivirus/symcfg add --key "Symantec Endpoint Protection"\\AV
\\PatternManager\\Schedule --value Enabled --data 0 --type REG_DWORD
    「0」を「1」にすると有効になります。

 「-m 0」とすると下記のようになります。この場合、liveupdateは実行されません。
# /opt/Symantec/symantec_antivirus/sav liveupdate --schedule -f daily -i 05:00 -m 0
# /opt/Symantec/symantec_antivirus/sav liveupdate -v
Frequency: Daily - 05:00
Missed Events: Disabled
State: Enabled


●liveupdateの無効化・有効化

 参考URL:Symantec Endpoint Protection for Linux 12.1 クライアントで定時 LiveUpdate を無効にする方法

 /opt/Symantec/symantec_antivirus/sav liveupdate コマンドでは、実行・表示・編集のオプションがありますが、無効のオプションがありません。

・LiveUpdate スケジュールの無効化

sudo /opt/Symantec/symantec_antivirus//symcfg add -k'\Symantec Endpoint Protection\Liveupdate\schedule' -v Enabled -d 0 -t REG_DWORD


・LiveUpdate スケジュールの有効化

sudo /opt/Symantec/symantec_antivirus//symcfg add -k'\Symantec Endpoint Protection\Liveupdate\schedule' -v Enabled -d 1 -t REG_DWORD


●liveupdateの実行確認

 下記フォルダ内にログが出力されますので、内容を確認することで状況が分かります。
/var/symantec/liveupdate/
または
/var/symantec/Logs

●liveupdate時のエラー

 liveupdate実行時に以下のように表示される場合があります。
Searching /usr/java for java...
Found /usr/java/jre1.6.0_31/bin/java
Updated /etc/Symantec.conf with java path.
 これは、シマンテック公式ページのSAVFL の LiveUpdate コマンドを実行するとエラーが発生するに記載されているとおり、Java Runtime Environment (JRE) のインストールパスが正常に通っていないことでエラーが発生するようです。
 「下記のコマンドを実行し、JRE のインストールパスをご確認ください。」とのことです。
/opt/Symantec/symantec_antivirus/update_java_home.sh
 「JRE をインストールされているにも関わらず上記のコマンドを実行しても JRE のインストールパスを見つけられない場合、インストールした JRE のインストールパスをご確認の上、/etc/Symantec.conf ファイルに JRE のインストールパスを直接指定することで、正常にLiveUpdate が行えるかをご確認ください。」とも記載されています。
 上記シェルコマンドの実行で表示される内容
Searching /usr/java for java...
Found /usr/java/jdk1.6.0_23/bin/java
Updated /etc/Symantec.conf with java path.
 これで、/etc/Symantec.confを書き換えてしまうとliveupdate実行時に下記のようなエラーが表示される場合があります。
Command failed: Failure in pre processing of micro definitions before update.
Unable to perform update
 これは、/etc/Symantec.confの記載方法が間違っているかロックファイル等が残ってしまっている場合もあるようです。その場合は、まず、下記URLに記載されている内容を確認してください。

http://service1.symantec.com/SUPPORT/ent-security.nsf/1525b348c24f67f68825734100634945/be45cab7818414c6c125742e0042553a?OpenDocument


Situation: You run Liveupdate in SAV for Linux using the following command-line and immediately get the above error.

/opt/Symantec/symantec_antivirus/sav liveupdate --update

Solution: Delete the lulock.dat and *.tmp folders from the virusdefs folder located in:

/opt/Symantec/virusdefs

 それでも、うまく実行されない場合は、/etc/Symantec.confを下記に置き換えてください。
[Symantec Shared]
BaseDir=/opt/Symantec
JAVA_HOME=/usr/lib/jvm/java-gcj/bin
 上記で、/opt/Symantec/symantec_antivirus/update_java_home.sh実行時にJAVAのパスが/usr/java/jdk1.6.0_23/bin/javaというようにjdk1.*.*_**が設定されました。liveupdateが成功している時のパスは下記のように様々設定されていることがわかりました。
JAVA_HOME=/usr/lib/jvm/java-gcj/bin
JAVA_HOME=/usr/java/jdk1.5.0_22/bin
JAVA_HOME=/usr/java/jre1.6.0_27/bin
 環境変数JAVA_HOMEの設定内容は、それぞれの環境において自前で設定している場合が多々あるようです。正常にliveupdateが動作しない場合は、JAVA_HOMEを直接書き換えても良いかもしれません。
 また、liveupdate時に以下のようなエラーが表示される場合もあります。
Exception in thread "main" java.lang.NullPointerException
	at com.symantec.liveupdate.event.EventTransporterFactory.a(DashoA5380)
	at com.symantec.liveupdate.event.EventTransporterFactory.(DashoA5380)
	at com.symantec.liveupdate.event.EventTransporterFactory.getInstance(DashoA5380)
	at jlufj.a(DashoA5380)
	at com.symantec.liveupdate.LiveUpdate.endSession(DashoA5380)
	at com.symantec.liveupdate.LiveUpdate.run(DashoA5380)
	at com.symantec.liveupdate.LiveUpdate.main(DashoA5380)
	at LiveUpdate.main(DashoA5380)
Command failed: Problem with LiveUpdate.
Check that java directory is in PATH
Unable to perform update
 この対処方法については、SAVFL で liveupdate を実行すると [Exception in thread "main" java.lang.NullPointerException ] のエラーが発生するを参照してください。
 また、liveupdt.logをよく確認したところ、下記のようなエラーが出力されていました。
<>IdsDiskSpaceFail><1398178899jtun_sav10ennful25.lin><1813.217209815979>
<IdsJavaSessionFailure>
<IdsJavaSessionReturnCode><246>
 このエラーについて、対処方法の参考になるページがありました。
 Running Symantec AntiVirus For Linux (SAVFL) LiveUpdate in Symantec FileStore (SFS) 5.6 environment may delete files in /tmp directory
 そこで、/tmpディレクトリを確認したとこSAVFLのRPMファイルがありました。これを削除後、liveupdateしたところ正常に動作しました。
# rm /tmp/sav*
rm: remove 通常ファイル `/tmp/sav-1.0.14-13.i386.rpm'? y
rm: remove 通常ファイル `/tmp/savap-1.0.14-13.i386.rpm'? y
rm: remove 通常ファイル `/tmp/savap-x64-1.0.14-13.x86_64.rpm'? y
rm: remove 通常ファイル `/tmp/savjlu-1.0.14-13.i386.rpm'? y
rm: remove 通常ファイル `/tmp/savui-1.0.14-13.i386.rpm'? y
 また、何かしらの原因によりliveupdateのプロセスが残っている場合もあります。
 この場合は、該当するプロセスを強制終了させてください。
 その後、liveupdateを実行するとウィルス定義ファイルが更新される場合があります。

 liveupdateできない要因はいろいろあるようで、対処に苦労しました。

●ウィルススキャン定期自動実行設定

 毎日定期的に全ファイルのウィルススキャンを実施し、ウィルス検知時にのみroot宛にメールが送られてくるようなスクリプトを作成します。
# vi virusscan
 ↑ ウィルススキャン実行スクリプト作成
#!/bin/bash
PATH=/usr/bin:/bin
# clamd update
yum -y update clamd > /dev/null 2>&1
# excludeopt setup
excludelist=/root/clamscan.exclude
if [ -s $excludelist ]; then
    for i in `cat $excludelist`
    do
        if [ $(echo "$i"|grep \/$) ]; then
            i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`
            excludeopt="${excludeopt} --exclude-dir=^$i"
        else
            excludeopt="${excludeopt} --exclude=^$i"
        fi
    done
fi
# virus scan
CLAMSCANTMP=`mktemp`
clamscan --recursive --remove ${excludeopt} / > $CLAMSCANTMP 2>&1
[ ! -z "$(grep FOUND$ $CLAMSCANTMP)" ] && \
# report mail send
grep FOUND$ $CLAMSCANTMP | mail -s "Virus Found in `hostname`" root
rm -f $CLAMSCANTMP
# chmod +x virusscan
 ↑ ウィルススキャン実行スクリプトへ実行権限付加
# echo "/backup/backup.tar.bz2" >> clamscan.exclude
 ↑ 例として/backup/backup.tar.bz2をスキャン対象外にする
# echo "/proc/" >> clamscan.exclude
 ↑ 例として/procディレクトリをスキャン対象外にする
# echo "/sys/" >> clamscan.exclude
 ↑ 例として/sysディレクトリをスキャン対象外にする
※ディレクトリを除外する場合は末尾に「/」を付加すること
# mv virusscan /etc/cron.daily/
 ↑ ウィルススキャン実行スクリプトを毎日自動実行されるディレクトリへ移動


●tmpフォルダに古いフォルダが蓄積される

 参考URL:SEP for Linux の LiveUpdate の tmp フォルダに古いフォルダが蓄積される

 /opt/Symantec/LiveUpdate/tmp内の番号のついたフォルダの古いフォルダから削除すればいいとのこと。

 自動的に削除してくれればいいのに・・。