Skip to content

Commit aab43fc

Browse files
committed
Set loop label to prevent the passwords in rsyslog_environments from being logged
Move auth log processing to a separate file instead of running the same loop with condition many times
1 parent f68cf27 commit aab43fc

8 files changed

Lines changed: 110 additions & 110 deletions
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
---
2+
3+
- name: Create log_logins table for each log_login environment
4+
community.mysql.mysql_db:
5+
name: "{{ rsyslog_environment.db_loglogins_name }}"
6+
login_user: "{{ rsyslog_environment.db_loglogins_user }}"
7+
login_password: "{{ rsyslog_environment.db_loglogins_password }}"
8+
login_host: "{{ rsyslog_environment.db_loglogins_host }}"
9+
state: import
10+
target: /var/tmp/log_logins.sql
11+
changed_when: false
12+
13+
- name: Create lastseen table for each log_login environment
14+
community.mysql.mysql_db:
15+
name: "{{ rsyslog_environment.db_lastseen_name }}"
16+
login_user: "{{ rsyslog_environment.db_lastseen_user }}"
17+
login_password: "{{ rsyslog_environment.db_lastseen_password }}"
18+
login_host: "{{ rsyslog_environment.db_lastseen_host }}"
19+
state: import
20+
target: /var/tmp/lastseen.sql
21+
changed_when: false
22+
23+
- name: Create a python script that parses eb log_logins per environment
24+
ansible.builtin.template:
25+
src: parse_ebauth_to_mysql.py.j2
26+
dest: /usr/local/sbin/parse_ebauth_to_mysql_{{ rsyslog_environment.name }}.py
27+
mode: 0740
28+
owner: root
29+
group: root
30+
31+
- name: Create a python script that parses stepup log_logins per environment
32+
ansible.builtin.template:
33+
src: parse_stepupauth_to_mysql.py.j2
34+
dest: /usr/local/sbin/parse_stepupauth_to_mysql_{{ rsyslog_environment.name }}.py
35+
mode: 0740
36+
owner: root
37+
group: root
38+
39+
- name: Put log_logins logrotate scripts for eb
40+
ansible.builtin.template:
41+
src: logrotate_ebauth.j2
42+
dest: /etc/logrotate.d/logrotate_ebauth_{{ rsyslog_environment.name }}
43+
mode: 0644
44+
owner: root
45+
group: root
46+
47+
- name: Put log_logins logrotate scripts for stepup
48+
ansible.builtin.template:
49+
src: logrotate_stepupauth.j2
50+
dest: /etc/logrotate.d/logrotate_stepupauth_{{ rsyslog_environment.name }}
51+
mode: 0644
52+
owner: root
53+
group: root
54+
55+
- name: Create logdirectory for log_logins cleanup script
56+
ansible.builtin.file:
57+
path: "{{ rsyslog_dir }}/apps/{{ rsyslog_environment.name }}/loglogins_cleanup/"
58+
state: directory
59+
owner: root
60+
group: "{{ rsyslog_read_group }}"
61+
mode: 0750
62+
63+
- name: Put log_logins cleanup script
64+
ansible.builtin.template:
65+
src: clean_loglogins.j2
66+
dest: /usr/local/sbin/clean_loglogins_{{ rsyslog_environment.name }}
67+
owner: root
68+
group: root
69+
mode: 0700
70+
71+
- name: Create cronjobs to run the log_logins script
72+
ansible.builtin.cron:
73+
name: Delete old {{ rsyslog_environment.name }} log_login data
74+
user: root
75+
minute: "20"
76+
hour: "02"
77+
job: "/usr/local/sbin/clean_loglogins_{{ rsyslog_environment.name }}"
78+
cron_file: loglogins_cleanup_{{ rsyslog_environment.name }}

roles/rsyslog/tasks/process_auth_logs.yml

Lines changed: 7 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -9,103 +9,16 @@
99
- log_logins.sql
1010
- lastseen.sql
1111

