Gomma, saldatore, temperino e un pò di vino

Gestire il firewall di mikrotik tramite Fail2Ban

Fail2ban è un’ottimo programma per l’identificazione e il blocco di tentativi di accesso non autorizzato ai nostri servizi.

Un ottima guida sulla sua installazione e configurazione è disponibile a questo link

Oggi andiamo a vedere come far interagire fail2ban con il nostro router mikrotik in modo da poter bloccare sul primo apparato di rete , il router, gli indirizzi ip segnalati come malevoli

Lo script e l’action file sono pubblicati nella repository fail2ban_mikrotik

Il linguaggio di sviluppo è python 3 e necessita di alcune librerie per il corretto funzionamento

Per OS Debian/Ubuntu

apt-get install python3-pip

pip3 install tikapy argparse

Abilitiamo se non ancora attivo il servizio API sulla routerboard e limitiamone l’accesso alla sola rete interna

/ip service enable [find name=api]

/ip service set address=192.168.0.0/24 [find name=api]

Per motivi di sicurezza è preferibile definire sulla routerboard un utente di lettura/scrittura che abbia accesso tramite API, quest’ultimo verrà utilizzato dal nostro script per eseguire le operazione di ban e unban

/user group add name=API policy=read,write,api,!local,!telnet,!ssh,!ftp,!reboot,!policy,!test,!winbox,!password,!web,!sniff,!sensitive,!romon

/user add address=192.168.0.0/24 group=API name=apiuser password=VERYSECUREPASSWORD

Nel mio caso, il server dove è installato fail2ban  ha un’indirizzo ip privato della rete 192.168.0.0/24 l’indirizzo andrà pertanto modificato con la vostra rete interna

Creiamo le regola di firewall che andrà a bloccare il traffico proveniente dagli ip presenti nell’address-list fail2ban

/ip firewall filter add action=drop chain=forward comment="Fail2ban" src-address-list=fail2ban

/ip firewall filter add action=drop chain=input comment="Fail2ban" src-address-list=fail2ban

Installiamo e configuriamo lo script fail2ban_mikrotik.py

cd /tmp/

git clone https://github.com/pincioc/fail2ban_mikrotik.git

Creiamo la cartella /etc/fail2ban/script e salviamo all’interno il file fail2ban_mikrotik.py

mkdir /etc/fail2ban/script

mv /tmp/fail2ban_mikrotik/fail2ban_mikrotik.py /etc/fail2ban/script

chmod +x /etc/fail2ban/script/fail2ban_mikrotik.py

Copiamo il file mtk.conf nella cartella /etc/fail2ban/action.d/

mv /tmp/fail2ban_mikrotik/mtk.conf /etc/fail2ban/action.d/

Andrà modificato il valore MIKROTIKIP e VERYSECUREPASSWORD con l’indirizzo ip del vostro router e la password scelta nel passo precedente

Per ultimo andiamo ad aggiungere alla nostra regola di jail, presente nel file /etc/fail2ban/jail.conf , la nuova azione

action = mtk[list=fail2ban]

 

Bloccateli tutti!

6 commenti

  1. Zainul Halim

    Hi,

    Thank you so much for the very useful filter for Fail2ban, currently i’m been using it about 5 days and its awesome, thank you so much , hopefully there some update to the script like giving better output on fail2ban.log especially when the IP is already found on Mikrotik, currently on fail2ban.log is:

    File “/usr/local/lib/python3.6/site-packages/tikapy/__init__.py”, line 180, in talk
    return self.tik_to_json(self._api.talk(words))
    File “/usr/local/lib/python3.6/site-packages/tikapy/api/__init__.py”, line 138, in talk
    raise ApiError(replies[0][1])
    tikapy.api.ApiError: {‘message’: ‘failure: already have such entry’}

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last):
    File “/etc/fail2ban/filter.d/fail2ban_mikrotik.py”, line 37, in
    client.talk([‘/ip/firewall/address-list/add’,addresslist,ip,dynamic,timeout,comm])
    File “/usr/local/lib/python3.6/site-packages/tikapy/__init__.py”, line 182, in talk
    raise ClientError(‘could not talk to api’) from exc
    tikapy.ClientError: could not talk to api

    Hopefully many facility will add in the near future.

    Thank you so much to the script maker and god bless you.

    • admin

      Hi Zainul,

      i have update the code in git repository introducing a check before adding address.

      Your comments and thanks are very appreciated

      Mauro

      • Zainul Halim

        Dear Sir,

        TQ so much for the update, btw theres an error when i execute the latest script with:

        File “./fail2ban_mikrotik.py”, line 60
        sys.exit(1)
        ^
        IndentationError: expected an indented block

        Please fix and thank you so much.

        • admin

          Hi Zainul,

          you are welcome. I check the code and it’s correct. The error is related to a indentation problem, please verify if there is a space or tab before sys.exit(1) in line 60.

          Mauro

  2. franco

    ciao,

    scusa l’ignoranza. ma per jail intendi la creazione del seguente jail:

    [list=fail2ban]
    action= mtk

    • admin

      Ciao,

      nella definizione di una nuova jail ( presente nella cartella /etc/fail2ban/jail.d/ ) o nella modifica di una già esistente, dovrai andare a specificare la action mtk[list=nomedellalista]
      Esempio per la jail wordpress.conf:

      [wordpress-soft]
      enabled = true
      filter = wordpress-soft
      action = mtk[list=wordpress-address-list]
      logpath = /var/log/auth.log
      maxretry = 3
      port = http,https
      bantime = 31536000

      Mauro

Rispondi a Zainul Halim Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

© 2024 Openskill's Blog

Tema di Anders NorenSu ↑