Brute force rules for mod security
Привет отново!
В продължение на предния ми пост за оптимизация на WHM сървъри, сега ще споделя и как се защитавам срещу brute force атаки към wordpress сайтове, хостнати на WHM сървър, с помощта на modsecurity!
За целта е нужно първо да имаме инсталиран modsecurity с активиран OWASP ModSecurity Core Rule Set V3.0.
Правилата се добавят от : Home »Security Center »ModSecurity™ Tools »Rules List -
Add Rule
#Block WP logins with no referring URL <Locationmatch "/wp-login.php"> SecRule REQUEST_METHOD "POST" "deny,status:401,id:5000130,chain,msg:'wp-login request blocked, no referer'" SecRule &HTTP_REFERER "@eq 0" </Locationmatch> #Wordpress Brute Force detection SecAction phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},id:5000134 <Locationmatch "/wp-login.php"> # Setup brute force detection. # React if block flag has been set. SecRule ip:bf_block "@gt 0" "deny,status:401,log,id:5000135,msg:'ip address blocked for 5 minutes, more than 10 login attempts in 3 minutes.'" # Setup Tracking. On a successful login, a 302 redirect is performed, a 200 indicates login failed. SecRule RESPONSE_STATUS "^302" "phase:5,t:none,nolog,pass,setvar:ip.bf_counter=0,id:5000136" SecRule RESPONSE_STATUS "^200" "phase:5,chain,t:none,nolog,pass,setvar:ip.bf_counter=+1,deprecatevar:ip.bf_counter=1/180,id:5000137" SecRule ip:bf_counter "@gt 10" "t:none,setvar:ip.bf_block=1,expirevar:ip.bf_block=900,setvar:ip.bf_counter=0" </locationmatch> #900 = block for 15 minutes # check bots by user agent and match to included file # block bad bots #SecRule REQUEST_HEADERS:User-Agent "@pmFromFile /etc/apache2/conf.d/blackbots.txt" "id:980001,rev:1,severity:2,log,msg:'Bot Rule: Black Bot detected.'" #XMLRPC block SecRule REQUEST_LINE "POST .*xmlrpc.*" "pass,initcol:ip=%{REMOTE_ADDR},setvar:ip.maxlimit=+1,deprecatevar:ip.maxlimit=1/600,nolog,id:350201" SecRule IP:MAXLIMIT "@gt 10" "log,deny,id:350202,msg:'wp-xmlrpc: denying %{REMOTE_ADDR} (%{ip.maxlimit} connection attempts)'"
Следва рестарт на apache сървъра и тест дали работят правилата. Резултата при мен след няколко неуспешни опита за влизане във /wp-login.php беше следния :
[Thu Mar 29 20:56:41.299561 2018] [:error] [pid 25498:tid 140498557667072] [client 87.97.123.123:36841] [client 87.97.123.123] ModSecurity: Access denied with code 401 (phase 2). Operator GT matched 0 at IP:bf_block. [file "/etc/apache2/conf.d/modsec/modsec2.user.conf"] [line "37"] [id "5000135"] [msg "ip address blocked for 5 minutes, more than 10 login attempts in 3 minutes."] [hostname "qksite.com"] [uri "/wp-login.php"] [unique_id "Wr1E@aRFYAyVlLe-TFRsggAAAZI"], referer: http://qksite.com/wp-login.php
Същата работа е и със заявките към /xmlrpc.php
Да подчертая, горните са правила са няколко на брой, и може да се окажат доста чуствителни! Хубаво е да се изтестват едно по едно преди да се сложат на продукшън среда!
Това е! 🙂