sábado, 17 de mayo de 2014

Configuración de Fail2ban en Asterisk 1.8

Este servicio que ofrece nuestro Fail2ban querido por muchos, es de vital importancia para darle un nivel mas de seguridad a nuestro sistema, en este caso es Asterisk 1.8 en Debian Squeeze.
Cuando instalamos el Fail2ban en nuestro sistema lo mas probable es que solo este baneando (bloqueando) solo conexiones de tipo SSH y no este baneando (bloqueando) las direcciones que se hacen con números de extensiones tratando de loguearse en nuestro Asterisk. Aquí, seré mas claro en este mini tutorial.

Bueno empecemos instalando nuestro fail2ban.
--------------------------------------------------------------------
sudo apt-get install fail2ban
--------------------------------------------------------------------
con esta instalación si no esta instalado nuestro iptables se instala conjuntamente. primero hacemos una copia de todos los archivos que abramos con cualquier editor de texto.
Editemos nuestro fail2ban, su archivo de configuración se encuentra en
---------------------------------------------------------------------
/etc/fail2ban/jail.conf
---------------------------------------------------------------------
Aquí buscamos y modificamos las siguientes lineas, las resalto en negrita.
---------------------------------------------------------------------

ignoreip = 127.0.0.1 173.85.15.22
bantime  = 8978476
maxretry = 1

protocol = tcp
protocol = udp

[ssh]

enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 1



#Añadimos al final del archivo desde aqui para bajo estas lineas de asterisk
# Asterisk
[asterisk-iptables]
enabled  = true
filter   = asterisk
action   = iptables-allports[name=ASTERISK, protocol=all]
           sendmail-whois[name=ASTERISK, dest=root@local.com, sender=local.com]
logpath  = /var/log/asterisk/messages
maxretry = 1
bantime = 8592000
---------------------------------------------------------------
Aquí un ejemplo de la configuración
---------------------------------------------------------------

ignoreip = 127.0.0.1 173.85.15.22   # aquí agregamos las direcciones permitidas separadas por espacios
bantime  = 8978476                         # es la cantidad de segundos que estará baneada una dirección ip
maxretry = 1                                    # máximo de intentos que permite antes de banear la dirección ip
protocol = tcp                                   # tipo de protocolo a filtrar, en mi caso coloque udp y tcp
----------------------------------------------------------------
todavía no podemos iniciar nuestro fail2ban por que algunas veces no encuentra la ruta de los logs de Asterisk.
Si tienen los logs de Asterisk en esta ruta debería de arrancar el fail2ban /var/log/asterisk/messages
si no encuentran el archivo messages tendremos que hacer lo siguiente
----------------------------------------------------------------
touch /var/log/asterisk/messages
chown asterisk.asterisk /var/log/asterisk/messages
chmod 775 /var/log/asterisk/messages
-----------------------------------------------------------------
Lo que hicimos fue crear el archivo de los logs de asterisk, luego agregamos al usuario y grupo asterisk como propietario y después le damos permiso al archivo messages para asterisk puede escribir en el.
----------------------------------------------------------------
abrimos el archivo logger.conf y agregamos unas lineas, si existen las descomentamos.
----------------------------------------------------------------
/etc/asterisk/logger.conf

[general]
dateformat=%F %T


[logfiles]
debug => debuf,verbose
console => notice,warning,error,debug
messages => notice,warning,error
full => notice,warning,error,debug,verbose,dtmf
-----------------------------------------------------------------
Si quieren crean el archivo full, los mismos pasos que messages  /var/log/asterisk/full en este archivo nos graba todos los logs de notice,warning,error,debug,verbose,dtmf 
-----------------------------------------------------------------
Agregamos unas lineas en
-----------------------------------------------------------------
/etc/fail2ban/filter.d/asterisk.conf   y copiamos estas lineas

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
#before = common.conf

[Definition]

#_daemon = asterisk

# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P<HOST>\S+)
# Values:  TEXT
#

