freistehende RöhreSchon seit Tagen kann man im Fernsehen den Sendungen zum 25jährigen Jubiläum des Mauerfalls kaum entgehen, heute war es dann besonders schlimm. – Noch bin ich nicht so drauf, dass es mich nervt, aber das Potenzial dafür hat es allemal.
Aber ich konnte mich ja auch einem „Alternativ-Programm“ zuwenden. Schon vor Monaten hatte ich bei der letzten sophie-Installation-Aktion festgestellt, dass diese Variante des Anbindens von Sophos an den Amavis etwas angestaubt ist.
Nun bietet Sophos selbst seit einer Weile ein Paket an, dass die Engine mittels des SSSP-Protokolls an den amavis anbindbar macht. Also machte ich mich heute Abend mal daran, die Sophos-Anbindung zu updaten.

cd ~/src
tar xf /home/ftp/pub/virus/savdi-22-linux-32bit.tar
cd savdi-install/
./savdi_install.sh
  Sophos Anti-Virus SAVI daemon installation utility [Linux/Intel]
  Copyright (c) 2006-2011 Sophos Limited, Oxford, England
mv /usr/local/savdi/savdid.conf /etc/sophos/ ; ln -s /etc/sophos/savdid.conf /usr/local/savdi/
id amavis
  uid=115(amavis) gid=118(amavis) Gruppen=118(amavis),8(mail)
vi /etc/sophos/savdid.conf
  ...
ls -l /usr/local/bin/
  insgesamt 672
  -rwxr-xr-x 1 root staff 638936 Nov  9 17:43 savdid*
  lrwxrwxrwx 1 root staff     26 Jul 14 15:03 savscan -> /opt/sophos-av/bin/savscan*
  -rwxr-xr-x 1 root root   43872 Jun 25 13:09 sophie*
  lrwxrwxrwx 1 root staff     26 Jun 25 12:26 sweep -> /opt/sophos-av/bin/savscan*
vi /etc/init.d/savdid
  ...
chmod 0755 /etc/init.d/savdid
update-rc.d savdid defaults
  ...
/etc/init.d/savdid status
  [FAIL] savdid is not running ... failed!
/etc/init.d/savdid start
  [....] Starting savdid: savdidSAV Dynamic Interface 2.2.0
  Copyright 2000-2013 Sophos Limited. All rights reserved
  . ok

Der Start des Dienstes hatte funktioniert, also testete ich erst noch ein paar Berechtigungen und Links (auf Anwesenheit ;) ) :

/etc/init.d/savdid status
  [ ok ] savdid is running.
ls -dl /var/run/savdid/
  drwxr-xr-x 2 sophosav root 60 Nov 09 21:10 /var/run/savdid//
ls -l /var/run/savdid/
  insgesamt 4
  -rw-r--r-- 1 root root 4 Nov 09 21:10 savdid.pid
pxg savdid
  root      4785  0.0  0.0  10688   860 ?        SN   21:10   0:00 /usr/local/bin/savdid -c /usr/local/savdi/savdid.conf -f /var/run/savdid/savdid.pid -d
  amavis    4787  5.5  1.7 463932 147756 ?       SNl  21:10   0:09  \_ /usr/local/bin/savdid -s -c /etc/sophos/savdid.conf -
lsof -ni :4010
  COMMAND  PID   USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
  savdid  4358 amavis    4u  IPv4 2452732466      0t0  TCP 127.0.0.1:4010 (LISTEN)
ls -l /opt/sophos-av/lib/libssp.so.0 /usr/local/lib/libssp.so.0 #Links waren bei mir schon vorhanden!
  lrwxrwxrwx 1 root root  13 Nov 09 16:31 /opt/sophos-av/lib/libssp.so.0 -> libssp.so.0.0*
  lrwxrwxrwx 1 root staff 30 Nov 09 16:31 /usr/local/lib/libssp.so.0 -> /opt/sophos-av/lib/libssp.so.0*
ls -ld /opt/sophos-av/lib/sav
  drwxr-xr-x 2 root root 12288 Nov 09 19:47 /opt/sophos-av/lib/sav/
grep "savdid" /var/log/syslog
  Nov 09 21:45:11 host savdid[1254]: Started
  Nov 09 21:45:11 host savdid[1254]: Child started 1256
  Nov 09 21:45:20 host savdid[1256]: Error#012File operation error#012Error: 13 File: /var/tmp/savdi/log/141111.log
  Nov 09 21:45:20 host savdid[1256]: 00034407 Process starting PID: 1256
ls -l /var/tmp/savdi/log
  insgesamt 0