12-
- name: Create log_logins table for each log_login environment
13-
community.mysql.mysql_db:
14-
name: "{{ item.db_loglogins_name }}"
15-
login_user: "{{ item.db_loglogins_user }}"
16-
login_password: "{{ item.db_loglogins_password }}"
17-
login_host: "{{ item.db_loglogins_host }}"
18-
state: import
19-
target: /var/tmp/log_logins.sql
20-
changed_when: false
21-
with_items: "{{ rsyslog_environments }}"
22-
when: item.db_loglogins_name is defined
23-
24-
- name: Create lastseen table for each log_login environment
25-
community.mysql.mysql_db:
26-
name: "{{ item.db_lastseen_name }}"
27-
login_user: "{{ item.db_lastseen_user }}"
28-
login_password: "{{ item.db_lastseen_password }}"
29-
login_host: "{{ item.db_lastseen_host }}"
30-
state: import
31-
target: /var/tmp/lastseen.sql
32-
changed_when: false
33-
with_items: "{{ rsyslog_environments }}"
34-
when: item.db_loglogins_name is defined
35-
3612
- name: add python mysql module for parse_ebauth_to_mysql script
3713
apt:
3814
name: python3-mysqldb
3915
state: present
4016
when: ansible_os_family == "Debian"
4117

42-
- name: Create a python script that parses eb log_logins per environment
43-
ansible.builtin.template:
44-
src: parse_ebauth_to_mysql.py.j2
45-
dest: /usr/local/sbin/parse_ebauth_to_mysql_{{ item.name }}.py
46-
mode: 0740
47-
owner: root
48-
group: root
49-
with_items: "{{ rsyslog_environments }}"
50-
when: item.db_loglogins_name is defined
51-
52-
- name: Create a python script that parses stepup log_logins per environment
53-
ansible.builtin.template:
54-
src: parse_stepupauth_to_mysql.py.j2
55-
dest: /usr/local/sbin/parse_stepupauth_to_mysql_{{ item.name }}.py
56-
mode: 0740
57-
owner: root
58-
group: root
59-
with_items: "{{ rsyslog_environments }}"
60-
when: item.db_loglogins_name is defined
61-
62-
- name: Put log_logins logrotate scripts for eb
63-
ansible.builtin.template:
64-
src: logrotate_ebauth.j2
65-
dest: /etc/logrotate.d/logrotate_ebauth_{{ item.name }}
66-
mode: 0644
67-
owner: root
68-
group: root
69-
with_items: "{{ rsyslog_environments }}"
70-
when: item.db_loglogins_name is defined
71-
72-
- name: Put log_logins logrotate scripts for stepup
73-
ansible.builtin.template:
74-
src: logrotate_stepupauth.j2
75-
dest: /etc/logrotate.d/logrotate_stepupauth_{{ item.name }}
76-
mode: 0644
77-
owner: root
78-
group: root
79-
with_items: "{{ rsyslog_environments }}"
80-
when: item.db_loglogins_name is defined
81-
82-
- name: Create logdirectory for log_logins cleanup script
83-
ansible.builtin.file:
84-
path: "{{ rsyslog_dir }}/apps/{{ item.name }}/loglogins_cleanup/"
85-
state: directory
86-
owner: root
87-
group: "{{ rsyslog_read_group }}"
88-
mode: 0750
89-
with_items: "{{ rsyslog_environments }}"
90-
when: item.db_loglogins_name is defined
91-
92-
- name: Put log_logins cleanup script
93-
ansible.builtin.template:
94-
src: clean_loglogins.j2
95-
dest: /usr/local/sbin/clean_loglogins_{{ item.name }}
96-
owner: root
97-
group: root
98-
mode: 0700
99-
with_items: "{{ rsyslog_environments }}"
100-
when: item.db_loglogins_name is defined
101-
102-
- name: Create cronjobs to run the log_logins script
103-
ansible.builtin.cron:
104-
name: Delete old {{ item.name }} log_login data
105-
user: root
106-
minute: "20"
107-
hour: "02"
108-
job: "/usr/local/sbin/clean_loglogins_{{ item.name }}"
109-
cron_file: loglogins_cleanup_{{ item.name }}
110-
with_items: "{{ rsyslog_environments }}"
111-
when: item.db_loglogins_name is defined
18+
- name: Process auth logs for each rsyslog environment
19+
ansible.builtin.include_tasks: process_auth_log_for_environment.yml
20+
loop: "{{ rsyslog_environments }}"
21+
loop_control:
22+
loop_var: rsyslog_environment
23+
label: "{{ rsyslog_environment.name }}"
24+
when: rsyslog_environment.db_loglogins_name is defined

