Skrypt Bash blokujący skanery serwera WWW (Apache/Nginx/LiteSpeed).

Skrypt Bash blokujący skanery serwera WWW (Apache/Nginx/LiteSpeed). Skrypt Bash blokujący skanery serwera WWW (Apache/Nginx/LiteSpeed). Sprawdza błędy 400-408 lub inne w wybranym dzienniku i wydobywa adresy IP skanerów próbujących skanować serwer WWW, a następnie dodaje te adresy IP do zestawu IP, który odrzuca połączenie. 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 ``

22 lutego 2021 · 3 min · 584 słów · sysadmin

Instalacja i konfiguracja auditd

Reguły w /etc/audit/rules.d/audit.rules ##################### # This is an example configuration suitable for most systems # Before running with this configuration: # - Remove or comment items which are not applicable # - Check paths of binaries and files ##################### ##################### # Remove any existing rules ###################### -D ##################### # Buffer Size # Might need to be increased, depending on the load of your system. ##################### -b 8192 ##################### # Failure Mode ##################### # 0=Silent # 1=printk, print failure message # 2=panic, halt system -f 1 ##################### # Audit the audit logs. ##################### -w /var/log/audit/ -k auditlog ##################### # Auditd configuration ##################### ## Modifications to audit configuration that occur while the audit (check your paths) -w /etc/audit/ -p wa -k auditconfig -w /etc/libaudit.conf -p wa -k auditconfig -w /etc/audisp/ -p wa -k audispconfig ##################### # Monitor for use of audit management tools ##################### # Check your paths -w /sbin/auditctl -p x -k audittools -w /sbin/auditd -p x -k audittools ##################### # Special files ##################### -a exit,always -F arch=b32 -S mknod -S mknodat -k specialfiles -a exit,always -F arch=b64 -S mknod -S mknodat -k specialfiles ##################### # Mount operations ##################### -a exit,always -F arch=b32 -S mount -S umount -S umount2 -k mount -a exit,always -F arch=b64 -S mount -S umount2 -k mount ##################### # Changes to the time ##################### -a exit,always -F arch=b32 -S adjtimex -S settimeofday -S stime -S clock_settime -k time -a exit,always -F arch=b64 -S adjtimex -S settimeofday -S clock_settime -k time -w /etc/localtime -p wa -k localtime ##################### # Use of stunnel ##################### -w /usr/sbin/stunnel -p x -k stunnel ##################### # Schedule jobs ##################### -w /etc/cron.allow -p wa -k cron -w /etc/cron.deny -p wa -k cron -w /etc/cron.d/ -p wa -k cron -w /etc/cron.daily/ -p wa -k cron -w /etc/cron.hourly/ -p wa -k cron -w /etc/cron.monthly/ -p wa -k cron -w /etc/cron.weekly/ -p wa -k cron -w /etc/crontab -p wa -k cron -w /var/spool/cron/crontabs/ -k cron ##################### # user, group, password databases ##################### -w /etc/group -p wa -k etcgroup -w /etc/passwd -p wa -k etcpasswd -w /etc/gshadow -k etcgroup -w /etc/shadow -k etcpasswd -w /etc/security/opasswd -k opasswd ##################### # Monitor usage of passwd command ##################### -w /usr/bin/passwd -p x -k passwd_modification ##################### # Monitor user/group tools ##################### -w /usr/sbin/groupadd -p x -k group_modification -w /usr/sbin/groupmod -p x -k group_modification -w /usr/sbin/addgroup -p x -k group_modification -w /usr/sbin/useradd -p x -k user_modification -w /usr/sbin/usermod -p x -k user_modification -w /usr/sbin/adduser -p x -k user_modification ##################### # Login configuration and stored info ##################### -w /etc/login.defs -p wa -k login -w /etc/securetty -p wa -k login -w /var/log/faillog -p wa -k login -w /var/log/lastlog -p wa -k login -w /var/log/tallylog -p wa -k login ##################### # Network configuration ##################### -w /etc/hosts -p wa -k hosts -w /etc/network/ -p wa -k network ##################### # system startup scripts ##################### -w /etc/inittab -p wa -k init -w /etc/init.d/ -p wa -k init -w /etc/init/ -p wa -k init ##################### # Library search paths ##################### -w /etc/ld.so.conf -p wa -k libpath ##################### # Kernel parameters and modules ##################### -w /etc/sysctl.conf -p wa -k sysctl -w /etc/modprobe.conf -p wa -k modprobe ##################### # PAM configuration ##################### -w /etc/pam.d/ -p wa -k pam -w /etc/security/limits.conf -p wa -k pam -w /etc/security/pam_env.conf -p wa -k pam -w /etc/security/namespace.conf -p wa -k pam -w /etc/security/namespace.init -p wa -k pam ##################### # Puppet (SSL) ##################### -w /etc/puppetlabs/puppet/ssl -p wa -k puppet_ssl ##################### # Postfix configuration ##################### -w /etc/aliases -p wa -k mail -w /etc/postfix/ -p wa -k mail ##################### # SSH configuration ##################### -w /etc/ssh/sshd_config -k sshd ##################### # Hostname ##################### -a exit,always -F arch=b32 -S sethostname -k hostname -a exit,always -F arch=b64 -S sethostname -k hostname ##################### # Changes to issue ##################### -w /etc/issue -p wa -k etcissue -w /etc/issue.net -p wa -k etcissue ##################### # Log all commands executed by root ##################### -a exit,always -F arch=b64 -F euid=0 -S execve -k rootcmd -a exit,always -F arch=b32 -F euid=0 -S execve -k rootcmd ##################### # Capture all failures to access on critical elements ##################### -a exit,always -F arch=b64 -S open -F dir=/etc -F success=0 -k unauthedfileacess -a exit,always -F arch=b64 -S open -F dir=/bin -F success=0 -k unauthedfileacess -a exit,always -F arch=b64 -S open -F dir=/home -F success=0 -k unauthedfileacess -a exit,always -F arch=b64 -S open -F dir=/sbin -F success=0 -k unauthedfileacess -a exit,always -F arch=b64 -S open -F dir=/srv -F success=0 -k unauthedfileacess -a exit,always -F arch=b64 -S open -F dir=/usr/bin -F success=0 -k unauthedfileacess -a exit,always -F arch=b64 -S open -F dir=/usr/local/bin -F success=0 -k unauthedfileacess -a exit,always -F arch=b64 -S open -F dir=/usr/sbin -F success=0 -k unauthedfileacess -a exit,always -F arch=b64 -S open -F dir=/var -F success=0 -k unauthedfileacess ##################### # su/sudo ##################### -w /bin/su -p x -k priv_esc -w /usr/bin/sudo -p x -k priv_esc -w /etc/sudoers -p rw -k priv_esc ##################### # Poweroff/reboot tools ##################### -w /sbin/halt -p x -k power -w /sbin/poweroff -p x -k power -w /sbin/reboot -p x -k power -w /sbin/shutdown -p x -k power ##################### # Make the configuration immutable ##################### -e 2