ls -dl /var/tmp/savdi/log
  drwxr-xr-x 2 root root 4096 Nov 09 20:55 /var/tmp/savdi/log/

Blick auf die AuferstehungskircheScheinbar klappte das loggen in das Verzeichnis „/var/tmp/savdi/log/“ nicht! Abgesehen davon, dass das sowieso ein ziemlich unüblicher Pfad ist, finde ich es persönlich besser, das Logging ins Syslog schreiben zu lassen. Alternativ könnte man sicher auch die Berechtigung ändern und dann auf jeden Fall auch das Ziel-Verzeichnis.
Testhalber habe ich das auch mal ausprobiert. Der savdid-Dienst legt dann tatsächlich unter der User-ID „amavis“ ein log-File an. Allerdings habe ich es auf meinem Server dann doch wieder auf „syslog“ zurück-geändert.

mkdir /var/log/savdi/
chown amavis /var/log/savdi/
chmod 01755 /var/log/savdi
ls -ld /var/log/savdi
  drwxr-xr-t 2 amavis root 4096 Nov 09 22:10 /var/log/savdi/
/etc/init.d/savdid restart
  [ ok ] Stopping savdid: savdid.
  [....] Starting savdid: savdidSAV Dynamic Interface 2.2.0
  Copyright 2000-2013 Sophos Limited. All rights reserved
  . ok
ls -l /var/log/savdi #Benutzer passt
  insgesamt 4
  -rw-r--r-- 1 amavis amavis 55 Nov 09 22:12 141111.log

Der Amavis hat in seiner Standart-Konfiguration (unter debian 7.7) noch keine Einträge um das SSSP-Prtokol zu nutzen. Um das einzurichten, habe ich eine Konfigurationsdatei entsprechend angepasst.

vi /etc/amavis/conf.d/50-user
  ...
  ########

  @av_scanners = (
    @av_scanners,
  # ### http://www.sophos.com/
   ["Sophos-SSSP",
     \&ask_daemon, ["{}", "sssp:[127.0.0.1]:4010"],
     qr/^DONE OK\b/m, qr/^VIRUS\b/m, qr/^VIRUS\s*(\S*)/m ]
  );
 
  ########
  ...
/etc/init.d/amavis restart ; tail -f /var/log/syslog
  Stopping amavisd: amavisd-new.
  Starting amavisd: amavisd-new.
  
  ....
  Nov 09 22:11:23 host amavis[8718]: Using primary internal av scanner code for Soppsymhiepsympsym
  Nov 09 22:11:23 host amavis[8718]: Using primary internal av scanner code for ClamAV-clamd
  Nov 09 22:11:23 host amavis[8718]: Using primary internal av scanner code for Sophos-SSSP
  Nov 09 22:11:23 host amavis[8718]: Found secondary av scanner ClamAV-clamscan at /usr/bin/clamscan
  ...

Die erste (saubere) Test-E-Mail lief auch glatt durch. Erst die dritte Mail, an die ich das Eicar-Test-File gehängt hatte, wurde richtigerweise als virulös erkannt und geblockt. Das log-File sah dann auch gut aus und so konnte ich beruhigt zu Bett gehen.:

grep "savdid" /var/log/syslog
  ...
  Nov 09 22:27:24 host savdid[4356]: Started
  Nov 09 22:27:24 host savdid[4356]: Child started 4358
  Nov 09 22:27:33 host savdid[4358]: 00034407 Process starting PID: 4358
  Nov 09 22:35:02 host savdid[4358]: [54627F46] 00038400 New connection To: 127.0.0.1:4010 From 127.0.0.1:4010
  Nov 09 22:35:02 host savdid[4358]: [54627F46] 00038402 New session
  Nov 09 22:35:02 host savdid[4358]: [54627F46] 00038403 Session ended
  Nov 09 22:35:02 host savdid[4358]: [54627F46] 00038401 Connection ended To: 127.0.0.1:4010 From 127.0.0.1:4010
  Nov 09 22:35:32 host savdid[4358]: [54627F47] 00038400 New connection To: 127.0.0.1:4010 From 127.0.0.1:4010
  Nov 09 22:35:32 host savdid[4358]: [54627F47] 00038402 New session
  Nov 09 22:35:32 host savdid[4358]: [54627F47] 00038403 Session ended
  Nov 09 22:35:32 host savdid[4358]: [54627F47] 00038401 Connection ended To: 127.0.0.1:4010 From 127.0.0.1:4010
  ...
  Nov 09 22:36:20 host savdid[4358]: [54627FEF] 00038402 New session
  Nov 09 22:36:21 host savdid[4358]: [54627FEF/1] 00030405 Threat found Identity: "EICAR-AV-Test" "/var/lib/amavis/tmp/amavis-20141112T055023-15358-pwwN0i2d/parts/p004"
  Nov 09 22:36:21 host savdid[4358]: [54627FEF] 00038403 Session ended
  Nov 09 22:36:21 host savdid[4358]: [54627FEF] 00038401 Connection ended To: 127.0.0.1:4010 From 127.0.0.1:4010
  ...

