Ostatnio spotkałem się z nieprzyjemnym problemem rozsyłania spamu przez serwer.
Kilka dni przesiedziałem na przeglądaniu logów, konfiguracji, aktualizacji wszystkiego, co mogło mieć na to wpływ.
Koniec końcem trafiłem na świetną aplikację – Maldet, którą każdy powinien mieć na swoim serwerze.

Program zabezpiecza serwer przed wszelkiego rodzaju wirusami i innymi niebezpiecznymi plikami, nie tylko wgrywanymi przez użytkowników naszego serwera.

Coraz częściej i coraz bardziej modne stało się używanie gotowych silników typu Joomla czy WordPress i niby nie ma w tym nic złego, o ile silniki te są pod kontrolą użytkownika i są regularnie aktualizowane, nie tylko sam silnik, ale również szablony i pluginy.

Na szczęście mamy do dyspozycji doskonałe narzędzie, które nas ochroni, a nazywa się jak już wspomniałem wyżej Maldet.

Aplikacja w zależności od tego, jaki tryb pracy wybierzemy, będzie w tle skanować pliki, wgrywane na nasz serwer.

1. Instalacja.

Pobieramy i instalujemy aplikację (ja zainstalowałem w katalogu użytkownika):

cd /usr/local/src
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar -zxvf maldetect-current.tar.gz
cd maldetect-1.4.2
./install.sh

Po instalacji powinny się wyświetlić podobne informacje:

Linux Malware Detect v1.4.2
            (C) 2002-2011, R-fx Networks 
            (C) 2011, Ryan MacDonald 
inotifywait (C) 2007, Rohan McGovern 
This program may be freely redistributed under the terms of the GNU GPL

installation completed to /usr/local/maldetect
config file: /usr/local/maldetect/conf.maldet
exec file: /usr/local/maldetect/maldet
exec link: /usr/local/sbin/maldet
exec link: /usr/local/sbin/lmd
cron.daily: /etc/cron.daily/maldet

maldet(6073): {sigup} performing signature update check...
maldet(6073): {sigup} local signature set is version 2013102428301
maldet(6073): {sigup} new signature set (2013102428301) available
maldet(6073): {sigup} downloaded http://www.rfxn.com/downloads/md5.dat
maldet(6073): {sigup} downloaded http://www.rfxn.com/downloads/hex.dat
maldet(6073): {sigup} downloaded http://www.rfxn.com/downloads/rfxn.ndb
maldet(6073): {sigup} downloaded http://www.rfxn.com/downloads/rfxn.hdb
maldet(6073): {sigup} downloaded http://www.rfxn.com/downloads/maldet-clean.tgz
maldet(6073): {sigup} signature set update completed
maldet(6073): {sigup} 10849 signatures (8981 MD5 / 1868 HEX)

2. Konfiguracja.

Plik konfiguracyjny znajduje się tu:

/usr/local/maldetect/conf.maldet

Nie ma właściwie czego tu wyjaśniać, ustawiamy wszystko wg. własnych upodobań. Włączamy powiadomienia na Email, podajemy adres lub adresy, na które mają być wysyłane powiadomienia, włączamy kwarantanne.
Plik wygląda następująco:

# [ EMAIL ALERTS ]
##
# The default email alert toggle
# [0 = disabled, 1 = enabled]
email_alert=1

# The subject line for email alerts
email_subj="maldet alert from $(hostname)"

# The destination addresses for email alerts
# [ values are comma (,) spaced ]
email_addr="youremail@yourdomain.com"

# Ignore e-mail alerts for reports in which all hits have been cleaned.
# This is ideal on very busy servers where cleaned hits can drown out
# other more actionable reports.
email_ignore_clean=0

##
# [ QUARANTINE OPTIONS ]
##
# The default quarantine action for malware hits
# [0 = alert only, 1 = move to quarantine & alert]
quar_hits=1

# Try to clean string based malware injections
# [NOTE: quar_hits=1 required]
# [0 = disabled, 1 = clean]
quar_clean=1

# The default suspend action for users wih hits
# Cpanel suspend or set shell /bin/false on non-Cpanel
# [NOTE: quar_hits=1 required]
# [0 = disabled, 1 = suspend account]
quar_susp=0
# minimum userid that can be suspended
quar_susp_minuid=500

3. Cron.

Tworzymy plik w katalogu cron.daily i wklejamy kod skryptu:

#!/bin/bash

# clear quarantine/session/tmp data every 14 days
/usr/sbin/tmpwatch 336 /usr/local/maldetect/tmp >> /dev/null 2>&1
/usr/sbin/tmpwatch 336 /usr/local/maldetect/sess >> /dev/null 2>&1
/usr/sbin/tmpwatch 336 /usr/local/maldetect/quarantine >> /dev/null 2>&1
/usr/sbin/tmpwatch 336 /usr/local/maldetect/pub/*/ >> /dev/null 2>&1

# check for new release version
/usr/local/maldetect/maldet -d >> /dev/null 2>&1

# check for new definition set
/usr/local/maldetect/maldet -u >> /dev/null 2>&1

# if were running inotify monitoring, send daily hit summary
if [ "$(ps -A --user root -o "comm" | grep inotifywait)" ]; then
        /usr/local/maldetect/maldet --alert-daily >> /dev/null 2>&1
else
        # scan the last 2 days of file changes
        if [ -d "/home/virtual" ] && [ -d "/usr/lib/opcenter" ]; then
                # ensim
                /usr/local/maldetect/maldet -b -r /home/virtual/?/fst/var/www/html 2 >> /dev/null 2>&1
                /usr/local/maldetect/maldet -b -r /home/virtual/?/fst/home/?/public_html 2 >> /dev/null 2>&1
        elif [ -d "/etc/psa" ] && [ -d "/var/lib/psa" ]; then
                # psa
                /usr/local/maldetect/maldet -b -r /var/www/vhosts/?/httpdocs 2 >> /dev/null 2>&1
                /usr/local/maldetect/maldet -b -r /var/www/vhosts/?/subdomains/?/httpdocs 2 >> /dev/null 2>&1
        elif [ -d "/usr/local/directadmin" ]; then
                # DirectAdmin
                /usr/local/maldetect/maldet -b -r /var/www/html/?/ 2 >> /dev/null 2>&1
                /usr/local/maldetect/maldet -b -r /home?/?/domains/?/public_html 2 >> /dev/null 2>&1
        else
                # cpanel, interworx and other standard home/user/public_html setups
                /usr/local/maldetect/maldet -b -r /home?/?/public_html 2 >> /dev/null 2>&1
        fi
fi

4. Sposoby użycia.

Maldet możemy używać do skanowania ręcznego wskazanej lokalizacji, np jeśli chcemy przeskanować zawartość katalogu home:

maldet -a /home.

Skonfigurowaliśmy program tak, by automatycznie przenosił zainfekowane pliki do kwarantanny i usuwał je po powiadomieniu na maila, po 14 dniach automatycznie.
Jeśli jednak chcemy zobaczyć raport, użyjmy polecenia, zastępując xxx numerem raportu:

maldet --report number-xxxx.xxxxx

Maldet możemy użyć też w trybie monitorowania. Tu program będzie skanował w tle wszystki pliki wysyłane przez użytkowników serwera:

  • monitorowanie użytkowników: maldet –monitor users
  • monitorowanie wybranej ścieżki: maldet –monitor /root/monitor_paths
  • monitorowanie wybranych ścieżek: maldet –monitor /home/mike,/home/ashton