Facebook  -  Twitter      

Questo forum fa uso dei cookie
Questo forum utilizza i cookie per memorizzare i dettagli del tuo login o della tua ultima visita. I cookie sono piccoli files di testo salvati nel computer; i cookie da noi utilizzati sono relativi unicamente ai servizi da noi forniti direttamente o dai banner pubblicitari. I cookie su questo forum salvano inoltre i dettagli relativi alle discussioni lette e alle tue preferenze personali. Sei pregato di selezionare il tasto OKAY se sei consapevole della presenza di questi files e ci autorizzi ad utilizarli per le informazioni specificate.

Indipendentemente dalla tua scelta un cookie verrà salvato per memorizzare nel tuo pc la risposta a questo form. Puoi modificare le impostazioni relative ai cookie nelle preferenze del tuo browser.

  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
[Mikrotik] Firewall Usage

#1
Information 
Summary
The idea behind this script set is to track and report on data counters of the ip firewall filter items. Each item in the ip firewall can be tracked in terms of data used. I use this to monitor traffic across the firewall as well as bandwidth consumption . By using pass-through firewall items this script makes a good substitute for queue’s . I schedule both the update and reporting script using the scheduler. The update script I execute every 15min and the reporting script once a day
The script set consist of 3 scripts.
  1. Update statistic
  2. Report Statistics
  3. Reset Statistics
Update Statistics
The update script makes use of the comment fields to store items descriptions and statistics (Bytes Used) A example comment filed for IP Firewall Filter looks like:

Codice:
add action=passthrough chain=input comment="statistics - input traffic*43525369" disabled=no
add action=passthrough chain=output comment="statistics - output traffic*63367747" disabled=no
add action=passthrough chain=forward comment="statistics - forward traffic*421026065" disabled=no
The character * is used as a delimiter for the description and data portion.
The update script will update the combined total of tx and rx bytes for any item in ip firewall filter which has a * in the comment filed.
Please note the original comet should have *0
The statistic stored are in bytes.

The Update Script

Codice:
:local content

Codice:
      :local i


Codice:
      :local bytestotal

Codice:
      :local megstotal


Codice:
      :local bytescurrent      

Codice:
      :local megscurrent


Codice:
      :local bytessaved

Codice:
      :local megssaved

Codice:
     

Codice:
      :local ena

Codice:
     

Codice:
      :local pos1

Codice:
      :local pos2

Codice:
     

Codice:
      :log info "******************** starting - firewall filter usage update********************"

Codice:
     

Codice:
      :foreach i  in=[ /ip firewall filter find] do={

Codice:
     

Codice:
             :set ena [/ip firewall filter get $i disabled]

Codice:
             :set content [/ip firewall filter get $i comment]

Codice:
     

Codice:
             :if ($ena = false) do={

Codice:
                           

Codice:
                    :if ([:find $content "*"] != "") do={


Codice:
                           :local pos1 [:find $content "*"]

Codice:
                           :local pos2 [:len $content]


Codice:
                           :set bytessaved ([:pick $content ($pos1+1) $pos2])

Codice:
                           :set megssaved ($bytessaved  / 1048576)


Codice:
                           :set bytescurrent [/ip firewall filter get $i bytes]

Codice:
                           :set megscurrent ($bytescurrent / 1048576)

Codice:
           

Codice:
                           :set megstotal ($megscurrent + $megssaved)

Codice:
                           :set bytestotal ($bytescurrent + $bytessaved)


Codice:
                           :log info "-"

Codice:
                                           

Codice:
                                         

Codice:
                            /ip firewall filter set $i comment="$[:pick $content 0 ($pos1)]*$bytestotal"

Codice:
                            /ip firewall filter reset-counters $i

Codice:
                     }                                                        

Codice:
              }

Codice:
      }

Codice:
     

Codice:
      :log info "******************** ending - firewall filter usage update ********************"




The Report Script.

The report script will look for items in the ip firewall filter which has a * in the comment field. The reported unit would be in MB.

Codice:
:local content

Codice:
      :local i

Codice:
      :local sitename

Codice:
     

Codice:
      :local bytessaved

Codice:
      :local megssaved


Codice:
      :local logcontenttemp ""      

Codice:
      :local logcontent ""          


Codice:
      :set logcontenttemp "Good Day \n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")

Codice:
     

Codice:
      :set logcontenttemp "This is an automated notification, please do not reply to this email"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "Please see below the usage stats for your ip firewall:"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp" ."\n\r")

Codice:
                   

Codice:
      :set logcontenttemp "**************************************Firewall Filter*************************************"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :foreach i in=[/ip firewall filter  find comment !=""] do={

Codice:
     

Codice:
             :set content [/ip firewall filter get $i comment]

Codice:
     

Codice:
                    :if ([:find $content "*"] != "") do={


Codice:
                           :local pos1 [:find $content "*"]

Codice:
                           :local pos2 [:len $content]


Codice:
                           :set sitename [:pick $content 0 ($pos1)]


Codice:
                           :set bytessaved ([:pick $content ($pos1+1) $pos2])

Codice:
                           :set megssaved ($bytessaved  / 1048576)      


Codice:
                           :set logcontenttemp "$sitename"


Codice:
                           :for x from=1 to=( 55 - [:len $logcontenttemp]) step=1 do={

Codice:
                                  :set logcontenttemp ("$logcontenttemp" . " ")

Codice:
                           }

Codice:
                           

Codice:
                           :set logcontenttemp ("$logcontenttemp" . " Used: " . "$megssaved" . "mb")

Codice:
                           :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")        

Codice:
           

Codice:
             }

Codice:
      }    


