Debian szerver logolás (Wheezy)

Innen: AdminWiki

A naplózást a syslog-ng-vel végeztetjük (azt hisszük, hogy "okosabb", mint a Debian alapértelmezett rsyslog-ja), és a logokat a logcheck-kel figyeljük.

Telepítés

A szokásos módon:

apt-get install syslog-ng logcheck logcheck-database # + dependens könyvtárak

A fenti parancs eltávolítja az alapértelmezett rsyslog-ot.

Logrotate módosítások

A rotáláskor a logrotate megkísérel lefuttatni egy scriptet a /tmp-ben. Mivel a biztonsági házirendünk szerint a /tmp nem futtatható, ez hibát okoz. Ezért a root nevében lefutó logrotate számára a /etc alatt létrehozunk egy logrotate.tmp könyvtárat:

mkdir /etc/logrotate.tmp

és a logrotate számára előírjuk ennek használatát:

-rwxr-xr-x root root /etc/cron.daily/logrotate

[...]
export TMPDIR=/etc/logrotate.tmp
[...]

Logcheck

A logcheck lényegében egy cron-ból futtatott script, amely az utolsó futtatása óta készült logrészleteket összehasonlítja megadott reguláris kifejezésekkel, és az egyezéseket kigyűjtve (az előírtak figyelmen kívül hagyásával), email-ben elküldi. Telepítés után a logcheck.conf-ot teljesen cseréljük le:

mv /etc/logcheck/logcheck.conf /etc/logcheck/logcheck.conf.bak
touch /etc/logcheck/logcheck.conf; chown root:logcheck /etc/logcheck/logcheck.conf; chmod 640 /etc/logcheck/logcheck.conf
mcedit /etc/logcheck/logcheck.conf

Az új állomány beállításai:

-rw-r----- root logcheck /etc/logcheck/logcheck.conf

# Logcheck beallitasok

# Az ignore.d.server szabalyokat alkalmazza
REPORTLEVEL="server"

# A root-nak kuldje a levelet
SENDMAILTO="root"

# Fully qualified domain nev legyen a subjectben
FQDN=1

# Adja hozza a [logcheck] prefixet a subjecthez
ADDTAG="yes"

Az alapértelmezetteken kívül a logcheck figyelje a kern.log-ot és a messages-t is (két új sor):

-rw-r----- root logcheck /etc/logcheck/logcheck.logfiles

# these files will be checked by logcheck
# This has been tuned towards a default syslog install
/var/log/syslog
/var/log/messages
/var/log/kern.log
/var/log/auth.log

Reboot-kor, és normális üzemben 5 percenként fusson le az ellenőrzés (idő módosítása):

-rw-r--r-- root root /etc/cron.d/logcheck

# /etc/cron.d/logcheck: crontab entries for the logcheck package
                                                                                                                                  
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
                                                                                                                                  
@reboot         logcheck    if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck -R; fi
0-59/5 * * * *  logcheck    if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck; fi
                                                                                                                                  
# EOF
Megjegyzés: a maintainer óránként, vagy még ritkábban futtatja a logcheck-et. Ha az erőforrások megengedik, talán érdemes ezt gyakoribbra venni egy esetleges illegális távoli bejelentkezés vagy más biztonsági esemény korai jelzése érdekében. Ez kevesebb időt hagy a behatolónak arra is, hogy root jogot szerezve leállítsa a riasztást.

Végül szigorítsuk meg a jelenleg eléggé liberális jogosultságokat a beállítások könyvtárában:

chmod -R o-rwx /etc/logcheck

Figyelmen kívül hagyandók beállítása

Néhány logbejegyzést érdemes figyelmen kívül hagyatni, az ezekre passzoló reguláris kifejezéseket a /etc/logcheck/ignore.d.server alatt egy-egy kivétel állományba kell felvenni.

  • syslog-ng log statisztika
touch /etc/logcheck/ignore.d.server/syslog-ng-fix
chown root:logcheck /etc/logcheck/ignore.d.server/syslog-ng-fix
chmod 640 /etc/logcheck/ignore.d.server/syslog-ng-fix
mcedit /etc/logcheck/ignore.d.server/syslog-ng-fix
-rw-r----- root logcheck /etc/logcheck/syslog-ng-fix

^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ syslog-ng\[[[:digit:]]{1,5}\]: Log statistics
  • sshd failures (opcionálisan, ha nem érdekelnek a gyakori, random próbálkozások)
touch /etc/logcheck/ignore.d.server/ssh-failures
chown root:logcheck /etc/logcheck/ignore.d.server/ssh-failures
chmod 640 /etc/logcheck/ignore.d.server/ssh-failures
mcedit /etc/logcheck/ignore.d.server/ssh-failures
-rw-r----- root logcheck /etc/logcheck/ignore.d.server/ssh-failures

