Obsah
SSH autoban
Tento soubor scriptů slouží k blokování spamu na ssh portu.
Cron řádky
/etc/crontab
Skripty se spouštějí každých 5 minut.
- crontab
*/5 * * * * root /usr/local/bin/vycuc.sh &> /dev/null */5 * * * * root /usr/local/bin/banovator.sh &> /dev/null
Soubory
rc.local
/etc/rc.local
Tento soubor obsahuje iptables pravidla, která sledují komunikaci na portu 22 a po 3 neúspěšných pokusech zablokují zdrojovou IP adresu na 5 minut a zapíšou tuto IP adresu do logu s prefixem BLOCKED-SSH:
.
- rc.local
########################################## # Blokování SSH po 3 hitech na 5 minut # ########################################## dev_inet="eth0" # Výjimky které neblokovat iptables -A INPUT -p tcp --destination-port 22 -i $dev_inet -s 12.34.56.75 -j ACCEPT # AP # Hlavní blokátor iptables -N SshLogBlock iptables -A INPUT -p tcp --destination-port 22 -i $dev_inet -m state --state NEW -m recent --update --seconds 300 --hitcount 3 -j SshLogBlock iptables -A INPUT -p tcp --destination-port 22 -i $dev_inet -m state --state NEW -m recent --set iptables -A INPUT -p tcp --destination-port 22 -i $dev_inet -j ACCEPT iptables -A SshLogBlock -j LOG --log-prefix "BLOCKED-SSH: " --log-ip-options iptables -A SshLogBlock -j DROP ### END blokování SSH ###
Banovátor
/usr/local/bin/banovator.sh
Tento soubor nastavuje iptables pravidla tak, aby byly permanentně zablokovány IP adresy z blacklistu v souboru /etc/banned-ip
. V tomto seznamu mohou být komentáře volně za IP adresou, skript si s tím poradí.
- banovator.sh
#!/bin/bash iptables -D INPUT -j bany 2> /dev/null iptables -F bany iptables -X bany 2> /dev/null iptables -N bany iptables -I INPUT 1 -j bany cat /etc/banned-ip | while read ipka comment; do iptables -A bany -s $ipka -j DROP done
Nastavení rsyslogu
/etc/rsyslog.d/blocked-ssh.conf
Toto slouží k přesměrování záznamů v logu s prefixem BLOCKED-SSH
do zvláštního souboru, ze kterého potom čerpá PHP stránka z PHP skriptů.
- blocked-ssh.conf
:msg, contains, "BLOCKED-SSH" -/var/log/blocked-ssh.log & ~
Pozor: rsyslog v debianu má pravděpodobně výchozí práva u vytvořených souborů 640, což znemožňuje čtení logu uživatelem www-data. Proto je nutné upravit direktivu
$FileCreateMode 0640
v souboru /etc/rsyslog.conf
na
$FileCreateMode 0644
nebo tuto direktivu přidat na začátek souboru /etc/rsyslog.d/blocked-ssh.conf
.
vycuc.sh
/usr/local/bin/vycuc.sh
Tento skript vypisuje pouze informace týkající se SSH přihlašování z /var/log/auth.log
do /tmp/short-auth.log
, slouží to jako podklad pro porovnání s výstupem v logu /var/log/blocked-ssh.log
a je zobrazen na stránce top.php v PHP skriptech.
- vycuc.sh
#!/bin/bash grep -v pam_unix /var/log/auth.log | grep -v sudo | grep -E [[:digit:]]\.[[:digit:]]\.[[:digit:]]\.[[:digit:]] > /tmp/short-auth.log grep -v pam_unix /var/log/auth.log.1 | grep -v sudo | grep -E [[:digit:]]\.[[:digit:]]\.[[:digit:]]\.[[:digit:]] > /tmp/short-auth-old.log chmod 644 /tmp/short-auth*
PHP scripty zobrazující počet zablokovaných
Rozbalit do /var/www/
a poté to je dostupné na adrese http://server_address/spameri
. Je k tomu potřeba webserver s nakonfigurovaným php interpreterem, nainstalovaným php5
a php5-geoip
včetně geoip-database
pro výpis země původu spamera.