Codice:
      :set logcontenttemp "\n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")          

Codice:
               

Codice:
      :set logcontenttemp  "***************************************Firewall Nat**************************************"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :foreach i in=[/ip firewall nat find comment !=""] do={

Codice:
     

Codice:
             :set content [/ip firewall nat get $i comment]

Codice:
     

Codice:
             :if ([:find $content "*"] != "") do={


Codice:
                    :local pos1 [:find $content "*"]

Codice:
                    :local pos2 [:len $content]

Codice:
     

Codice:
                    :set sitename [:pick $content 0 ($pos1)]

Codice:
     

Codice:
                    :set bytessaved ([:pick $content ($pos1+1) $pos2])

Codice:
                    :set megssaved ($bytessaved  / 1048576)


Codice:
                    :set logcontenttemp "$sitename"


Codice:
                           :for x from=1 to=( 55 - [:len $logcontenttemp]) step=1 do={

Codice:
                                  :set logcontenttemp ("$logcontenttemp" . " ")

Codice:
                           }

Codice:
                           

Codice:
                           :set logcontenttemp ("$logcontenttemp" . " Used: " . "$megssaved" . "mb")

Codice:
                           :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")      


Codice:
             }

Codice:
      }    


Codice:
      :set logcontenttemp "\n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")        


Codice:
      :set logcontenttemp "************************************Firewall Mangle************************************"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :foreach i in=[/ip firewall mangle find comment !=""] do={

Codice:
     

Codice:
             :set content [/ip firewall mangle get $i comment]

Codice:
     

Codice:
             :if ([:find $content "*"] != "") do={


Codice:
                    :local pos1 [:find $content "*"]

Codice:
                    :local pos2 [:len $content]

Codice:
     

Codice:
                    :set sitename [:pick $content 0 ($pos1)]

Codice:
     

Codice:
                    :set bytessaved ([:pick $content ($pos1+1) $pos2])

Codice:
                    :set megssaved ($bytessaved  / 1048576)      


Codice:
                    :set logcontenttemp "$sitename"


Codice:
                           :for x from=1 to=( 55 - [:len $logcontenttemp]) step=1 do={

Codice:
                                  :set logcontenttemp ("$logcontenttemp" . " ")

Codice:
                           }

Codice:
                           

Codice:
                           :set logcontenttemp ("$logcontenttemp" . " Used: " . "$megssaved" . "mb")

Codice:
                           :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")      


Codice:
           

Codice:
             }

Codice:
      }        


Codice:
      :set logcontenttemp "\n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")        


Codice:
      :set logcontenttemp "***************************************************************************************"                                        

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "KEY:"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "1 Megabyte (Mb) = 1000000 bytes (b)"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "1 Gigabyte (Gb) = 1000 Megabytes (Mb) \n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "Should you have any queries, please contact your account manager"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "\n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")        


Codice:
      :set logcontenttemp "Kind Regrads"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
       /tool e-mail send to=someone@test.com  subject="$[/system identity get name] firewall usage report"  body="$logcontent" tls=yes

Codice:
:local content

Codice:
      :local i

Codice:
      :local sitename

Codice:
     

Codice:
      :local bytessaved

Codice:
      :local megssaved


Codice:
      :local logcontenttemp ""      

Codice:
      :local logcontent ""          


Codice:
      :set logcontenttemp "Good Day \n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")

Codice:
     

Codice:
      :set logcontenttemp "This is an automated notification, please do not reply to this email"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "Please see below the usage stats for your ip firewall:"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp" ."\n\r")

Codice:
                   

Codice:
      :set logcontenttemp "**************************************Firewall Filter*************************************"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :foreach i in=[/ip firewall filter  find comment !=""] do={

Codice:
     

Codice:
             :set content [/ip firewall filter get $i comment]

Codice:
     

Codice:
                    :if ([:find $content "*"] != "") do={


Codice:
                           :local pos1 [:find $content "*"]

Codice:
                           :local pos2 [:len $content]


Codice:
                           :set sitename [:pick $content 0 ($pos1)]


Codice:
                           :set bytessaved ([:pick $content ($pos1+1) $pos2])

Codice:
                           :set megssaved ($bytessaved  / 1048576)      


Codice:
                           :set logcontenttemp "$sitename"


Codice:
                           :for x from=1 to=( 55 - [:len $logcontenttemp]) step=1 do={

Codice:
                                  :set logcontenttemp ("$logcontenttemp" . " ")

Codice:
                           }

Codice:
                           

Codice:
                           :set logcontenttemp ("$logcontenttemp" . " Used: " . "$megssaved" . "mb")

Codice:
                           :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")        

Codice:
           

Codice:
             }

Codice:
      }    


