InicioLinuxSecurizando (un poquito) nuestro Asterisk (o Servidor)

Securizando (un poquito) nuestro Asterisk (o Servidor)

Linux7/1/2011




Hace unos días hablaba con un amigo que realmente sabe de Asterisk y le comentaba que quería implementar algo de seguridad extra en mi servidor, especialmente para los script-kiddies que se dedican a intentar loguearse via SSH con ataques de fuerza bruta.

En mi caso, utilizo la última versión de Elastix , que incorpora Logwatch ya configurado para que nos envíe un correo local sobre la actividad en nuestro servidor.

Para quien no sepa, Logwatch es un programa que se encarga de verificar los logs del sistema y darnos aviso ya sea mediante un correo local, o directamente a una cuenta de correo. (Siempre y cuando tengamos salida por SMTP)
Se instala en Debian con aptitude install logwatch, y en mi caso en CentOS con yum install logwatch

Siguiendo con la idea de securizar el servidor se me había ocurrido como primer medida instalar un Honeypot para SSH así los nenes se cansaban de probar y probar, mientras el tráfico verdadero se establecía en otro puerto.
Como honeypot SSH utilicé Kippo .

Como segunda medida, en caso que "descubrieran" el verdadero puerto donde corría SSH necesitaba algo que no sólo logueara a los picarones atacantes, sino que también los bloqueara.
Logwatch lo único que me hace es registrarme intentos fallidos de logueo en los distintos tipos de servicios instalados, debajo un ejemplo como para ilustrar cómo funciona:


################### Logwatch 7.3 (03/24/06) ####################
       Processing Initiated: Thu Jun 30 10:54:15 2011
       Date Range Processed: yesterday
                             ( 2011-Jun-29 )
                             Period is day.
     Detail Level of Output: 0
             Type of Output: unformatted
          Logfiles for Host: xxx.com.ar
 ##################################################################

 --------------------- httpd Begin ------------------------

 Requests with error response codes
   401 Unauthorized
      /admin/config.php: 2 Time(s)
   404 Not Found
      /modules/pbxadmin/js/script.legacy.js: 2 Time(s)

 ---------------------- httpd End -------------------------


 --------------------- pam_unix Begin ------------------------

 runuser-l:
   Unknown Entries:
      session closed for user cyrus: 1 Time(s)
      session opened for user cyrus by (uid=0): 1 Time(s)

 sshd:
   Authentication Failures:
      root (urban.atmos.pccu.edu.tw): 29 Time(s)
      root (60.216.12.25): 27 Time(s)
      root (server2.tanintechnology.net): 25 Time(s)
      root (94.102.213.133): 4 Time(s)
      unknown (server2.tanintechnology.net): 4 Time(s)
      bin (server2.tanintechnology.net): 3 Time(s)
      unknown (urban.atmos.pccu.edu.tw): 3 Time(s)
   Invalid Users:
      Unknown Account: 7 Time(s)


 ---------------------- pam_unix End -------------------------


 --------------------- postfix Begin ------------------------



 28443 bytes transferred
 4 messages sent
 4 messages removed from queue

 Database files are not up-to-date (probably rehash is needed): 1 File(s), 1 Time(s)

 **Unmatched Entries**

 975C52B8AD7: to=, orig_to=, relay=local, delay=0.34, delays=0.03/0/0/0.31, dsn=5.1.1, status=bounced (unknown user: "faxmaster")
 975C52B8AD7: sender non-delivery notification: ECB932B8AD8

 ---------------------- postfix End -------------------------


 --------------------- Connections (secure-log) Begin ------------------------

 New Users:
   vnstat (101)

 New Groups:
   vnstat (102)


 ---------------------- Connections (secure-log) End -------------------------


 --------------------- SSHD Begin ------------------------


 Failed logins from:
   60.216.12.25: 27 times
   94.102.213.133: 4 times
   140.137.32.110 (urban.atmos.pccu.edu.tw): 29 times
   184.107.18.248 (server2.tanintechnology.net): 28 times

 Illegal users from:
   140.137.32.110 (urban.atmos.pccu.edu.tw): 3 times
   184.107.18.248 (server2.tanintechnology.net): 4 times

 Users logging in through sshd:
   root:
      192.168.1.100: 1 time


 Received disconnect:
   11: Bye Bye : 95 Time(s)

 **Unmatched Entries**
 pam_succeed_if(sshd:auth): error retrieving information about user cvs : 1 time(s)
 pam_succeed_if(sshd:auth): error retrieving information about user jack : 1 time(s)
 pam_succeed_if(sshd:auth): error retrieving information about user nagios : 3 time(s)
 pam_succeed_if(sshd:auth): error retrieving information about user test : 1 time(s)
 pam_succeed_if(sshd:auth): error retrieving information about user http : 1 time(s)

 ---------------------- SSHD End -------------------------


 --------------------- vsftpd-messages Begin ------------------------


 User FTP Logins:
    (192.168.1.100): ****** - 2 Time(s)

 Incoming FTP Files:
   /videos_df.avi < - 192.168.1.100 (User: *******)