failregex = NOTICE.* .*: Registration from '\".*\".*' failed for '<HOST>(:[0-9]{1,5})?' - No matching peer found
            NOTICE.* .*: Registration from '\".*\".*' failed for '<HOST>(:[0-9]{1,5})?' - Wrong password
            NOTICE.* .*: Registration from '\".*\".*' failed for '<HOST>(:[0-9]{1,5})?' - Username/auth name mismatch
            NOTICE.* .*: Registration from '\".*\".*' failed for '<HOST>(:[0-9]{1,5})?' - Device does not match ACL
            NOTICE.* .*: Registration from '\".*\".*' failed for '<HOST>(:[0-9]{1,5})?' - Peer is not supposed to register
            NOTICE.* .*: Registration from '\".*\".*' failed for '<HOST>(:[0-9]{1,5})?' - ACL error (permit/deny)
            NOTICE.* .*: Registration from '.*' failed for '<HOST>(:[0-9]{1,5})?' - No matching peer found
            NOTICE.* .*: Registration from '.*' failed for '<HOST>(:[0-9]{1,5})?' - Wrong password
            NOTICE.* .*: Registration from '.*' failed for '<HOST>(:[0-9]{1,5})?' - Username/auth name mismatch
            NOTICE.* .*: Registration from '.*' failed for '<HOST>(:[0-9]{1,5})?' - Device does not match ACL
            NOTICE.* .*: Registration from '.*' failed for '<HOST>(:[0-9]{1,5})?' - Peer is not supposed to register
            NOTICE.* .*: Registration from '.*' failed for '<HOST>(:[0-9]{1,5})?' - ACL error (permit/deny)
            NOTICE.* <HOST> failed to authenticate as '.*'$
            NOTICE.* .*: No registration for peer '.*' \(from <HOST>\)
            NOTICE.* .*: Host <HOST> failed MD5 authentication for '.*' (.*)
            NOTICE.* .*: Failed to authenticate user .*@<HOST>.*
            NOTICE.* .*:Sending fake auth rejection for device .*@<HOST>.*

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =


-----------------------------------------------------------------
Luego de haber echo estos pasos debemos reiniciar asterisk, con un simple
-----------------------------------------------------------------
root@asterisk#amportal restart
root@asterisk#/etc/init.d/fail2ban restart
-----------------------------------------------------------------
Solo queda loguearnos desde un cliente sip o iax2 y después de los intentos permitidos veremos la ip baneada como este ejemplo que dice que la dirección  une.net. ha sido baneado por iptables con un DROP, porque trató de conectarse con una extensión o contraseña falsa con Asterisk y supero el numero de intentos fallidos y sera baneado por el tiempo que especificamos en jail.conf.
para mirar cuantas direcciones hay baneadas solo ejecutamos
-----------------------------------------------------------------
 iptables -L
-----------------------------------------------------------------
---------------------------------------------------------------
Si queremos desbanear una dirección es muy fácil solo miramos cuantas direcciones baneadas hay y ejecutamos el siguiente comando, el 1 es porque solo hay uno baneado y se encuentra en el primer lugar.
---------------------------------------------------------------
iptables -D fail2ban-ASTERISK 1
---------------------------------------------------------------
Espero haber sido claro en este pequeño tutorial esta fue la forma mas clara para mi, hasta una próxima..!!!

Att. Tiempo20
Blog http://asterisk18.blogspot.com/









miércoles, 14 de mayo de 2014

colgar llamadas desde una extensión

Bueno hoy vamos a configurar una extensión para colgar una llamada en una extensión especifica, es bastante fácil, pero algunos no lo es, entonces comenzamos y agregamos un contexto en extension.conf en la siguiente ruta
;----------------------------------------------------------
/etc/asterisk/extensions.conf
;----------------------------------------------------------
Debemos agregarlo debajo del contexto [from-internal] o el que tengan configurado para este tipo de extensiones a colgar. Lo resalto en negrita y agregamos el include en el contexto de trabajo.
;-----------------------------------------------------------

