Debian szerver logolás (Stretch)
A Debian Stretch egy systemd System and Service Manager alapú disztribúció, amely a rendszereseményeket egy bináris adatbázisban (journal) rögzíti és ennek feldolgozására számos lehetőséget ad. Noha valószínűleg sokkal hatékonyabb lenne a releváns eseményeket magából az adatbázisból kiválogattatni, ebben a leírásban kihasználjuk, hogy az eseményeket a systemd képes a syslog-nak feladni, így a naplózást a régi megközelítésnek megfelelően a syslog-ng-vel végeztetjük, és a logokat a logcheck-kel figyeljük. Nem használunk naplószervert, az értesítéseket email-ben küldjük el.
Tartalomjegyzék
Elvi megfontolások
A systemd naplózó szolgáltatása elvileg feleslegessé teszi a hagyományos, szövegállományokra bontott naplók kezelését. A systemd journal jól strukturált, tömörített, tagelt és indexelt bináris adatbázis, melynek kezelésére hatékony eszköz áll rendelkezésre (journalctl). A szöveges naplózásról erre történő áttéréshez azonban - szerintem - az alábbi fejlesztésekre lenne szükség (TODO!):
- hatékony együttműködés a sok naplóbejegyzést termelő, eleddig fájlokba dolgozó szolgáltatások (pl. Apache webszerver) és a systemd naplózó szolgáltatása között. Lehetséges, hogy a journaling nagy terhelés esetén sem számottevő jelentős többlet erőforrást, ezt azonban meg kellene vizsgálni.
- a hagyományos logrotate konfigurációkban megfogalmazotthoz hasonló policy, amely a különféle jellegű naplóesemények megőrzésének idejét szabályozza. Jelenleg a journal egyszerűen perzisztenssé tehető (alapértelmezésben a /run hierarchiában keletkezik, így minden rendszerindításkor kiürül), de számára csak egy általános méretkorlát van beállítva. Nyilvánvaló, hogy a méretkorláton belül különböző mennyiségű (visszamenőlegességű) tűzfal- webszerver-, smtp-, stb. log megtartása lenne szükséges, és ez biztosan be is állítható, azonban ezek a beállítások a Debian terjesztésnek (még) nem részei.
- a (közel) valós idejű értesítésekért felelős logcheck átalakítása úgy, hogy ne csak natív szöveges állományokat, hanem a journalctl segítségével(?) a journal-ből kinyert adatokat is tudjon elemezni. Léteznek erre a célra a logcheck-től független parser projektek is (ld. pl. itt), illetve valószínűnek tartom, hogy a valós idejű értesítés külön eszköz nélkül, magában a journal kezelőben is definiálható(? lesz?), de ezek az eszközök és beállítások a Debian terjesztésnek (még) nem részei.
Amíg a fentiek problémát jelentenek, célszerűbbnek tűnik a szöveges naplózás megtartása, kihasználva azt, hogy a systemd a telepített, hagyományos syslogd (rsyslogd, syslog-ng, stb.) számára képes az általa kezelt eseményeket feladni, vagyis a journaling a rendszernapló szolgáltatás számára (közel) transzparens lehet.
Telepítés
A szükséges komponenseket a szokásos módon telepítjük:
apt-get install syslog-ng logcheck logcheck-database # +: dependens könyvtárak és Python (ha még nincs telepítve)
A fenti művelet eltávolítja az alapértelmezett rsyslog-ot, helyette a syslog-ng lesz az alapértelmezett naplózó démon. A Debian Stretch-ben a journal feladása alapértelmezetten be van állítva, így a syslog-ng a korábbi Debian terjesztésekkel analóg módon működik.
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 custom settings # Filtering rules from ignore.d.server REPORTLEVEL="server" # Mail goes to the local administrator SENDMAILTO="root" # The hostname in the subject of generated mails should be fully qualified FQDN=1 # Controls [logcheck] prefix on Subject: lines ADDTAG="yes"
Egy új (.logfiles kiterjesztésű!), overlay állományban írjuk elő, hogy az alapértelmezetteken kívül a logcheck figyelje a kern.log-ot és a messages-t is:
touch /etc/logcheck/logcheck.logfiles.d/additional.logfiles chown root:logcheck /etc/logcheck/logcheck.logfiles.d/additional.logfiles chmod 640 /etc/logcheck/logcheck.logfiles.d/additional.logfiles mcedit /etc/logcheck/logcheck.logfiles.d/additional.logfiles
-rw-r----- root logcheck /etc/logcheck/logcheck.logfiles.d/additional.logfiles /var/log/kern.log /var/log/messages
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 # EOFMegjegyzé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 célszerű felvenni.
Kernel bejegyzések
touch /etc/logcheck/ignore.d.server/kernel-fix chown root:logcheck /etc/logcheck/ignore.d.server/kernel-fix chmod 640 /etc/logcheck/ignore.d.server/kernel-fix mcedit /etc/logcheck/ignore.d.server/kernel-fix
-rw-r----- root logcheck /etc/logcheck/ignore.d.server/kernel-fix ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? perf: interrupt took too long .*$
syslog-ng bejegyzések
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 ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ syslog-ng\[[[:digit:]]{1,5}\]: WARNING: Default value changed for the prefix\(\) option of systemd-journal source in syslog-ng
systemd bejegyzések
Bővebben ld. itt.
touch /etc/logcheck/ignore.d.server/systemd-fix chown root:logcheck /etc/logcheck/ignore.d.server/systemd-fix chmod 640 /etc/logcheck/ignore.d.server/systemd-fix mcedit /etc/logcheck/ignore.d.server/systemd-fix
-rw-r----- root logcheck /etc/logcheck/ignore.d.server/systemd-fix # https://wiki.debian.org/systemd/logcheck ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: (Starting|Started) Session [[:digit:]]+ of user [^[:space:]]+\.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: (Reexecuting|Reloading)\.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: systemd [[:digit:]]+ running in system mode. \((\+[[:alnum:]]+ ?)+\)$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Expecting device [^[:space:]]+\.device\.\.\.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Start(ing|ed) Cleanup of Temporary Directories\.+$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Start(ing|ed) Run anacron jobs\.+$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd-logind\[[[:digit:]]+\]: New session [[:alnum:]]+ of user [^[:space:]]+\.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd-logind\[[[:digit:]]+\]: Removed session [[:alnum:]]+\.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: (Stopping|Stopped target|Reached target) (Shutdown|Timers|Default|Basic System|Paths|Sockets)\.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Starting (Shutdown|Exit the Session\.\.|Timers|Default|Basic System|Paths|Sockets)\.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Received SIGRTMIN\+24 from PID [[:digit:]]+ \(kill\)\.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Startup finished in [[:digit:]]+ms\.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: (Start|Stopp)(ing|ed) User Manager for UID [0-9]+\.+$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: (Starting|Created|Stopping|Removed)( slice)? (user|system)-[\\[:alnum:]]+\.slice\.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Time has been changed$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd(\[[[:digit:]]+\])?: pam_unix\(systemd-user:session\): session (opened|closed) for user [^[:space:]]+( by \(uid=[0-9]+\))?$ # logrotate ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Reload(ing|ed) LSB: .*\.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Reload(ing|ed) System Logger Daemon\.$ # systemd-logind ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd-logind\[[[:digit:]]+\]: New session [[:alnum:]]+ of user [^ ]+\.*$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd-logind\[[[:digit:]]+\]: Removed session [[:alnum:]]+\.$ # contributed ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: (Starting|Created|Stopping|Removed)( slice)? User Slice of [[:alnum:]]+\.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: ((Start|Listen)ing|Closed) (on )?(GnuPG cryptographic agent).*$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd(\[[[:digit:]]+\])?: apt-daily(-upgrade)?\.timer: Adding ([. [:alnum:]])+ random time\.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd-timesyncd\[[[:digit:]]+\]: Synchronized to time server .*\.$
su bejegyzések
Mivel a maintainer (elég szigorú) violations.d szabályokat adott meg, a szokásostól eltérően a kivételeket a violations.ignore.d alatt kell elkönyvelnünk - itt a fájlnév is számít, ezért a meglévő állomány kiegészítésével:
-rw-r----- root logcheck /etc/logcheck/violations.ignore.d/logcheck-su [...] ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ su\[[0-9]+\]: pam_[[:alnum:]]+\(su:session\): Cannot create session: Already running in a session$
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:]]+\]: Did not receive identification string from ^\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[-_.[:alnum:] ]+ from ([:.[:xdigit:]]+|UNKNOWN|[-_.[:alnum:]]+)$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: error: PAM: Authentication failure for [^[:space:]]+ from ([:.[:xdigit:]]+|UNKNOWN|[-_.[:alnum:]]+)( port [[:digit:]]{1,5})?$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: I(llegal|nvalid) user[-_.[:alnum:] ]+ from ([:.[:xdigit:]]+|UNKNOWN)( port [[:digit:]]{1,5})?$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Failed (keyboard-interactive/pam|password|none) for (i(llegal|nvalid) user )?[-_.[:alnum:] ]+ 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:]]+\]: (error: )?(Received disconnect|Disconnected) from [ [:alnum:].:]+ ([ [:alnum:]:,])*\[preauth\]$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Connection (closed|reset) by [[:alnum:].:]+ (port [[:digit:]]{1,5} )?\[preauth\]$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: ssh_dispatch_run_fatal: Connection from [[:alnum:].:]+ (port [[:digit:]]{1,5})?: (Broken pipe|DH GEX group out of range) \[preauth\]$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: packet_write_wait: Connection from [[:alnum:].:]+ (port [[:digit:]]{1,5})?: (Broken pipe) \[preauth\]$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Disconnecting: Change of username or service not allowed: ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Disconnecting: Packet corrupt ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Disconnecting: Too many authentication failures ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: error: maximum authentication attempts exceeded ^\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:]]+\]: subsystem(s)? request for sftp by user [-._[:alnum:] ]+$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Corrupted MAC on input\. \[preauth\]$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: fatal: no matching cipher found: ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: fatal: Unable to negotiate a key exchange method ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Unable to negotiate with [[:alnum:].:]+ (port [[:digit:]]{1,5})?: no matching (key exchange method|host key type|cipher) found ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Protocol major versions differ for [[:alnum:].:]+ (port [[:digit:]]{1,5})?: ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Bad protocol version identification ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Bad packet length ^\w{3} [ :[:digit:]]{11} ([._[:alnum:]-]+)? sshd\[[[:digit:]]+\]: last message repeated [[:digit:]]+ times$
Megjegyzés: a Debian korábbi verzióihoz képest változás, hogy nincs az ignore szabálykészletben (azaz jelentendőnek számít) a sima (1024 bites) DSA kulccsal történő bejelentkezés. Nézetem szerint ez helyes, és csak akkor vegyük fel figyelmen kívül hagyandónak, ha nincs lehetőségünk az elavult DSA kulcsokat RSA-ra cseréltetni. A szükséges ignore szabály:
# Ignoring DSA public key authentication ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ sshd\[[[:digit:]]+\]: Accepted publickey for [^[:space:]]+ from [^[:space:]]+ port [[:digit:]]+( (ssh|ssh2))?(: DSA ([[:xdigit:]]{2}:){15}[[:xdigit:]]{2})?$
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.
Tesztelési tippek
Saját szabályok teszteléséhez használható tippek (innen: Configure logcheck - thx!):
- Nézzük meg, hogy egy szabályokat tartalmazó állomány milyen üzeneteket fog el (helyettesítsük be a tesztelendő fájlnevet!):
egrep -f /etc/logcheck/ignore.d.server/[FILE] /var/log/syslog # illetve, amelyik naplót teszteljük
- A logcheck manuális indítása:
su -s /bin/bash -c "/usr/sbin/logcheck" logcheck