@@ -37,10 +37,10 @@ blockIP() { # input is a string
37
37
# if we've seen fewer than $MOLE_LIMIT attackers from this /24
38
38
if [[ $( firewall-cmd --list-rich-rules | egrep -c " $same_subnet_match_string " ) -lt $MOLE_LIMIT ]]; then
39
39
# we only want to block the IP
40
- local ip_search_string=" ^rule family=\" ipv4\" source address=\" ($escaped_ip |${escaped_ip% .* } .0/24)\" reject$"
40
+ local ip_search_string=" ^rule family=\\\ " ipv4\\\ " source address=\\\ " ($escaped_ip |${escaped_ip% .* } .0/24)\\ \" reject$"
41
41
local command="
42
42
if ! firewall-cmd --list-rich-rules | egrep -q \" $ip_search_string \" ; then
43
- firewall-cmd --add-rich-rule=\" rule family='ipv4' source address='$ip ' reject\"
43
+ firewall-cmd -q - -add-rich-rule=\" rule family='ipv4' source address='$ip ' reject\"
44
44
fi
45
45
"
46
46
else
@@ -49,7 +49,7 @@ blockIP() { # input is a string
49
49
local subnet_search_string=" ^rule family=\" ipv4\" source address=\" ${subnet// ./ \. } \" reject$"
50
50
local command="
51
51
if ! firewall-cmd --list-rich-rules | egrep -q \" $subnet_search_string \" ; then
52
- firewall-cmd --add-rich-rule=\" rule family='ipv4' source address='$subnet ' reject\"
52
+ firewall-cmd -q - -add-rich-rule=\" rule family='ipv4' source address='$subnet ' reject\"
53
53
fi
54
54
"
55
55
fi
@@ -119,23 +119,13 @@ sendMail() { # no input
119
119
fi
120
120
121
121
body=" $( printf " %s\n\n\n%s\n\n\n%s" " $heading " " $whois " " $log " ) "
122
- body=" $heading \n\n\n$whois \n\n\n$log "
123
-
124
- (
125
- echo " From: cron@$HOSTNAME "
126
- echo " To: ${EMAIL_ADDRESS} "
127
- echo " Subject: ${subject} "
128
- echo " Content-Type: text/html"
129
- echo " MIME-Version: 1.0"
130
- echo " "
131
- echo " ${body} "
132
- ) | /usr/sbin/sendmail -t
122
+
123
+ mail -s " $subject " " $EMAIL_ADDRESS " <<< " $body"
133
124
}
134
125
135
126
136
127
# generate list of possible attackers
137
- attackers=$( last_n_minutes.journald $LOOK_BACK | egrep ' sshd\[[0-9]+\]:.*(Failed password|Invalid user)' | egrep -o ' \bfrom ([0-9]{1,3}\.){3}[0-9]{1,3}\b' | sort | uniq -c | sort -nr | awk -v m=$MAX_ALLOWED_FAILURES -F ' [= ]+' ' {if ($2>m) {print $NF} else {exit}}' )
138
-
128
+ attackers=$( journalctl --since " $LOOK_BACK minutes ago" | egrep ' sshd\[[0-9]+\]:.*(Failed password|Invalid user)' | egrep -o ' \bfrom ([0-9]{1,3}\.){3}[0-9]{1,3}\b' | sort | uniq -c | sort -nr | awk -v m=$MAX_ALLOWED_FAILURES -F ' [= ]+' ' {if ($2>m) {print $NF}}' )
139
129
140
130
for rhost in $attackers ; do
141
131
@@ -157,7 +147,7 @@ for rhost in $attackers; do
157
147
blockIP $ip
158
148
159
149
# grab full secure history of $rhost
160
- log=$( last_n_minutes.journald $LOOK_BACK | grep -E " \b${rhost// ./ \. } \b" )
150
+ log=$( journalctl --since " 24 hours ago " | grep -E " \b${rhost// ./ \. } \b" )
161
151
162
152
# set $whois and $country
163
153
getWhoisAndCountry $ip
0 commit comments