Naplózás a nyílt forráskódú nxlog rendszerrel Botyánszki Botond <boti@nxlog.org>
Miért naplózzunk? Törvényi megfelelőség (PSZÁF, PCI-DSS, SOX, stb) Belső policy Biztonsági incidensek felderítése Üzembiztonság Debugolás Audit Monitoring
A teljes IT infrastruktúra naplózása központosítva A feladat: A teljes IT infrastruktúra naplózása központosítva
Az nxlog naplózó rendszer 2011. Októberében lett nyílt forráskódú Letölthető a Sourceforge-ról: Multi-platform: Moduláris – Különféle funkciók betölthető modulokba szeparálva Kis erőforrásigény – Nagy teljesítmény Több-szálú párhuzamosított feldolgozás. Memóriafogyasztás néhány Mb. Több ezer hálózati kapcsolat kezelése párhuzamosan. Events per sec – százezres nagyságrend. C-ben implementálva – kicsi és gyors.
Apache access.log feldolgozása Az Apache access.log naplóját válogassuk szét a HTTP státusz kód szerint úgy, hogy a kliens és a szerver hibák külön fájlba kerüljenek. A két hibatípus naplóit a client_error.log illetve a server_error.log fájlba mentjük. 127.0.0.1 - - [14/Aug/2010:23:42:25 +0200] "GET /index.html HTTP/1.1" 200 2620 "http://localhost" "Mozilla/5.0 (X11; Linux x86_64;) Gecko/20100501 (like Firefox/3.5.9)" Az access.log fájl a Common Log Format (CLF) szerint értelmezhető. A 400-as hibakód tartomány a kliens, az 500-as a szerver hibákat jelöli.
Apache access.log feldolgozása <Input access_log> Module im_file File '/var/log/apache2/access.log' Exec if $raw_event =~ /^(\S+) (\S+) (\S+) \[([^\]]+)\] \"(\S+) (.+) HTTP.\d\.\d\" (\d+) (\S+) \"([^\"]+)\" \"([^\"]+)\"/\ { \ $Hostname = $1; \ if $3 != '-' $AccountName = $3; \ $EventTime = parsedate($4); \ $HTTPMethod = $5; \ $HTTPURL = $6; \ $HTTPResponseStatus = integer($7); \ $FileSize = $8; \ $HTTPReferer = $9; \ $HTTPUserAgent = $10; \ } </Input> nxlog.conf <Output client_error> Module om_file File '/var/log/apache2/client_error.log' Exec if ($HTTPResponseStatus < 400) or \ ($HTTPResponseStatus >= 500) drop(); </Output> <Output server_error> File '/var/log/apache2/server_error.log' Exec if ($HTTPResponseStatus < 500) drop(); <Route apache> Path access_log => client_error, server_error </Route>
Apache access.log feldolgozása <Input access_log> Module im_file File '/var/log/apache2/access.log' Exec if $raw_event =~ /^(\S+) (\S+) (\S+) \[([^\]]+)\] \"(\S+) (.+) HTTP.\d\.\d\" (\d+) (\S+) \"([^\"]+)\" \"([^\"]+)\"/\ { \ $Hostname = $1; \ if $3 != '-' $AccountName = $3; \ $EventTime = parsedate($4); \ $HTTPMethod = $5; \ $HTTPURL = $6; \ $HTTPResponseStatus = integer($7); \ $FileSize = $8; \ $HTTPReferer = $9; \ $HTTPUserAgent = $10; \ } </Input> 127.0.0.1 - - [14/Aug/2010:23:42:25 +0200] "GET /index.html HTTP/1.1" 200 2620 "http://localhost" "Mozilla/5.0 (X11; Linux x86_64;) Gecko/20100501 (like Firefox/3.5.9)"
Apache access.log feldolgozása <Input access_log> Module im_file File '/var/log/apache2/access.log' Exec if $raw_event =~ /^(\S+) (\S+) (\S+) \[([^\]]+)\] \"(\S+) (.+) HTTP.\d\.\d\" (\d+) (\S+) \"([^\"]+)\" \"([^\"]+)\"/\ { \ $Hostname = $1; \ if $3 != '-' $AccountName = $3; \ $EventTime = parsedate($4); \ $HTTPMethod = $5; \ $HTTPURL = $6; \ $HTTPResponseStatus = integer($7); \ $FileSize = $8; \ $HTTPReferer = $9; \ $HTTPUserAgent = $10; \ } </Input> <Output client_error> Module om_file File '/var/log/apache2/client_error.log' Exec if ($HTTPResponseStatus < 400) or \ ($HTTPResponseStatus >= 500) drop(); </Output> <Output server_error> File '/var/log/apache2/server_error.log' Exec if ($HTTPResponseStatus < 500) drop(); <Route apache> Path access_log => client_error, server_error </Route>
Központosított naplózáshoz EventLog MSSQL File MySQL Syslog File Heterogén környezet Különféle források Titkosított továbbítás Előfeldolgozás, mintaillesztés Tárolás adatbázisba Riportok, statisztikák, riasztások
Kérdések 5 percben? Köszönöm a figyelmet! Botyánszki Botond <boti@nxlog.org> http://nxlog.org | http://nxlog.net | http://log4ensics.com