(Los asteriscos los pongo para ocultar el nombre de usuario, en el log sale el usuario)
 TOTAL KB IN: 215771KB (210MB)

 ---------------------- vsftpd-messages End -------------------------


 --------------------- XNTPD Begin ------------------------


 **Unmatched Entries**
  sendto(198.137.202.16) (fd=21): Invalid argument: 84 time(s)
  sendto(216.45.57.38) (fd=21): Invalid argument: 84 time(s)
  sendto(169.229.70.64) (fd=21): Invalid argument: 84 time(s)

 ---------------------- XNTPD End -------------------------


 --------------------- yum Begin ------------------------


 Packages Installed:
   vnstat-1.6-1.el5.i386

 ---------------------- yum End -------------------------


 --------------------- Disk Space Begin ------------------------

 Filesystem            Size  Used Avail Use% Mounted on
 /dev/mapper/VolGroup01-LogVol00
                       71G  6.0G   61G   9% /
 /dev/hda1              99M   12M   82M  13% /boot


 ---------------------- Disk Space End -------------------------


 ###################### Logwatch End #########################



Como podemos ver hubo varios intentos fallidos de logueo como root en SSH.
Tiene la particularidad de no tener que tocar ni agregar nada, por ejemplo .. el Servidor de FTP (vsftpd) lo instalé hace unos días y automáticamente va y busca en los logs para botonearme día a día vía correo..

Pero bueno, ya vimos que podemos empezar por instalar logwatch como para enterarnos qué sucede en nuestro sistema ..

Luego de instalar y configurar logwatch me puse a investigar algo que bloquee un rango de ips y encontré esto:


#!/bin/bash 
### Block all traffic from AFGHANISTAN (af) and CHINA (CN). Use ISO code ### 
ISO=af cn" 

### Set PATH ### 
IPT=/sbin/iptables 
WGET=/usr/bin/wget 
EGREP=/bin/egrep 

### No editing below ### 
SPAMLIST=countrydrop" 
ZONEROOT=/root/iptables" 
DLROOT=http://www.ipdeny.com/ipblocks/data/countries" 