[from-internal]
include => from-internal-noxfer
include => from-internal-xfer
include => bad-number ; auto-generated
include => custom-spy
include => soft-hangup
;-----------------------------------------------------------
[soft-hangup]
exten =>_3XXXX,1,Authenticate(1234)
same =>n,SoftHangup(SIP/${EXTEN:1},a)
same =>n,Hangup()
;-----------------------------------------------------------
Este ejemplo es porque trabajo con extensiones de tipo 7121 cuatro dígitos.
Si la extensión 7121 tiene una llamada activa y no es productiva para la empresa y quisiéramos colgarla, marcamos desde la extensión 7122 de esta forma 37121 nos pide la contraseña que en este caso es 1234 y la llamada se cuelga inmediatamente y, así para cualquier otra extensión.

Saludos!!!  (el poder del conocimiento está en compartir lo que aprendemos)
ATT. Tiempo20

Anexo el link de donde lo hice


solución chanspy al colgar sigue activo

Pienso que vendría bien compartir con uds la forma de configurar ChanSpy en asterisk 1.8 y debian Squeeze, para que no se quede en silencio y con la llamada activa después de colgar. Si tenemos un FreePbx por defecto se inicia la configuración en el archivo /etc/asterisk/extensions_additional.conf  aquí no se hace  nada porque cada que reiniciemos el servidor asterisk carga la configuracion por default del ChanSpy.
Para asignar una contraseña al ChanSpy cuando digitemos 555 vamos a modificar el archivo  /etc/asterisk/extensions_override_freepbx.conf muchas veces esta vació, pero antes de abrirlo nos aseguramos de hacer una copia de respaldo, bueno abrimos el archivo y agregamos estas lineas
--------------------------------------------------------------

[app-chanspy-custom]
exten => 5551,1,Answer
exten => 5551,2,Authenticate(1234)
exten => 5551,3,Wait(1)
exten => 5551,4,Goto(custom-app-enh-chanspy,s,1)
exten => 5551,5,Hangup

; end of [app-chanspy-custom]

[custom-app-enh-chanspy]
exten => s,1,BackGround(please-enter-the)
exten => s,n,Read(SPYNUM|extension)
exten => s,n,ChanSpy(SIP/${SPYNUM}|wv4)

;end of extensions_custom.conf

[app-chanspy]
include => app-chanspy-custom
exten => 555,1,Authenticate(1234)
exten => 555,2,Read(SPYNUM,extension)
exten => 555,3,ChanSpy(SIP/${SPYNUM},bq)

; end of [app-chanspy]

include => app-chanspy
include => app-chanspy-custom
-------------------------------------------------------------
Las lineas a modificar estan en negrita, donde (1234) es la contraseña que debemos ingresar para escuchar las llamadas. y, bq son para que el ChanSpy solo busque canales con audio y no se quede colgado sin audio y con la llamada en linea. Para pasar de llamada solo presionamos la tecla (*) y toda llamada nueva que entre la vamos a escuchar sin ser oídos.
b= es para que solo busque canales con audio.
w= es para participar en la llamada que espiamos.
q= es para escuchar y no nos oigan.
ejm= bw) así seria para que asterisk solo busque canales con audio y participar en la llamada.

Nota: En mi humilde opinión recomiendo colocar la b así evitamos que el ChanSpy se quede en silencio y activo y, aunque colguemos la llamada siempre permanecerá activa, de esta manera trabaja mucho mas rápido y estable, así cuando colguemos la llamada ChanSpy se cerrara el canal normalmente.

Espero aportar con un poco de mucha consulta en la WEB para dar con la solución que me funciono..!!!

Saludos!
ATT. Tiempo20


martes, 13 de mayo de 2014

colgar llamadas desde consola en asterisk 1.8

Aclaro que esta función me funciona perfectamente en ASTERISK 1.8 en debian squeeze
Lo primero es mirar el id del canal o extension a colgar
ejecutamos el siguiente comando desde la cli de Asterisk.
-----------------------------------------------------------------
CLI>core show channels

----------------------------------------------------------------
Aquí vemos los canales y extensiones activos. Si queremos colgar la llamada en la extension 5545
ejecutamos el siguiente comando desde el CLI.
----------------------------------------------------------------
----------------------------------------------------------------
Y la llamada en la extensión 5545 se cuelga inmediatamente, espero poder ayudar a quien lo necesite.
Si quisiéramos colgar un canal solo es reemplazar la extensión por el canal.
Saludos..!!! Att Tiempo20