14 lutego 2021 · 4 min · 833 słów · sysadmin

Idealna broń – film dokumentalny

Dokument oparty na bestsellerowej książce Davida E. Sangera, korespondenta ds. bezpieczeństwa narodowego New York Timesa, bada wzrost znaczenia cyberkonfliktów jako sposobu, w jaki współcześnie narody konkurują między sobą i wzajemnie się sabotują. W miarę wzrostu niepokojów związanych z wpływem cyberataków na wybory w USA w 2020, film przedstawia wywiady z czołowymi urzędnikami wojskowymi, wywiadowczymi i politykami. Nie brakuje w nim też relacji z “frontów” toczących się obecnie cyberwojen. Reżyserem dokumentu HBO jest John Maggio (serial dokumentalny Amerykańskie doświadczenia). ...

14 listopada 2020 · 1 min · 88 słów · sysadmin

Analiza auditd za pomocą logwatch

Witaj, Próbuję zgromadzić wiedzę związana z narzędziem logwatch, ale jest wiele do nauki, aby zrozumieć kody błędów jądra. Aktualizuję ten post o to, co znajdę i czego się nauczę. Na razie postaram się przedstawić to, co już rozumiem w prosty sposób. Do analizy będę używać auditd, który opisałem tutaj: https://sysadmin.info.pl/en/blog/selinux-security-policy/ Logwatch Logwatch to klasyczne narzędzie służące do wysyłania codziennego raportu aktywności z dzienników systemowych w Linuxie. W domyślnej instalacji CentOS, logwatch nie ma wielu zaawansowanych funkcji włączonych. Pokażę ci, jak skonfigurować logwatch. ...

14 października 2020 · 8 min · 1517 słów · sysadmin

Używanie listy blokady z iptables i firewalld

Jeśli masz jakikolwiek serwer podłączony do Internetu, na pewno zdajesz sobie sprawę, że niezależnie od tego, jak mały lub nieistotny się wydaje, jest on często sondowany, testowany lub poddawany różnym próbom nadużycia. Ataki te pochodzą od wielu złośliwych hostów, co sprawia, że niemożliwe jest ich ręczne śledzenie. Dlatego zacząłem szukać sposobu na wprowadzenie zautomatyzowanej blokady do użycia z iptables i firewalld, które stosuję na swoich serwerach. ipset Istnieją dobre rozwiązania do wykrywania i blokowania hostów atakujących twój system Linux, takie jak denyhosts lub fail2ban, i gorąco polecam zastosowanie jednego z nich, w zależności od twoich potrzeb. Jednak jeśli hosty są znane w społeczności bezpieczeństwa jako złośliwe, znacznie elegancko jest przechwycić je na wstępie, przed połączeniem się z twoimi usługami. Tutaj przychodzi blokada znanych złośliwych hostów. ...

