Asterisk y Firewall

Printer-friendly versionSend to friendPDF version

Actualizado 31 Enero 2010



Para proteger el servidor Linux de accesos no autorizados hay que instalar un firewall (cortafuegos) y abrir los puertos que Asterisk necesita para aceptar conexiones externas. Esta es la parte más delicada de la configuración del servidor porque es donde se definen los puertos y los servicios que son accesibles desde Internet. En el caso del VPS Linode se instalará y Configurará IPtables.

Si Asterisk se encuentra instalado en un computador conectado a Internet a través de un router hay dos opciones:

 

  • Abrir los puertos desde la pagina de administración del router.

  • Configurar una DMZ en el router y luego gestionar los puertos directamente con IPtables

Para instalar iptables:

yum install iptables

Iptables se encarga de gestionar todos los paquetes que entren y salgan del servidor Linux. Para eso se utilizan tres tipos de tablas:

  • la tabla filter donde pasan todos los paquetes en entrada y salida. La tabla filter acepta tres tipos de opciones (cadenas)
    • INPUT para los paquetes en entrada

    • OUTPUT para los paquetes en salida

      FORWARD para redireccionar los paquetes

  • La tabla NAT se utiliza para rescribir las direcciones y/o los puertos de los paquetes
  • la tabla MANGLE se utiliza para modificar algunos parámetros de los paquetes (un ejemplo es marcar los paquetes para que vengan procesados y enviados con una prioridad más alta)

Las reglas se definen una por linea y serán procesadas por iptables siguiendo la misma secuencia.

Cuando no se especifica diversamente, todas las reglas se aplicarán a la tabla filter:

Se acepta todo el trafico en entrada direccionado a la interfaz lookpack

iptables -A INPUT -i lo -j ACCEPT

Se rechaza (REJECT) todo el trafico entrante direccionado a las IP 127.0.0.0/127.255.255.255 menos que para la interfaz -lo

iptables -A INPUT -i ! lo -d 127.0.0.0/8 -j REJECT

Se aceptan todos los paquetes en entrada de conexiones ya establecidas, o relacionados con conexiones establecidas. Véase protocolo TCP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Se deja pasar todos los paquetes salientes.

iptables -A OUTPUT -j ACCEPT

Se deja pasar todo el trafico en entrada para el protocolo tcp 22 (SSH)

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

Se deja pasar todo el trafico en entrada destinado al puerto udp 4569 (protocolo IAX2)

iptables -A INPUT -p udp --dport 4569 -j ACCEPT

Se deja pasar todo el trafico en entrada destinado al puerto udp 5060 (protocolo SIP)

iptables -A INPUT -p udp --dport 5060 -j ACCEPT

Se deja pasar todo el trafico en entrada destinado a los puertos udp que van de 10000 a 20000 (protocolo RTP)

iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT

Se dejan pasar las solicitudes de ping

iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

A este punto, ya que hemos definido los puertos que necesitamos abiertos, podemos bloquear todo el trafico restante.

iptables -A INPUT -j REJECT

iptables -A FORWARD -j REJECT

Se averigua el estado de las reglas definidas con el comando:

iptables -L

Aparecerá:

Chain INPUT (policy ACCEPT)

target prot opt source destination

ACCEPT all -- anywhere anywhere

REJECT all -- anywhere 127.0.0.0/8 reject-with icmp-port-unreachable

ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED

ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh

ACCEPT udp -- anywhere anywhere udp dpt:iax

ACCEPT udp -- anywhere anywhere udp dpt:sip

ACCEPT udp -- anywhere anywhere udp dpts:ndmp:dnp

ACCEPT icmp -- anywhere anywhere icmp echo-request

REJECT all -- anywhere anywhere reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)

target prot opt source destination

REJECT all -- anywhere anywhere reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

ACCEPT all -- anywhere anywhere

Para guardar los cambios:

service iptables save

Saving firewall rules to /etc/sysconfig/iptables: [ OK ]

Se arranca el servicio:

service iptables start

Se vuelve a arrancar iptables:

service iptables restart

Para arrancar iptables automáticamente:

chkconfig iptables on

Para terminar hay que configurar Asterisk para que use los puertos UDP desde 10000 hasta 20000 para el protocolo RTP (es el que se encarga, una vez establecida la conexión entre dos canales, del flujo audio/video)

Se edita el archivo:

nano /etc/asterisk/rtp.conf

En los archivos de configuración de Asterisk, los parámetros pueden estar comentados con un punto y coma por delante. Si se quiere utilizarlos hay que quitar el punto y coma.

Se quita el punto y coma antes de [general]

En rtpstart se pone 10000 y en rtpend 20000:

rtpstart=10000
rtpend=20000

Se guardan los cambios efectuados y se recarga la configuración de Asterisk:

/etc/init.d/asterisk restart

Comentarios

Asterisk y Firewall

Hice la configuracion detallada pero aun no me escuchan cuando llamo, agradeceria mucho que hacer por favor mi iptables luce asi
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:4520
ACCEPT udp -- anywhere anywhere udp dpt:iax
ACCEPT udp -- anywhere anywhere udp dpt:sip
ACCEPT udp -- anywhere anywhere udp dpts:ndmp:dnp
ACCEPT udp -- anywhere anywhere udp dpts:ndmp:dnp
ACCEPT udp -- anywhere anywhere udp dpts:ndmp:dnp
ACCEPT tcp -- anywhere anywhere tcp dpt:30000
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp echo-request

con -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:4520
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:4569
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:5060
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:10000:20000
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:10000:20000
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:10000:20000
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:30000
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8

Asterisk y Firewall

Cuando hay problemas con el audio normalmente está relacionado con el NAT http://es.wikipedia.org/wiki/NAT Donde tienes instalada la centralita? en tu computador o en un servidor externo?

Chao

Hey cuadro mil gracias por

Hey cuadro mil gracias por compartir esta info, estoy cacharreando mi propia centralita y tu info me ha servido full.

Re: Hey cuadro mil gracias por

De nada... cuéntanos como te está yendo inscribiendote al sitio y usando tu blog personal.

Un saludo

Consulta

Hola buen dia, yo no soy muy bueno en linux como uds, pero me gustaria saber como configurar el FireWalle de linux sin el yum, osea utilizando por ejemplo: solamente un rpm

Re: Consulta

Hola,
o creas que soy tan bueno.

Respecto a tu consulta todo depende de que distribución de linux tienes instalada.

En el caso de la distribución Centos el modo más cómodo y sencillo es hacerlo usando yum.

Si tienes instalada otras distribución (ej. debian) tienes que buscar en internet el paquete rpm para esa versión.

Hasta pronto.

AsterisK

Hola, que bueno este material que has compartido muchas gracias por hacerlo publico y ayudar a quien lo necesita, tengo una duda. yo hice la inatalacion del Centos 5.0 y creo que automaticamente instaló el iptables por que no tuve que hacer el primer paso que tienes, el problema es que el ultimo paso para abrir el archivo nano /etc/asterisk/rtp.conf el directorio /asterisk/ no me aparece en el etc.
Que debo hacer en ese caso ?

Muchas gracias

Re: Asterisk

Hola,

gracias :)

vamos por pasos:

Tienes instalado Asterisk?
Si la repuesta es no, tienes que instalarlo y con la distribución Centos el único modo es desde las fuentes.
Escribí dos artículos sobre la instalación de Asterisk, usa el buscador del sitio para encontrarlos.

Si la respuesta es si y lo instalaste desde las fuentes, debes tener la carpeta /etc/asterisk en tu servidor Linux.

Cuéntame.

Un saludo

Quizas otro punto interesante

Quizas otro punto interesante es instalar el fail2ban para evitar ataques de contraseñas. Lo estoy probando un poco y parece que hace bien la tarea.

Saludos

Re: fail2ban

Que bien!!!

Cuando tenemos que esperar para una pequeña guía sobre el tema? :)

Chao

Todavia necesito tiempo,

Todavia necesito tiempo, primero tengo que pasar de modo "novato".

Re: No te preocupes

No te preocupes, estaba bromeando :)

Hasta pronto

Chao

Veo que ya lo has puesto,

Veo que ya lo has puesto, genial, just mirando el post de nerdvittles lo vi, y la verdad, todos los puntos que comentan son intereasntes para tener un servidor seguro y no llevarse ninguna sorpresa extraña en las facturas.

Saludos

Re: Veo que ya lo has puesto

Espero que me perdones.

Es que vi el post en el blog de Nerd Vittles y no pude resistir :)

Chao

Distribuir contenido Distribuir contenido