roles/rsyslog/tasks/rsyslog_central.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@
5151
dest: /etc/rsyslog.d/templates/{{ item.name }}.conf
5252
backup: true
5353
with_items: "{{ rsyslog_environments }}"
54+
loop_control:
55+
label: "{{ item.name }}"
56+
5457
notify:
5558
- "restart rsyslog"
5659

@@ -60,6 +63,8 @@
6063
dest: /etc/rsyslog.d/rulesets/{{ item.name }}.conf
6164
backup: true
6265
with_items: "{{ rsyslog_environments }}"
66+
loop_control:
67+
label: "{{ item.name }}"
6368
notify:
6469
- "restart rsyslog"
6570

@@ -69,6 +74,8 @@
6974
dest: /etc/rsyslog.d/listeners/{{ item.name }}.conf
7075
backup: true
7176
with_items: "{{ rsyslog_environments }}"
77+
loop_control:
78+
label: "{{ item.name }}"
7279
notify:
7380
- "restart rsyslog"
7481

roles/rsyslog/templates/clean_loglogins.j2

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#!/bin/bash
22
# Script to clean up the log_logins from mySQL
3-
LOGFILE="{{ rsyslog_dir }}/apps/{{ item.name }}/loglogins_cleanup/loglogins_cleanup.log"
3+
LOGFILE="{{ rsyslog_dir }}/apps/{{ rsyslog_environment.name }}/loglogins_cleanup/loglogins_cleanup.log"
44
echo `date '+%h %d %H:%M:%S'` Starting cleanup of log_logins | tee -a $LOGFILE
55
LOGINSTAMP=$(date -d "-{{ loglogins_max_age }} months" +%Y-%m-%d)
6-
OLDESTTIMESTAMP=$(mysql -u {{ item.db_loglogins_user }} -p{{ item.db_loglogins_password }} -h {{ item.db_loglogins_host }} {{ item.db_loglogins_name }} -se "select (DATE_FORMAT(loginstamp,'%Y-%m-%d')) from log_logins order by loginstamp asc limit 1")
6+
OLDESTTIMESTAMP=$(mysql -u {{ rsyslog_environment.db_loglogins_user }} -p{{ rsyslog_environment.db_loglogins_password }} -h {{ rsyslog_environment.db_loglogins_host }} {{ rsyslog_environment.db_loglogins_name }} -se "select (DATE_FORMAT(loginstamp,'%Y-%m-%d')) from log_logins order by loginstamp asc limit 1")
77
if [ -z "$OLDESTTIMESTAMP" ]
88
then echo "No logins found in log_logins" | tee -a $LOGFILE
99
exit
@@ -21,6 +21,6 @@ if [ "$TIMESTAMPDIFF" -gt 5 ]
2121
echo "The log_login cleanup script wants to delete more than 5 days of logins on the {{ ansible_hostname }}. Please investigate" | mail -r "{{ noreply_email }}" -s "log_login script on {{ ansible_hostname }} needs attention" "{{ error_mail_to }}"
2222
exit
2323
else
24-
DELETEDROWS=$(mysql -u {{ item.db_loglogins_user }} -p{{ item.db_loglogins_password }} -h {{ item.db_loglogins_host }} -sNe "delete from log_logins where loginstamp < '$LOGINSTAMP'; select row_count();" {{ item.db_loglogins_name }})
24+
DELETEDROWS=$(mysql -u {{ rsyslog_environment.db_loglogins_user }} -p{{ rsyslog_environment.db_loglogins_password }} -h {{ rsyslog_environment.db_loglogins_host }} -sNe "delete from log_logins where loginstamp < '$LOGINSTAMP'; select row_count();" {{ rsyslog_environment.db_loglogins_name }})
2525
echo `date '+%h %d %H:%M:%S'` We have deleted $DELETEDROWS rows. | tee -a $LOGFILE
2626
fi

