Asterisk y Firewall

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

Vota el Articulo: 

No votes yet
Evalúa la calidad del articulo

23 Comments

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

helpme

hola gracias por la info muy buena me sirvio de mucho, pero aun tengo problema en que no me escucha ni yo escucho.

seria alguien por favor tan amable de ayudarme gracias.

Re: helpme

Hola,

para poder ayudarte tenemos que saber donde está instalado Asterisk (local, remoto), si es Asterisk puro o una distribución tipo FreePBX y que tipo de conexión de banda ancha tienes y marca y modelo del Router.

Saludos

Ayuda situacion con Asterisk

Hola, gracias por la información, quien comparte lo que sabe nunca deja de aprender, o eso dicen. Mi situación es similar a la de Hernan, tengo Asterisk 1.4 en un servidor con Centos 5.8, ejecute los comandos del iptables y en mi router cisco rv082 tambien configure los mismos puertos; localmente, los telefonos funcionan bien, se escucha y yo puedo escuchar, pero, remotamente, solo me escuchan a mi, yo no escucho nada. Antes no habia problema con esto porque yo conectaba a mis usuarios remotos a una VPN por pptp en un servidor win server 2003 y los conectaba a la central como si estuvieran en la red local, pero, luego de ejecutar actualizaciones en el servidor centos(varias porque hace muuucho no se actualizaba), los usuarios no se podian conectar al servidor; soy nuevo en linux (no fui yo quien monto y configuro la central asterisk) por eso intenté resolverlo sin tocar el servidor centos, intentando conectar a los usuarios desde el router cisco (pero el quickvpn no funciona con win 7), hasta usando el openvpn en el centos (pero no me corrio, cuando le doy openvpn start me falla), por lo que la conexion remota es lo ultimo que se me ocurre, pero como ven no me funciona el audio. Les agradeceria pudieran ayudarme!

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.

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".

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

Iptables comando no encontrado

Buenas, antes que nada muchas gracias  por el tutorial, pero tengo un problema, e instalado en mi servidor CentOS  el modulo de iptables y me he asegurado  de  que el mismo este instalado en la maquina, pero cuando  voy a escribir el primer comando en la consola me dice que no existe tal comando:

esto es lo que aparece

[root@localhost chelo]# iptables -A INPUT -i lo -j ACCEPT
bash: iptables: command not found

no se si me estoy olvidando de hacer algo, desde ya muchas gracias por su respuesta

Iptables comando no encontrado

 

Hola, antes que nada gracias por responder, te comento que iptable si esta instalado ya que la terminal me muestra lo siguiente

 yum install iptables
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: mirror.gtdinternet.com
 * base: mirror.gtdinternet.com
 * extras: mirror.gtdinternet.com
 * updates: mirror.gtdinternet.com
Setting up Install Process
Package iptables-1.3.5-5.3.el5_4.1.i386 already installed and latest version
Nothing to do

luego me fije en donde esta iptables y trate de levantarlo y me mostro lo siguiente:

[chelo@localhost init.d]$ ./iptables
Uso: ./iptables {start|stop|restart|condrestart|status|panic|save}
[chelo@localhost init.d]$ ./iptables start
Descargando módulos iptables:                              [FALLÓ]
rm: no se puede borrar «/var/lock/subsys/iptables»: Permiso denegado
Aplicando reglas del cortafuegos iptables:Can't open /etc/sysconfig/iptables: Permission denied                                            [FALLÓ]
[chelo@localhost init.d]$ su
Contraseña:
[root@localhost init.d]# ./iptables start
Expurgar reglas del cortafuegos:                           [  OK  ]
Configuración de cadenas a la política ACCEPT: filter      [  OK  ]
Descargando módulos iptables:                              [  OK  ]
Aplicando reglas del cortafuegos iptables:                 [  OK  ]
Cargando módulos iptables adicionales:ip_conntrack_netbios_[  OK  ]

Y hasta aqui llego, luego intente ejecutar el de nuevo iptables pero me dice nuevamente que  no esta el comando, saludos y gracias por la respuesta ese ya

 

los comandos para iptables

los comandos para iptables son

estos para revisar/iniciar/detener el iptables

service iptables start
service iptables status
service iptables restart
service iptables stop
service iptables save

y unos muy utiles

iptables -L (revisar reglas)
iptables -D (elimina una cadena)
iptables -A (agrega una cadena)

Ayudenme por favor

Ayudenme luego de instalar las iptables no me permite que entre ni salgan llamada  a mi central de las calle

Subscribe to Comments for "Asterisk y Firewall" Subscribe to VozToVoice - All comments