epylog: remove/retire
We haven't used epylog in a long time, it's unmaintained upstream and never was ported to python3 that I know of. So, lets stop pretending that it is something we should keep here. Signed-off-by: Kevin Fenzi <kevin@scrye.com>
This commit is contained in:
parent
b29b23f3e9
commit
5c2d61d9f8
34 changed files with 0 additions and 3311 deletions
|
@ -535,14 +535,6 @@
|
|||
# Talk directly to the app server, not haproxy
|
||||
proxyurl: http://log01
|
||||
|
||||
- role: httpd/reverseproxy
|
||||
website: admin.fedoraproject.org
|
||||
destname: epylog
|
||||
remotepath: /epylog
|
||||
localpath: /epylog
|
||||
# Talk directly to the app server, not haproxy
|
||||
proxyurl: http://log01
|
||||
|
||||
- role: httpd/reverseproxy
|
||||
website: admin.fedoraproject.org
|
||||
destname: maps
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#!/bin/sh
|
||||
# Run epylog daily.
|
||||
#
|
||||
# just disable this so we don't run the global one anywhere
|
||||
# better to run a specific one (or ones)
|
||||
#/usr/sbin/epylog --cron
|
|
@ -1 +0,0 @@
|
|||
30 2,8,14,20 * * * root /usr/sbin/epylog --cron -c /etc/epylog/merged/epylog.conf --last 6h
|
|
@ -1,18 +0,0 @@
|
|||
Alias /epylog /srv/web/epylog
|
||||
|
||||
# need these to do the auth
|
||||
LoadModule auth_basic_module modules/mod_auth_basic.so
|
||||
LoadModule authn_file_module modules/mod_authn_file.so
|
||||
|
||||
<Directory /srv/web/epylog>
|
||||
Options FollowSymLinks Indexes
|
||||
AuthName "Epylog GSSAPI Login"
|
||||
GssapiCredStore keytab:/etc/krb5.HTTP_admin.fedoraproject.org.keytab
|
||||
AuthType GSSAPI
|
||||
# This is off because Apache (and thus mod_auth_gssapi) doesn't know this is proxied over TLS
|
||||
GssapiSSLonly Off
|
||||
GssapiLocalName on
|
||||
# This should coincide with sysadmin-logs until we have group info
|
||||
Require user codeblock kevin puiterwijk ralph nb cydrobolt
|
||||
</Directory>
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
##
|
||||
# Main Epylog configuration file. See epylog.conf(5) for more info.
|
||||
#
|
||||
[main]
|
||||
cfgdir = /etc/epylog/merged
|
||||
tmpdir = /var/log/tmp
|
||||
vardir = /var/lib/epylog/merged
|
||||
|
||||
[report]
|
||||
title = Merged system events: @@LOCALTIME@@
|
||||
template = /etc/epylog/merged/report_template.html
|
||||
include_unparsed = yes
|
||||
publishers = file
|
||||
|
||||
[mail]
|
||||
method = mail
|
||||
smtpserv = /usr/sbin/sendmail -t
|
||||
mailto = sysadmin-logs-members@fedoraproject.org
|
||||
format = plain
|
||||
lynx = /usr/bin/lynx
|
||||
include_rawlogs = no
|
||||
rawlogs_limit = 200
|
||||
|
||||
[file]
|
||||
method = file
|
||||
path = /srv/web/epylog/merged/
|
||||
dirmask = %Y-%b-%d_%a
|
||||
filemask = %H%M
|
||||
expire_in = 7
|
||||
notify = sysadmin-logs-members@fedoraproject.org
|
||||
smtpserv = /usr/sbin/sendmail -t
|
||||
pubroot = https://admin.fedoraproject.org/epylog/merged
|
|
@ -1,14 +0,0 @@
|
|||
[module]
|
||||
desc = Common Unparsed Similar Strings Module
|
||||
exec = /usr/share/epylog/modules/common_unparsed_mod.py
|
||||
files = /var/log/merged/messages.log[.#.gz], /var/log/merged/secure.log[.#.gz]
|
||||
enabled = no
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 10
|
||||
|
||||
|
||||
[conf]
|
||||
# how similar the strings need to be 0-100 - 0 being not at all (bad idea) 100 being almost exactly.
|
||||
match_percentage = 95
|
||||
debug_dump = 0
|
|
@ -1,10 +0,0 @@
|
|||
[module]
|
||||
desc = KojiLoad summary
|
||||
exec = /usr/share/epylog/modules/kojiload_mod.py
|
||||
files = /var/log/merged/messages.log[.#.gz]
|
||||
enabled = yes
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 7
|
||||
|
||||
[conf]
|
|
@ -1,50 +0,0 @@
|
|||
[module]
|
||||
desc = Logins
|
||||
exec = /usr/share/epylog/modules/logins_mod.py
|
||||
files = /var/log/merged/messages.log[.#.gz], /var/log/merged/secure.log[.#.gz]
|
||||
enabled = yes
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 0
|
||||
|
||||
[conf]
|
||||
##
|
||||
# Only enable things useful for your configuration to speed things
|
||||
# up. The more stuff you enable, the slower matching will be.
|
||||
#
|
||||
enable_pam = 1
|
||||
enable_xinetd = 1
|
||||
enable_sshd = 1
|
||||
enable_uw_imap = 0
|
||||
enable_dovecot = 0
|
||||
enable_courier = 0
|
||||
enable_imp = 0
|
||||
enable_proftpd = 0
|
||||
##
|
||||
# This is a fun setting. You can list domains that are "safe" here.
|
||||
# E.g. if your org's domain is example.com and you generally don't
|
||||
# expect logins from hosts in example.com domain to be suspicious, you
|
||||
# can add "example.com$" as a safe domain. This way anyone logging in from
|
||||
# a remote host not matching *.example.com will be flagged in red and the
|
||||
# full hostname of the connecting machine will be printed in the report.
|
||||
# List multiple values separated by comma.
|
||||
# E.g.: safe_domains = example.com$, foo.edu$
|
||||
# The default is .*, meaning all domains are considered safe. To turn
|
||||
# this off specify something like:
|
||||
# safe_domains = !.*
|
||||
safe_domains = .*
|
||||
##
|
||||
# If you have too many systems, wide-scale probing may turn ugly. This
|
||||
# will collapse the reports.
|
||||
systems_collapse = 10
|
||||
|
||||
|
||||
# comma/space separated list of users to ignore - unknown is the internal "no user given"
|
||||
ignore_users = unknown
|
||||
# path to where we keep the logins db
|
||||
loginsdb_path = /var/lib/epylog/logins_db.sqlite
|
||||
# clean up entries in the db which are more than this many days old
|
||||
remove_older_than = 14
|
||||
# time fuzz - default time (in minutes) which is valid fuzzy match for a login to not be listed
|
||||
time_fuzz = 60
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
[module]
|
||||
desc = Mail Report
|
||||
exec = /usr/share/epylog/modules/mail_mod.py
|
||||
files = /var/log/merged/mail.log[.#.gz]
|
||||
enabled = no
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 5
|
||||
|
||||
[conf]
|
||||
##
|
||||
# Enable sendmail, postfix, or both
|
||||
#
|
||||
enable_sendmail = 1
|
||||
enable_postfix = 1
|
||||
enable_qmail = 0
|
||||
##
|
||||
# Report at most this many "top things"
|
||||
#
|
||||
top_report_limit = 5
|
|
@ -1,26 +0,0 @@
|
|||
[module]
|
||||
desc = Notices
|
||||
exec = /usr/share/epylog/modules/notices_mod.py
|
||||
files = /var/log/merged/messages.log[.#.gz], /var/log/merged/secure.log[.#.gz]
|
||||
enabled = yes
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 7
|
||||
|
||||
[conf]
|
||||
##
|
||||
# Where is your notice_dist.xml file?
|
||||
#
|
||||
notice_dist = /etc/epylog/merged/notice_dist.xml
|
||||
##
|
||||
# Add your own notices into notice_local.xml, not into notice_dist.xml!
|
||||
# This way you don't risk missing future revisions to notice_dist.xml
|
||||
#
|
||||
notice_local = /etc/epylog/merged/notice_local.xml
|
||||
##
|
||||
# You can list the ids of <notice> members from notice_dist.xml here
|
||||
# namely, or you can use ALL to enable all of them. There is no need
|
||||
# to add members from notice_local.xml here -- they will be enabled
|
||||
# automatically.
|
||||
#
|
||||
enable = ALL
|
|
@ -1,33 +0,0 @@
|
|||
[module]
|
||||
desc = Packet Filter
|
||||
exec = /usr/share/epylog/modules/packets_mod.py
|
||||
files = /var/log/merged/messages.log[.#.gz]
|
||||
enabled = yes
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 1
|
||||
|
||||
[conf]
|
||||
##
|
||||
# Where to look for the trojans list.
|
||||
#
|
||||
trojan_list = /etc/epylog/merged/trojans.list
|
||||
##
|
||||
# If a remote host hits this many systems, then don't list them namely,
|
||||
# but collapse them into a nice report, e.g.: [50 hosts]
|
||||
#
|
||||
systems_collapse = 5
|
||||
##
|
||||
# Useful for massive portscans. Don't list all the ports namely, but
|
||||
# present them in a collapsed view. E.g.: [50 ports]
|
||||
ports_collapse = 5
|
||||
##
|
||||
# Enable iptables, ipchains, ipfilter, or all three.
|
||||
#
|
||||
enable_iptables = 1
|
||||
enable_ipchains = 1
|
||||
enable_ipfilter = 0
|
||||
##
|
||||
# Sort by any of the following: packets, source, system, port
|
||||
#
|
||||
sortby=port
|
|
@ -1,16 +0,0 @@
|
|||
[module]
|
||||
desc = Rsyncd
|
||||
exec = /usr/share/epylog/modules/rsyncd_mod.py
|
||||
files = /var/log/merged/messages.log[.#.gz]
|
||||
enabled = yes
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 7
|
||||
|
||||
[conf]
|
||||
##
|
||||
# Report this many "top ranking hosts"
|
||||
#
|
||||
report_top = 10
|
||||
ignore_hosts = log01.vpn.fedoraproject.org log01.phx2.fedoraproject.org proxy01.phx2.fedoraproject.org proxy02.vpn.fedoraproject.org proxy03.vpn.fedoraproject.org proxy04.vpn.fedoraproject.org proxy05.vpn.fedoraproject.org proxy06.vpn.fedoraproject.org proxy07.vpn.fedoraproject.org proxy08.vpn.fedoraproject.org proxy09.vpn.fedoraproject.org proxy10.phx2.fedoraproject.org proxy11.phx2.fedoraproject.org proxy12.vpn.fedoraproject.org proxy14.vpn.fedoraproject.org collab04.fedoraproject.org hosted04.fedoraproject.org admin.fedoraproject.org proxy01.stg.phx2.fedoraproject.org proxy30.vpn.fedoraproject.org proxy31.vpn.fedoraproject.org
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
[module]
|
||||
desc = SELinux Report
|
||||
exec = /usr/share/epylog/modules/selinux_mod.py
|
||||
files = /var/log/merged/messages.log[.#.gz]
|
||||
enabled = yes
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 5
|
||||
|
||||
[conf]
|
||||
enable_selinux = 1
|
|
@ -1,28 +0,0 @@
|
|||
[module]
|
||||
desc = Spamassassin
|
||||
exec = /usr/share/epylog/modules/spamd_mod.py
|
||||
files = /var/log/merged/mail.log[.#.gz]
|
||||
enabled = no
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 7
|
||||
|
||||
[conf]
|
||||
##
|
||||
# Report this many "top ranking users"
|
||||
#
|
||||
report_top = 10
|
||||
##
|
||||
# Consider this the spam threshold when reporting the scores.
|
||||
# Anything above this will be flagged as spam. The last column shows
|
||||
# the score and then non-spam/spam in the parenthesis. E.g.:
|
||||
# -1.3 (10/3) -- the mean score is -1.3, 10 messages under spam_threshold,
|
||||
# and 3 messages over it.
|
||||
#
|
||||
spam_threshold = 5
|
||||
##
|
||||
# Rank the top users according to this parameter. Valid entries are:
|
||||
# "most spammed" -- sorts by users with the topmost score
|
||||
# "most messages" -- sorts by users who received most messages
|
||||
#
|
||||
sort_by = most spammed
|
|
@ -1,11 +0,0 @@
|
|||
[module]
|
||||
desc = Sudo Report
|
||||
exec = /usr/share/epylog/modules/sudo_mod.py
|
||||
files = /var/log/merged/secure.log[.#.gz]
|
||||
enabled = yes
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 5
|
||||
|
||||
[conf]
|
||||
enable_sudo = 1
|
|
@ -1,30 +0,0 @@
|
|||
[module]
|
||||
desc = Weedeater
|
||||
exec = /usr/share/epylog/modules/weeder_mod.py
|
||||
files = /var/log/merged/messages.log[.#.gz], /var/log/merged/secure.log[.#.gz]
|
||||
enabled = yes
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 9
|
||||
|
||||
[conf]
|
||||
##
|
||||
# Where to look for a weed_dist.cf file.
|
||||
#
|
||||
weed_dist = /etc/epylog/merged/weed_dist.cf
|
||||
##
|
||||
# Where to look for a weed_local.cf file
|
||||
#
|
||||
weed_local = /etc/epylog/merged/weed_local.cf
|
||||
##
|
||||
# This is where it gets interesting.
|
||||
# If you look into weed_dist.cf, you will notice that the entries
|
||||
# are listed by section titles. List here only the sections that are
|
||||
# relevant to your setup to speed things up. The more sections you
|
||||
# enable, the slower matching will go, as it has to try more
|
||||
# regexes. Note that [ADD] and [REMOVE] sections in weed_local are
|
||||
# special, any other sections in that file will be ignored.
|
||||
#
|
||||
# You can use 'ALL' to enable all sections.
|
||||
#
|
||||
enable = ALL
|
|
@ -1,87 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
|
||||
CAUTION:
|
||||
It is not advised to edit this file! You may miss any future
|
||||
revisions made to it. Instead, create/edit notice_local.xml and
|
||||
add your rules to it following the same XML layout as presented in
|
||||
this file. All members of notice_local.xml will be added
|
||||
indiscriminately, i.e. you don't have to specify the id of the
|
||||
<notice> in notices.conf: any notices added in notice_local.xml
|
||||
will be enabled in the module automatically.
|
||||
|
||||
$Revision: 1.4.2.5 $
|
||||
|
||||
-->
|
||||
<notices>
|
||||
<notice id="gconfd">
|
||||
<regex>gconfd.*: Failed to get lock.*Failed to create</regex>
|
||||
<regex>gconfd.*: Error releasing lockfile</regex>
|
||||
<regex>gconfd.*: .* Could not lock temporary file</regex>
|
||||
<regex>gconfd.*: .* another process has the lock</regex>
|
||||
<report>GConf locking errors</report>
|
||||
</notice>
|
||||
|
||||
<notice id="fatalx">
|
||||
<regex>Fatal X error</regex>
|
||||
<report>Fatal X errors</report>
|
||||
</notice>
|
||||
|
||||
<notice id="floppy">
|
||||
<regex>floppy0:|\(floppy\)</regex>
|
||||
<report>Misc floppy errors</report>
|
||||
</notice>
|
||||
|
||||
<notice id="ypserv">
|
||||
<regex>ypserv.*:\srefused\sconnect\sfrom\s(\S+):\d+\sto\sprocedure\s(\S+)</regex>
|
||||
<report>%s denied for %s</report>
|
||||
</notice>
|
||||
|
||||
<notice id="linux_boot" critical="yes">
|
||||
<regex>kernel:\sLinux\sversion\s(\S*)</regex>
|
||||
<report>Rebooted with Linux kernel %s</report>
|
||||
</notice>
|
||||
|
||||
<notice id="cdrom_vfs">
|
||||
<regex>VFS: busy inodes on changed media</regex>
|
||||
<report>dirty CDROM mount</report>
|
||||
</notice>
|
||||
|
||||
<notice id="cdrom">
|
||||
<regex>kernel: cdrom: This disc doesn</regex>
|
||||
<regex>kernel: .*Make sure there is a disc in the drive.</regex>
|
||||
<report>Misc CDROM errors</report>
|
||||
</notice>
|
||||
|
||||
<notice id="dirty_floppy">
|
||||
<regex>attempt to access beyond end of device</regex>
|
||||
<regex>rw=\d+, want=\d+, limit=\d+</regex>
|
||||
<regex>Directory sread .* failed</regex>
|
||||
<regex>kernel: bread in fat_access failed</regex>
|
||||
<report>Dirty floppy mount [non-indicative]</report>
|
||||
</notice>
|
||||
|
||||
<notice id="nfs_timeout" critical="yes">
|
||||
<regex>nfs: server (\S+) not responding</regex>
|
||||
<regex>nfs: server (\S+) OK</regex>
|
||||
<report>NFS timeouts to server %s</report>
|
||||
</notice>
|
||||
|
||||
<notice id="insmod">
|
||||
<regex>insmod: Hint: insmod errors</regex>
|
||||
<report>insmod errors</report>
|
||||
</notice>
|
||||
|
||||
<notice id="selinux-denied">
|
||||
<regex>audit\S+:\s+avc:\s+denied\s+\{\s([^\}]+)\s\}.*exe=(\S+).*scontext=(\S+)</regex>
|
||||
<report>SELinux: denied "%s" for "%s" (scontext=%s)</report>
|
||||
</notice>
|
||||
|
||||
<notice id="crond">
|
||||
<regex>CROND\S+: \((\S+)\) CMD \(([^\)]+)\)</regex>
|
||||
<regex>crond\S+: \((\S+)\) CMD \(([^\)]+)\)</regex>
|
||||
<report>Cron: user '%s' (%s)</report>
|
||||
</notice>
|
||||
|
||||
</notices>
|
||||
|
|
@ -1,94 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
|
||||
This is where you should put your own notice rules. The format is
|
||||
simple:
|
||||
<notice id="uniqueid" [critical="yes"]>
|
||||
<regex>python compliant regex string</regex>
|
||||
<regex>another regex, if more than one string is needed</regex>
|
||||
<report>What should go into the report</report>
|
||||
</notice>
|
||||
|
||||
See notice_dist.xml for examples. Any custom notices you add here do
|
||||
not need to be added into the notices.conf file, as they will be
|
||||
enabled automatically.
|
||||
|
||||
-->
|
||||
|
||||
<notices>
|
||||
<notice id="oom-killer">
|
||||
<regex>kernel: (\S+) invoked oom-killer.*</regex>
|
||||
<report>%s invoked oom-killer - see unparsed</report>
|
||||
</notice>
|
||||
|
||||
<notice id="kerneltrace" critical="yes">
|
||||
<regex>kernel: Call Trace</regex>
|
||||
<report>kernel call trace - see unparsed for details</report>
|
||||
</notice>
|
||||
<!--
|
||||
<notice id="auditd-down" critical="yes">
|
||||
<regex>kernel: type=.*audit\(.*</regex>
|
||||
<report>auditd appears to be down</report>
|
||||
</notice>
|
||||
-->
|
||||
|
||||
<notice id="Rootkit-hunter-warning" critical="yes">
|
||||
<regex>Rootkit Hunter:.*Please inspect this machine, because it may be infected.*</regex>
|
||||
<report>Rootkit Hunter has noticed a potential issue</report>
|
||||
</notice>
|
||||
<notice id="brokenpuppetnodetyaml">
|
||||
<regex>puppet_yamltest: cleaning damaged puppet yaml file:(.*)</regex>
|
||||
<report>Corrupted yaml file %s</report>
|
||||
</notice>
|
||||
<notice id="nf_conntrack" critical="yes">
|
||||
<regex>kernel: nf_conntrack: table full.*</regex>
|
||||
<report>Connection tracking table full.</report>
|
||||
</notice>
|
||||
|
||||
<notice id="openvpn_reconnect" critical="yes">
|
||||
<regex>openvpn\[\d+\]: .*:\d+ \[(.*)\] Peer Connection Initiated with .*:\d+</regex>
|
||||
<report>openvpn [re]connect from %s.</report>
|
||||
</notice>
|
||||
|
||||
<notice id="openvpn_tls_failed" critical="yes">
|
||||
<regex>openvpn\[\d+\]: (.*)/.* TLS Error: TLS handshake failed</regex>
|
||||
<report>openvpn TLS handshake failed: %s</report>
|
||||
</notice>
|
||||
<notice id="openvpn_tls_failed_time" critical="yes">
|
||||
<regex>openvpn\[\d+\]: (.*)/.* TLS Error: TLS key negotiation failed ot occur within.*</regex>
|
||||
<report>openvpn TLS handshake failed - timeout: %s</report>
|
||||
</notice>
|
||||
<notice id="openvpn_bad_packet_id" critical="yes">
|
||||
<regex>openvpn\[\d+\]: (.*)/.* Authenticate/Decrypt packet error: bad packet ID.*</regex>
|
||||
<report>openvpn auth/decrypt - bad packet id: %s</report>
|
||||
</notice>
|
||||
|
||||
<notice id="stunnel_websocket" critical="no">
|
||||
<regex>stunnel:.*websockets accepted connection from (.*):.*</regex>
|
||||
<report>stunnel: websocket connection from %s</report>
|
||||
</notice>
|
||||
|
||||
<notice id="nagios_alerts" critical="yes">
|
||||
<regex>nagios:.*HOST.*ALERT:.*</regex>
|
||||
<report>nagios alerts: </report>
|
||||
</notice>
|
||||
|
||||
<notice id="nagios_pages" critical="yes">
|
||||
<regex>nagios:.*HOST.*NOTIFICATION:.*kevin-emergency.*</regex>
|
||||
<report>nagios pages: </report>
|
||||
</notice>
|
||||
|
||||
<notice id="totp-success">
|
||||
<regex>totp\.cgi.*: Success: user=(\S+),.*host=(\S+),</regex>
|
||||
<report>totpcgi: %s from %s (Success)</report>
|
||||
</notice>
|
||||
<notice id="totp-failure" critical="yes">
|
||||
<regex>totp\.cgi.*: Failure: user=(\S+),.*host=(\S+),</regex>
|
||||
<report>totpcgi: %s from %s (Failure)</report>
|
||||
</notice>
|
||||
<notice id="EXT4-error" critical="yes">
|
||||
<regex>kernel:.* EXT4-fs error.*</regex>
|
||||
<report>EXT4 Error/disk failure noticed</report>
|
||||
</notice>
|
||||
</notices>
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>@@TITLE@@</title>
|
||||
<style type="text/css">
|
||||
h1 {color: gray; border-bottom: 3px double silver}
|
||||
h2,h3 {color: gray; border-bottom: 1px solid silver}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>@@HOSTNAME@@</h1>
|
||||
<p>First event: <strong>@@STARTTIME@@</strong><br />
|
||||
Last event: <strong>@@ENDTIME@@</strong></p>
|
||||
<hr />
|
||||
@@MODULE_REPORTS@@
|
||||
<hr />
|
||||
<h2>Unparsed Strings:</h2>
|
||||
@@UNPARSED_STRINGS@@
|
||||
<hr />
|
||||
<p align="right">Brought to you by
|
||||
<a href="http://linux.duke.edu/projects/epylog/">@@VERSION@@</a></p>
|
||||
</body>
|
||||
</html>
|
|
@ -1,410 +0,0 @@
|
|||
1/udp Sockets des Troie
|
||||
2/tcp Death
|
||||
30/tcp Agent 40421
|
||||
31/tcp Agent 31
|
||||
41/tcp Deep Throat
|
||||
48/tcp DRAT
|
||||
58/tcp DMSetup
|
||||
59/tcp DMSetup
|
||||
79/tcp CDK
|
||||
81/tcp RemoConChubo
|
||||
99/tcp Hidden Port
|
||||
121/tcp Attack Bot
|
||||
133/tcp Farnaz
|
||||
142/tcp NetTaxi
|
||||
146/tcp Infector
|
||||
146/udp Infector
|
||||
170/tcp A-trojan
|
||||
334/tcp Backage
|
||||
411/tcp Backage
|
||||
420/tcp Breach
|
||||
421/tcp TCP Wrappers trojan
|
||||
455/tcp Fatal Connections
|
||||
456/tcp Hackers Paradise
|
||||
513/tcp Grlogin
|
||||
514/tcp RPC Backdoor
|
||||
531/tcp Net666, Rasmin
|
||||
555/tcp Seven-Eleven
|
||||
605/tcp Secret Service
|
||||
666/tcp The Ripperz
|
||||
667/tcp SniperNet
|
||||
669/tcp DP trojan
|
||||
692/tcp GayOL
|
||||
777/tcp AimSpy
|
||||
808/tcp WinHole
|
||||
911/tcp Dark Shadow
|
||||
999/tcp Deep Throat
|
||||
1000/tcp Der Spaeher
|
||||
1001/tcp Der Spaeher
|
||||
1010/tcp Doly Trojan
|
||||
1011/tcp Doly Trojan
|
||||
1012/tcp Doly Trojan
|
||||
1015/tcp Doly Trojan
|
||||
1016/tcp Doly Trojan
|
||||
1020/tcp Vampire
|
||||
1024/tcp NetSpy
|
||||
1025/tcp Remote Storm
|
||||
1025/udp Remote Storm
|
||||
1035/tcp Multidropper
|
||||
1042/tcp BLA trojan
|
||||
1045/tcp Rasmin
|
||||
1049/tcp /sbin/initd
|
||||
1050/tcp MiniCommand
|
||||
1053/tcp The Thief
|
||||
1054/tcp AckCmd
|
||||
1080/tcp WinHole
|
||||
1081/tcp WinHole
|
||||
1082/tcp WinHole
|
||||
1083/tcp WinHole
|
||||
1090/tcp Xtreme
|
||||
1095/tcp RAT
|
||||
1097/tcp RAT
|
||||
1098/tcp RAT
|
||||
1099/tcp RAT
|
||||
1150/tcp Orion
|
||||
1151/tcp Orion
|
||||
1170/tcp PSS
|
||||
1200/udp NoBackO
|
||||
1201/udp NoBackO
|
||||
1207/tcp SoftWAR
|
||||
1208/tcp Infector
|
||||
1212/tcp Kaos
|
||||
1234/tcp SubSeven
|
||||
1243/tcp BackDoor-G
|
||||
1245/tcp VooDoo Doll
|
||||
1255/tcp Scarab
|
||||
1256/tcp Project nEXT
|
||||
1269/tcp Matrix
|
||||
1272/tcp The Matrix
|
||||
1313/tcp NETrojan
|
||||
1338/tcp Millenium Worm
|
||||
1349/tcp Bo dll
|
||||
1394/tcp GoFriller
|
||||
1441/tcp Remote Storm
|
||||
1492/tcp FTP99CMP
|
||||
1524/tcp Trinoo
|
||||
1568/tcp Remote Hack
|
||||
1600/tcp Shivka-Burka
|
||||
1703/tcp Exploiter
|
||||
1777/tcp Scarab
|
||||
1807/tcp SpySender
|
||||
1966/tcp Fake FTP
|
||||
1967/tcp WM FTP Server
|
||||
1969/tcp OpC BO
|
||||
1981/tcp Bowl, Shockrave
|
||||
1999/tcp SubSeven
|
||||
2000/tcp Der Spaeher
|
||||
2001/tcp Der Späher
|
||||
2023/tcp Ripper Pro
|
||||
2080/tcp WinHole
|
||||
2115/tcp Bugs
|
||||
2130/udp Mini Backlash
|
||||
2140/tcp The Invasor
|
||||
2140/udp Deep Throat
|
||||
2155/tcp Illusion Mailer
|
||||
2255/tcp Nirvana
|
||||
2283/tcp Hvl RAT
|
||||
2300/tcp Xplorer
|
||||
2311/tcp Studio 54
|
||||
2330/tcp Contact
|
||||
2331/tcp Contact
|
||||
2332/tcp Contact
|
||||
2333/tcp Contact
|
||||
2334/tcp Contact
|
||||
2335/tcp Contact
|
||||
2336/tcp Contact
|
||||
2337/tcp Contact
|
||||
2338/tcp Contact
|
||||
2339/tcp Contact
|
||||
2339/udp Voice Spy
|
||||
2345/tcp Doly Trojan
|
||||
2565/tcp Striker trojan
|
||||
2583/tcp WinCrash
|
||||
2600/tcp Digital RootBeer
|
||||
2716/tcp The Prayer
|
||||
2773/tcp SubSeven
|
||||
2774/tcp SubSeven
|
||||
2801/tcp Phineas Phucker
|
||||
2989/udp RAT
|
||||
3000/tcp Remote Shut
|
||||
3024/tcp WinCrash
|
||||
3031/tcp Microspy
|
||||
3128/tcp Ringzero
|
||||
3129/tcp Masters Paradise
|
||||
3150/tcp The Invasor
|
||||
3150/udp Deep Throat
|
||||
3456/tcp Terror trojan
|
||||
3459/tcp Eclipse 2000
|
||||
3700/tcp Portal of Doom
|
||||
3777/tcp PsychWard
|
||||
3791/tcp Total Solar Eclypse
|
||||
3801/tcp Total Solar Eclypse
|
||||
4000/tcp SkyDance
|
||||
4092/tcp WinCrash
|
||||
4242/tcp VHM
|
||||
4321/tcp BoBo
|
||||
4444/tcp Prosiak
|
||||
4567/tcp File Nail
|
||||
4590/tcp ICQ Trojan
|
||||
4950/tcp ICQ Trogen (Lm)
|
||||
5000/tcp Back Door Setup
|
||||
5001/tcp Back Door Setup
|
||||
5002/tcp cd00r
|
||||
5010/tcp Solo
|
||||
5011/tcp OOTLT
|
||||
5025/tcp WM Remote KeyLogger
|
||||
5031/tcp Net Metropolitan
|
||||
5032/tcp Net Metropolitan
|
||||
5321/tcp Firehotcker
|
||||
5333/tcp Backage
|
||||
5343/tcp wCrat
|
||||
5400/tcp Back Construction
|
||||
5401/tcp Back Construction
|
||||
5402/tcp Back Construction
|
||||
5512/tcp Illusion Mailer
|
||||
5534/tcp The Flu
|
||||
5550/tcp Xtcp
|
||||
5555/tcp ServeMe
|
||||
5556/tcp BO Facil
|
||||
5557/tcp BO Facil
|
||||
5569/tcp Robo-Hack
|
||||
5637/tcp PC Crasher
|
||||
5638/tcp PC Crasher
|
||||
5742/tcp WinCrash
|
||||
5760/tcp Portmap Remote Root Linux Exploit
|
||||
5880/tcp Y3K RAT
|
||||
5882/tcp Y3K RAT
|
||||
5882/udp Y3K RAT
|
||||
5888/tcp Y3K RAT
|
||||
5888/udp Y3K RAT
|
||||
5889/tcp Y3K RAT
|
||||
6000/tcp The Thing
|
||||
6006/tcp Bad Blood
|
||||
6272/tcp Secret Service
|
||||
6400/tcp The Thing
|
||||
6661/tcp TEMan
|
||||
6666/tcp Dark Connection Inside
|
||||
6667/tcp Dark FTP
|
||||
6669/tcp Host Control, Vampire
|
||||
6670/tcp BackWeb Server
|
||||
6711/tcp BackDoor-G
|
||||
6712/tcp Funny trojan
|
||||
6713/tcp SubSeven
|
||||
6723/tcp Mstream
|
||||
6771/tcp Deep Throat
|
||||
6776/tcp 2000 Cracks
|
||||
6838/udp Mstream
|
||||
6883/tcp Delta Source DarkStar (??)
|
||||
6912/tcp Shit Heep
|
||||
6939/tcp Indoctrination
|
||||
6969/tcp GateCrasher
|
||||
6970/tcp GateCrasher
|
||||
7000/tcp Exploit Translation Server
|
||||
7001/tcp Freak88
|
||||
7215/tcp SubSeven
|
||||
7300/tcp NetMonitor
|
||||
7301/tcp NetMonitor
|
||||
7306/tcp NetMonitor
|
||||
7307/tcp NetMonitor
|
||||
7308/tcp NetMonitor
|
||||
7424/tcp Host Control
|
||||
7424/udp Host Control
|
||||
7597/tcp Qaz
|
||||
7626/tcp Glacier
|
||||
7777/tcp God Message, Tini
|
||||
7789/tcp Back Door Setup, ICKiller
|
||||
7891/tcp The ReVeNgEr
|
||||
7983/tcp Mstream
|
||||
8080/tcp Brown Orifice
|
||||
8787/tcp Back Orifice 2000
|
||||
8988/tcp BacHack
|
||||
8989/tcp Rcon
|
||||
9000/tcp Netministrator
|
||||
9325/udp Mstream
|
||||
9400/tcp InCommand
|
||||
9872/tcp Portal of Doom
|
||||
9873/tcp Portal of Doom
|
||||
9874/tcp Portal of Doom
|
||||
9875/tcp Portal of Doom
|
||||
9876/tcp Cyber Attacker, Rux
|
||||
9878/tcp TransScout
|
||||
9989/tcp Ini-Killer
|
||||
9999/tcp The Prayer
|
||||
10000/tcp OpwinTRojan
|
||||
10005/tcp OpwinTRojan
|
||||
10067/udp Portal of Doom
|
||||
10085/tcp Syphillis
|
||||
10086/tcp Syphillis
|
||||
10100/tcp Control Total
|
||||
10101/tcp BrainSpy
|
||||
10167/udp Portal of Doom
|
||||
10520/tcp Acid Shivers
|
||||
10528/tcp Host Control
|
||||
10607/tcp Coma
|
||||
10666/udp Ambush
|
||||
11000/tcp Senna Spy Trojan Generator
|
||||
11050/tcp Host Control
|
||||
11051/tcp Host Control
|
||||
11223/tcp Progenic trojan
|
||||
12076/tcp Gjamer
|
||||
12223/tcp Hack-99 KeyLogger
|
||||
12345/tcp Ashley
|
||||
12346/tcp Fat Bitch
|
||||
12349/tcp BioNet
|
||||
12361/tcp Whack-a-mole
|
||||
12362/tcp Whack-a-mole
|
||||
12363/tcp Whack-a-mole
|
||||
12623/udp DUN Control
|
||||
12624/tcp ButtMan
|
||||
12631/tcp Whack Job
|
||||
12754/tcp Mstream
|
||||
13000/tcp Senna Spy
|
||||
13010/tcp Hacker Brasil - HBR
|
||||
13013/tcp PsychWard
|
||||
13014/tcp PsychWard
|
||||
13223/tcp Hack´99 KeyLogger
|
||||
13473/tcp Chupacabra
|
||||
14500/tcp PC Invader
|
||||
14501/tcp PC Invader
|
||||
14502/tcp PC Invader
|
||||
14503/tcp PC Invader
|
||||
15000/tcp NetDemon
|
||||
15092/tcp Host Control
|
||||
15104/tcp Mstream
|
||||
15382/tcp SubZero
|
||||
15858/tcp CDK
|
||||
16484/tcp Mosucker
|
||||
16660/tcp Stacheldraht
|
||||
16772/tcp ICQ Revenge
|
||||
16959/tcp SubSeven
|
||||
16969/tcp Priority
|
||||
17166/tcp Mosaic
|
||||
17300/tcp Kuang2 the virus
|
||||
17449/tcp Kid Terror
|
||||
17499/tcp CrazzyNet
|
||||
17500/tcp CrazzyNet
|
||||
17569/tcp Infector
|
||||
17593/tcp Audiodoor
|
||||
17777/tcp Nephron
|
||||
18753/udp Shaft
|
||||
19864/tcp ICQ Revenge
|
||||
20000/tcp Millenium
|
||||
20001/tcp Millenium
|
||||
20002/tcp AcidkoR
|
||||
20005/tcp Mosucker
|
||||
20023/tcp VP Killer
|
||||
20034/tcp NetBus
|
||||
20203/tcp Chupacabra
|
||||
20331/tcp BLA trojan
|
||||
20432/tcp Shaft
|
||||
20433/udp Shaft
|
||||
21544/tcp GirlFriend, Kid Terror
|
||||
21554/tcp Exploiter
|
||||
22222/tcp Donald Dick
|
||||
23005/tcp NetTrash
|
||||
23006/tcp NetTrash
|
||||
23023/tcp Logged
|
||||
23032/tcp Amanda
|
||||
23432/tcp Asylum
|
||||
23456/tcp Evil FTP
|
||||
23476/tcp Donald Dick
|
||||
23476/udp Donald Dick
|
||||
23477/tcp Donald Dick
|
||||
23777/tcp InetSpy
|
||||
24000/tcp Infector
|
||||
25685/tcp Moonpie
|
||||
25686/tcp Moonpie
|
||||
25982/tcp Moonpie
|
||||
26274/udp Delta Source
|
||||
26681/tcp Voice Spy
|
||||
27374/tcp Bad Blood
|
||||
27444/udp Trinoo
|
||||
27573/tcp SubSeven
|
||||
27665/tcp Trinoo
|
||||
28678/tcp Exploiter
|
||||
29104/tcp NetTrojan
|
||||
29369/tcp ovasOn
|
||||
29891/tcp The Unexplained
|
||||
30000/tcp Infector
|
||||
30001/tcp ErrOr32
|
||||
30003/tcp Lamers Death
|
||||
30029/tcp AOL trojan
|
||||
30100/tcp NetSphere
|
||||
30101/tcp NetSphere
|
||||
30102/tcp NetSphere
|
||||
30103/tcp NetSphere
|
||||
30103/udp NetSphere
|
||||
30133/tcp NetSphere
|
||||
30303/tcp Sockets des Troie
|
||||
30947/tcp Intruse
|
||||
30999/tcp Kuang2
|
||||
31335/tcp Trinoo
|
||||
31336/tcp Bo Whack, Butt Funnel
|
||||
31337/tcp Back Fire
|
||||
31337/udp Back Orifice
|
||||
31338/tcp Back Orifice
|
||||
31338/udp Deep BO
|
||||
31339/tcp NetSpy (DK)
|
||||
31666/tcp BOWhack
|
||||
31785/tcp Hack´a´Tack
|
||||
31787/tcp Hack´a´Tack
|
||||
31788/tcp Hack´a´Tack
|
||||
31789/udp Hack´a´Tack
|
||||
31790/tcp Hack´a´Tack
|
||||
31791/udp Hack´a´Tack
|
||||
31792/tcp Hack´a´Tack
|
||||
32001/tcp Donald Dick
|
||||
32100/tcp Peanut Brittle
|
||||
32418/tcp Acid Battery
|
||||
33270/tcp Trinity
|
||||
33333/tcp Blakharaz
|
||||
33577/tcp Son of PsychWard
|
||||
33777/tcp Son of PsychWard
|
||||
33911/tcp Spirit 2000
|
||||
34324/tcp Big Gluck
|
||||
34444/tcp Donald Dick
|
||||
34555/udp Trinoo
|
||||
35555/udp Trinoo
|
||||
37237/tcp Mantis
|
||||
37651/tcp Yet Another Trojan - YAT
|
||||
40412/tcp The Spy
|
||||
40421/tcp Agent 40421
|
||||
40422/tcp Masters Paradise
|
||||
40423/tcp Masters Paradise
|
||||
40425/tcp Masters Paradise
|
||||
40426/tcp Masters Paradise
|
||||
41337/tcp Storm
|
||||
41666/tcp RBT
|
||||
44444/tcp Prosiak
|
||||
44575/tcp Exploiter
|
||||
47262/udp Delta Source
|
||||
49301/tcp OnLine KeyLogger
|
||||
50130/tcp Enterprise
|
||||
50505/tcp Sockets des Troie
|
||||
50766/tcp Fore
|
||||
51966/tcp Cafeini
|
||||
52317/tcp Acid Battery 2000
|
||||
53001/tcp RWS
|
||||
54283/tcp SubSeven
|
||||
54320/tcp Back Orifice 2000
|
||||
54321/tcp Back Orifice 2000
|
||||
55165/tcp File Manager trojan
|
||||
55166/tcp WM Trojan Generator
|
||||
57341/tcp NetRaider
|
||||
58339/tcp Butt Funnel
|
||||
60000/tcp Deep Throat
|
||||
60001/tcp Trinity
|
||||
60068/tcp Xzip 6000068
|
||||
60411/tcp Connection
|
||||
61348/tcp Bunker-Hill
|
||||
61466/tcp TeleCommando
|
||||
61603/tcp Bunker-Hill
|
||||
63485/tcp Bunker-Hill
|
||||
64101/tcp Taskman
|
||||
65000/tcp Devil
|
||||
65390/tcp Eclypse
|
||||
65421/tcp Jade
|
||||
65432/tcp The Traitor (= th3tr41t0r)
|
||||
65432/udp The Traitor (= th3tr41t0r)
|
||||
65534/tcp /sbin/initd
|
||||
65535/tcp RC1 trojan
|
|
@ -1,179 +0,0 @@
|
|||
##
|
||||
# NOTE:
|
||||
# Editing this file is not recommended. If you do, you might miss newer
|
||||
# revisions of this list in the future versions.
|
||||
# See weed_local.cf for instructions on how to add or delete rules.
|
||||
#
|
||||
|
||||
[pam]
|
||||
\(pam_unix\).*: session closed for
|
||||
\(pam_unix\).*: check pass;
|
||||
|
||||
[dhcpd]
|
||||
dhcpd: DHCPREQUEST
|
||||
dhcpd: DHCPACK
|
||||
dhcpd: DHCPDISCOVER
|
||||
dhcpd: DHCPOFFER
|
||||
dhcpd: DHCPRELEASE
|
||||
dhcpd: DHCPINFORM
|
||||
|
||||
[rpc]
|
||||
rpc.mountd: authenticated mount request from
|
||||
rpc.mountd: authenticated unmount request
|
||||
rpc.statd.*: Version .* Starting
|
||||
rpc.statd.*: Caught signal 15, un-registering and exiting
|
||||
|
||||
[automount]
|
||||
automount.*: expired
|
||||
automount.*: attempting to mount entry
|
||||
automount.*: lookup\(file\): .* failed
|
||||
automount.*: starting automounter
|
||||
automount.*: using kernel protocol
|
||||
automount.*: shutting down
|
||||
automount.*: .* No such key in map
|
||||
|
||||
[crond]
|
||||
CROND.*: \(mailman\) CMD \(/usr/bin/python
|
||||
CROND.*: \(root\) CMD \(.*/sbin/rmmod -as\)
|
||||
CROND.*: \(root\) CMD \(/usr/lib/sa/sa\d
|
||||
CROND.*: \(root\) CMD \(run-parts
|
||||
anacron.*: Updated timestamp for job
|
||||
|
||||
[bind]
|
||||
named.*: lame server resolving
|
||||
named.*: .* NS points to CNAME
|
||||
named.*: Response from unexpected source
|
||||
named.*: .* All possible A RR's lame
|
||||
named.*: bad referral
|
||||
named.*: Cleaned cache
|
||||
named.*: USAGE
|
||||
named.*: NSTATS
|
||||
named.*: XSTATS
|
||||
named.*: .* points to a CNAME
|
||||
named.*: denied update from
|
||||
named.*: .* Bogus LOOPBACK
|
||||
|
||||
[gnome]
|
||||
gnome-name-server.*: input condition is:
|
||||
gnome-name-server.*: name server starting
|
||||
gnome-name-server.*: starting
|
||||
gnome-name-server.*: name server was running
|
||||
gconfd.*: Resolved address
|
||||
gconfd.*: GConf server is not in use
|
||||
gconfd.*: Exiting
|
||||
gconfd.*: starting
|
||||
gconfd.*: .* shutting down cleanly
|
||||
gdm.*: Couldn't authenticate user
|
||||
xscreensaver.*: FAILED LOGIN
|
||||
|
||||
[sshd]
|
||||
sshd.*: Generating new .* key.
|
||||
sshd.*: .* key generation complete
|
||||
sshd.*: Connection closed
|
||||
sshd.*: Could not reverse map address
|
||||
sshd.*: Received disconnect from
|
||||
sshd.*: error: Could not get shadow information for
|
||||
sshd.*: Invalid user .* from
|
||||
|
||||
[xinetd]
|
||||
xinetd.*: .* Transport endpoint is not connected
|
||||
xinetd.*: EXIT:
|
||||
|
||||
[uw-imap]
|
||||
imapd.*: AUTHENTICATE
|
||||
imapd.*: Logout
|
||||
imapd.*: Killed
|
||||
imapd.*: imap.*service init
|
||||
imapd.*: Command stream end of file
|
||||
imapd.*: Autologout
|
||||
imapd.*: Connection reset by peer
|
||||
ipop3d.*: AUTHENTICATE
|
||||
ipop3d.*: Logout
|
||||
ipop3d.*: Killed
|
||||
ipop3d.*: Autologout
|
||||
ipop3d.*: pop3.*service init
|
||||
|
||||
[courier-imap]
|
||||
imapd.*: Connection, ip=\[\S+\]
|
||||
imapd.*: LOGOUT, user=\S+, ip=\[\S+\]
|
||||
imapd.*: Disconnected, ip=\[\S+\]
|
||||
imapd.*: DISCONNECTED, user=\S+, ip=\[\S+\]
|
||||
imapd.*: LOGOUT, ip=\[\S+\]
|
||||
pop3d.*: Connection, ip=\[\S+\]
|
||||
pop3d.*: LOGOUT, user=\S+, ip=\[\S+\]
|
||||
pop3d.*: Disconnected, ip=\[\S+\]
|
||||
pop3d.*: DISCONNECTED, user=\S+, ip=\[\S+\]
|
||||
pop3d.*: LOGOUT, ip=\[\S+\]
|
||||
|
||||
[postfix]
|
||||
postfix/smtp\[\d+\]: connect to
|
||||
postfix/smtp\[\d+\]: warning: no MX host
|
||||
postfix/smtp\[\d+\]: warning: numeric domain name in resource data
|
||||
postfix/smtp\[\d+\]: warning: host .* with my own hostname
|
||||
postfix/smtpd.*: connect from
|
||||
postfix/smtpd.*: disconnect from
|
||||
postfix/smtpd.*: TLS connection established
|
||||
postfix/smtpd.*: lost connection
|
||||
postfix/cleanup
|
||||
postfix/pickup
|
||||
|
||||
[sendmail]
|
||||
sendmail\[.*:.*NOQUEUE: Null connection from
|
||||
sendmail\[.*:.*timeout waiting for input
|
||||
|
||||
[qmail]
|
||||
qmail:.* new msg
|
||||
qmail:.* end msg
|
||||
qmail:.* status:
|
||||
|
||||
[spamd]
|
||||
spamd\[.*: info:
|
||||
spamd\[.*: processing message
|
||||
spamd\[.*: checking message
|
||||
spamd\[.*: connection from
|
||||
spamd\[.*: Creating default_prefs
|
||||
|
||||
[printer]
|
||||
printer: ready to print
|
||||
printer: status change
|
||||
printer: printing
|
||||
printer: peripheral low-power state
|
||||
|
||||
[pumpd]
|
||||
pumpd.*: renewed lease for interface
|
||||
pumpd.*: configured interface
|
||||
|
||||
[afpd]
|
||||
afpd.*: ASIP session:
|
||||
afpd.*: afp_flushfork:
|
||||
afpd.*: .*B read,.*B written
|
||||
|
||||
[ntpd]
|
||||
ntpd.*: kernel time discipline status change
|
||||
|
||||
[kernel]
|
||||
kernel: application .* uses obsolete OSS audio interface
|
||||
kernel: SELinux: initialized
|
||||
kernel: device .* left promiscuous mode
|
||||
kernel: .*: disabled promiscuous mode
|
||||
usb-uhci.c: interrupt, status
|
||||
PCI: Found IRQ
|
||||
PCI: Sharing IRQ
|
||||
PCI: Setting latency timer
|
||||
kernel: agpgart: Found
|
||||
kernel: agpgart: Putting
|
||||
|
||||
[misc]
|
||||
modprobe: Can't locate module
|
||||
logger: punching nameserver .* through the firewall
|
||||
HORDE\[\S*\s*\[imp\] Logout
|
||||
LOGIN ON tty.
|
||||
dhclient: DHCPREQUEST
|
||||
dhclient: DHCPACK
|
||||
dhclient: DHCPDISCOVER
|
||||
dhclient: bound to
|
||||
dbus: avc: .* buckets used
|
||||
|
||||
|
||||
|
||||
## $Revision: 1.14.2.4 $ ##
|
|
@ -1,491 +0,0 @@
|
|||
[ADD]
|
||||
##
|
||||
# Here is where you add your own rules
|
||||
#
|
||||
atomic-openshift-node:.*
|
||||
audit.*
|
||||
ansible.*: Invoked.*
|
||||
ansible.*: message repeated.*
|
||||
ansible-accelerate:.*
|
||||
ansible-async_wrapper.*
|
||||
auditd.*
|
||||
autocloud_job.*
|
||||
avahi-daemon.*
|
||||
btseed.*
|
||||
bugyou-cntrl.*
|
||||
celery.*
|
||||
check_nrpe: Remote.*accepted a Version.*Packet
|
||||
check_nrpe: Remote.*does not support Version.*Packets
|
||||
chronyd.*
|
||||
collectd.*: Filter subsystem.*
|
||||
collectd.*: Value too old.*
|
||||
collectd.*: processes plugin: Failed to read from.*
|
||||
collectd.*: 0 Success:.*value has been dispatched.
|
||||
collectd.*: message repeated.*times.*0 Success:.*
|
||||
collectd.*: exec plugin.*Unable to parse command\, ignoring line.*
|
||||
conmon:.*
|
||||
.*libcontainer.*
|
||||
dbus.*:.*avc:.*received.*
|
||||
dbus.*:.*Reloaded configuration.*
|
||||
dbus.*:.*Successfully activated service 'org.fedoraproject.Setroubleshootd'.*
|
||||
dbus.*:.*Successfully activated service 'org.freedesktop.nm_dispatcher'
|
||||
dbus.*:.*\[system\].*Activating via systemd: service.*
|
||||
dbus.*:.*\[system\].*Activating.*using servicehelper.*
|
||||
dbus.*:.*\[system\].*Successfully activated service.*
|
||||
dbus-daemon.*:.*Successfully activated service \'org.fedoraproject.Setroubleshootd\'.*
|
||||
dbus-daemon.*:.*Activating via systemd: service.*
|
||||
dbus-daemon.*:.*Successfully activated service.*
|
||||
dhclient.*: bound to.*
|
||||
dhclient.*: DHCPDISCOVER.*
|
||||
dhclient.*: DHCPACK.*
|
||||
dhclient.*: DHCPREQUEST.*
|
||||
dhcpd:.*Wrote.*leases file.*
|
||||
dnsmasq-dhcp.*
|
||||
dnsmasq.*
|
||||
# work around bug https://bugzilla.redhat.com/show_bug.cgi?id=947989
|
||||
dhclient.*: send_packet: Operation not permitted
|
||||
dhclient.*: dhclient.c:.*: Failed to send.*byte long packet over fallback interface.
|
||||
dhclient.*: Internet Systems Consortium DHCP Client.*
|
||||
dhclient.*: Copyright 2004-2013 Internet Systems Consortium.
|
||||
dhclient.*: All rights reserved.
|
||||
dhclient.*: For info, please visit https://www.isc.org/software/dhcp/
|
||||
dhclient.*: Listening on.*
|
||||
dhclient.*: Sending on.*
|
||||
dhclient.*: Sending on.*
|
||||
dhclient.*: $
|
||||
django-admin.*
|
||||
dnf:.*
|
||||
dnf-automatic:.*
|
||||
docker.*
|
||||
dracut.*
|
||||
etcd.*
|
||||
.*EDAC sbridge.*
|
||||
fedmsg-hub.*
|
||||
fedmsg.*:No routing policy defined for.*
|
||||
mdapi-run.*
|
||||
moksha-hub.*
|
||||
mailman3.*
|
||||
mote-updater.*
|
||||
odcs-backend.*:.*Checking for expired composes
|
||||
.*odcs-backend.*: Checking for expired composes
|
||||
.*.go\:
|
||||
freshclam.*: Can't connect to port 80 of host.*
|
||||
freshclam.*: connect_error:.*
|
||||
freshclam.*: Downloading.*
|
||||
freshclam.*:.*is up to date.*
|
||||
freshclam.*:.*updated.*
|
||||
freshclam.*: Database updated.*
|
||||
freshclam.*: ClamAV update process started
|
||||
git-daemon.*: Connection from.*
|
||||
git-daemon.*: Connection reset by peer
|
||||
git-daemon.*: .* does not appear to be a git repository
|
||||
git-daemon.*: Extended attributes.*
|
||||
git-daemon.*: Request upload-pack.*
|
||||
git-daemon.*: The remote end hung up unexpectedly
|
||||
git-daemon.*: userpath.*
|
||||
git-daemon.*: Request upload-archive for.*
|
||||
git-daemon.*: fatal: write error: Connection timed out
|
||||
groupadd.*: group added to.*: name=(mockbuild|dialout|floppy|cdrom|tape|utmp|utempter|dbus|avahi-autoipd|rpc|rpcuser|nfsnobody|ssh_keys).*
|
||||
(group|user)add.*: new (user|group): name=(mockbuild|dialout|floppy|cdrom|tape|utmp|utempter|dbus|avahi-autoipd|rpc|rpcuser|nfsnobody|ssh_keys).*
|
||||
heartbeat.* info:.*
|
||||
heartbeat.*:info.*
|
||||
heartbeat.*:WARN: Gmain_timeout_dispatch: Dispatch function for retransmit request took too long to execute.*
|
||||
httpd.*:.*AH0.*
|
||||
in.tftpd.*: tftp: client does not accept options
|
||||
journal:.*\[wsgi\:error\]
|
||||
journal:.*0000\] \"POST .*
|
||||
journal:.*0000\] \"GET .*
|
||||
journal: libvirt version.*
|
||||
journal: Failed to acquire.*
|
||||
journal: cannot lookup default selinux label for.*
|
||||
journal: Domain id.*
|
||||
journal: End of file while reading data\: Input\/output error
|
||||
journal: hostname.*
|
||||
journal: 10.131.0.1.*
|
||||
journal: 10.128.0.1.*
|
||||
journal: 10.130.0.1.*
|
||||
journal: - HAProxy port 1936 health check ok : 0 retry attempt(s).
|
||||
journal:.*Go-http-client.*
|
||||
journal.*:.*healthz.*
|
||||
journal.*DEBUG.*
|
||||
journal.*WARNING.*
|
||||
kernel: nf_conntrack\: falling back to vmalloc.
|
||||
kernel:.*CPU.*power limit.*
|
||||
kernel:.*dma-pl330 fff3d000.dma: Reset Channel.*
|
||||
kernel: TCPv6: Possible SYN flooding on port 80. Sending cookies.
|
||||
kernel: TCPv6: Possible SYN flooding on port 80. Dropping request.
|
||||
kernel: possible SYN flooding on port 80. Sending cookies.
|
||||
kernel: EXT4-fs \(.*\): mounted filesystem with ordered data mode.*
|
||||
kernel: ioctl32\(e2fsck.*
|
||||
kernel: ioctl32\(resize2fs.*
|
||||
kernel: md: data-check of RAID array.*
|
||||
kernel: md: delaying data-check of.*
|
||||
kernel: md: md.*: data-check done.
|
||||
kernel: md: minimum _guaranteed_ speed.*
|
||||
kernel: md: using 128k window.*
|
||||
kernel: md: using maximum available idle IO bandwidth.*
|
||||
kernel: printk.*suppressed.
|
||||
kernel: __ratelimit:.*callbacks suppressed
|
||||
kernel:.*subj=.*
|
||||
kernel:.*exe=.* \(sauid=.*, hostname=.* addr=.* terminal=.*\)
|
||||
kernel:.*type=.*audit\(.*
|
||||
kernel:.*audit_printk_skb:.*callbacks suppressed
|
||||
kernel:.*usb 3-3: new full-speed USB device number.*using xhci_hcd
|
||||
kernel:.*usb 3-3: Device not responding to set address.
|
||||
kernel:.*usb 3-3: Device not responding to set address.
|
||||
kernel:.*usb 3-3: device not accepting address.*error -71
|
||||
kernel:.*kvm.*vcpu.*unhandled rdmsr.*
|
||||
kernel:.*kvm_get_msr_common:.*callbacks suppressed
|
||||
kernel:.*device vnet.*entered promiscuous mode
|
||||
kernel:.*virbr0: port.*entered.*state
|
||||
kernel:.*virbr0: topology change detected, propagating
|
||||
kernel: blk_update_request.*I/O error, dev loop0, sector.*
|
||||
kernel: blk-mq: bad return on queue.*
|
||||
kernel: XFS.*Ending clean mount
|
||||
kernel: XFS.*Unmounting Filesystem
|
||||
kernel: XFS.*Mounting V5 Filesystem
|
||||
kernel: XFS.*Ending clean mount
|
||||
kernel: .*added RAID HP P410i controller SSDSmartPathCap.*
|
||||
kernel: hpsa.*addition failed -19, device not added.
|
||||
kernel: PC.*
|
||||
kernel: LR.*
|
||||
kernel: pc.*
|
||||
kernel: sp.*
|
||||
kernel: x.*
|
||||
kernel: Hardware name.*
|
||||
kernel: task.*
|
||||
kernel: kauditd_printk_skb.*
|
||||
kernel: sd 7.*
|
||||
kernel: Using.*as fallback implementation.
|
||||
kernel:.*ready
|
||||
kojid.*
|
||||
kojira.*
|
||||
logrotate.*
|
||||
lvm.*: Another thread is handling an event. Waiting...*
|
||||
libvirtd:.*debug.*
|
||||
libvirtd.*:.*is tainted.*
|
||||
loopabull.*
|
||||
nagios.*
|
||||
named.*: .* general: info:.*
|
||||
named.*: .* notify: info:.*
|
||||
named.*: .* general: error: zone.*unchanged. zone may fail to transfer to slaves.
|
||||
named.*: .* resolver: notice: DNS format error from.*: invalid response
|
||||
named.*: .* resolver: notice: DNS format error from.*: non-improving referral
|
||||
named.*: .* resolver: notice: clients-per-query increased to.*
|
||||
named.*: .* security: info: client.*: view.*: query (cache).*denied
|
||||
named.*: .* edns-disabled: info: success resolving.*after.*
|
||||
named.*: .* security: info: client.*denied
|
||||
named.*: .* rate-limit: info:.*
|
||||
named.*: .* general: warning: checkhints: view.*
|
||||
named.*: .* query-errors: info: client.*rate limit slip response to.*
|
||||
named.*: .* query-errors: info: client.*rate limit drop response to.*
|
||||
named.*: .*8580
|
||||
named.*: .*query-errors.*
|
||||
named.*: .*cname\: info\: skipping nameserver.*
|
||||
NetworkManager.*: \<info\>.*
|
||||
NetworkManager.*: \<warn\>.*
|
||||
NetworkManager.*: \<error\>.*Unspecific failure
|
||||
nm-dispatcher.*:.*
|
||||
nrpe.*: Error: Request packet type.*
|
||||
nrpe.*: Client request was invalid.*
|
||||
ntpd.*
|
||||
openqa:.*is not a registered asset
|
||||
openqa: no products found.*
|
||||
openqa-scheduler.*
|
||||
openqa-websockets.*
|
||||
openqa:.*Asset.*
|
||||
openshift-master.*
|
||||
openshift: grpc: addrConn.resetTransport failed to create client transport.*
|
||||
openshift: message repeated.*times.*failed to create client transport.*
|
||||
openshift: Failed to dial.*
|
||||
fedora-openqa-consumer.*
|
||||
openvpn.*: Auth read bytes.*
|
||||
openvpn.*: CLIENT_LIST.*
|
||||
openvpn.*: END
|
||||
openvpn.*: event_wait : Interrupted system call.*
|
||||
openvpn.*: GLOBAL_STATS.*
|
||||
openvpn.*: HEADER.*
|
||||
openvpn.*: OpenVPN STATISTICS
|
||||
openvpn.*: post-compress bytes.*
|
||||
openvpn.*: post-decompress bytes.*
|
||||
openvpn.*: pre-compress bytes.*
|
||||
openvpn.*: pre-decompress bytes.*
|
||||
openvpn.*: ROUTING_TABLE.*
|
||||
openvpn.*: TCP/UDP.*
|
||||
openvpn.*: TCP/UDP.*
|
||||
openvpn.*: TIME.*
|
||||
openvpn.*: TITLE.*
|
||||
openvpn.*: TUN/TAP.*
|
||||
openvpn.*: UDPv4 link (local|remote).*
|
||||
openvpn.*: SIGUSR1.*
|
||||
openvpn.*: Updated.*
|
||||
openvpn.*:.*Re-using SSL/TLS context.*
|
||||
openvpn.*:.*LZO compression.*
|
||||
openvpn.*: NOTE: the current --script-security setting may allow this configuration to call user-defined scripts.*
|
||||
openvpn.*: WARNING: No server certificate verification method has been enabled.*
|
||||
openvpn.*: .*peer info.*
|
||||
openvpn.*TLS Error.*
|
||||
origin-master.*
|
||||
origin-node.*
|
||||
oci-systemd-hook.*
|
||||
oci-umount.*
|
||||
pam_unix\(.*\): account .* has password changed in future
|
||||
pagure-stream-server.py:.*
|
||||
pagure-webhook-server.py:.*
|
||||
pagure_stream_server.py:.*
|
||||
pagure_logcom_server.py:.*
|
||||
polkitd.*
|
||||
postfix/anvil.*: statistics.*
|
||||
postfix/bounce.*sender non-delivery notification.*
|
||||
postfix/error.*:.*delivery temporarily suspended.*Connection timed out.*
|
||||
postfix/error.*:.*delivery temporarily suspended.*No route to host.*
|
||||
postfix/error.*:.*delivery temporarily suspended.*temporarily deferred due to user complaints.*
|
||||
postfix/error.*:.*delivery temporarily suspended.*while receiving the initial server greeting.*
|
||||
postfix/error.*:.*delivery temporarily suspended.*Host or domain name not found.*
|
||||
postfix/error.*:.*delivery temporarily suspended.*Connection refused.*
|
||||
postfix/error.*:.*delivery temporarily suspended.*conversation with.*
|
||||
postfix/error.*:.*delivery temporarily suspended.*service not available, closing transmission channel.*
|
||||
postfix/error.*:.*delivery temporarily suspended.*Network is unreachable.*
|
||||
postfix/error.*:.*refused to talk to me.*
|
||||
postfix/lmtp.*:.*250.*Ok.*
|
||||
postfix/lmtp.*: 503.*
|
||||
postfix/local.*: table.*has changed -- restarting.*
|
||||
postfix/master.*: daemon started.*
|
||||
postfix/master.*: terminating on signa.*
|
||||
postfix/pipe.*:.*delivered via spamassassin.*
|
||||
postfix/postfix-script.*: starting the Postfix mail system
|
||||
postfix/postfix-script.*: stopping the Postfix mail system
|
||||
postfix/postfix-script.*: waiting for the Postfix mail system to terminate
|
||||
postfix/scache.*: statistics.*
|
||||
postfix/smtp.*: 400.*
|
||||
postfix/smtp.*: 421.*
|
||||
postfix/smtp.*: 450.*
|
||||
postfix/smtp.*: 451.*
|
||||
postfix/smtp.*: 452.*
|
||||
postfix/smtp.*: 454.*
|
||||
postfix/smtp.*: 503.*
|
||||
postfix/smtp.*: conversation.* timed out.*
|
||||
postfix/smtpd.*: table.*has changed -- restarting.*
|
||||
postfix/smtpd.*: timeout.*
|
||||
postfix/smtpd.*: too many errors after RCPT.*
|
||||
postfix/smtp.*: enabling PIX.*
|
||||
postfix/smtp.*: lost connection.*
|
||||
postfix/smtp.*:.*refused to talk to me.*
|
||||
postfix/smtp.*: warning: malformed domain name.*
|
||||
postfix/smtp.*: warning: valid_hostname:.*
|
||||
postfix/smtp.*:.*yahoo.*refused to talk to me.*
|
||||
python.*: ansible-<stdin>.*
|
||||
python.*: ansible.*: Invoked.*
|
||||
python.*: ansible.* Invoked.*
|
||||
python2.*
|
||||
rabbitmq-server.*
|
||||
ResourceManager.*: info:.*
|
||||
restorecond: Reset file context /etc/aliases.*
|
||||
restorecond: Reset file context /var/db/shadow.db.*
|
||||
restorecond: Unable to watch.*
|
||||
Rootkit Hunter: Rootkit hunter.*
|
||||
Rootkit Hunter: Scanning.*
|
||||
rdbsync.*
|
||||
root: time debug:.*
|
||||
rkhunter.*: Rootkit hunter check started.*
|
||||
rkhunter.*: Scanning took.*
|
||||
registry.*
|
||||
# We filter these because greenwave/waiverdb in stg is looking at prod and requesting git objects that
|
||||
# do not exist in staging. Until that changes we will get these messages from staging.
|
||||
repospanner:.*Trying to get object from peer.*
|
||||
repospanner: .*Requested object could not be found at any peer
|
||||
rpc.idmapd.*: nss_getpwnam: name.*apache.*
|
||||
rpc.idmapd.*: nss_getpwnam: name.*masher.*
|
||||
rpc.idmapd.*: nss_getpwnam: name.*root@fedora.*
|
||||
rpc.idmapd.*: nss_getpwnam: name.*root@localdomain*
|
||||
rsyncd.*: building.*
|
||||
rsyncd.*: connect from.*
|
||||
rsyncd.*: file has vanished:
|
||||
rsyncd.*: name lookup failed for.*
|
||||
rsyncd.*: rsync: connection unexpectedly closed.*
|
||||
rsyncd.*: rsync error: error in rsync protocol data stream.*
|
||||
rsyncd.*: sent.*
|
||||
rsyncd.*: rsync: change_dir.*failed.*
|
||||
#rsync.*: rsync on.*
|
||||
rsyslogd-2163:epoll_ctl failed
|
||||
#goofy-ass rsyslogd error :(
|
||||
rsyslogd: \[origin software.*
|
||||
runc:.*
|
||||
^\(\':\',.*
|
||||
setfiles: relabeling .*
|
||||
spamc.*: connect to spamd on.*
|
||||
spamc.*: skipped message, greater.*
|
||||
spamd.*: bayes: cannot open bayes databases.*
|
||||
spamd.*: logger: removing.*
|
||||
spamd.*: prefork.*
|
||||
spamd.*: pyzor:.* error: TERMINATED
|
||||
spamd: result:.*
|
||||
spamd.*: spamd: clean message.*
|
||||
spamd.*: spamd: clean message.*
|
||||
spamd.*: spamd: handled cleanup.*
|
||||
spamd.*: spamd: identified spam.*
|
||||
spamd.*: spamd: server killed.*
|
||||
spamd.*: spamd: server pid.*
|
||||
spamd.*: spamd: server started.*
|
||||
spamd.*: spamd: server successfully.*
|
||||
spamd.* spamd: setuid to.*
|
||||
sshd.*: message repeated.*Starting session.*
|
||||
sshd.*: Address.*maps to.*but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT.*
|
||||
sshd.*: Did not receive identification.*
|
||||
sshd.*: Disconnecting: Too many authentication failures for root.*
|
||||
sshd.*: error: connect_to
|
||||
sshd.*: error: ssh_selinux_setup_pty:
|
||||
sshd.*: Found matching RSA key.*
|
||||
sshd.*: Found matching DSA key.*
|
||||
sshd.*: Found matching ED25519 key.*
|
||||
sshd.*: input_userauth_request: invalid user.*
|
||||
sshd.*: pam_unix\(sshd:session\): session closed for user.*
|
||||
sshd.*: Close session.*
|
||||
sshd.*: pam_unix\(sshd:session\): session opened for user.*
|
||||
sshd.*: Postponed publickey for.*
|
||||
sshd.*: refused connect from.*
|
||||
sshd.*: reverse mapping checking getaddrinfo.*POSSIBLE BREAK-IN ATTEMPT.*
|
||||
sshd.*: Server listening on.*
|
||||
sshd.*: subsystem request for sftp
|
||||
sshd.*: pam_namespace.*: Unmount of \/tmp failed, Device or resource busy.*
|
||||
sshd.*: Set /proc/self/oom_score_adj.*
|
||||
sshd.*: Connection from.* port.*
|
||||
sshd.*: Transferred: sent.*, received.*bytes
|
||||
sshd.*: Closing connection to.*port.*
|
||||
sshd.*: User child is on pid.*
|
||||
sshd.*: Read error from remote host.*: Connection reset by peer
|
||||
sshd.*: Read error from remote host.*: Connection timed out
|
||||
sshd.*: error: Could not load host key: /etc/ssh/ssh_host_dsa_key
|
||||
sshd.*: Starting session.*
|
||||
sshd.*: fatal: Read from socket failed: Connection reset by peer.*
|
||||
sshd.*: Starting session: subsystem 'sftp' for root from 10.5.126.23 port.*
|
||||
sshd.*: Starting session: subsystem 'sftp' for root from 209.132.181.6 port.*
|
||||
sshd.*: Corrupted MAC on input.
|
||||
sshd.*: pam_systemd(sshd:session): Failed to create session: No such file or directory
|
||||
sshd.*: fatal: Write failed: Connection reset by peer
|
||||
sshd.*: pam_succeed_if\(sshd:auth\): requirement.*
|
||||
sshd.*: pam_unix\(sshd:auth\): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=.*
|
||||
sshd.*: PAM .* more authentication failures\; logname= uid=0 euid=0 tty=ssh ruser= rhost=.*
|
||||
sshd.*: pam_unix\(sshd:auth\): check pass; user unknown
|
||||
sshd.*: error\: maximum authentication attempts exceeded for.*from.*port.*ssh2 [preauth]
|
||||
sshd.*: Disconnecting\: Too many authentication failures.*
|
||||
sshd.*: Disconnected from.*
|
||||
sshd.*: Read error from remote host.*
|
||||
sshd.*: error\: maximum authentication attempts exceeded for.*
|
||||
sshd.*: Close session.*user root from 10.5.126.23 port.*id 0
|
||||
sshd.*: error\: key_read: uudecode.*failed
|
||||
sshd.*: Connection reset by.*
|
||||
sshd.*: error\: buffer_get_ret\: trying to get more bytes.*
|
||||
sshd.*: error\: buffer_get_string_ret\: buffer_get failed
|
||||
sshd.*: error\: buffer_get_bignum2_ret\: invalid bignum
|
||||
sshd.*: error\: key_from_blob\: can\'t read rsa key
|
||||
sshd.*: error\: key_read\: key_from_blob
|
||||
sshd.*: Close session\: user root from 10.5.126.23 port.*
|
||||
sshd.*: error: key_from_blob: remaining bytes in key blob 36
|
||||
sshd.*: error: cert_parse: Invalid signature key type unknown (11)
|
||||
sshd.*: error: key_from_blob: can't parse cert data
|
||||
sshd.*: error: Could not load host certificate: /etc/ssh/ssh_host_rsa_key-cert.pub
|
||||
sshd.*: pam_systemd\(sshd:session\): Failed to create session: Failed to activate service 'org.freedesktop.login1': timed out.*
|
||||
sshd.*: Nasty PTR record.*
|
||||
sshd.*: Disconnecting: Change of username or service not allowed.*
|
||||
sshd.*: Unable to negotiate with.*
|
||||
sshd.*: pam_systemd.*
|
||||
sshd.*: drop connection.*MaxStartups
|
||||
stunnel.*:.*
|
||||
su: pam_unix\(su-l:session\): session .* for user.*
|
||||
suexec.*:.*suexec-cgit.conf
|
||||
suexec.*:.*suexec-upload.conf
|
||||
runuser: pam_unix\(runuser-l\:session\).* session opened for user postgres by.*
|
||||
runuser: pam_unix\(runuser-l\:session\).* session closed for user postgres
|
||||
systemd-logind.*
|
||||
systemd: dev-disk-by.*
|
||||
systemd: Start.*
|
||||
systemd.*: Stop.*
|
||||
systemd.*: Reached.*
|
||||
systemd: pam_unix\(systemd-user\:session\): session opened for user root by (uid=0)
|
||||
systemd: pam_unix\(systemd-user\:session\): session closed for user root
|
||||
systemd: pam_unix\(systemd-user\:session\): session.*
|
||||
systemd.*: Start.* Cleanup of Temporary Directories.*
|
||||
systemd-machine-id-setup.*: Initializing machine ID.*
|
||||
systemd.*: Created slice user-.*.slice.
|
||||
systemd.*: Removed slice User Slice of.*
|
||||
systemd.*: Created slice User Slice of.*
|
||||
systemd.*: Listening on D-Bus User Message Bus Socket.
|
||||
systemd.*: Removed slice User-.*
|
||||
systemd.*: Received SIGRTMIN\+24 from PID.*
|
||||
systemd.*: Failed to mark scope session-.*.scope as abandoned : Stale file handle
|
||||
systemd.*: Failed to reset devices.list on /machine.slice: Invalid argument
|
||||
systemd: tmp.mount.*
|
||||
systemd: Unit git.*
|
||||
systemd-coredump.*:.*
|
||||
systemd-machined.*:.*
|
||||
systemd: Configuration file.*is marked world-inaccessible.*
|
||||
systemd.*: Reload.*
|
||||
systemd.*: Closed D-Bus User Message Bus Socket.
|
||||
systemd.*: Removed slice User Slice of root.
|
||||
systemd.*: Starting user-0.slice.
|
||||
systemd.*: Started Session.*of user root.
|
||||
systemd.*: Starting Session.*of user root.
|
||||
systemd-udevd.*: conflicting device node.*
|
||||
systemd-udevd.*: Could not generate persistent MAC address for.*
|
||||
systemd-udevd.*: link_config: autonegotiation is unset or enabled.*
|
||||
systemd.*: Starting user-.*.slice.
|
||||
systemd.*: Started Session.*of user git.
|
||||
systemd.*: Starting Session.*of user git.
|
||||
systemd.*: Cannot add dependency job for unit microcode.service.*
|
||||
systemd.*: Scope libcontainer.*has no PIDs. Refusing.
|
||||
systemd: Failed to start OpenShift Node.*
|
||||
systemd: Failed to start Origin Master Service.
|
||||
systemd.*: pam_unix\(systemd-user\:session\)\: session opened for user.*
|
||||
systemd.*: Created slice User Slice of.*
|
||||
systemd.*: Starting User Manager for UID.*
|
||||
systemd.*: Started Session.*
|
||||
systemd.*: Starting D-Bus User Message Bus Socket.
|
||||
systemd.*: Listening on D-Bus User Message Bus Socket.
|
||||
systemd.*: Startup finished in.*
|
||||
systemd.*: Started User Manager for UID.*
|
||||
systemd.*: Started Process Core Dump
|
||||
systemd.*: Starting Exit the Session...
|
||||
systemd.*:.*Network Manager Script Dispatcher Service.*
|
||||
systemd.*: Started Virtual Machine.*
|
||||
systemd.*: iscsi.service\: Unit cannot be reloaded because it is inactive.
|
||||
systemd.*: Started Hostname Service.
|
||||
systemd: Removed slice User Slice of.*
|
||||
systemd: Created slice User Slice of.*
|
||||
systemd.*:.*mount\: Succeeded.
|
||||
supybot.*
|
||||
twistd.*
|
||||
tunir.*
|
||||
unix_chkpwd.*: account .* has password changed in future
|
||||
unix_chkpwd.*: password check failed for user \(root\)
|
||||
userhelper.*: running \'/usr/sbin/mock.*
|
||||
userhelper.*: running \'/usr/libexec/mock/mock.*
|
||||
worker.*
|
||||
# Do not want any of the new gitolite stuff
|
||||
gitolite.*
|
||||
groupadd.*: new group.*
|
||||
groupadd.*: group added to /etc/g.*
|
||||
useradd.*: new user.*
|
||||
varnishd.*: Child .* said missing \)CLI.*
|
||||
varnishd.*: Child .* said nothing to repeatCLI result.*
|
||||
xinetd.*: Exiting.*
|
||||
xinetd.*: FAIL: git per_source_limit.*
|
||||
xinetd.*: readjusting service rsync
|
||||
xinetd.*: Reconfigured.*
|
||||
xinetd.*: Started.*
|
||||
xinetd.*: Starting reconfiguration
|
||||
xinetd.*: Swapping defaults
|
||||
xinetd.*: xinetd Version.*
|
||||
ykksm.*: SUCCESS.*
|
||||
ykval.*: LOG_INFO.*
|
||||
ykval.*: LOG_WARNING.*
|
||||
ykval.*: SUCCESS.*
|
||||
ykval.*: WARNING.*
|
||||
yum.*: Installed:.*
|
||||
yum.*: Updated:.*
|
||||
|
||||
|
||||
[REMOVE]
|
||||
##
|
||||
# Here is where you put the rules (VERBATIM) from the weed_dist.cf file
|
||||
#
|
|
@ -1,12 +0,0 @@
|
|||
[module]
|
||||
desc = Common Unparsed Similar Strings Module
|
||||
exec = /usr/share/epylog/modules/common_unparsed_mod.py
|
||||
files = /var/log/messages[.#] /var/log/secure[.#]
|
||||
enabled = yes
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 5
|
||||
|
||||
[conf]
|
||||
# how similar the strings need to be 0-100 - 0 being not at all (bad idea) 100 being almost exactly.
|
||||
match_percentage = 95
|
|
@ -1,117 +0,0 @@
|
|||
#!/usr/bin/python -tt
|
||||
"""
|
||||
This module should run after all other modules.
|
||||
|
||||
Takes the remaining logs, saves them out to a tmpfile.
|
||||
Uses difflib.SequenceMatcher() to return logs which occur most often and are
|
||||
at least a set percentage similar. This lets you catch logs which are
|
||||
from multiple machines and more or less the same or similar logs (with memory
|
||||
or process id offsets) from the same machine.
|
||||
|
||||
"""
|
||||
|
||||
import sys
|
||||
import re
|
||||
import difflib
|
||||
from operator import itemgetter
|
||||
import tempfile
|
||||
import os
|
||||
|
||||
##
|
||||
# This is for testing purposes, so you can invoke this from the
|
||||
# modules directory. See also the testing notes at the end of the
|
||||
# file.
|
||||
#
|
||||
sys.path.insert(0, '../py/')
|
||||
from epylog import InternalModule
|
||||
|
||||
class common_unparsed_mod(InternalModule):
|
||||
def __init__(self, opts, logger):
|
||||
InternalModule.__init__(self)
|
||||
self.logger = logger
|
||||
rc = re.compile
|
||||
|
||||
self.match_percentage = int(opts.get('match_percentage', '95'))
|
||||
self.debug_dump = int(opts.get('debug_dump', '1'))
|
||||
self.regex_map = {rc('^.+$'):self.expand_out_line}
|
||||
self.tmpdir = tempfile.mkdtemp(prefix='epylog-common-unparsed', dir='/var/tmp')
|
||||
self.matchfile = self.tmpdir + '/match_limited'
|
||||
self.matchfile_f = open(self.matchfile, 'w')
|
||||
self.complete = self.tmpdir + '/complete'
|
||||
self.complete_f = open(self.complete, 'w')
|
||||
|
||||
|
||||
##
|
||||
# Line-matching routines
|
||||
#
|
||||
def expand_out_line(self, linemap):
|
||||
sys, msg, mult = self.get_smm(linemap)
|
||||
matchout = '%s\n' % (msg)
|
||||
com_out = '%s' % (linemap['line'])
|
||||
for i in range(0, int(mult)):
|
||||
self.complete_f.write(com_out)
|
||||
self.matchfile_f.write(matchout)
|
||||
|
||||
#dirty like zebra
|
||||
if not os.path.exists(self.tmpdir + '/returned'):
|
||||
open(self.tmpdir + '/returned', 'w').close()
|
||||
return {'match':0}
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def finalize(self, rs):
|
||||
#FIXME - enable a debug mode where it writes
|
||||
# out to a file all of the first line and things which match it
|
||||
# and percentages of match for later investigation
|
||||
self.complete_f.close()
|
||||
self.matchfile_f.close()
|
||||
matches = {}
|
||||
full_matches = {}
|
||||
lines_matched = set()
|
||||
where = 0
|
||||
rl = open(self.matchfile, 'r')
|
||||
for l in rl:
|
||||
where += 1
|
||||
sub_where = 0
|
||||
for ol in open(self.matchfile, 'r'):
|
||||
sub_where += 1
|
||||
if sub_where < where: # if we're before it in the file we've already matched it
|
||||
continue
|
||||
if sub_where in lines_matched:
|
||||
continue
|
||||
|
||||
c = difflib.SequenceMatcher(isjunk=lambda x: x in ('1','2','3','4','5','6','7','8','9','0'),a=l, b=ol)
|
||||
rq_ratio = int(c.real_quick_ratio()*100) # do the fast upper bound - find out if we should even glance at it.
|
||||
if rq_ratio < 60:
|
||||
continue
|
||||
ratio = int(c.ratio()*100)
|
||||
if ratio >= self.match_percentage:
|
||||
lines_matched.add(sub_where)
|
||||
if l not in matches:
|
||||
matches[l] = 0
|
||||
full_matches[l] = []
|
||||
matches[l] += 1
|
||||
full_matches[l].append((ol,ratio))
|
||||
if self.debug_dump:
|
||||
fm_db = open(self.tmpdir + '/debug-match', 'w')
|
||||
for k in full_matches:
|
||||
fm_db.write(k)
|
||||
for (v,r) in full_matches[k]:
|
||||
fm_db.write(' %s %s' % (r, v))
|
||||
fm_db.close()
|
||||
|
||||
res = "<table border=0><tr><th>Count</th><th align=left>Log</th></tr>\n\n"
|
||||
for (k,v) in sorted(matches.items(), key=itemgetter(1), reverse=True)[:20]: # take the top 20 most common provided there are more than 1
|
||||
if v > 1:
|
||||
res += "<tr>\n<td bgcolor='#DDDDDD'>%s</td><td>%s</td>\n</tr>" % (v, k)
|
||||
res += "<tr>\n<td colspan=2>\n<h2>Complete messages</h2>\n<pre>\n"
|
||||
res += ''.join(sorted(open(self.complete, 'r').readlines()))
|
||||
res += "</pre>\n</td>\n</tr>\n</table>"
|
||||
return res
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from epylog.helpers import ModuleTest
|
||||
ModuleTest(common_unparsed_mod, sys.argv)
|
|
@ -1,10 +0,0 @@
|
|||
[module]
|
||||
desc = KojiLoad summary
|
||||
exec = /usr/share/epylog/modules/kojiload_mod.py
|
||||
files = /var/log/messages[.#]
|
||||
enabled = no
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 7
|
||||
|
||||
[conf]
|
|
@ -1,102 +0,0 @@
|
|||
#!/usr/bin/python -tt
|
||||
"""
|
||||
Rsyncd log parsing module for Epylog
|
||||
"""
|
||||
|
||||
##
|
||||
# Copyright (C) 2012 by Red Hat, Inc
|
||||
# Written by Seth Vidal <skvidal at fedoraproject.org>
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
# 02111-1307, USA.
|
||||
#
|
||||
|
||||
|
||||
import sys
|
||||
import re
|
||||
|
||||
##
|
||||
# This is for testing purposes, so you can invoke this from the
|
||||
# modules directory. See also the testing notes at the end of the
|
||||
# file.
|
||||
#
|
||||
sys.path.insert(0, '../py/')
|
||||
from epylog import InternalModule
|
||||
|
||||
class kojiload_mod(InternalModule):
|
||||
##
|
||||
# opts: is a map with extra options set in
|
||||
# [conf] section of the module config, or on the
|
||||
# command line using -o flag to the module.
|
||||
# logger: A logging object. API:
|
||||
# logger.put(loglvl, 'Message')
|
||||
# Only critical stuff needs to go onto lvl 0.
|
||||
# Common output goes to lvl 1.
|
||||
# Others are debug levels.
|
||||
#
|
||||
def __init__(self, opts, logger):
|
||||
##
|
||||
# Do a "super-init" so the class we are subclassing gets
|
||||
# instantiated.
|
||||
#
|
||||
InternalModule.__init__(self)
|
||||
self.logger = logger
|
||||
##
|
||||
# Convenience
|
||||
#
|
||||
rc = re.compile
|
||||
#kojiload: Load: 7.1 Total: 192.0 Use: 3.7% (Very Light Load)
|
||||
self.regex_map = {
|
||||
rc('kojiload: Load:.*'): self.load_results
|
||||
}
|
||||
# dict to store all of our data
|
||||
self.loads = [] # list of kojiload percentages
|
||||
self.kojiloads = rc('kojiload: Load: (.*) Total: (.*) Use: (.*)\%.*')
|
||||
|
||||
|
||||
def load_results(self, linemap):
|
||||
(sys, msg, multi) = self.get_smm(linemap)
|
||||
load, total, use_percent = self.kojiloads.search(msg).groups()
|
||||
for i in range(multi):
|
||||
self.loads.append(float(use_percent))
|
||||
return {(load,total): 1}
|
||||
|
||||
|
||||
def finalize(self, resultset):
|
||||
##
|
||||
# A resultset is a dictionary of all values returned by your
|
||||
# handler functions -- except they are unique and show how many
|
||||
# times each tuple occurs.
|
||||
# See epylog.Result for some convenience methods to use when
|
||||
# processing and analyzing the results.
|
||||
#
|
||||
if not self.loads:
|
||||
return "No kojiloads returned, that seems odd."
|
||||
|
||||
max_load = max(self.loads)
|
||||
min_load = min(self.loads)
|
||||
avg_load = sum(self.loads)/len(self.loads)
|
||||
|
||||
foo = "Max: %s%%<br>\nMin: %s%%<br>\nAvg: %.1f%%<br>\n" % (max_load,
|
||||
min_load, avg_load)
|
||||
return foo
|
||||
|
||||
##
|
||||
# This is useful when testing your module out.
|
||||
# Invoke without command-line parameters to learn about the proper
|
||||
# invocation.
|
||||
#
|
||||
if __name__ == '__main__':
|
||||
from epylog.helpers import ModuleTest
|
||||
ModuleTest(kojiload_mod, sys.argv)
|
|
@ -1,849 +0,0 @@
|
|||
|
||||
|
||||
#!/usr/bin/python -tt
|
||||
"""
|
||||
Description will eventually go here.
|
||||
"""
|
||||
##
|
||||
# Copyright (C) 2003 by Duke University
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
# 02111-1307, USA.
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# @Author Konstantin Ryabitsev <icon@linux.duke.edu>
|
||||
# @version $Date$
|
||||
#
|
||||
|
||||
import sys
|
||||
import re
|
||||
import time
|
||||
import os
|
||||
import sqlite3 as sqlite
|
||||
sys.path.insert(0, '../py/')
|
||||
from epylog import InternalModule
|
||||
|
||||
|
||||
def executeSQL(cursor, query, params=None):
|
||||
"""
|
||||
Execute a python 2.5 (sqlite3) style query.
|
||||
|
||||
@param cursor: A sqlite cursor
|
||||
@param query: The query to execute
|
||||
@param params: An optional list of parameters to the query
|
||||
"""
|
||||
if params is None:
|
||||
return cursor.execute(query)
|
||||
|
||||
return cursor.execute(query, params)
|
||||
|
||||
class logins_mod(InternalModule):
|
||||
def __init__(self, opts, logger):
|
||||
InternalModule.__init__(self)
|
||||
self.logger = logger
|
||||
self.opts = opts
|
||||
rc = re.compile
|
||||
|
||||
self.ignore = 0
|
||||
self.open = 1
|
||||
self.failure = 2
|
||||
self.root_open = 11
|
||||
self.root_failure = 12
|
||||
self.pam_ignore = []
|
||||
self.xinetd_ignore = []
|
||||
self.logins_db = opts.get('loginsdb_path', '/var/lib/epylog/logins_db.sqlite') # where to keep the loginsdb
|
||||
self.time_fuzz = int(opts.get('time_fuzz', 60)) # how much to fuzz the time in minutes (default 60m)
|
||||
remove_older_than = int(opts.get('remove_older_than', 14)) # time in days to start remove from the db
|
||||
self.oldest_to_keep = time.time() - (remove_older_than*86400)
|
||||
if remove_older_than == '0': # if it is zero then don't delete any, ever - hah your funeral
|
||||
self.oldest_to_keep = None
|
||||
|
||||
ig_users = opts.get('ignore_users', '')
|
||||
ig_users.replace(',',' ')
|
||||
self.ignore_users = ig_users.split(' ')
|
||||
|
||||
self.db_cx = None
|
||||
|
||||
##
|
||||
# PAM reports
|
||||
#
|
||||
pam_map = {
|
||||
rc('\(pam_unix\)\S*:.*authentication\s*failure'): self.pam_failure,
|
||||
rc('\(pam_unix\)\S*:\ssession\sopened\sfor'): self.pam_open,
|
||||
rc('\(pam_unix\)\S*:\sbad\susername'): self.pam_baduser,
|
||||
rc('\(pam_unix\)\S*:\sauth\scould\snot'): self.pam_chelper_failure,
|
||||
rc('pam_krb5\S*:\s\S+\ssucceeds\sfor'): self.pam_krb5_open,
|
||||
rc('pam_krb5\S*:\s\S+\sfails\sfor'): self.pam_krb5_failure
|
||||
}
|
||||
##
|
||||
# XINETD reports
|
||||
#
|
||||
xinetd_map = {
|
||||
rc('xinetd\S*: START:'): self.xinetd_start
|
||||
}
|
||||
##
|
||||
# SSH reports
|
||||
#
|
||||
sshd_map = {
|
||||
rc('sshd\[\S*: Accepted'): self.sshd_open,
|
||||
rc('sshd\[\S*: Failed'): self.sshd_failure
|
||||
}
|
||||
##
|
||||
# IMAPD and IPOP3D
|
||||
#
|
||||
uw_imap_map = {
|
||||
rc('imapd\[\S*: Login\sfail'): self.uw_imap_failure,
|
||||
rc('imapd\[\S*: Authenticated\suser'): self.uw_imap_open,
|
||||
rc('imapd\[\S*: Login\suser'): self.uw_imap_open,
|
||||
rc('ipop3d\[\S*: Login\sfail'): self.uw_imap_failure,
|
||||
rc('ipop3d\[\S*: Login\suser'): self.uw_imap_open,
|
||||
rc('ipop3d\[\S*: Auth\suser'): self.uw_imap_open
|
||||
}
|
||||
##
|
||||
# IMP
|
||||
#
|
||||
imp_map = {
|
||||
rc('IMP\[\S*: Login'): self.imp2_open,
|
||||
rc('IMP\[\S*: FAILED'): self.imp2_failure,
|
||||
rc('HORDE\[\S*\s*\[imp\] Login'): self.imp3_open,
|
||||
rc('HORDE\[\S*\s*\[imp\] FAILED'): self.imp3_failure
|
||||
}
|
||||
##
|
||||
# DOVECOT
|
||||
#
|
||||
dovecot_map = {
|
||||
rc('imap-login:\sLogin:\s'): self.dovecot_open,
|
||||
rc('imap-login:\sAborted\slogin\s'): self.dovecot_failure
|
||||
}
|
||||
##
|
||||
# Courier-IMAP
|
||||
#
|
||||
courier_map = {
|
||||
rc('\sLOGIN,\suser=\S+,\sip=\[\S+\]'): self.courier_open,
|
||||
rc('\sLOGIN FAILED,\sip=\[\S+\]'): self.courier_failure
|
||||
}
|
||||
##
|
||||
# Cyrus-IMAP
|
||||
#
|
||||
cyrus_map = {
|
||||
rc('imapd\[\S*: login:'): self.cyrus_open,
|
||||
rc('pop3d\[\S*: login:'): self.cyrus_open,
|
||||
rc('imapd\[\S*: badlogin:'): self.cyrus_failure,
|
||||
rc('pop3d\[\S*: badlogin:'): self.cyrus_failure
|
||||
}
|
||||
##
|
||||
# Qpopper
|
||||
#
|
||||
qpopper_map = {
|
||||
rc('apop\[\S*:\s\S+\sat\s.*\s\(\S*\):\s-ERR\s\[AUTH\]'): self.qpopper_failure,
|
||||
rc('apop\[\S*:\s\S+\sat\s.*\s\(\S*\):\s-ERR\s\[IN-USE\]'): self.qpopper_failure,
|
||||
rc('apop\[\S*:\s\(\S*\)\sPOP\slogin'): self.qpopper_open
|
||||
}
|
||||
|
||||
##
|
||||
# ProFTPD
|
||||
#
|
||||
proftpd_map = {
|
||||
rc('proftpd\[\S*:.*USER.*Login successful'): self.proftpd_open,
|
||||
rc('proftpd\[\S*:.*no such user found'): self.proftpd_failure,
|
||||
rc('proftpd\[\S*:.*Login failed'): self.proftpd_failure
|
||||
}
|
||||
|
||||
regex_map = {}
|
||||
if opts.get('enable_pam', "1") != "0": regex_map.update(pam_map)
|
||||
if opts.get('enable_xinetd', "1") != "0": regex_map.update(xinetd_map)
|
||||
if opts.get('enable_sshd', "1") != "0":
|
||||
regex_map.update(sshd_map)
|
||||
self.pam_ignore.append('sshd')
|
||||
if opts.get('enable_uw_imap', "0") != "0":
|
||||
regex_map.update(uw_imap_map)
|
||||
self.xinetd_ignore.append('imaps')
|
||||
if opts.get('enable_imp', "0") != "0": regex_map.update(imp_map)
|
||||
if opts.get('enable_dovecot',"0") != "0": regex_map.update(dovecot_map)
|
||||
if opts.get('enable_courier',"0") != "0": regex_map.update(courier_map)
|
||||
if opts.get('enable_cyrus', "0") != "0": regex_map.update(cyrus_map)
|
||||
if opts.get('enable_qpopper',"0") != "0": regex_map.update(qpopper_map)
|
||||
if opts.get('enable_proftpd',"0") != "0":
|
||||
regex_map.update(proftpd_map)
|
||||
self.pam_ignore.append('ftp')
|
||||
self.xinetd_ignore.append('ftp')
|
||||
|
||||
self.safe_domains = []
|
||||
safe_domains = opts.get('safe_domains', '.*')
|
||||
for domain in safe_domains.split(','):
|
||||
domain = domain.strip()
|
||||
if domain:
|
||||
try:
|
||||
domain_re = rc(domain)
|
||||
self.safe_domains.append(domain_re)
|
||||
except:
|
||||
logger.put(0, 'Error compiling domain regex: %s' % domain)
|
||||
logger.put(0, 'Check config for Logins module!')
|
||||
|
||||
self.regex_map = regex_map
|
||||
|
||||
self.pam_service_re = rc('(\S+)\(pam_unix\)')
|
||||
self.pam_failure_re = rc('.*\slogname=(\S*).*\srhost=(\S*)')
|
||||
self.pam_failure_user_re = rc('\suser=(\S*)')
|
||||
self.pam_open_re = rc('.*for user (\S+) by\s(\S*)\s*\(uid=(\S+)\)')
|
||||
self.pam_failure_more_re = rc('(\S+)\smore\sauthentication\sfailures')
|
||||
self.pam_baduser_re = rc('\sbad\susername\s\[(.*)\]')
|
||||
self.pam_chelper_re = rc('password\sfor\s\[(.*)\]')
|
||||
self.pam_krb5_re = rc("^(\S+?)\[*\d*\]*:\spam_krb5\S*:\sauth.*\sfor\s`(\S+)'")
|
||||
self.xinetd_start_re = rc('START:\s*(\S*)\s')
|
||||
self.sshd_open_ruser_re = rc('Accepted\s(\S*)\sfor\s(\S*)\sfrom\s(\S*)\sport\s\d*\sruser\s(\S*)\s*(\S*)')
|
||||
self.sshd_open_re = rc('Accepted\s(\S*)\sfor\s(\S*)\sfrom\s(\S*)\sport\s\d+\s*(\S*)')
|
||||
self.sshd_fail_re = rc('Failed\s(\S*)\sfor.*\s(\S+)\sfrom\s(\S*)\sport\s\d*\s*(\S*)')
|
||||
self.uw_imap_fail_re = rc('auth=(.*)\shost=.*\[(\S*)\]')
|
||||
self.uw_imap_open_re = rc('user=(.*)\shost=.*\[(\S*)\]')
|
||||
self.uw_imap_service_re = rc('^(\S*)\[\d*\]:')
|
||||
self.dovecot_open_re = rc('Login:\s(\S+)\s\[(\S+)\]')
|
||||
self.dovecot_failure_re = rc('Aborted\slogin\s\[(\S+)\]')
|
||||
self.courier_open_re = rc('^(\S+?):.*\suser=(\S+),\sip=\[(\S+)\]')
|
||||
self.courier_failure_re = rc('^(\S+?):.*,\sip=\[(\S+)\]')
|
||||
self.imp2_open_re = rc('Login\s(\S*)\sto\s(\S*):\S*\sas\s(\S*)')
|
||||
self.imp2_fail_re = rc('FAILED\s(\S*)\sto\s(\S*):\S*\sas\s(\S*)')
|
||||
self.imp3_open_re = rc('success\sfor\s(\S*)\s\[(\S*)\]\sto\s\{(\S*):')
|
||||
self.imp3_fail_re = rc('LOGIN\s(\S*)\sto\s(\S*):\S*\sas\s(\S*)')
|
||||
self.proftpd_open_re = rc('proftpd\[\S*:.*\[(\S+)\].*USER\s(.*):\sLogin\ssuccessful')
|
||||
self.proftpd_failure_re = rc('proftpd\[\S*:.*\[(\S+)\].*USER\s([^:\s]*)')
|
||||
self.qpopper_open_re = rc('user "(.*)" at \(.*\)\s(\S*)')
|
||||
self.qpopper_fail_re = rc(':\s(.*)\sat\s(\S*)')
|
||||
self.cyrus_open_re = rc('login:.*\[(\S*)\]\s(\S*)\s')
|
||||
self.cyrus_fail_re = rc('badlogin:.*\[(\S*)\]\s\S\s(\S*)\sSASL')
|
||||
self.cyrus_service_re = rc('^(\S*)\[\d*\]:')
|
||||
|
||||
self.sshd_methods = {'password': 'pw',
|
||||
'publickey': 'pk',
|
||||
'rhosts-rsa': 'rsa',
|
||||
'rsa': 'rsa',
|
||||
'hostbased': 'host',
|
||||
'none': 'none'}
|
||||
|
||||
self.report_wrap = '<table width="100%%" rules="cols" cellpadding="2">%s</table>'
|
||||
self.subreport_wrap = '<tr><th align="left" colspan="3"><h3>%s</h3></th></tr>\n%s\n'
|
||||
|
||||
self.root_failures_title = '<font color="red">ROOT FAILURES</font>'
|
||||
self.root_logins_title = '<font color="blue">ROOT Logins</font>'
|
||||
self.user_failures_title = '<font color="red">User Failures</font>'
|
||||
self.user_logins_title = '<font color="blue">User Logins</font>'
|
||||
|
||||
self.untrusted_host = '%(system)s::<font color="red">%(rhost)s</font>'
|
||||
|
||||
self.flip = ' bgcolor="#dddddd"'
|
||||
|
||||
self.line_rep = '<tr%s><td valign="top" width="15%%">%s</td><td valign="top" width="15%%">%s</td><td width="70%%">%s</td></tr>\n'
|
||||
|
||||
##
|
||||
# LINE MATCHING ROUTINES
|
||||
#
|
||||
def general_ignore(self, linemap):
|
||||
restuple = (self.ignore, None, None, None)
|
||||
return {restuple: 1}
|
||||
|
||||
def pam_failure(self, linemap):
|
||||
action = self.failure
|
||||
self.logger.put(5, 'pam_failure invoked')
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
service = self._get_pam_service(message)
|
||||
mo = self.pam_failure_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd pam failure string: %s' % message)
|
||||
return None
|
||||
byuser, rhost = mo.groups()
|
||||
mo = self.pam_failure_user_re.search(message)
|
||||
if mo: user = mo.group(1)
|
||||
else: user = 'unknown'
|
||||
if ((service == 'xscreensaver' and user == 'root')
|
||||
or service == 'sshd' or service == 'imap'):
|
||||
##
|
||||
# xscreensaver will always fail as root.
|
||||
# SSHD is better handled by sshd part itself.
|
||||
# Imap failures are caught by imap routines.
|
||||
# Ignore these.
|
||||
#
|
||||
result = self.general_ignore(linemap)
|
||||
return result
|
||||
mo = self.pam_failure_more_re.search(message)
|
||||
if mo: mult += int(mo.group(1))
|
||||
restuple = self._mk_restuple(action, system, service, user,
|
||||
byuser, rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def pam_open(self, linemap):
|
||||
action = self.open
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
service = self._get_pam_service(message)
|
||||
if service in self.pam_ignore:
|
||||
##
|
||||
# the service will do a much better job.
|
||||
#
|
||||
result = self.general_ignore(linemap)
|
||||
return result
|
||||
mo = self.pam_open_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd pam open string: %s' % message)
|
||||
return None
|
||||
user, byuser, byuid = mo.groups()
|
||||
if byuser == '': byuser = self.getuname(int(byuid))
|
||||
restuple = self._mk_restuple(action, system, service, user, byuser, '', linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def pam_baduser(self, linemap):
|
||||
action = self.failure
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.pam_baduser_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd pam bad user string: %s' % message)
|
||||
return None
|
||||
user = mo.group(1)
|
||||
service = self._get_pam_service(message)
|
||||
restuple = self._mk_restuple(action, system, service, user, '', '', linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def pam_chelper_failure(self, linemap):
|
||||
action = self.failure
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.pam_chelper_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd pam console helper string: %s' % message)
|
||||
return None
|
||||
user = mo.group(1)
|
||||
service = self._get_pam_service(message)
|
||||
restuple = self._mk_restuple(action, system, service, user, '', '', linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def pam_krb5_open(self, linemap):
|
||||
action = self.open
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.pam_krb5_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd pam_krb5 succeeds line: %s' % message)
|
||||
return None
|
||||
service = mo.group(1)
|
||||
user = mo.group(2)
|
||||
if service == 'sshd':
|
||||
##
|
||||
# sshd_open will do a much better job.
|
||||
#
|
||||
result = self.general_ignore(linemap)
|
||||
return result
|
||||
restuple = self._mk_restuple(action, system, service, user, '', '', linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def pam_krb5_failure(self, linemap):
|
||||
action = self.failure
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.pam_krb5_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd pam_krb5 failure line: %s' % message)
|
||||
return None
|
||||
service = mo.group(1)
|
||||
user = mo.group(2)
|
||||
if ((service == 'xscreensaver' and user == 'root')
|
||||
or service == 'sshd' or service == 'imap'):
|
||||
##
|
||||
# xscreensaver will always fail as root.
|
||||
# SSHD is better handled by sshd part itself.
|
||||
# Imap failures are caught by imap routines.
|
||||
# Ignore these.
|
||||
#
|
||||
result = self.general_ignore(linemap)
|
||||
return result
|
||||
restuple = self._mk_restuple(action, system, service, user, '', '', linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def xinetd_start(self, linemap):
|
||||
action = self.open
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.xinetd_start_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd xinetd start string: %s' % message)
|
||||
return None
|
||||
service = mo.group(1)
|
||||
if service in self.xinetd_ignore:
|
||||
##
|
||||
# the service will do a much better job.
|
||||
#
|
||||
result = self.general_ignore(linemap)
|
||||
return result
|
||||
restuple = self._mk_restuple(action, system, service, '', '', '', linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def sshd_open(self, linemap):
|
||||
action = self.open
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
ruser = ''
|
||||
mo1 = self.sshd_open_ruser_re.search(message)
|
||||
mo2 = self.sshd_open_re.search(message)
|
||||
if mo1: method, user, rhost, ruser, service = mo1.groups()
|
||||
elif mo2: method, user, rhost, service = mo2.groups()
|
||||
else:
|
||||
self.logger.put(3, 'Odd sshd open string: %s' % message)
|
||||
return None
|
||||
method = self.sshd_methods.get(method, '??')
|
||||
rhost = self.gethost(rhost)
|
||||
if not service: service = 'ssh1'
|
||||
service = '%s(%s)' % (service, method)
|
||||
restuple = self._mk_restuple(action, system, service, user,
|
||||
ruser, rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def sshd_failure(self, linemap):
|
||||
action = self.failure
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.sshd_fail_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd sshd FAILURE string: %s' % message)
|
||||
return None
|
||||
method, user, rhost, service = mo.groups()
|
||||
method = self.sshd_methods.get(method, '??')
|
||||
rhost = self.gethost(rhost)
|
||||
if not service: service = 'ssh1'
|
||||
service = '%s(%s)' % (service, method)
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def uw_imap_failure(self, linemap):
|
||||
action = self.failure
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
service = self._get_uw_imap_service(message)
|
||||
service = '%s(uw)' % service
|
||||
mo = self.uw_imap_fail_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd imap FAILURE string: %s' % message)
|
||||
return None
|
||||
user, rhost = mo.groups()
|
||||
rhost = self.gethost(rhost)
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def uw_imap_open(self, linemap):
|
||||
action = self.open
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
service = self._get_uw_imap_service(message)
|
||||
service = '%s(uw)' % service
|
||||
mo = self.uw_imap_open_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd imap open string: %s' % message)
|
||||
return None
|
||||
user, rhost = mo.groups()
|
||||
rhost = self.gethost(rhost)
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def dovecot_open(self, linemap):
|
||||
action = self.open
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
service = 'imap(dc)'
|
||||
mo = self.dovecot_open_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd dovecot OPEN string: %s' % message)
|
||||
return None
|
||||
user, rhost = mo.groups()
|
||||
rhost = self.gethost(rhost)
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def dovecot_failure(self, linemap):
|
||||
action = self.failure
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
service = 'imap(dc)'
|
||||
mo = self.dovecot_failure_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd dovecot FAILURE string: %s' % message)
|
||||
return None
|
||||
rhost = mo.group(1)
|
||||
rhost = self.gethost(rhost)
|
||||
user = 'unknown'
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def courier_open(self, linemap):
|
||||
action = self.open
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.courier_open_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd courier OPEN string: %s' % message)
|
||||
return None
|
||||
service, user, rhost = mo.groups()
|
||||
service = '%s(cr)' % service
|
||||
rhost = self.gethost(rhost)
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def courier_failure(self, linemap):
|
||||
action = self.failure
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.courier_failure_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd courier FAILURE string: %s' % message)
|
||||
return None
|
||||
service, rhost = mo.groups()
|
||||
service = '%s(cr)' % service
|
||||
rhost = self.gethost(rhost)
|
||||
user = 'unknown'
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def proftpd_open(self, linemap):
|
||||
action = self.open
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.proftpd_open_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd ProFTPD OPEN string: %s' % message)
|
||||
return None
|
||||
service = 'ftp(pro)'
|
||||
rhost, user = mo.groups()
|
||||
rhost = self.gethost(rhost)
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def proftpd_failure(self, linemap):
|
||||
action = self.failure
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.proftpd_failure_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd ProFTPD FAILURE string: %s' % message)
|
||||
return None
|
||||
service = 'ftp(pro)'
|
||||
rhost, user = mo.groups()
|
||||
rhost = self.gethost(rhost)
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def imp2_failure(self, linemap):
|
||||
action = self.failure
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.imp2_fail_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd IMP failure string: %s' % message)
|
||||
return None
|
||||
rhost, system, user = mo.groups()
|
||||
rhost = self.gethost(rhost)
|
||||
service = 'IMP2'
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def imp2_open(self, linemap):
|
||||
action = self.open
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.imp2_open_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd IMP open string: %s' % message)
|
||||
return None
|
||||
rhost, system, user = mo.groups()
|
||||
rhost = self.gethost(rhost)
|
||||
service = 'IMP2'
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def imp3_failure(self, linemap):
|
||||
action = self.failure
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.imp3_fail_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd IMP failure string: %s' % message)
|
||||
return None
|
||||
rhost, system, user = mo.groups()
|
||||
rhost = self.gethost(rhost)
|
||||
service = 'IMP3'
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def imp3_open(self, linemap):
|
||||
action = self.open
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.imp3_open_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd IMP open string: %s' % message)
|
||||
return None
|
||||
user, rhost, system = mo.groups()
|
||||
rhost = self.gethost(rhost)
|
||||
service = 'IMP3'
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def cyrus_failure(self,linemap):
|
||||
action = self.failure
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
service = self._get_cyrus_service(message)
|
||||
mo = self.cyrus_fail_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd cyrus FAILURE string: %s' % message)
|
||||
return None
|
||||
rhost, user = mo.groups()
|
||||
rhost = self.gethost(rhost)
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def cyrus_open(self,linemap):
|
||||
action = self.open
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
service = self._get_cyrus_service(message)
|
||||
mo = self.cyrus_open_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd cyrus open string: %s' % message)
|
||||
return None
|
||||
rhost, user = mo.groups()
|
||||
rhost = self.gethost(rhost)
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def qpopper_failure(self, linemap):
|
||||
action = self.failure
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.qpopper_fail_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd qpopper FAILURE string: %s' % message)
|
||||
return None
|
||||
user, rhost = mo.groups()
|
||||
rhost = self.gethost(rhost)
|
||||
service = 'qpopper'
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
|
||||
def qpopper_open(self, linemap):
|
||||
action = self.open
|
||||
system, message, mult = self.get_smm(linemap)
|
||||
mo = self.qpopper_open_re.search(message)
|
||||
if not mo:
|
||||
self.logger.put(3, 'Odd qpopper open string: %s' % message)
|
||||
return None
|
||||
user, rhost = mo.groups()
|
||||
rhost = self.gethost(rhost)
|
||||
service = 'qpopper'
|
||||
restuple = self._mk_restuple(action, system, service, user, '', rhost, linemap['stamp'])
|
||||
return {restuple: mult}
|
||||
##
|
||||
# HELPER METHODS
|
||||
#
|
||||
def _mk_restuple(self, action, system, service, user, byuser, rhost, stamp):
|
||||
if user == '': user = 'unknown'
|
||||
if user == 'root' or user == 'ROOT':
|
||||
action += 10
|
||||
remote = self._mk_userat(byuser, rhost)
|
||||
restuple = (action, system, service, remote, stamp)
|
||||
else:
|
||||
if rhost:
|
||||
match = 0
|
||||
for domain_re in self.safe_domains:
|
||||
if domain_re.search(rhost):
|
||||
match = 1
|
||||
break
|
||||
if not match:
|
||||
tmp = {'system': system, 'rhost': rhost}
|
||||
system = self.untrusted_host % tmp
|
||||
restuple = (action, user, service, system, stamp)
|
||||
return restuple
|
||||
|
||||
def _mk_dots(self, str, lim):
|
||||
if len(str) > lim:
|
||||
start = -(lim-2)
|
||||
str = '..' + str[start:]
|
||||
return str
|
||||
|
||||
def _get_pam_service(self, str):
|
||||
service = 'unknown'
|
||||
mo = self.pam_service_re.search(str)
|
||||
if mo: service = mo.group(1)
|
||||
return service
|
||||
|
||||
def _get_uw_imap_service(self, str):
|
||||
service = 'unknown'
|
||||
mo = self.uw_imap_service_re.search(str)
|
||||
if mo: service = mo.group(1)
|
||||
return service
|
||||
|
||||
def _mk_userat(self, user, host):
|
||||
if user and host: userat = '%s@%s' % (user, host)
|
||||
elif user: userat = user
|
||||
elif host: userat = '@%s' % host
|
||||
else: userat = 'unknown'
|
||||
return userat
|
||||
|
||||
def _get_cyrus_service(self, str):
|
||||
service = 'unknown'
|
||||
mo = self.cyrus_service_re.search(str)
|
||||
if mo: service = mo.group(1)
|
||||
return service
|
||||
|
||||
|
||||
|
||||
def _check_for_login(self, username, service, hostname, tid):
|
||||
# check if we have a login which matches in the db,
|
||||
|
||||
if not os.path.exists(self.logins_db):
|
||||
return False
|
||||
|
||||
p = (username, service, hostname, self.last_entry)
|
||||
q = "select * from logins where username=? and service=? and host=? and pkey <= ?"
|
||||
if not self.db_cx:
|
||||
self._db_cx()
|
||||
|
||||
cur = self.db_cx.cursor()
|
||||
ob = executeSQL(cur, q, p)
|
||||
for i in ob:
|
||||
# if we get any matches if they match within the fuzzed time then
|
||||
# don't show it
|
||||
if abs(tid - i[7]) <= self.time_fuzz*60:
|
||||
return True
|
||||
return False
|
||||
|
||||
def _add_login(self, username, action, hostname, timestamp, service, u_from=None):
|
||||
if not self.db_cx:
|
||||
self._db_cx()
|
||||
|
||||
cur = self.db_cx.cursor()
|
||||
t_st = time.localtime(int(timestamp))
|
||||
time_in_day = int(t_st[3]*60) + int(t_st[4])
|
||||
q = "insert into logins values (NULL, ?, ?, ?, ?, ?, ?, ?)"
|
||||
p = (action, username, hostname, u_from, service, timestamp, time_in_day)
|
||||
cur.execute(q, p)
|
||||
|
||||
|
||||
def _db_cx(self):
|
||||
if not os.path.exists(self.logins_db):
|
||||
self.db_cx = self._setup_logins_db()
|
||||
else:
|
||||
self.db_cx = sqlite.Connection(self.logins_db)
|
||||
|
||||
q = "select max(pkey) from logins"
|
||||
last_e = executeSQL(self.db_cx.cursor(), q)
|
||||
val = last_e.fetchone()[0]
|
||||
if not val:
|
||||
self.last_entry = 0
|
||||
else:
|
||||
self.last_entry = val
|
||||
|
||||
def _setup_logins_db(self):
|
||||
schema = [
|
||||
"""PRAGMA synchronous="OFF";""",
|
||||
"""CREATE TABLE logins ( pkey INTEGER PRIMARY KEY, action INTEGER,
|
||||
username TEXT, host TEXT, u_from TEXT, service TEXT,
|
||||
stamp INTEGER, time_in_day INTEGER);""",
|
||||
]
|
||||
|
||||
cx = sqlite.Connection(self.logins_db)
|
||||
cursor = cx.cursor()
|
||||
for cmd in schema:
|
||||
executeSQL(cursor, cmd)
|
||||
|
||||
return cx
|
||||
|
||||
##
|
||||
# FINALIZE!!
|
||||
#
|
||||
def finalize(self, rs):
|
||||
logger = self.logger
|
||||
##
|
||||
# Prepare report
|
||||
#
|
||||
report = ''
|
||||
rep = {}
|
||||
|
||||
# FIXME
|
||||
# go through each item in the rs
|
||||
# feed them into the db
|
||||
# pull back from the db all the info you need for the report
|
||||
# simplifies a lot of this code
|
||||
|
||||
# chuck it all into the db
|
||||
for (rt,count) in rs.items():
|
||||
if rt[0] in (self.root_failure, self.root_open):
|
||||
(action, host, service, remote, stamp) = rt
|
||||
user = 'root'
|
||||
elif rt[0] in (self.open, self.failure):
|
||||
(action, user, service, host, stamp) = rt
|
||||
remote = 'NULL'
|
||||
else:
|
||||
continue
|
||||
if user in self.ignore_users:
|
||||
continue
|
||||
for num in range(0, count):
|
||||
self._add_login(user, action, host, stamp, service, remote)
|
||||
self.db_cx.commit()
|
||||
|
||||
#return "lalallala"
|
||||
|
||||
for action in [self.root_failure, self.root_open,
|
||||
self.failure, self.open]:
|
||||
rep[action] = ''
|
||||
per_user = {}
|
||||
flipper = ''
|
||||
q = """select distinct username, service, host from logins where action = ? and pkey > ?"""
|
||||
p = (action, self.last_entry)
|
||||
act_tuple = [(i[0],i[1], i[2]) for i in executeSQL(self.db_cx.cursor(), q, p)]
|
||||
|
||||
for entry in act_tuple:
|
||||
username = entry[0]
|
||||
if username not in per_user:
|
||||
per_user[username] = {}
|
||||
service = entry[1]
|
||||
if service not in per_user[username]:
|
||||
per_user[username][service] = []
|
||||
hn = entry[2]
|
||||
q = """select time_in_day from logins where username = ? and host = ? and service = ? and action = ? and pkey > ?"""
|
||||
p = (username, hn, service, action, self.last_entry)
|
||||
|
||||
this_logins_times = [row[0] for row in executeSQL(self.db_cx.cursor(), q, p)]
|
||||
count = 0
|
||||
for t in this_logins_times:
|
||||
if not self._check_for_login(username, service, hn, t):
|
||||
# DEBUG print 'new login %s %s %s %s' % (username, service, hn, t)
|
||||
count += 1
|
||||
|
||||
if count:
|
||||
per_user[username][service].append('%s(%d)' % (hn, count))
|
||||
|
||||
blank = 0
|
||||
for username in sorted(per_user):
|
||||
if flipper: flipper = ''
|
||||
else: flipper = self.flip
|
||||
for (svc,reps) in per_user[username].items():
|
||||
if blank: key = ' '
|
||||
else: blank = 1
|
||||
if reps:
|
||||
rep[action] += self.line_rep % (flipper, username,
|
||||
svc, ', '.join(reps))
|
||||
|
||||
if rep[self.root_failure]:
|
||||
report += self.subreport_wrap % (self.root_failures_title,
|
||||
rep[self.root_failure])
|
||||
if rep[self.root_open]:
|
||||
report += self.subreport_wrap % (self.root_logins_title,
|
||||
rep[self.root_open])
|
||||
if rep[self.failure]:
|
||||
report += self.subreport_wrap % (self.user_failures_title,
|
||||
rep[self.failure])
|
||||
if rep[self.open]:
|
||||
report += self.subreport_wrap % (self.user_logins_title,
|
||||
rep[self.open])
|
||||
|
||||
report = self.report_wrap % report
|
||||
|
||||
if self.oldest_to_keep:
|
||||
q = """delete from logins where stamp < ?"""
|
||||
p = (self.oldest_to_keep,)
|
||||
executeSQL(self.db_cx.cursor(), q, p)
|
||||
self.db_cx.commit()
|
||||
|
||||
return report
|
||||
|
||||
if __name__ == '__main__':
|
||||
from epylog.helpers import ModuleTest
|
||||
ModuleTest(logins_mod, sys.argv)
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[module]
|
||||
desc = Rsyncd
|
||||
exec = /usr/share/epylog/modules/rsyncd_mod.py
|
||||
files = /var/log/messages[.#]
|
||||
enabled = no
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 7
|
||||
|
||||
[conf]
|
||||
##
|
||||
# Report this many "top ranking hosts"
|
||||
#
|
||||
report_top = 10
|
|
@ -1,219 +0,0 @@
|
|||
#!/usr/bin/python -tt
|
||||
"""
|
||||
Rsyncd log parsing module for Epylog
|
||||
"""
|
||||
|
||||
##
|
||||
# Copyright (C) 2003 by Duke University
|
||||
# Written by Seth Vidal <skvidal at phy.duke.edu>
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
# 02111-1307, USA.
|
||||
#
|
||||
|
||||
|
||||
import sys
|
||||
import re
|
||||
|
||||
##
|
||||
# This is for testing purposes, so you can invoke this from the
|
||||
# modules directory. See also the testing notes at the end of the
|
||||
# file.
|
||||
#
|
||||
sys.path.insert(0, '../py/')
|
||||
from epylog import Result, InternalModule
|
||||
|
||||
class rsyncd_mod(InternalModule):
|
||||
##
|
||||
# opts: is a map with extra options set in
|
||||
# [conf] section of the module config, or on the
|
||||
# command line using -o flag to the module.
|
||||
# logger: A logging object. API:
|
||||
# logger.put(loglvl, 'Message')
|
||||
# Only critical stuff needs to go onto lvl 0.
|
||||
# Common output goes to lvl 1.
|
||||
# Others are debug levels.
|
||||
#
|
||||
def __init__(self, opts, logger):
|
||||
##
|
||||
# Do a "super-init" so the class we are subclassing gets
|
||||
# instantiated.
|
||||
#
|
||||
InternalModule.__init__(self)
|
||||
self.logger = logger
|
||||
##
|
||||
# Convenience
|
||||
#
|
||||
rc = re.compile
|
||||
|
||||
self.regex_map = {
|
||||
rc('rsyncd\[\d+\]: rsync on'): self.rsync_hosts,
|
||||
rc('rsyncd\[\d+\]: (?:sent|wrote)\s\S*\sbytes'): self.rsync_results
|
||||
}
|
||||
self.topcount = int(opts.get('report_top', 5)) #get report_top, default to 5 if not set
|
||||
ig_s = opts.get('ignore_hosts', '')
|
||||
ig_s.replace(',',' ')
|
||||
self.ignore_hosts = ig_s.split(' ')
|
||||
# dict to store all of our data
|
||||
self.rsync_pid_bytes = {}
|
||||
self.rsync_pid_host = {}
|
||||
self.rsync_host_loc = rc('rsyncd\[(\d+)\]: rsync\son\s(\S*)\sfrom\s.*\((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\)')
|
||||
self.rsync_bytes = rc('rsyncd\[(\d+)\]: (?:sent|wrote)\s(\d+) bytes (?:read|received)\s(\d+) bytes total size (\d+)')
|
||||
|
||||
def rsync_hosts(self, linemap):
|
||||
(sys, msg, multi) = self.get_smm(linemap)
|
||||
pid, loc, ip = self.rsync_host_loc.search(msg).groups()
|
||||
host = self.gethost(ip)
|
||||
if host not in self.ignore_hosts:
|
||||
self.rsync_pid_host[pid] = (host, loc)
|
||||
return {(loc, host): 1}
|
||||
|
||||
def rsync_results(self, linemap):
|
||||
(sys, msg, multi) = self.get_smm(linemap)
|
||||
pid, wbytes, rbytes, tbytes = self.rsync_bytes.search(msg).groups()
|
||||
self.rsync_pid_bytes[pid] = (wbytes, rbytes, tbytes)
|
||||
return {(pid, wbytes): 1}
|
||||
|
||||
def _uniq(self, s):
|
||||
"""Return a list of the elements in s, but without duplicates.
|
||||
|
||||
For example, unique([1,2,3,1,2,3]) is some permutation of [1,2,3],
|
||||
unique("abcabc") some permutation of ["a", "b", "c"], and
|
||||
unique(([1, 2], [2, 3], [1, 2])) some permutation of
|
||||
[[2, 3], [1, 2]].
|
||||
|
||||
For best speed, all sequence elements should be hashable. Then
|
||||
unique() will usually work in linear time.
|
||||
|
||||
If not possible, the sequence elements should enjoy a total
|
||||
ordering, and if list(s).sort() doesn't raise TypeError it's
|
||||
assumed that they do enjoy a total ordering. Then unique() will
|
||||
usually work in O(N*log2(N)) time.
|
||||
|
||||
If that's not possible either, the sequence elements must support
|
||||
equality-testing. Then unique() will usually work in quadratic
|
||||
time.
|
||||
"""
|
||||
|
||||
n = len(s)
|
||||
if n == 0:
|
||||
return []
|
||||
|
||||
# Try using a dict first, as that's the fastest and will usually
|
||||
# work. If it doesn't work, it will usually fail quickly, so it
|
||||
# usually doesn't cost much to *try* it. It requires that all the
|
||||
# sequence elements be hashable, and support equality comparison.
|
||||
u = {}
|
||||
try:
|
||||
for x in s:
|
||||
u[x] = 1
|
||||
except TypeError:
|
||||
del u # move on to the next method
|
||||
else:
|
||||
return u.keys()
|
||||
|
||||
# We can't hash all the elements. Second fastest is to sort,
|
||||
# which brings the equal elements together; then duplicates are
|
||||
# easy to weed out in a single pass.
|
||||
# NOTE: Python's list.sort() was designed to be efficient in the
|
||||
# presence of many duplicate elements. This isn't true of all
|
||||
# sort functions in all languages or libraries, so this approach
|
||||
# is more effective in Python than it may be elsewhere.
|
||||
try:
|
||||
t = list(s)
|
||||
t.sort()
|
||||
except TypeError:
|
||||
del t # move on to the next method
|
||||
else:
|
||||
assert n > 0
|
||||
last = t[0]
|
||||
lasti = i = 1
|
||||
while i < n:
|
||||
if t[i] != last:
|
||||
t[lasti] = last = t[i]
|
||||
lasti += 1
|
||||
i += 1
|
||||
return t[:lasti]
|
||||
|
||||
# Brute force is all that's left.
|
||||
u = []
|
||||
for x in s:
|
||||
if x not in u:
|
||||
u.append(x)
|
||||
return u
|
||||
|
||||
def _sortByVal(self, dict, reverse=0):
|
||||
if type(dict) is not type({}): return []
|
||||
keys = dict.keys()
|
||||
s = map(lambda k: (dict[k], k), keys)
|
||||
s.sort()
|
||||
if reverse: s.reverse()
|
||||
return s
|
||||
|
||||
def finalize(self, resultset):
|
||||
##
|
||||
# A resultset is a dictionary of all values returned by your
|
||||
# handler functions -- except they are unique and show how many
|
||||
# times each tuple occurs.
|
||||
# See epylog.Result for some convenience methods to use when
|
||||
# processing and analyzing the results.
|
||||
#
|
||||
|
||||
hostloc = {} # key = host, val = [loc, loc, loc]
|
||||
hosttotal = {} # key = host val = totalwbytes
|
||||
|
||||
foo = "<table border=0>\n\t<tr>\n"
|
||||
|
||||
for pid in self.rsync_pid_host.keys():
|
||||
(host, loc) = self.rsync_pid_host[pid]
|
||||
if self.rsync_pid_bytes.has_key(pid):
|
||||
if not hostloc.has_key(host):
|
||||
hostloc[host] = []
|
||||
if not hosttotal.has_key(host):
|
||||
hosttotal[host] = 0L
|
||||
hostloc[host].append(loc)
|
||||
bytes = long(self.rsync_pid_bytes[pid][0])
|
||||
hosttotal[host] += bytes
|
||||
|
||||
for host in hostloc.keys():
|
||||
hostloc[host] = self._uniq(hostloc[host])
|
||||
|
||||
hosts = self._sortByVal(hosttotal, 1)
|
||||
count = 0L
|
||||
for (tot,host) in hosts[:self.topcount]:
|
||||
if count % 2:
|
||||
bgcolor = "#dddddd"
|
||||
else:
|
||||
bgcolor = "#ffffff"
|
||||
count+=1
|
||||
line = '\t\t<td bgcolor=%s valign=\"top\">%s</td>\n' % (bgcolor, host)
|
||||
line = line + '\t\t<td bgcolor=%s valign="top">\n' % bgcolor
|
||||
for loc in hostloc[host]:
|
||||
line = line + '\t\t\t%s<br>\n' % loc
|
||||
line = line + '\t\t</td>\n'
|
||||
size, marker = self.mk_size_unit(hosttotal[host])
|
||||
line = line + '\t\t<td bgcolor=%s valign="top">%s%s</td>\n' % (bgcolor, size, marker)
|
||||
line = line + '\t</tr>\n'
|
||||
foo = foo + line
|
||||
foo = foo + '</table>\n'
|
||||
return foo
|
||||
|
||||
##
|
||||
# This is useful when testing your module out.
|
||||
# Invoke without command-line parameters to learn about the proper
|
||||
# invocation.
|
||||
#
|
||||
if __name__ == '__main__':
|
||||
from epylog.helpers import ModuleTest
|
||||
ModuleTest(rsyncd_mod, sys.argv)
|
|
@ -1,11 +0,0 @@
|
|||
[module]
|
||||
desc = SELinux Report
|
||||
exec = /usr/share/epylog/modules/selinux_mod.py
|
||||
files = /var/log/messages[.#]
|
||||
enabled = yes
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 5
|
||||
|
||||
[conf]
|
||||
enable_selinux = 1
|
|
@ -1,116 +0,0 @@
|
|||
#!/usr/bin/python -tt
|
||||
"""
|
||||
Reports on selinux messages
|
||||
|
||||
Jeremy Kindy (kindyjd at wfu.edu), Wake Forest University
|
||||
"""
|
||||
|
||||
import sys
|
||||
import re
|
||||
|
||||
##
|
||||
# This is for testing purposes, so you can invoke this from the
|
||||
# modules directory. See also the testing notes at the end of the
|
||||
# file.
|
||||
#
|
||||
sys.path.insert(0, '../py/')
|
||||
from epylog import InternalModule
|
||||
|
||||
class selinux_mod(InternalModule):
|
||||
def __init__(self, opts, logger):
|
||||
InternalModule.__init__(self)
|
||||
self.logger = logger
|
||||
self.logger.put(3, 'initializing selinux')
|
||||
rc = re.compile
|
||||
|
||||
self.ignore = 0
|
||||
self.preventing = 1
|
||||
|
||||
selinux_map = {
|
||||
rc('.*setroubleshoot\: SELinux is preventing'): self.selinux
|
||||
}
|
||||
|
||||
do_selinux = int(opts.get('enable_selinux', '1'))
|
||||
|
||||
self.regex_map = {}
|
||||
if do_selinux: self.regex_map.update(selinux_map)
|
||||
|
||||
self.selinux_message_re = rc('setroubleshoot: (.*). For complete SELinux')
|
||||
|
||||
self.selinux_title = '<font color="blue">SELinux Report</font>'
|
||||
self.selinux_preventing_title = '<font color="blue">SELinux Prevention Report</font>'
|
||||
|
||||
self.report_wrap = '<table border="0" width="100%%" rules="cols" cellpadding="2">%s</table>'
|
||||
self.subreport_wrap = '<tr><th colspan="2" align="left"><h3>%s</h3></th></tr>\n%s'
|
||||
|
||||
self.line_rep = '<tr%s><td valign="top" width="25%%">%s</td><td valign="top" width="75%%">%s</td></tr>\n'
|
||||
|
||||
self.flip = ' bgcolor="#dddddd"'
|
||||
|
||||
|
||||
##
|
||||
# Line-matching routines
|
||||
#
|
||||
def selinux(self, linemap):
|
||||
action = self.preventing
|
||||
self.logger.put(3, 'selinux invoked')
|
||||
sys, msg, mult = self.get_smm(linemap)
|
||||
|
||||
self.logger.put(3, 'test selinux %d' % mult)
|
||||
message = self._get_selinux_message(msg)
|
||||
self.logger.put(3, 'selinux message: %s' % message)
|
||||
|
||||
restuple = self._mk_restuple(sys, action, message)
|
||||
self.logger.put(3, 'selinux finished')
|
||||
return {restuple: mult}
|
||||
|
||||
|
||||
##
|
||||
# Helpers
|
||||
#
|
||||
def _mk_restuple(self, sys, action, message):
|
||||
return (action, message, sys)
|
||||
|
||||
def _get_selinux_message(self, str):
|
||||
message = 'unknown'
|
||||
mo = self.selinux_message_re.search(str)
|
||||
if mo: message = mo.group(1)
|
||||
return message
|
||||
|
||||
|
||||
####
|
||||
# Finalize the report
|
||||
def finalize(self, rs):
|
||||
logger = self.logger
|
||||
##
|
||||
# Prepare report
|
||||
#
|
||||
report = ''
|
||||
rep = {}
|
||||
|
||||
# (action, message)
|
||||
for action in [self.preventing]:
|
||||
rep[action] = ''
|
||||
flipper = ''
|
||||
for message in rs.get_distinct((action,)):
|
||||
if flipper: flipper = ''
|
||||
else: flipper = self.flip
|
||||
service_rep = []
|
||||
|
||||
for system in rs.get_distinct((action, message,)):
|
||||
service_rep.append(system)
|
||||
|
||||
system_list = ', '.join(service_rep)
|
||||
rep[action] += self.line_rep % (flipper, message, system_list)
|
||||
|
||||
if rep[self.preventing]:
|
||||
report += self.subreport_wrap % (self.selinux_preventing_title, rep[self.preventing])
|
||||
logger.put(3, 'selinux report: self.preventing added')
|
||||
|
||||
report = self.report_wrap % report
|
||||
return report
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from epylog.helpers import ModuleTest
|
||||
ModuleTest(selinux_mod, sys.argv)
|
|
@ -1,11 +0,0 @@
|
|||
[module]
|
||||
desc = Sudo Report
|
||||
exec = /usr/share/epylog/modules/sudo_mod.py
|
||||
files = /var/log/secure[.#]
|
||||
enabled = yes
|
||||
internal = yes
|
||||
outhtml = yes
|
||||
priority = 5
|
||||
|
||||
[conf]
|
||||
enable_sudo = 1
|
|
@ -1,191 +0,0 @@
|
|||
#!/usr/bin/python -tt
|
||||
"""
|
||||
Reports on sudo usage by users.
|
||||
|
||||
Jeremy Kindy (kindyjd at wfu.edu), Wake Forest University
|
||||
"""
|
||||
|
||||
import sys
|
||||
import re
|
||||
|
||||
##
|
||||
# This is for testing purposes, so you can invoke this from the
|
||||
# modules directory. See also the testing notes at the end of the
|
||||
# file.
|
||||
#
|
||||
sys.path.insert(0, '../py/')
|
||||
from epylog import InternalModule
|
||||
|
||||
class sudo_mod(InternalModule):
|
||||
def __init__(self, opts, logger):
|
||||
InternalModule.__init__(self)
|
||||
self.logger = logger
|
||||
self.logger.put(2, 'initializing sudo')
|
||||
rc = re.compile
|
||||
|
||||
self.ignore = 0
|
||||
self.open = 1
|
||||
self.not_allowed = 2
|
||||
|
||||
sudo_map = {
|
||||
rc('.*sudo\:\s+\S+\s\:\sTTY'): self.sudo,
|
||||
rc('.*sudo:'): self.sudo_na
|
||||
}
|
||||
|
||||
do_sudo = int(opts.get('enable_sudo', '1'))
|
||||
|
||||
self.regex_map = {}
|
||||
if do_sudo: self.regex_map.update(sudo_map)
|
||||
|
||||
self.sudo_user_name_re = rc('sudo:\s*(\S*)')
|
||||
self.sudo_as_user_re = rc('.*USER=(\S*)\s\;\sCOMMAND')
|
||||
self.sudo_command_name_re = rc('.*COMMAND=(.*)')
|
||||
self.sudo_error_message_re = rc('sudo:\s*\S*\s+:\s+(.*)\s+;\s+TTY')
|
||||
|
||||
|
||||
self.sudo_title = '<font color="blue">User Sudo Report</font>'
|
||||
self.sudo_open_title = '<font color="blue">User Sudo Report</font>'
|
||||
self.sudo_not_allowed_title = '<font color="red">Disallowed Sudo Commands</font>'
|
||||
|
||||
self.report_wrap = '<table border="0" width="100%%" rules="cols" cellpadding="2">%s</table>'
|
||||
self.subreport_wrap = '<tr><th colspan="5" align="left"><h3>%s</h3></th></tr>\n%s'
|
||||
self.subreport_na_wrap = '<tr><th colspan="5" align="left"><h3>%s</h3></th></tr>\n%s'
|
||||
|
||||
self.line_rep = '<tr%s><td valign="top" width="15%%">%s</td><td valign="top" width="45%%" colspan="2">%s</td><td width="25%%">%s</td><td width="15%%">%s</td></tr>\n'
|
||||
self.line_rep_na = '<tr%s><td valign="top" width="15%%">%s</td><td valign="top" width="30%%">%s</td><td valign="top" width="15%%">%s</td><td width="25%%">%s</td><td width="15%%">%s</td></tr>\n'
|
||||
|
||||
self.flip = ' bgcolor="#dddddd"'
|
||||
|
||||
|
||||
##
|
||||
# Line-matching routines
|
||||
#
|
||||
def sudo(self, linemap):
|
||||
action = self.open
|
||||
self.logger.put(2, 'sudo invoked')
|
||||
sys, msg, mult = self.get_smm(linemap)
|
||||
|
||||
self.logger.put(3, 'test sudo %d' % mult)
|
||||
user = self._get_sudo_user(msg)
|
||||
self.logger.put(3, 'sudo user: %s' % user)
|
||||
asuser = self._get_sudo_as_user(msg)
|
||||
self.logger.put(3, 'sudo asuser: %s' % asuser)
|
||||
command_name = self._get_sudo_command_name(msg)
|
||||
self.logger.put(3, 'sudo command: %s' % command_name)
|
||||
|
||||
restuple = self._mk_restuple(sys, action, user, asuser, command_name, None)
|
||||
self.logger.put(2, 'sudo finished')
|
||||
return {restuple: mult}
|
||||
|
||||
def sudo_na(self, linemap):
|
||||
action = self.not_allowed
|
||||
self.logger.put(2, 'sudo_na invoked')
|
||||
sys, msg, mult = self.get_smm(linemap)
|
||||
|
||||
self.logger.put(3, 'test sudo %d' % mult)
|
||||
user = self._get_sudo_user(msg)
|
||||
self.logger.put(3, 'sudo user: %s' % user)
|
||||
asuser = self._get_sudo_as_user(msg)
|
||||
self.logger.put(3, 'sudo asuser: %s' % asuser)
|
||||
command_name = self._get_sudo_command_name(msg)
|
||||
self.logger.put(3, 'sudo command: %s' % command_name)
|
||||
error_message = self._get_sudo_error_message(msg)
|
||||
self.logger.put(3, 'sudo error_message: %s' % error_message)
|
||||
|
||||
restuple = self._mk_restuple(sys, action, user, asuser, command_name, error_message)
|
||||
self.logger.put(2, 'sudo finished')
|
||||
return {restuple: mult}
|
||||
|
||||
def sudo_ignore(self, linemap):
|
||||
restuple = self._mk_restuple(None, self.ignore, None, None, None, None)
|
||||
return {restuple: 1}
|
||||
|
||||
##
|
||||
# Helpers
|
||||
#
|
||||
def _mk_restuple(self, sys, action, user=None, asuser=None, command_name=None, error_message=None):
|
||||
return (action, user, command_name, asuser, error_message, sys)
|
||||
#return (sys, action, user, asuser, command_name)
|
||||
|
||||
def _get_sudo_user(self, str):
|
||||
user = 'unknown'
|
||||
mo = self.sudo_user_name_re.search(str)
|
||||
if mo: user = mo.group(1)
|
||||
return user
|
||||
|
||||
def _get_sudo_as_user(self, str):
|
||||
asuser = 'unknown'
|
||||
mo = self.sudo_as_user_re.search(str)
|
||||
if mo: asuser = mo.group(1)
|
||||
return asuser
|
||||
|
||||
def _get_sudo_error_message(self, str):
|
||||
pass_attempts = 0
|
||||
mo = self.sudo_error_message_re.search(str)
|
||||
if mo: pass_attempts = mo.group(1)
|
||||
return pass_attempts
|
||||
|
||||
def _get_sudo_command_name(self, str):
|
||||
command_name = 'unknown'
|
||||
mo = self.sudo_command_name_re.search(str)
|
||||
if mo: command_name = mo.group(1)
|
||||
return command_name
|
||||
|
||||
|
||||
####
|
||||
# Finalize the report
|
||||
def finalize(self, rs):
|
||||
logger = self.logger
|
||||
##
|
||||
# Prepare report
|
||||
#
|
||||
report = ''
|
||||
rep = {}
|
||||
|
||||
# (action, user, command_name, system, error_message)
|
||||
for action in [self.open, self.not_allowed]:
|
||||
rep[action] = ''
|
||||
flipper = ''
|
||||
for user in rs.get_distinct((action,)):
|
||||
#logger.put(2, 'sudo user: %s' % user)
|
||||
if flipper: flipper = ''
|
||||
else: flipper = self.flip
|
||||
service_rep = []
|
||||
blank = 0
|
||||
for command_name in rs.get_distinct((action, user)):
|
||||
for asuser in rs.get_distinct((action, user, command_name)):
|
||||
for error_message in rs.get_distinct((action, user, command_name, asuser)):
|
||||
mymap = rs.get_submap((action, user, command_name, asuser, error_message))
|
||||
#logger.put(2, 'sudo command_name: %s' % command_name)
|
||||
key2s = []
|
||||
for key2 in mymap.keys():
|
||||
hostname = key2[0]
|
||||
key2s.append('%s(%d)' % (hostname, mymap[key2]))
|
||||
hostnames = ', '.join(key2s)
|
||||
#logger.put(2, 'sudo hostnames: %s' % hostnames)
|
||||
service_rep.append([command_name, hostnames, asuser, error_message])
|
||||
for svcrep in service_rep:
|
||||
#logger.put(2, 'sudo svcrep: %s' % svcrep)
|
||||
if blank: user = ' '
|
||||
else: blank = 1
|
||||
if (action == self.open):
|
||||
rep[action] += self.line_rep % (flipper, user, svcrep[0], svcrep[1], svcrep[2])
|
||||
else:
|
||||
rep[action] += self.line_rep_na % (flipper, user, svcrep[0], svcrep[3], svcrep[1], svcrep[2])
|
||||
|
||||
|
||||
if rep[self.open]:
|
||||
report += self.subreport_wrap % (self.sudo_open_title, rep[self.open])
|
||||
logger.put(2, 'sudo report: self.open added')
|
||||
|
||||
if rep[self.not_allowed]:
|
||||
report += self.subreport_na_wrap % (self.sudo_not_allowed_title, rep[self.not_allowed])
|
||||
logger.put(2, 'sudo report: self.not_allowed added')
|
||||
|
||||
report = self.report_wrap % report
|
||||
return report
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from epylog.helpers import ModuleTest
|
||||
ModuleTest(sudo_mod, sys.argv)
|
|
@ -1,62 +0,0 @@
|
|||
---
|
||||
- name: install epylog packages
|
||||
package: state=present name={{item}}
|
||||
with_items:
|
||||
- epylog
|
||||
- mod_auth_gssapi
|
||||
tags:
|
||||
- packages
|
||||
- epylog
|
||||
|
||||
- name: create directories needed for epylog
|
||||
file: state=directory path={{ item }} owner=root mode=755
|
||||
with_items:
|
||||
- /var/lib/epylog/merged
|
||||
- /srv/web/epylog
|
||||
- /srv/web/epylog/merged
|
||||
tags:
|
||||
- epylog
|
||||
|
||||
- name: setup extra epylog modules
|
||||
copy: src={{ item }} dest=/usr/share/epylog/{{ item }}
|
||||
with_items:
|
||||
- modules/selinux_mod.py
|
||||
- modules/rsyncd_mod.py
|
||||
- modules/sudo_mod.py
|
||||
- modules/common_unparsed_mod.py
|
||||
- modules/logins_mod.py
|
||||
- modules/kojiload_mod.py
|
||||
tags:
|
||||
- epylog
|
||||
|
||||
- name: epylog cron
|
||||
copy: src=epylog-default.cron dest=/etc/{{ item }}/epylog.cron
|
||||
with_items:
|
||||
- cron.d
|
||||
- cron.daily
|
||||
tags:
|
||||
- config
|
||||
- cron
|
||||
- epylog
|
||||
|
||||
- name: copy in all the epylog merged files
|
||||
copy: src=merged dest=/etc/epylog/
|
||||
tags:
|
||||
- config
|
||||
- epylog
|
||||
|
||||
- name: epylog merged cron
|
||||
copy: src=epylog-merged.cron dest=/etc/cron.d/epylog-merged.cron
|
||||
tags:
|
||||
- config
|
||||
- cron
|
||||
- epylog
|
||||
|
||||
- name: epylog httpd config
|
||||
copy: src=epylog-web.conf dest=/etc/httpd/conf.d/epylog-web.conf
|
||||
notify:
|
||||
- reload httpd
|
||||
tags:
|
||||
- config
|
||||
- apache
|
||||
- epylog
|
Loading…
Add table
Add a link
Reference in a new issue