Meniu

Wordpress auth protection

Se intampla ca un adolescent mai rebel sau mai tampicutz de fel , in loc sa se duca la munca sa-si castige existenta, cauta pe net tot felul de programe gen brute force si incepe sa lovesca in site-uri pe platforma gen wordpress , prestashop , joomla , etc.

Sunt multe pluginuri pentru asa ceva , dar pentru cei care detin serverul personal pot scrie un guardian care sa urmareasca in jurnale in tim real acest comportament , si sa baneze ip direct in iptables dupa 3 incercari de login in interval de 1 minut, sau dupa caz

In situatia mea jurnalele se duc in other_hosts , dupa caz se poate altera.

Detectia se face pe criteriul ca un ip nu are de ce sa acceseze cu GET sau POST fisierul /wp-login.php de 3 ori intr-un minut decat daca nu stie password sau incearca brute force.

se poate scrie si un fisier de exceptii pe care sa le ignore cum ar fi (192.168.5.20. 127.0.0.1) samd

la linia grep "GET /wp-login.php" se poate adauga orice login din alte platforme , bineinteles cu oarece modificari suplimentare , si atunci poate deveni o platforma universala anti brute force

Din pacate , scriptul citeste cam des jurnalul ceea ce implica o oarece caldura suplimentara , pe viitor voi utiliza inotify

pentru citirea other_hosts.

Ca acest script sa functioneze , trebuie creat la start un chain si un jump in iptables

Eu prefer sa nu fac iptables-save , ci sa reload tabela mea personala la fiecare reboot si anume

in /etc/rc.local scriem inainte de exit 0

sudo iptables -N wpress_login;
sudo iptables -t filter -A INPUT -j wpress_login
cd /path_to_script/  ; 
./guard.sh & # start script backgrounded
#!/bin/bash

if [ "$(ls firewalled)" == "" ] ;then echo "" >firewalled 
fi

sudo ./rebuild_firewall.sh

function flush_da_shit
{
bann=$(echo $ip | sed 's/.* //g')
echo "banned "$bann
sudo iptables -A wpress_login  -s $bann -j DROP
echo "Subject: "$(date '+%Y_%m_%d') WPress Server Guardian > warn.mail
echo "" >>warn.mail
echo "WordPress Guardian by linux-romania.com" >> warn.mail
echo "WP guardian has banned  "$bann" for a very long time" >> warn.mail
/usr/sbin/sendmail  -v address@domain.com < warn.mail
}

while true
do
grep "GET /wp-login.php" /var/log/apache2/other_vhosts_access.log | tail -n 50 > /dev/shm/last_apache
grep "POST /wp-login.php" /var/log/apache2/other_vhosts_access.log | tail -n 50 >> /dev/shm/last_apache
cut  -d ' ' -f1-3 /dev/shm/last_apache | sed 's/:/xxx/3;s/xxx.*]//1;s/\[//g' |sort > /dev/shm/wp-admin.list
for x in $(seq 1 $(cat /dev/shm/wp-admin.list | wc -l))
do
ip=$(sed ''$x'!d' /dev/shm/wp-admin.list ) 
if  [ "$(cat firewalled | grep "$(echo $ip | sed 's/.* //g')")" == "" ] && [ "$(grep "$ip" /dev/shm/wp-admin.list | wc -l)" -gt "3" ] ;then echo $ip >> firewalled ;flush_da_shit 
fi
sleep 0.1
done

sleep 0.1
done

John Doe

Articole publicate de la contributori ce nu detin un cont pe gnulinux.ro. Continutul este verificat sumar, iar raspunderea apartine contributorilor.
  • | 340 articole

Nici un comentariu inca. Fii primul!
  • powered by Verysign