Codice:
      :set logcontenttemp "\n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")          

Codice:
               

Codice:
      :set logcontenttemp  "***************************************Firewall Nat**************************************"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :foreach i in=[/ip firewall nat find comment !=""] do={

Codice:
     

Codice:
             :set content [/ip firewall nat get $i comment]

Codice:
     

Codice:
             :if ([:find $content "*"] != "") do={


Codice:
                    :local pos1 [:find $content "*"]

Codice:
                    :local pos2 [:len $content]

Codice:
     

Codice:
                    :set sitename [:pick $content 0 ($pos1)]

Codice:
     

Codice:
                    :set bytessaved ([:pick $content ($pos1+1) $pos2])

Codice:
                    :set megssaved ($bytessaved  / 1048576)


Codice:
                    :set logcontenttemp "$sitename"


Codice:
                           :for x from=1 to=( 55 - [:len $logcontenttemp]) step=1 do={

Codice:
                                  :set logcontenttemp ("$logcontenttemp" . " ")

Codice:
                           }

Codice:
                           

Codice:
                           :set logcontenttemp ("$logcontenttemp" . " Used: " . "$megssaved" . "mb")

Codice:
                           :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")      


Codice:
             }

Codice:
      }    


Codice:
      :set logcontenttemp "\n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")        


Codice:
      :set logcontenttemp "************************************Firewall Mangle************************************"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :foreach i in=[/ip firewall mangle find comment !=""] do={

Codice:
     

Codice:
             :set content [/ip firewall mangle get $i comment]

Codice:
     

Codice:
             :if ([:find $content "*"] != "") do={


Codice:
                    :local pos1 [:find $content "*"]

Codice:
                    :local pos2 [:len $content]

Codice:
     

Codice:
                    :set sitename [:pick $content 0 ($pos1)]

Codice:
     

Codice:
                    :set bytessaved ([:pick $content ($pos1+1) $pos2])

Codice:
                    :set megssaved ($bytessaved  / 1048576)      


Codice:
                    :set logcontenttemp "$sitename"


Codice:
                           :for x from=1 to=( 55 - [:len $logcontenttemp]) step=1 do={

Codice:
                                  :set logcontenttemp ("$logcontenttemp" . " ")

Codice:
                           }

Codice:
                           

Codice:
                           :set logcontenttemp ("$logcontenttemp" . " Used: " . "$megssaved" . "mb")

Codice:
                           :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")      


Codice:
           

Codice:
             }

Codice:
      }        


Codice:
      :set logcontenttemp "\n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")        


Codice:
      :set logcontenttemp "***************************************************************************************"                                        

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "KEY:"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "1 Megabyte (Mb) = 1000000 bytes (b)"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "1 Gigabyte (Gb) = 1000 Megabytes (Mb) \n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "Should you have any queries, please contact your account manager"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "\n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")        


Codice:
      :set logcontenttemp "Kind Regrads"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
       /tool e-mail send to=someone@test.com  subject="$[/system identity get name] firewall usage report"  body="$logcontent" tls=yes


The Reset Script

The reset script will reset all counters back to a *0

Codice:
:local i

Codice:
      :local content

Codice:
     

Codice:
      :local ena

Codice:
     

Codice:
      :local pos1

Codice:
      :local pos2

Codice:
     

Codice:
      :log info "******************** starting - firewall- filter usage reset********************"

Codice:
     

Codice:
      :foreach i  in=[ /ip firewall filter find] do={

Codice:
     

Codice:
             :set ena [/ip firewall filter get $i disabled]

Codice:
             :set content [/ip firewall filter get $i comment]


Codice:
             :if ($ena = false) do={


Codice:
                    :if ([:find $content "*"] != "") do={                          


Codice:
                           :local pos1 [:find $content "*"]

Codice:
                           :local pos2 [:len $content]


Codice:
                           /ip firewall filter set $i comment="$[:pick $content 0 ($pos1)]*0"

Codice:
                           /ip firewall filter reset-counters $i


Codice:
                    }

Codice:
             }

Codice:
      }

Codice:
     

Codice:
      :log info "********************ending -  -firewall-filter usage reset ********************"


Cita messaggio


[-]
Condividi/Segnala (Mostra tutti)
Facebook Linkedin Twitter

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
Information [Mikrotik] Generate bogons firewall chain based on routing-marks berryberry 0 396 12-06-2015, 13:36
Ultimo messaggio: berryberry
Information [Mikrotik] Use Mikrotik as Fail2ban firewall berryberry 0 482 11-06-2015, 11:56
Ultimo messaggio: berryberry
Information [Mikrotik] Use host names in firewall rules berryberry 0 624 09-06-2015, 12:00
Ultimo messaggio: berryberry
Information [Mikrotik] Automated Usage Script berryberry 0 337 08-06-2015, 14:38
Ultimo messaggio: berryberry

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Utenti che stanno guardando questa discussione:
1 Ospite(i)


Powered by MyBB, © 2002-2017 MyBB Group.