4 października 2020 · 17 min · 3582 słów · sysadmin

Jak włączyć szyfrowanie full strict w Cloudflare z użyciem Let’s Encrypt

Podstawa instalacji i konfiguracji Cloudflare opisana jest tutaj: https://sysadmin.info.pl/pl/blog/instalacja-serwera-web-na-mikr-us-z-uzyciem-mariadb-i-silnikiem-myisam/ W tym tutorial zajmiemy się konfiguracją połączenia full strict pomiędzy Twoim serwerem a Cloudflare. Do potrzeb tego tutoriala oraz testu w pierwszej kolejności na Cloudflare należy wyłączyć tę pomarańczową chmurkę (trzeba w nią kliknąć) w sekcji DNS swojej domeny, tak aby była ona szara i zapisac zmiany za pomocą przycisku save. W ten sposób sprawdzisz, czy certyfikat Let’s Encrpt został poprawnie zainstalowany i każda przeglądarka pokazuje, że Twoja strona używa SSL i certyfikatu właśnie od Let’s Encrypt. ...

3 października 2020 · 4 min · 692 słów · sysadmin

System nie znajduje partycji root zainstalowanej na LVM

Artykuł pokazuje, jak rozwiązać problem brakującej partycji wymiany (swap) oraz błędu plymouthd sigrtmin, gdy partycja wymiany nie jest utworzona jako LVM, ale jako standardowa partycja wymiany. Komunikat uruchomieniowy (Boot-Message): 1 2 3 dracut-initqueue[279] Ostrzeżenie: Nie można uruchomić dracut-initqueue[279] Ostrzeżenie: /dev/mapper/rhel_…-root nie istnieje sigrtmin+20 od PID 297 plymouthd Ostatni błąd wynika z nieudanego montowania partycji wymiany. Rozwiązanie jest naprawdę proste. Sprawdź, czy standardowa partycja wymiany jest włączona, używając polecenia: 1 swapon -s Sprawdź, gdzie jest zamontowana partycja wymiany w pliku /etc/fstab: ...

20 września 2020 · 2 min · 226 słów · sysadmin

Jak skonfigurować i zabezpieczyć Telegraf, InfluxDB oraz Grafana w Linux

Samouczek jest przeznaczony dla dystrybucji serwerów rodziny Red Hat takich jak CentOS 7.x, Red Hat 7.x, Fedora29 lub nowsze (obecna wersja to 32) itp. Dla dystrybucji serwerów rodziny Debian (takich jak Debian, Ubuntu itp.) polecam przeczytać ten artykuł: Jak skonfigurować Telegraf, InfluxDB i Grafana w Linux, jednak nie zawiera on ustawień własnej domeny i konfiguracji fail2ban. Zdecydowałem się skopiować niektóre części z poradników. Referencje znajdują się na końcu tego samouczka: ...

10 września 2020 · 16 min · 3341 słów · sysadmin

Kompletny przewodnik po conky z szablonami, cava i tilda

Kompletny przewodnik po conky z szablonami, cava i tilda.

15 maja 2020 · 1 min · 9 słów · sysadmin

Pomiar układu wejścia/wyjścia

Aby monitorować zachowanie systemu, należy rozpocząć od utworzenia linii bazowej, która reprezentuje normalne zachowanie systemu. Możesz to zrobić za pomocą narzędzia takiego jak polecenie sar. Następnie możesz użyć takich narzędzi jak netstat, iostat, lsof, w i uptime do monitorowania zachowania systemu, porównując wyniki z poziomem bazowym w celu określenia, czy system ma problemy. netstat -g // do wyświetlania informacji o przynależności do grup multicastowych IPv4 i IPv6 -i // aby zwrócić informacje, w tym określone wartości właściwości, dla wszystkich podłączonych urządzeń sieciowych -r // do wyświetlania informacji o tabelach routingu jądra -s // aby wymienić podsumowanie statystyk dla każdego protokołu sieciowego -p // aby wymienić, które procesy korzystają z których portów -t // aby zwrócić szczegóły tylko dla połączeń, które wykorzystują TCP Uwaga: netstat -r został zastąpiony przez trasę -e ...

23 grudnia 2019 · 3 min · 524 słów · sysadmin