# Originally from https://raw.githubusercontent.com/ties/logcheck-extrarules/master/ignore.d.server/local-ssh
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: warning: /etc/hosts\.(allow|deny), line [[:digit:]]+: can't verify hostname: getaddrinfo\([._[:alnum:]-]+, AF_INET\) failed$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: warning: /etc/hosts\.(allow|deny), line [[:digit:]]+: host name/(name|address) mismatch: [._[:alnum:]-]+ != [._[:alnum:]-]+$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: warning: can\'t get client address: Connection reset by peer$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Could not write ident string to
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: fatal: Write failed: Broken pipe$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: fatal: Write failed: Connection (timed out|reset by peer)$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: fatal: Write failed: Connection reset by peer \[preauth\]$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: error: PAM: User not known to the underlying authentication module for i(llegal|nvalid) user [^[:space:]]+ from ([:.[:xdigit:]]+|UNKNOWN|[-_.[:alnum:]]+)$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: error: PAM: Authentication failure for [^[:space:]]+ from ([:.[:xdigit:]]+|UNKNOWN|[-_.[:alnum:]]+)$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: I(llegal|nvalid) user [^[:space:]]+ from ([:.[:xdigit:]]+|UNKNOWN)$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Failed (keyboard-interactive/pam|password|none) for (i(llegal|nvalid) user )?[^[:space:]]+ from ([:.[:xdigit:]]+|UNKNOWN|[-_.[:alnum:]]+) port [[:digit:]]{1,5} ssh2?$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: (\(pam_unix\)|pam_unix\(sshd?:auth\):) authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=[^[:space:]]+([[:space:]]+user=[^[:space:]]+)?$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: (\(pam_unix\)|pam_unix\(sshd?:auth\):) check pass; user unknown$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: fatal: recv_rexec_state: ssh_msg_recv failed$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: input_userauth_request: invalid user [-_.[:alnum:]]+ \[preauth\]$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: fatal: Read from socket failed: Connection reset by peer \[preauth\]$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Received disconnect from [[:alnum:].:]+:
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Connection closed by [[:alnum:].:]+ \[preauth\]$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Disconnecting: Too many authentication failures for [[:alnum:]]+ \[preauth\]$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: PAM [[:digit:]]+ more authentication failure(s)?;
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: PAM service\(sshd\) ignoring max retries; [[:digit:]]{1,2} > [[:digit:]]$
^\w{3} [ :[:digit:]]{11} ([._[:alnum:]-]+)? sshd\[[[:digit:]]+\]: last message repeated [[:digit:]]+ times$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: subsystem(s)? request for sftp by user [-._[:alnum:]]+$
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Corrupted MAC on input\. \[preauth\]$

Speciális esetek

Az alábbi javításokra csak speciális esetekben van szükség, de rutinszerű felvételük sem hiba.

  • speciálisan DHCP-vel kiszolgált hálózaton lévő gép esetén az automatic private IP address (169.254.0.0/16 B osztály) alhálózat forgalma
touch /etc/logcheck/ignore.d.server/kernel-apipa
chown root:logcheck /etc/logcheck/ignore.d.server/kernel-apipa
chmod 640 /etc/logcheck/ignore.d.server/kernel-apipa
mcedit /etc/logcheck/ignore.d.server/kernel-apipa
-rw-r----- root logcheck /etc/logcheck/ignore.d.server/kernel-apipa

^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? martian source 169.254
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? martian destination 169.254
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? __ratelimit:
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? net_ratelimit:
  • speciálisan egy osztott hálózaton lévő gép esetén "marslakó" (martian source/destination) broadcast-ok
touch /etc/logcheck/ignore.d.server/kernel-martians
chown root:logcheck /etc/logcheck/ignore.d.server/kernel-martians
chmod 640 /etc/logcheck/ignore.d.server/kernel-martians
mcedit /etc/logcheck/ignore.d.server/kernel-martians
-rw-r----- root logcheck /etc/logcheck/ignore.d.server/kernel-martians

^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? martian source 255.255.255.255
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? martian destination 0.0.0.0
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? __ratelimit:
^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? net_ratelimit:
  • speciálisan DHCP szerver esetén nem IP-vel hanem hostnévvel hivatkozás
touch /etc/logcheck/ignore.d.server/dhcp-fix
chown root:logcheck /etc/logcheck/ignore.d.server/dhcp-fix
chmod 640 /etc/logcheck/ignore.d.server/dhcp-fix
mcedit /etc/logcheck/ignore.d.server/dhcp-fix
-rw-r----- root logcheck /etc/logcheck/dhcp-fix

^\w{3} [ :0-9]{11} [._[:alnum:]-]+ dhcpd: uid lease [.0-9]{7,15} for client [:[:xdigit:]]+ is duplicate on [._[:alnum:]-]+$

Mindenképpen jelentendők beállítása

Azokat a bejegyzéseket, amelyeket a logcheck alapértelmezésben figyelmen kívül hagy, de mi szeretnénk, ha jelentené, a /etc/logcheck/cracking.d vagy /etc/logcheck/violations.d alatt felvett, a bejegyzésre passzoló reguláris kifejezést tartalmazó állományba kell beírni.

  • belépés SSH-val és jelszavas authentikációval (házirend szerint a kulccsal történő authentikáció az elfogadott):
touch /etc/logcheck/violations.d/ssh
chown root:logcheck /etc/logcheck/violations.d/ssh; chmod 640 /etc/logcheck/violations.d/ssh
mcedit /etc/logcheck/violations.d/ssh
-rw-r----- root logcheck /etc/logcheck/violations.d/ssh

^\w{3} [ :0-9]{11} [._[:alnum:]-]+ sshd\[[0-9]+\]: Accepted password for

A fenti beállítások a logcheck következő lefutásakor azonnal érvényesülnek.