im GartendomDie beiden Anleitungen, die ich im Internet dazu fand, waren zwar gute Hinweise zur Installation, allerdings scheinbar auch schon etwas veraltet. Manche der beschriebenen Probleme hatte ich bei meiner Installation nicht (mehr). Zum Beispiel bringt der Sophos in der Standard-Installation durchaus einen „Update-Dienst“ mit und die Viren-Engine ist in einer Installationsdatei „gebündelt“ (savdi-22-linux-32bit.tar), die selbstständig erkennt, ob es sich um ein 64bit-System handelt und dann auch die entsprechenden Verzeichnisse anlegen würde. Nichtsdestotrotz war die Anleitung von Peer eine gute Inspiration, der ich gut folgen konnte.
Die Softlinks aus der Sophos-Anleitung brauchte ich auch nicht zu erzeugen. Auf meinem System gab es die schon (s.o.) – Aber, weil das wohl nicht auf allen Systemen so ist, der Vollständigkeit halber auch dieser Link.

Unterm Strich hatte ich dann in meiner savdid.conf folgende Änderungen gemacht.:

cd /etc/sophos/
diff -Natu savdid.conf.org savdid.conf
--- savdid.conf.org	2013-02-14 19:06:09.000000000 +0100
+++ savdid.conf		2014-11-09 20:22:28.000000000 +0100
@@ -7,12 +7,12 @@
 # Only used when running in daemon mode
 # Default is /var/run/savdid.pid
 
-pidfile: /var/tmp/savdi/new.pid
+pidfile: /var/run/savdid/savdid.pid
 
 # User name and group for daemon to switch to for normal running
 # savdi must be running as root for this to be useful
-#user: savdi
-#group: savdi
+user: amavis
+group: amavis
 
 # No of worker threads to start up 
 # Normally should be at least the maximum no of clients
@@ -27,9 +27,9 @@
 # These options can be specified under the savi configuration but that
 # is not advised.
 
-#virusdatadir: /var/sav/vdbs
+virusdatadir: /opt/sophos-av/lib/sav
 #virusdataname: vdl
-#idedir: /var/sav/vdbs
+idedir: /opt/sophos-av/lib/sav
 
 # What to do when the daemon must exit
 # Options are:-
@@ -46,10 +46,10 @@
 log {
     # Specify the logging mechanism {CONSOLE|FILE|SYSLOG}
 
-    type: FILE
+    type: SYSLOG
 
     # Where to write the log files (if FILE is selected)
-    logdir: /var/tmp/savdi/log/
+    #logdir: /var/log/savdi/
 
     # Specify the level of logging required
     # 0 = errors+threats
@@ -61,177 +61,178 @@
 }
 
 
-# Define a IP channel for localhost
-
-channel {
.... sehr viele geänderte Zeilen
-    }
-
-    # Other services with different configurations can be defined
-
+##:65,235s%^%#%
+## Define a IP channel for localhost
+# wird hier nicht benötigt
+#channel {
+#
+#        # Send to the log requests received from clients
+#        # For debugging. Default: NO
+#        # logrequests: YES
+#
+#
+#         logrequests: YES
+#    commprotocol {
+#        type: IP
.... sehr viele geänderte Zeilen
+##    }
+#}
 
 #
 # Define an IP channel for SSSP
@@ -244,7 +245,9 @@
 
         # IP Address to listen on, default is 0.0.0.0 (any)
 
-        address: 0.0.0.0
+        #address: 0.0.0.0
+        ## bitte nicht weltweite Erreichbarkeit
+        address: 127.0.0.1
         port: 4010
 
         # Subnet of acceptable client IP addresses
@@ -266,7 +269,7 @@
         type: SSSP
 
         # Do we allow the client to use SCANFILE?
-        allowscanfile: DIR
+        allowscanfile: SUBDIR
 
         # Do we allow the client to use SCANDATA?
         allowscandata: YES

