Cursos Asterisk en México

http,https y Fail2ban

Colapsar

Anuncio

Colapsar
No hay anuncio todavía.
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • http,https y Fail2ban

    Estimados,
    Soy usuario reciente de Elastix y acabo de descubrir este Foro fenomenal.
    Muy interesante todo lo que publican. Espero poder contribuir también.
    Mi servidor tiene Elastix 2.3, con asterisk 1.8.11.0.

    Para comenzar tengo un problema, tal vez puedan asesorarme. He configurado el Fail2ban (0.8.4) y no logro bloquear los (auto)ataques por http y https.

    Tratando por la consola WEB (https://192.168....) los ataques se registran en un archivo (audit.log), atacando al freePBX (https://192.168..../admin) en otro (ssl_error_log) y atacando al freePBX después de estar logado en la consola WEB en otro archivo (ssl_error_log).

    Yo pudiera direccionar el logpath de cada tipo de ataque (en el jail.conf) a cada uno de esos /carpetas/archivos, el problema es que esos archivos se llenan de otras informaciones, y son grandes, con lo que entorpecerán el trabajo del Fail2ban.

    Por otra parte, algunos de los mensajes de ataques no coinciden con las expresiones que he colocado en los regex de los filtros (que he copiado de internet). Eso me preocupa, tal vez yo estoy mirando para los archivos incorrectos. Alguien sabe si aquellos son los archivos correctos ?

    Y bueno, ? cómo hacer para que apenas los mensajes de ataques se registren en un(s) archivo logs, que sea el que Fail2ban monitore continuamente ?, o sea, donde no estén todos los otros mensajes que aparecen en aquellos archivos que mencioné.

    Esta es la parte de mi jail.conf.

    [apache-iptables]
    enabled = true
    port = http,hhtps
    filter = apache-auth
    action = iptables-multiport[name=HTTP_S, port="http,https"]
    logpath = /var/log/httpd/ssl_error_log
    maxretry = 3
    bantime = 100

    Saludos para todos !

  • #2
    Hola,

    ¿Y que tienes en tu filtro apache-auth?

    Toma en cuenta que esto solo va a bloquear los intentos de registro fallido por una autenticación simple por HTTP. Si usas algo como Elastix y tratas de bloquear los intentos de acceso a la página principal, esto no va a funcionar porque el registro allí es diferente de lo que esperas buscar.

    También si pudieras incluir una fracción del archivo ssl_error_log que estás analizando (y que tenga muestras de lo que quieres bloquear), sería mejor.

    Saludos,
    dCAP Christian Cabrera R.
    Para aprender a usar Asterisk, asiste a uno de mis cursos Asterisk
    Si deseas asesoría pagada, por favor contáctame

    Comentario


    • #3
      Hola a todos,
      Christian, sí tengo ese filtro ('apache-auth') y tengo también uno llamado 'freepbx-auth'. Aqui están:

      El 'apache-auth.conf':
      failregex = [[]client <HOST>[]] user .* authentication failure
      [[]client <HOST>[]] user .* not found
      [[]client <HOST>[]] user .* password mismatch

      El 'freepbx-auth.conf':
      failregex = <HOST> - .* "GET .* 401 *

      Este último también está activado en el jail.conf.

      Mensajes con la expresión del 'freepbx-auth' tengo en el archivo 'ssl_access_log'.
      En este archivo se almacenan todos los intentos de conexión, o sea los exitosos y los fallidos. El problema está en que los mensajes de los intentos fallidos no son parecidos a los regex del 'apache-auth'. Mensajes con sus expresiones exactas no las he visto (aun) en ningún archivo.

      Ejemplos del 'ssl_access_log' con "ataques" al freePBX (o sea, con https://192.168.1.5/admin o clicando en 'Unembedded freePBX' ya en el Elastix):
      192.168.1.6 - - [02/Dec/2012:14:56:14 -0200] "GET /admin/images/tab-first-current.png HTTP/1.1" 200 2639
      192.168.1.6 - - [02/Dec/2012:14:56:15 -0200] "GET /admin/images/tab-hover.png HTTP/1.1" 200 2557
      192.168.1.6 - - [02/Dec/2012:14:56:16 -0200] "GET /admin/config.php HTTP/1.1" 401 2277
      192.168.1.6 - admin3 [02/Dec/2012:14:56:16 -0200] "GET /admin/config.php HTTP/1.1" 401 2277
      192.168.1.6 - admin3 [02/Dec/2012:14:56:19 -0200] "GET /admin/config.php HTTP/1.1" 401 2277
      192.168.1.6 - admin3 [02/Dec/2012:14:56:22 -0200] "GET /admin/config.php HTTP/1.1" 401 2277
      192.168.1.6 - admin3 [02/Dec/2012:14:56:24 -0200] "GET /admin/config.php HTTP/1.1" 401 2277
      192.168.1.6 - - [02/Dec/2012:14:56:50 -0200] "GET /index.php?logout=yes HTTP/1.1" 302 -
      192.168.1.6 - - [02/Dec/2012:14:56:50 -0200] "GET /index.php HTTP/1.1" 200 3040
      192.168.1.6 - - [02/Dec/2012:14:56:50 -0200] "GET /themes/elastixneo/login_styles.css HTTP/1.1" 200 2012
      192.168.1.6 - - [02/Dec/2012:14:56:50 -0200] "GET /themes/elastixneo/login_styles.css HTTP/1.1" 200 2012
      192.168.1.6 - - [02/Dec/2012:14:56:50 -0200] "GET /themes/elastixneo/images/elastix_logo_mini.png HTTP/1.1" 200 5109

      Estos pertenecen al mismo 'ssl_access_log' pero para "ataques" a https://192.168.1.5 (o sea, a la WEB de Elastix):
      192.168.1.2 - - [02/Dec/2012:18:41:52 -0200] "POST / HTTP/1.1" 200 3040
      192.168.1.2 - - [02/Dec/2012:18:41:58 -0200] "POST / HTTP/1.1" 200 3040
      192.168.1.2 - - [02/Dec/2012:18:42:04 -0200] "POST / HTTP/1.1" 200 3040

      Fíjate que en ese archivo tengo aquellos mensajes del GET/401, pero los mensajes del POST/200 no los tengo en las regex.

      Ahora siguen ejemplos del 'ssl_error_log'. Aquí solo se almacenan los intentos de conexión fallidos al 'Unembedded freePBX', o sea, clicando en ese link después de entrar con éxito a la consola WEB del Elastix:

      Ejemplos del 'ssl_error_log' con intentos de conexión comenzando a las 01:06:21, 22:22:37 y 22:43:13:
      [28 23:56:30] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
      [28 23:56:30] [warn] RSA server certificate CommonName (CN) `localhost.localdomain' does NOT match server name!?
      [28 23:56:31] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
      [28 23:56:31] [warn] RSA server certificate CommonName (CN) `localhost.localdomain' does NOT match server name!?
      [29 01:06:21] [error] [client 192.168.1.2] Thu, 29 Nov 2012 01:06:21 -0200 - Got event.. fullybooted, referer: https://192.168.1.5/index.php
      [29 01:06:21] [error] [client 192.168.1.2] Thu, 29 Nov 2012 01:06:21 -0200 - No event handler for event 'fullybooted', referer: https://192.168.1.5/index.php
      [29 01:06:21] [error] [client 192.168.1.2] File does not exist: /var/www/html/modules/pbxadmin/js/script.legacy.js, referer: https://192.168.1.5/index.php?menu=pbxconfig
      [29 01:11:54] [error] [client 192.168.1.2] PHP Notice: Undefined variable: skip_astman in /var/www/html/admin/header.php on line 117, referer: https://192.168.1.5/admin/config.php
      [29 01:11:54] [error] [client 192.168.1.2] PHP Notice: Undefined variable: skip_astman in /var/www/html/admin/header.php on line 117, referer: https://192.168.1.5/admin/config.php
      [29 01:11:56] [error] [client 192.168.1.2] PHP Notice: Undefined variable: skip_astman in /var/www/html/admin/header.php on line 117, referer: https://192.168.1.5/admin/config.php
      [29 01:12:00] [error] [client 192.168.1.2] PHP Notice: Undefined variable: skip_astman in /var/www/html/admin/header.php on line 117, referer: https://192.168.1.5/admin/config.php
      [29 01:12:02] [error] [client 192.168.1.2] PHP Notice: Undefined variable: skip_astman in /var/www/html/admin/header.php on line 117, referer: https://192.168.1.5/admin/config.php
      [29 15:41:38] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
      [29 15:41:38] [warn] RSA server certificate CommonName (CN) `localhost.localdomain' does NOT match server name!?
      [29 15:41:39] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
      [29 15:41:39] [warn] RSA server certificate CommonName (CN) `localhost.localdomain' does NOT match server name!?
      [29 22:22:37] [error] [client 192.168.1.6] Sat, 01 Dec 2012 22:22:37 -0200 - Got event.. fullybooted, referer: https://192.168.1.5/index.php
      [29 22:22:37] [error] [client 192.168.1.6] Sat, 01 Dec 2012 22:22:37 -0200 - No event handler for event 'fullybooted', referer: https://192.168.1.5/index.php
      [29 22:22:39] [error] [client 192.168.1.6] File does not exist: /var/www/html/modules/pbxadmin/js/script.legacy.js, referer: https://192.168.1.5/index.php?menu=pbxconfig
      [29 22:43:13] [error] [client 192.168.1.6] Sat, 01 Dec 2012 22:43:13 -0200 - Got event.. fullybooted, referer: https://192.168.1.5/index.php
      [29 22:43:13] [error] [client 192.168.1.6] Sat, 01 Dec 2012 22:43:13 -0200 - No event handler for event 'fullybooted', referer: https://192.168.1.5/index.php
      [29 22:43:13] [error] [client 192.168.1.6] Sat, 01 Dec 2012 22:43:13 -0200 - Got event.. fullybooted, referer: https://192.168.1.5/index.php
      [29 22:43:13] [error] [client 192.168.1.6] Sat, 01 Dec 2012 22:43:13 -0200 - No event handler for event 'fullybooted', referer: https://192.168.1.5/index.php
      [29 22:43:14] [error] [client 192.168.1.6] File does not exist: /var/www/html/modules/pbxadmin/js/script.legacy.js, referer: https://192.168.1.5/index.php?menu=pbxconfig

      Fíjate que estos mensajes no se corresponden con los regex del 'apache-auth'.

      Ahora, en el archivo '/elastix/audit.log' encuentro estos mensajes para las conexiones a la consola WEB:
      [Dec 02 18:41:58] LOGIN admin1: Authentication Failure to Web Interface login. Invalid user 1admin from 192.168.1.2.
      [Dec 02 18:42:04] LOGIN admin1: Authentication Failure to Web Interface login. Invalid user 1admin from 192.168.1.2.
      [Dec 02 19:47:24] LOGIN admin: Web Interface login successful. Accepted password for admin from 192.168.1.2.
      [Dec 02 19:53:08] NAVIGATION admin: User admin visited "PBX >> PBX Configuration" from 192.168.1.2.

      Ahí aparece la frase "Authentication Failure", pero la expresión no se corresponden con la del regex.

      Y como decía, yo puedo adaptar las regex y direccionar los logpath para estos archivos que menciono, pero ellos son grandes (fíjate que aparecen mensajes que no son solo de los ataques), y son varios archivos para el mismo tipo de ataque (apache).

      Por ejemplo, en mi archivo 'full' (que tiene varios Megas) se almacenan todos los eventos del asterisk, pero en el archivo 'fail2ban' se almacenan solo los ataques:

      [03:23:54] NOTICE[3345] chan_sip.c: Registration from '"LIX"<sip:1002@192.168.1.5;transport=UDP>' failed for '192.168.1.4:5060' - Wrong password
      [03:23:54] NOTICE[3345] chan_sip.c: Failed to authenticate device "LIX"<sip:1002@192.168.1.5;transport=UDP>;tag=4a6c 4a1f for SUBSCRIBE
      [03:24:21] NOTICE[3345] chan_sip.c: Sending fake auth rejection for device "LIX"<sip:1003@192.168.1.5;transport=UDP>;tag=1104 f666
      [03:24:21] NOTICE[3345] chan_sip.c: Registration from '"LIX"<sip:1003@192.168.1.5;transport=UDP>' failed for '192.168.1.4:5060' - No matching peer found

      Ese archivo "fail2ban" (de menor tamaño) es el que tiene la regla del asteris en el jail.conf (o sea, en su logpath).

      De ahí la pregunta: qué tengo que hacer para que en un único archivo (o en varios) se almacenes apenas los mensajes de los ataques al apache ? (para colocarlo(s) en el logpath del Fail2ban).

      Buenos, gracias por la ayuda.

      Comentario


      • #4
        De los archivos que mencionas, solo el ssl_access_log creo que es el que no cumple con el formato que F2B espera. Esto dado que las lineas comienzan con <IP> y luego sigue <FECHA>. Hasta donde recuerdo, F2B exige que el principio de la linea sea una <FECHA> para poder hacer el bloque correspondiente.

        El resto de los archivos, sobretodo el /var/log/elastix/audit.log, contiene la información que necesitas. Si mencionas que puedes adaptar tus filtros y logpaths para que vayan sobre de este archivo entonces tienes todo resuelto, solo es cosa que hagas los ajustes.

        Por el tamaño de los archivos no me preocuparía. F2B es muy eficiente y se va sobre las nuevas lineas (no revisa todo el archivo de nuevo cada vez que hay un cambio), así que no veo motivo por el cual preocuparte. Aún así, si lo que quieres es que se concentre la información, tendrías que meterte con el tema de crear sockets fifo y pasarlos por un grep para que se filtre lo que quieres.

        Creo que al final, configurar F2B con los archivos completos te da mejor costo/beneficio que preocuparte por acortar los originales.

        Saludos,
        dCAP Christian Cabrera R.
        Para aprender a usar Asterisk, asiste a uno de mis cursos Asterisk
        Si deseas asesoría pagada, por favor contáctame

        Comentario


        • #5
          Hola Christian

          Queria saber si pudiste resolver el problema con el Fail2ban, ya que yo tengo un problema parecido. te cuento:

          Ya configure el fail2ban y ya me esta bloquenado el ssh, ahora el siguiente paso es cloquear intentos fallidos de conexion con el apache, pero a pesar de al configuración y varios documentos que me he leido no lo he podido hacer intento hasta 10 veces con claves erradas para que me bloquee y no lo hace.

          el archivo Jail.conf
          [apache-iptables]
          enabled = true
          port = http,hhtps
          filter = apache-auth
          action = iptables-multiport[name=HTTP_S, port="http,https"]
          logpath = /var/log/elastix/audit.log
          maxretry = 5
          bantime = 86400

          Filtros /etc/fail2ban/filter.d\apache-auth.conf
          failregex = [[]client <HOST>[]] user .* authentication failure
          [[]client <HOST>[]] user .* not found
          [[]client <HOST>[]] user .* password mismatch
          [[]client <HOST>[]] user .* Failed password

          Log
          /var/log/elastix/audit.log
          [Feb 07 16:38:42] LOGIN admin: Authentication Failure to Web Interface login. Failed password for admin from 192.168.1.158.
          [Feb 07 16:38:46] LOGIN admin: Authentication Failure to Web Interface login. Failed password for admin from 192.168.1.158.
          [Feb 07 16:38:49] LOGIN admin: Authentication Failure to Web Interface login. Failed password for admin from 192.168.1.158.
          [Feb 07 16:38:51] LOGIN admin: Authentication Failure to Web Interface login. Failed password for admin from 192.168.1.158.
          [Feb 07 16:38:54] LOGIN admin: Authentication Failure to Web Interface login. Failed password for admin from 192.168.1.158.
          [Feb 07 16:38:57] LOGIN admin: Authentication Failure to Web Interface login. Failed password for admin from 192.168.1.158.
          [Feb 07 16:38:58] LOGIN admin: Authentication Failure to Web Interface login. Failed password for admin from 192.168.1.158.
          [Feb 07 16:39:02] LOGIN admin: Authentication Failure to Web Interface login. Failed password for admin from 192.168.1.158.

          Puedes ayudarme a detectar el error y como solucionarlo.

          Gracias

          Comentario


          • #6
            Nunca tuve problema, estaba ayudando a alguien más a resolverlo. Ahora, con respecto de lo que comentas, parece que el error es bastante obvio. La linea
            Código:
            [Feb 07 16:38:42] LOGIN admin: Authentication Failure to Web Interface login. Failed password for admin from 192.168.1.158.
            no coincide con el filtro
            Código:
            failregex = [[]client <HOST>[]] user .* authentication failure
            [[]client <HOST>[]] user .* not found
            [[]client <HOST>[]] user .* password mismatch
            [[]client <HOST>[]] user .* Failed password
            Agrega esta linea a tu filtro:
            Código:
            Failed password for .* from <HOST>
            Puede que el formato se rompa un poco por el foro, pero el problema radica en que la cadena que el filtro busca no se parece a lo que tienes en tus logs. Corríjelos y reintenta.

            Saludos,
            dCAP Christian Cabrera R.
            Para aprender a usar Asterisk, asiste a uno de mis cursos Asterisk
            Si deseas asesoría pagada, por favor contáctame

            Comentario

            Principales Usuarios Activos

            Colapsar

            No hay usuarios activos superiores.
            Trabajando...
            X