1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#!/bin/bash
######################################################### Dziennik dostępu Apache ###################################################################
# Szukaj pliku i jeśli nie istnieje, utwórz go.
for x in /root/access_403.txt ; do
[ ! -f $x ] && touch $x;
done
################################################################################################################################################
# wyświetl plik dziennika Apache i przekaż go do grep, przefiltruj wszystkie linie niezawierające słowa "bot" i przekaż do grep,
# przefiltruj wszystkie linie niezawierające słowa "google" i przekaż do grep,
# przefiltruj wszystkie linie zawierające słowo " 403 " (spacje są specjalnie wstawione - zobacz, jak wygląda dziennik apache2) i przekaż do awk,
# użyj awk do wyświetlania pierwszej kolumny i przekaż do awk,
# użyj awk do wyświetlania wyrażenia regularnego w celu wydobycia adresów IP z pliku dziennika,
# użyj ip jako ciągu rozpoczynającego się znakiem wymienionym powyżej (coś między 0 a 9) i wyświetl ten ciąg i przekaż do sed,
# użyj sed do usunięcia pustych linii i przekaż do uniq,
# użyj uniq do pokazania, ile razy adres IP został umieszczony i przekaż do awk,
# użyj awk do wybrania pierwszej kolumny i jeśli jest ich 3 lub więcej, to wyświetl, co jest w kolumnie 2 i przekaż do grep,
# użyj grep do oddzielenia wszystkiego od /root/access_403.txt, a pozostałą część umieść w /tmp/access_403.log
################################################################################################################################################
cat /var/log/httpd/access_log | grep -v bot | grep -v google | grep " 403 " | awk '{ print $1 }' | awk '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/); ip = substr($0,RSTART,RLENGTH); print ip}' | sed '/^$/d' | uniq -c | awk '$1>1{print $2}'| grep -F -x -v -f /root/access_403.txt > /tmp/access_403.log
################################################################################################################################################
# Jeśli plik /tmp/access_403.log nie jest pusty, to dodaj do pliku /root/ipaddresses.txt to, co jest w pliku /tmp/access_403.log
# dla adresu IP znajdującego się w /tmp/access_403.log uruchom polecenie dodawania adresów IP z pliku
# i/lub użyj poleceń, aby dodać każdy adres IP do zestawu IP ipset/firewalld
################################################################################################################################################
if [ -s /tmp/access_403.log ]
then
cat /tmp/access_403.log >> /root/access_403.txt
#firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=/tmp/access_403.log
for ip in $(cat /tmp/access_403.log); do /usr/sbin/ipset add blacklist $ip;done
for ip in $(cat /tmp/access_403.log); do firewall-cmd --permanent --ipset=blacklist --add-entry=$ip;done
#for ip in $(cat /tmp/access_403.log); do iptables -A INPUT -s $ip/32 -d 0/0 -j DROP; done
fi
# Usuń poniższy plik
rm -f /tmp/access_403.log
#echo "Lista zablokowanych adresów IP:" | cat /root/403.txt
######################################################### Dziennik błędów Apache #####################################################################
for x in /root/error_403.txt ; do
[ ! -f $x ] && touch $x;
done
cat /var/log/httpd/error_log| grep " 403 " | awk '{ print $13 }' | awk '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/); ip = substr($0,RSTART,RLENGTH); print ip}' | sed '/^$/d' | uniq -c | awk '$1>0{print $2}'| grep -F -x -v -f /root/error_403.txt > /tmp/error_403.log
if [ -s /tmp/error_403.log ]
then
cat /tmp/error_403.log >> /root/error_403.txt
#firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=/tmp/error_403.log
for ip in $(cat /tmp/error_403.log); do /usr/sbin/ipset add blacklist $ip;done
for ip in $(cat /tmp/error_403.log); do firewall-cmd --permanent --ipset=blacklist --add-entry=$ip;done
#for ip in $(cat /tmp/error_403.log); do iptables -A INPUT -s $ip/32 -d 0/0 -j DROP; done
fi
rm -f /tmp/error_403.log
#echo "Lista zablokowanych adresów IP:" | cat /root/403.txt
# Przeładuj firewalld
firewall-cmd --reload
``
|