====== CSF firewall install ======
Installing perl dependencies:
CentOS:
yum install bind-utils perl-libwww-perl.noarch perl-LWP-Protocol-https.noarch perl-GDGraph perl-IO-Socket-SSL.noarch perl-Net-SSLeay perl-Net-LibIDN perl-IO-Socket-INET6 perl-Socket6 perl-IO-Socket-Multicast ipset -y
Debian/Ubuntu:
apt install libwww-perl liblwp-protocol-https-perl libtemplate-plugin-gd-perl ipset
Then CSF installing:
cd /usr/src
rm -fv csf.tgz
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh
===== Disable alerts =====
* Disable all email alerts:
LF_EMAIL_ALERT = "0"
* Disable PERM BLOCK alerts:
LF_PERMBLOCK_ALERT = "0"
===== Increase interval to track login and other LF_ failures =====
LF_INTERVAL = "86400"
===== Analize user runned proccesses =====
grep 'User Processing' /var/log/lfd.log | grep -o "EXE:.*" | awk '{ print $1 }' | sort | uniq | sed -e 's/EXE/exe/g'
===== Useful links =====
* https://jparks.work/index.php?title=CSF_Firewall
* https://forum.directadmin.com/showthread.php?t=49424&p=254279#post254279
* https://www.knownhost.com/wiki/security/csf-lfd/notifications
* https://www.memset.com/blog/block-wordpress-dos-attacks-cpanel/
* https://tecadmin.net/how-to-enable-csf-firewall-web-ui/
===== Block bad bots (DirectAdmin servers) =====
Quick:
csf -d 46.229.160.0/20 do not delete abuser SemRush
csf -d 216.244.64.0/24 do not delete abuser DotBot
csf -d 54.36.148.0/23 do not delete abuser AhrefsBot
csf -d 151.80.39.0/24 do not delete abuser AhrefsBot
DirectAdmin Search:
grep -h MJ12bot /var/log/httpd/domains/*.log | awk '{print $1}' | sort | uniq | awk '{print "csf -d "$1" do not delete abuser MJ12bot"}' | sh
grep -h DotBot /var/log/httpd/domains/*.log | awk '{print $1}' | sort | uniq | awk '{print "csf -d "$1" do not delete abuser DotBot"}' | sh
grep -h BUbiNG /var/log/httpd/domains/*.log | awk '{print $1}' | sort | uniq | awk '{print "csf -d "$1" do not delete abuser BUbiNG"}' | sh
grep -h AhrefsBot /var/log/httpd/domains/*.log | awk '{print $1}' | sort | uniq | awk '{print "csf -d "$1" do not delete abuser AhrefsBot"}' | sh
grep -h BLEXBot /var/log/httpd/domains/*.log | awk '{print $1}' | sort | uniq | awk '{print "csf -d "$1" do not delete abuser BLEXBot"}' | sh
# if not needed
grep -h Yandex /var/log/httpd/domains/*.log | awk '{print $1}' | sort | uniq | awk '{print "csf -d "$1" do not delete abuser YandexBot"}' | sh
DirectAdmin Search at once:
egrep -h 'SemRush|MJ12bot|DotBot|BUbiNG|AhrefsBot|BLEXBot|SMTBot|MauiBot' /var/log/httpd/domains/*.log | awk '{print $1}' | sort | uniq | awk '{print "csf -d "$1" do not delete abuser BADBOT"}' | sh
Cpanel Search at once:
egrep -h 'SemRush|MJ12bot|DotBot|BUbiNG|AhrefsBot|BLEXBot|SMTBot|MauiBot' /etc/apache2/logs/domlogs/* | awk '{print $1}' | sort | uniq | awk '{print "csf -d "$1" do not delete abuser BADBOT"}' | sh
Find bad bot'd
awk -F\" '{print $6}' /var/log/httpd/domains/*.log | sort | uniq -c | sort -n | tail
===== WordPress attacts on NGINX vhost parser =====
Add to cron:
#block bruteforce
* * * * * root /bin/egrep -h "POST.*wp-login.php.*200" /var/log/nginx/domains/*.log | /bin/awk '{print $1}' | /bin/sort | /usr/bin/uniq -c | /bin/awk '$1>=5{print "/usr/sbin/csf -d "$2" wp-login abuser"}' | /bin/sh >/dev/null 2>&1
#block xmlrpc attack
* * * * * root /bin/egrep -h "POST.*xmlrpc.php.*200" /var/log/nginx/domains/*.log | /bin/awk '{print $1}' | /bin/sort | /usr/bin/uniq -c | /bin/awk '$1>=5{print "/usr/sbin/csf -d "$2" xmlrpc abuser"}' | /bin/sh >/dev/null 2>&1
#bad bots block
*/30 * * * * root /bin/egrep -h 'MJ12bot|DotBot|BUbiNG|AhrefsBot|BLEXBot|SMTBot' /var/log/nginx/domains/*.log | /bin/awk '{print $1}' | /bin/sort | /usr/bin/uniq | /bin/awk '{print "/usr/sbin/csf -d "$1" do not delete abuser BADBOT"}' | /bin/sh
===== WordPress attacts on HTTPD vhost parser =====
/bin/egrep -h "POST.*wp-login.php.*200" /var/log/httpd/domains/*.log | /bin/awk '{print $1}' | /bin/sort | /usr/bin/uniq -c | /bin/awk '$1>=5{print "/usr/sbin/csf -d "$2" wp-login abuser"}' | /bin/sh
/bin/egrep -h "POST.*xmlrpc.php.*200" /var/log/httpd/domains/*.log | /bin/awk '{print $1}' | /bin/sort | /usr/bin/uniq -c | /bin/awk '$1>=5{print "/usr/sbin/csf -d "$2" xmlrpc abuser"}' | /bin/sh
===== Add dynamic domain names =====
In csf.conf edit
DYNDNS = "600"
To csf.dyndns add Your wanted domain
tcp|out|d=25|d=smtp.google.com -- edit appropriately for ports/hostnames etc.
Restart CSF
csf -ra
===== Messanger HTTPS enable =====
In csf.conf add ports which should be redirected to non https:
MESSENGER_HTTPS_IN = "443,2222"
DirectAdmin enable SSL (SNI) - only for CentOS7:
MESSENGER_HTTPS_CONF = "/usr/local/directadmin/data/users/*/httpd.conf"