cleanOldRules(){ 
$IPT -F 
$IPT -X 
$IPT -t nat -F 
$IPT -t nat -X 
$IPT -t mangle -F 
$IPT -t mangle -X 
$IPT -P INPUT ACCEPT 
$IPT -P OUTPUT ACCEPT 
$IPT -P FORWARD ACCEPT 


# create a dir 
[ ! -d $ZONEROOT ] && /bin/mkdir -p $ZONEROOT 

# clean old rules 
cleanOldRules 

# create a new iptables list 
$IPT -N $SPAMLIST 

for c in $ISO 
do 
# local zone file 
tDB=$ZONEROOT/$c.zone 

# get fresh zone file 
$WGET -O $tDB $DLROOT/$c.zone 

# country specific log message 
SPAMDROPMSG=$c Country Drop" 

# get 
BADIPS=$(egrep -v "^#|^$" $tDB) 
for ipblock in $BADIPS 
do 
$IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG" 
$IPT -A $SPAMLIST -s $ipblock -j DROP 
done 
done 

# Drop everything 
$IPT -I INPUT -j $SPAMLIST 
$IPT -I OUTPUT -j $SPAMLIST 
$IPT -I FORWARD -j $SPAMLIST 

# call your other iptable script 
# /path/to/other/iptables.sh 

exit 0 




El anterior script lo que hace es bloquear directamente un rango de ips gigante ..
Pero no sirve, no porque no funcione, sino porque no le encuentro sentido a bloquear absolutamente todo, eso no es securizar un servidor, es simplemente ser paranoico ..


Entonces me topé con un amigo que me tiró un script hecho por él, este "pibe" no es ni más ni menos que uno de los desarrolladores de X-wrt - Fabian Omar Franzotti (fofware)

El script se llama logtrigger

Veamos una descripción de lo que es:

Fue escrito para correr en embedded linux como OpenWRT por tal motivo es pequeño, pero funciona muy bien en sistemas más grandes con linux, realizando una tarea muy especifica leer los registros de logs de otros programas y/o servicios para poder lanzar procesos externos cuando uno de estos registros coincide con una regla creada.

Logtrigger lee cada evento registrado, extrae información del mismo y la publica en variables de sistema para que pueda ser leida por un proceso externo llamado por Logtrigger.

Esto lo hace muy flexible y con un gran potencial ya que los procesos pueden ser escritos en cualquier lenguaje de script o programación dándole la posibilidad de automatizar infinidad de tareas en el momento en que el evento sucede.


Todo administrador de un host o una red, en ocasiones necesita leer archivos de logs para poder encontrar porque sucedieron algunas cosas o realizar procesos de mantenimiento cada vez que un error o evento fue registrado en el sistema.

Con Logtrigger ya no necesitará revisar archivos de eventos para ejecutar los procesos necesarios.
Logtrigger lo hace por Ud.

Muchos de estos procesos pueden ser realizados con CRON pero esto puede que sobrecargue mucho nuestro procesador o que la acción llegue tarde, (ej.: un ataque a nuestro ssh, asterisk, o algún otro porceso, donde estan tratando de robarnos una cuenta), ya que en el momento en que CRON ejecuta el proceso esto ya terminó.

Como Logtrigger puede lanzar procesos especificos ante cada evento se convierte en una herramienta de gran ayuda para:

Analizar Eventos
Detección de Errores
Mantenimiento
Seguridad
Auxiliar de otros procesos



Entonces pasando en limpio, lo que hace logtrigger es analizar los logs de los distintos tipos de servicios y actuar en consecuencia ante determinadas alertas..
Por ejemplo, si un usuario intenta loguearse a nuestro SSH y no logra conectarse tras 5 intentos, logtrigger directamente bloquea el puerto que utiliza SSH para la ip de ese usuario, del mismo modo actúa ante logins fallidos en nuestro Asterisk, que es lo que me interesaba a mi

Lo podemos correr de 2 formas, una con el "debug" activado

logtrigger -D 5

O directamente lo dejamos corriendo y ante algún evento nos guardará el log en /tmp/blockedip

logtrigger &

Imagen de cómo funciona al recibir un login incorrecto en nuestro Asterisk




Bueno si, todo muy lindo pero entonces qué onda, qué instalo ?

Yo, recomiendo tener instalado

1) logwatch
2) kippo (honeypot ssh)
3) logtrigger
4) iptables

Y listo, con eso ya estaríamos un poquito más seguros ..
Datos archivados del Taringa! original
48puntos
929visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
2visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

d
dysloke🇦🇷
Usuario
Puntos0
Posts32
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.