mosquitto bruteforce fail2ban failregex












1














I am trying to write fail2ban filter to block bruteforcing IP addresses which are trying to subscribe to username/password protected mosquitto service by guessing username/password combinations.
On attempt to subscribe with incorrect details, mosquitto writes two lines to log like:



1544984465: New connection from 123.123.123.123 on port 1883.
1544984465: Socket error on client <unknown>, disconnecting.


I managed to write regex matching this two lines pattern by using https://regex101.com/ set to "python flavor". Regex looks like this:



s(?P<date>d+): New connection from (?P<host>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) .+n(?P=date): Socket error on client <unknown>, disconnecting.


Unfortunately, fail2ban is unable to find matches in log by using this regex:



# fail2ban-regex '/var/log/testlog.log' 's(?P<date>d+): New connection from (?P<host>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) .+n(?P=date): Socket error on client <unknown>, disconnecting.'

Running tests
=============

Use failregex line : s(?P<date>d+): New connection from (?P<host>[0-...
Use log file : /var/log/testlog.log
Use encoding : UTF-8


Results
=======

Failregex: 0 total

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
| [13] Epoch
`-

Lines: 13 lines, 0 ignored, 0 matched, 13 missed
[processed in 0.00 sec]

|- Missed line(s):
| 1544984465: New connection from 123.123.123.123 on port 1883.
| 1544984465: Socket error on client <unknown>, disconnecting.
| 1544984466: New connection from 123.123.123.123 on port 1883.
| 1544984466: Socket error on client <unknown>, disconnecting.
| 1544984468: New connection from 123.123.123.123 on port 1883.
| 1544984468: Socket error on client <unknown>, disconnecting.
| 1544984469: New connection from 123.123.123.123 on port 1883.
| 1544984469: Socket error on client <unknown>, disconnecting.
| 1544984470: New connection from 123.123.123.123 on port 1883.
| 1544984470: Socket error on client <unknown>, disconnecting.
| 1544984471: New connection from 123.123.123.123 on port 1883.
| 1544984471: Socket error on client <unknown>, disconnecting.
| 1544984473: New connection from 123.123.123.123 on port 1883.
`-


Fail2ban version is 0.9.6-1.el6.1. Running on Centos 6 server.










share|improve this question





























    1














    I am trying to write fail2ban filter to block bruteforcing IP addresses which are trying to subscribe to username/password protected mosquitto service by guessing username/password combinations.
    On attempt to subscribe with incorrect details, mosquitto writes two lines to log like:



    1544984465: New connection from 123.123.123.123 on port 1883.
    1544984465: Socket error on client <unknown>, disconnecting.


    I managed to write regex matching this two lines pattern by using https://regex101.com/ set to "python flavor". Regex looks like this:



    s(?P<date>d+): New connection from (?P<host>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) .+n(?P=date): Socket error on client <unknown>, disconnecting.


    Unfortunately, fail2ban is unable to find matches in log by using this regex:



    # fail2ban-regex '/var/log/testlog.log' 's(?P<date>d+): New connection from (?P<host>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) .+n(?P=date): Socket error on client <unknown>, disconnecting.'

    Running tests
    =============

    Use failregex line : s(?P<date>d+): New connection from (?P<host>[0-...
    Use log file : /var/log/testlog.log
    Use encoding : UTF-8


    Results
    =======

    Failregex: 0 total

    Ignoreregex: 0 total

    Date template hits:
    |- [# of hits] date format
    | [13] Epoch
    `-

    Lines: 13 lines, 0 ignored, 0 matched, 13 missed
    [processed in 0.00 sec]

    |- Missed line(s):
    | 1544984465: New connection from 123.123.123.123 on port 1883.
    | 1544984465: Socket error on client <unknown>, disconnecting.
    | 1544984466: New connection from 123.123.123.123 on port 1883.
    | 1544984466: Socket error on client <unknown>, disconnecting.
    | 1544984468: New connection from 123.123.123.123 on port 1883.
    | 1544984468: Socket error on client <unknown>, disconnecting.
    | 1544984469: New connection from 123.123.123.123 on port 1883.
    | 1544984469: Socket error on client <unknown>, disconnecting.
    | 1544984470: New connection from 123.123.123.123 on port 1883.
    | 1544984470: Socket error on client <unknown>, disconnecting.
    | 1544984471: New connection from 123.123.123.123 on port 1883.
    | 1544984471: Socket error on client <unknown>, disconnecting.
    | 1544984473: New connection from 123.123.123.123 on port 1883.
    `-


    Fail2ban version is 0.9.6-1.el6.1. Running on Centos 6 server.










    share|improve this question



























      1












      1








      1







      I am trying to write fail2ban filter to block bruteforcing IP addresses which are trying to subscribe to username/password protected mosquitto service by guessing username/password combinations.
      On attempt to subscribe with incorrect details, mosquitto writes two lines to log like:



      1544984465: New connection from 123.123.123.123 on port 1883.
      1544984465: Socket error on client <unknown>, disconnecting.


      I managed to write regex matching this two lines pattern by using https://regex101.com/ set to "python flavor". Regex looks like this:



      s(?P<date>d+): New connection from (?P<host>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) .+n(?P=date): Socket error on client <unknown>, disconnecting.


      Unfortunately, fail2ban is unable to find matches in log by using this regex:



      # fail2ban-regex '/var/log/testlog.log' 's(?P<date>d+): New connection from (?P<host>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) .+n(?P=date): Socket error on client <unknown>, disconnecting.'

      Running tests
      =============

      Use failregex line : s(?P<date>d+): New connection from (?P<host>[0-...
      Use log file : /var/log/testlog.log
      Use encoding : UTF-8


      Results
      =======

      Failregex: 0 total

      Ignoreregex: 0 total

      Date template hits:
      |- [# of hits] date format
      | [13] Epoch
      `-

      Lines: 13 lines, 0 ignored, 0 matched, 13 missed
      [processed in 0.00 sec]

      |- Missed line(s):
      | 1544984465: New connection from 123.123.123.123 on port 1883.
      | 1544984465: Socket error on client <unknown>, disconnecting.
      | 1544984466: New connection from 123.123.123.123 on port 1883.
      | 1544984466: Socket error on client <unknown>, disconnecting.
      | 1544984468: New connection from 123.123.123.123 on port 1883.
      | 1544984468: Socket error on client <unknown>, disconnecting.
      | 1544984469: New connection from 123.123.123.123 on port 1883.
      | 1544984469: Socket error on client <unknown>, disconnecting.
      | 1544984470: New connection from 123.123.123.123 on port 1883.
      | 1544984470: Socket error on client <unknown>, disconnecting.
      | 1544984471: New connection from 123.123.123.123 on port 1883.
      | 1544984471: Socket error on client <unknown>, disconnecting.
      | 1544984473: New connection from 123.123.123.123 on port 1883.
      `-


      Fail2ban version is 0.9.6-1.el6.1. Running on Centos 6 server.










      share|improve this question















      I am trying to write fail2ban filter to block bruteforcing IP addresses which are trying to subscribe to username/password protected mosquitto service by guessing username/password combinations.
      On attempt to subscribe with incorrect details, mosquitto writes two lines to log like:



      1544984465: New connection from 123.123.123.123 on port 1883.
      1544984465: Socket error on client <unknown>, disconnecting.


      I managed to write regex matching this two lines pattern by using https://regex101.com/ set to "python flavor". Regex looks like this:



      s(?P<date>d+): New connection from (?P<host>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) .+n(?P=date): Socket error on client <unknown>, disconnecting.


      Unfortunately, fail2ban is unable to find matches in log by using this regex:



      # fail2ban-regex '/var/log/testlog.log' 's(?P<date>d+): New connection from (?P<host>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) .+n(?P=date): Socket error on client <unknown>, disconnecting.'

      Running tests
      =============

      Use failregex line : s(?P<date>d+): New connection from (?P<host>[0-...
      Use log file : /var/log/testlog.log
      Use encoding : UTF-8


      Results
      =======

      Failregex: 0 total

      Ignoreregex: 0 total

      Date template hits:
      |- [# of hits] date format
      | [13] Epoch
      `-

      Lines: 13 lines, 0 ignored, 0 matched, 13 missed
      [processed in 0.00 sec]

      |- Missed line(s):
      | 1544984465: New connection from 123.123.123.123 on port 1883.
      | 1544984465: Socket error on client <unknown>, disconnecting.
      | 1544984466: New connection from 123.123.123.123 on port 1883.
      | 1544984466: Socket error on client <unknown>, disconnecting.
      | 1544984468: New connection from 123.123.123.123 on port 1883.
      | 1544984468: Socket error on client <unknown>, disconnecting.
      | 1544984469: New connection from 123.123.123.123 on port 1883.
      | 1544984469: Socket error on client <unknown>, disconnecting.
      | 1544984470: New connection from 123.123.123.123 on port 1883.
      | 1544984470: Socket error on client <unknown>, disconnecting.
      | 1544984471: New connection from 123.123.123.123 on port 1883.
      | 1544984471: Socket error on client <unknown>, disconnecting.
      | 1544984473: New connection from 123.123.123.123 on port 1883.
      `-


      Fail2ban version is 0.9.6-1.el6.1. Running on Centos 6 server.







      regular-expression fail2ban mqtt






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Dec 16 at 20:16









      Rui F Ribeiro

      38.9k1479129




      38.9k1479129










      asked Dec 16 at 19:42









      Nerijus Spl

      212




      212






















          1 Answer
          1






          active

          oldest

          votes


















          0














          Ok, I made it. Problems were following:




          Regular expressions (failregex, ignoreregex) assume that the date/time
          has been removed from the log line (this is just how fail2ban works
          internally ATM).
          Source: https://fail2ban.readthedocs.io/en/latest/filters.html




          And I had to add maxlines = 2 to filter.



          Final/working filter looks like this:



          [Init]
          maxlines = 2

          [Definition]
          failregex = .+ New connection from <HOST> on port d+.n.+Socket error on client <unknown>
          ignoreregex =





          share|improve this answer





















            Your Answer








            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "106"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f489370%2fmosquitto-bruteforce-fail2ban-failregex%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            Ok, I made it. Problems were following:




            Regular expressions (failregex, ignoreregex) assume that the date/time
            has been removed from the log line (this is just how fail2ban works
            internally ATM).
            Source: https://fail2ban.readthedocs.io/en/latest/filters.html




            And I had to add maxlines = 2 to filter.



            Final/working filter looks like this:



            [Init]
            maxlines = 2

            [Definition]
            failregex = .+ New connection from <HOST> on port d+.n.+Socket error on client <unknown>
            ignoreregex =





            share|improve this answer


























              0














              Ok, I made it. Problems were following:




              Regular expressions (failregex, ignoreregex) assume that the date/time
              has been removed from the log line (this is just how fail2ban works
              internally ATM).
              Source: https://fail2ban.readthedocs.io/en/latest/filters.html




              And I had to add maxlines = 2 to filter.



              Final/working filter looks like this:



              [Init]
              maxlines = 2

              [Definition]
              failregex = .+ New connection from <HOST> on port d+.n.+Socket error on client <unknown>
              ignoreregex =





              share|improve this answer
























                0












                0








                0






                Ok, I made it. Problems were following:




                Regular expressions (failregex, ignoreregex) assume that the date/time
                has been removed from the log line (this is just how fail2ban works
                internally ATM).
                Source: https://fail2ban.readthedocs.io/en/latest/filters.html




                And I had to add maxlines = 2 to filter.



                Final/working filter looks like this:



                [Init]
                maxlines = 2

                [Definition]
                failregex = .+ New connection from <HOST> on port d+.n.+Socket error on client <unknown>
                ignoreregex =





                share|improve this answer












                Ok, I made it. Problems were following:




                Regular expressions (failregex, ignoreregex) assume that the date/time
                has been removed from the log line (this is just how fail2ban works
                internally ATM).
                Source: https://fail2ban.readthedocs.io/en/latest/filters.html




                And I had to add maxlines = 2 to filter.



                Final/working filter looks like this:



                [Init]
                maxlines = 2

                [Definition]
                failregex = .+ New connection from <HOST> on port d+.n.+Socket error on client <unknown>
                ignoreregex =






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Dec 17 at 11:23









                Nerijus Spl

                212




                212






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Unix & Linux Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f489370%2fmosquitto-bruteforce-fail2ban-failregex%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Morgemoulin

                    Scott Moir

                    Souastre