roles/rsyslog/templates/logrotate_ebauth.j2

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{{ rsyslog_dir }}/log_logins/{{ item.name }}/eb-authentication.log
1+
{{ rsyslog_dir }}/log_logins/{{ rsyslog_environment.name }}/eb-authentication.log
22
{
33
missingok
44
daily
@@ -10,7 +10,7 @@
1010
delaycompress
1111
create 0640 root {{ rsyslog_read_group }}
1212
postrotate
13-
/usr/local/sbin/parse_ebauth_to_mysql_{{ item.name }}.py > /dev/null
13+
/usr/local/sbin/parse_ebauth_to_mysql_{{ rsyslog_environment.name }}.py > /dev/null
1414
systemctl kill -s HUP rsyslog.service
1515
endscript
1616
}

roles/rsyslog/templates/logrotate_stepupauth.j2

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
delaycompress
1111
create 0640 root {{ rsyslog_read_group }}
1212
postrotate
13-
/usr/local/sbin/parse_stepupauth_to_mysql_{{ item.name }}.py > /dev/null
13+
# PiMe: temporarily disable parsing of the rotated stepup authentication log because to MySQL lastseen
14+
# because the first rotated log will be huge
15+
# /usr/local/sbin/parse_stepupauth_to_mysql_{{ item.name }}.py > /dev/null
1416
systemctl kill -s HUP rsyslog.service
1517
endscript
1618
}

roles/rsyslog/templates/parse_ebauth_to_mysql.py.j2

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ import json
1010
import MySQLdb
1111
from dateutil.parser import parse
1212

13-
mysql_host="{{ item.db_loglogins_host }}"
14-
mysql_user="{{ item.db_loglogins_user }}"
15-
mysql_password="{{ item.db_loglogins_password }}"
16-
mysql_db="{{ item.db_loglogins_name }}"
17-
workdir="{{ rsyslog_dir }}/log_logins/{{ item.name}}/"
13+
mysql_host="{{ rsyslog_environment.db_loglogins_host }}"
14+
mysql_user="{{ rsyslog_environment.db_loglogins_user }}"
15+
mysql_password="{{ rsyslog_environment.db_loglogins_password }}"
16+
mysql_db="{{ rsyslog_environment.db_loglogins_name }}"
17+
workdir="{{ rsyslog_dir }}/log_logins/{{ rsyslog_environment.name}}/"
1818

1919
db = MySQLdb.connect(mysql_host,mysql_user,mysql_password,mysql_db )
2020
cursor = db.cursor()

roles/rsyslog/templates/parse_stepupauth_to_mysql.py.j2

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import MySQLdb
1111
from dateutil.parser import parse
1212

1313
# Configuration variables (to be injected by Ansible/Jinja2)
14-
mysql_host="{{ item.db_loglogins_host }}"
15-
mysql_user="{{ item.db_loglogins_user }}"
16-
mysql_password="{{ item.db_loglogins_password }}"
17-
mysql_db="{{ item.db_loglogins_name }}"
18-
workdir="{{ rsyslog_dir }}/log_logins/{{ item.name}}/"
14+
mysql_host="{{ rsyslog_environment.db_loglogins_host }}"
15+
mysql_user="{{ rsyslog_environment.db_loglogins_user }}"
16+
mysql_password="{{ rsyslog_environment.db_loglogins_password }}"
17+
mysql_db="{{ rsyslog_environment.db_loglogins_name }}"
18+
workdir="{{ rsyslog_dir }}/log_logins/{{ rsyslog_environment.name}}/"
1919

2020
# Establish database connection
2121
try:

0 commit comments

Comments
 (0)