GabelhubwagenEine Sache war dann noch etwas komisch. Eigentlich hatte ich nämlich gedacht, dass es anschließend ausreichen würde, den sophie-Daemon zu stoppen und beim nächsten amavis-Start, würde der dann darauf reagieren und sophie nicht mehr ansprechen. Aber amavis hatte wieder die Zeile mit dem sophie-av-Scanner im Start-log. :evil: Ich musste dann erst die Zeilen in der Datei /etc/amavis/conf.d/15-av_scanners auskommentieren, bevor sophie ignoriert wurde. – Vielleicht war es aber auch langsam wirklich Zeit ins Bett zu gehen.
Aber wenn ich dann den sophie-Daemon auf meinem Server nicht mehr brauche, werde ich es sicher demnächst ganz deinstallieren.

vi /etc/amavis/conf.d/15-av_scanners
  ...
  # ### http://www.clanfield.info/sophie/ (http://www.vanja.com/tools/sophie/)
  #UP# ["Soppsymhiepsympsym",
  #UP#   \&ask_daemon, ["{}/\n", "/var/run/sophie"],
  #UP#   qr/(?x)^ 0+ ( : | [\000\r\n]* $)/m,  qr/(?x)^ 1 ( : | [\000\r\n]* $)/m,
  #UP#   qr/(?x)^ [-+]? \d+ : (.*?) [\000\r\n]* $/m ],
  ...
/etc/init.d/amavis restart ; tail -f /var/log/syslog
  Stopping amavisd: amavisd-new.
  Starting amavisd: amavisd-new.
  ...
  Nov 09 23:27:21 h2162599 amavis[2742]: Found decoder for    .exe  at /usr/bin/unrar-free; /usr/bin/lha; /usr/bin/arj
  Nov 09 23:32:21 h2162599 amavis[2742]: Using primary internal av scanner code for ClamAV-clamd
  Nov 09 23:32:21 h2162599 amavis[2742]: Using primary internal av scanner code for Sophos-SSSP
  Nov 09 23:32:21 h2162599 amavis[2742]: Found secondary av scanner ClamAV-clamscan at /usr/bin/clamscan
  Nov 09 23:32:21 h2162599 amavis[2742]: Deleting db files snmp.db,nanny.db,__db.004,__db.003,__db.001,__db.002 in /var/lib/amavis/db
  Nov 09 23:32:21 h2162599 amavis[2742]: Creating db in /var/lib/amavis/db/; BerkeleyDB 0.51, libdb 5.1
  ...

Start/Stop-Script /etc/init.d/savdid

Weil im aktuellen Archiv „savdi-23-linux-64bit.tar“ die Template-Datei /etc/init.d/savdid nicht mehr existiert, habe ich mal eine ältere hier in den Artikel gestellt.:

#! /bin/sh
#
 
### BEGIN INIT INFO
# Provides:          savdid
# Required-Start:    $local_fs $remote_fs $syslog $network $time $sav-protect
# Required-Stop:     $local_fs $remote_fs $syslog $network $sav-protect
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/Stop the Sophos savdi-daemon
### END INIT INFO
 
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/savdid
NAME=savdid
DESC=savdid
CONFIG=/usr/local/savdi/savdid.conf
PIDDIR=/var/run/savdid
 
test -x $DAEMON || exit 0
 
if ! [ -x "/lib/lsb/init-functions" ]; then
        . /lib/lsb/init-functions
else  
        echo "E: /lib/lsb/init-functions not found, lsb-base (>= 3.0-6) needed"
        exit 1
fi
 
#since /var/run can be wiped completly we create our run directory here
if [ ! -d "$PIDDIR" ]; then
        mkdir "$PIDDIR"
        chown amavis "$PIDDIR"
fi
 
set -e
 
case "$1" in
  start)
        log_daemon_msg "Starting $DESC" "$NAME"
        start_daemon $DAEMON  -c $CONFIG -f $PIDDIR/savdid.pid -d
        log_end_msg $?
        ;;
  stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        start-stop-daemon --stop --quiet --oknodo --pidfile $PIDDIR/savdid.pid --retry 15
        log_end_msg $?
        ;;
  reload|force-reload)
        log_daemon_msg "Reloading $DESC sav patterns" "$NAME"
        start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDDIR/savdid.pid
        log_end_msg $?
        ;;
  status)
    status_of_proc -p $PIDDIR/savdid.pid "$DAEMON" "$NAME" && exit 0 || exit $?
    ;;
  restart)
        $0 stop
        sleep 1
        $0 start
        ;;
  *)  
        log_failure_msg "Usage: $N {start|stop|restart|reload|force-reload}"
        exit 1
        ;;
esac
 
exit 0